接着上一篇介绍完k8s架构后,我们就开始学习k8s中的一个重要概念:deployment
一、部署deployment
kubectl create deployment nginx-deployment --image=nginx:1.7.9 --replicas=2
(最下面的events记录的是replicas的启动过程,证明了deployment可以通过replicas来管理pod)
接着我们将
使用kubectl describe replicaset查询replica的情况
查询各个pod的情况,先用kubectl get pod
获取pod的名字,然后使用kubectl describe pod (podname)
可以看到pod的具体情况,如果有error的话,可以通过这种方法来查询具体的错误情况(描述的非常详细)
用户通过kubectl创建deployment->deployment创建replicaset->replicaset创建pod
如果有replica的话,就要用到replicaset,如果没有的话deployment直接动手
二、使用yaml来部署
之前我们一直是直接使用命令行直接部署deployment的,但在实际中,更多的是用yaml文件来部署,先贴上书上的栗子
在1中,需要通过查询支持apiVersion的版本,如果稳妥的话,在创建不同kind的yaml文件前都应该先查询。
kubectl api-resources | grep deployment
在本机查到的是
所以在apiVersion中需要填写apps/v1。由于版本原因,需要在文件中加多一个标签,selector。修改后如下:
接着就可以成功运行了
其中常用的查询指令是:
kubectl get pod -o wide
三、调整replica的个数
可以直接在yaml文件中修改replicas的数量
再运行一次kubectl apply -f nginx.yml
即可。
四、用label来控制scheduler调度的策略
我们给node1打上label,然后查询label的tag,看到已经成功打上了。
在yaml文件中,加上nodeSelector字段,指定要scheduler将该pod调度到有这个tag的node上。(需要注意的是,格式一定要正确,要不就不能成功识别,container和nodeSelector的缩进要一样)
执行kubectl apply -f nginx.yaml
,稍等片刻,可以看到都部署到node1上了。
在这里需要注意的是,即时删除了tag,pod不会重新部署,除非重新运行yaml文件。