接着上一篇介绍完k8s架构后,我们就开始学习k8s中的一个重要概念:deployment

一、部署deployment

kubectl create deployment nginx-deployment --image=nginx:1.7.9 --replicas=2

kubectl部署mysql单机 kubectl create deployment_nginx


(最下面的events记录的是replicas的启动过程,证明了deployment可以通过replicas来管理pod)

接着我们将

使用kubectl describe replicaset查询replica的情况

kubectl部署mysql单机 kubectl create deployment_nginx_02


查询各个pod的情况,先用kubectl get pod获取pod的名字,然后使用kubectl describe pod (podname) 可以看到pod的具体情况,如果有error的话,可以通过这种方法来查询具体的错误情况(描述的非常详细)

kubectl部署mysql单机 kubectl create deployment_kubernetes_03


用户通过kubectl创建deployment->deployment创建replicaset->replicaset创建pod

如果有replica的话,就要用到replicaset,如果没有的话deployment直接动手

二、使用yaml来部署

之前我们一直是直接使用命令行直接部署deployment的,但在实际中,更多的是用yaml文件来部署,先贴上书上的栗子

kubectl部署mysql单机 kubectl create deployment_容器_04


在1中,需要通过查询支持apiVersion的版本,如果稳妥的话,在创建不同kind的yaml文件前都应该先查询。

kubectl api-resources | grep deployment

在本机查到的是

kubectl部署mysql单机 kubectl create deployment_容器_05


所以在apiVersion中需要填写apps/v1。由于版本原因,需要在文件中加多一个标签,selector。修改后如下:

kubectl部署mysql单机 kubectl create deployment_kubernetes_06


接着就可以成功运行了

kubectl部署mysql单机 kubectl create deployment_docker_07


其中常用的查询指令是:

kubectl get pod -o wide

三、调整replica的个数

可以直接在yaml文件中修改replicas的数量

kubectl部署mysql单机 kubectl create deployment_nginx_08


再运行一次kubectl apply -f nginx.yml即可。

四、用label来控制scheduler调度的策略

我们给node1打上label,然后查询label的tag,看到已经成功打上了。

kubectl部署mysql单机 kubectl create deployment_nginx_09


在yaml文件中,加上nodeSelector字段,指定要scheduler将该pod调度到有这个tag的node上。(需要注意的是,格式一定要正确,要不就不能成功识别,container和nodeSelector的缩进要一样

kubectl部署mysql单机 kubectl create deployment_docker_10


执行kubectl apply -f nginx.yaml,稍等片刻,可以看到都部署到node1上了。

kubectl部署mysql单机 kubectl create deployment_容器_11


在这里需要注意的是,即时删除了tag,pod不会重新部署,除非重新运行yaml文件。