Controller之deployment

1.什么是controller

controller是集群上管理和运行容器的对象,controller可以实现pod应用的运维。

①保证pod数量:确保K8s中有指定数量的Pod在运行,如果少于指定数量的pod, Controller会创建新的。

②保证pod健康:当pod不健康,运行出错或者无法提供服务时,Controller会杀死不健康的pod,重新启动新的pod。

③弹性伸缩 :在业务高峰或者低峰期的时候,通过 Controller动态的调整pod的数量来提高资源的利用率。

④滚动升级:平滑的升级方式,通过逐步替换,保证系统的整体稳定性。

2.controller如何关联pod

通过labels标签建立关联, key.value键值对标识,例如:

selector:

       app:nginx 

labels:

       app:nginx   

3.controller之deployment的应用场景。

①部署无状态应用

②管理pod和Replicaset副本

③部署,滚动升级等功能

④常用于部署web服务/微服务

注:

replication controller RC是第一代副本控制器,deployment是第二代。区别:

①deployment同样是为了保证pod数量和健康而存在的,90%的功能与RC完全一样,它还有许多新增的功能,具体百度。

①deployment在控制器与pod之间多了一层RS结构

②对于deployment的yaml文件的修改会实施生效,而rc只有新的pod生效。

④升级回滚等的操作命令也有所不同。

4.创建deployment示例

①创建deploymentyaml文件

kubectl create deployment web --image=nginx --dry-run -o yaml > web.yaml

--dry-run参数  :试着运行,不真正运行。

②使用上面创建的yaml部署这个deployment

kubectl create -f web.yaml

③对外发布,暴露nginx端口号,这里没加--dry-run参数,所以输出yaml文件的时候也同时执行了,

kubectl expose deployment web --port=80 --type=NodePort --target-port=80 --name=web80 -o yaml > web80.yaml

 

 

 

④通过节点IP加32343端口号能正常访问容器里nginx服务。

 

⑤删除创建的所有资源

 5.deployment升级回滚

①创建一个低版本的nginx

 

 ②升级nginx镜像版本为1.15

kubectl set image deployment web nginx=nginx:1.15

由下图可看出k8s在进行升级时:

单pod: 新的pod工作后再删除原来的pod

多pod:可能创建新pod时,删除原有部分pod。

图中升级后1.15版本nginx已经正常工作了。

 

 ③查看升级状态

kubectl rollout status deployment web

 ④查看升级回滚的历史版本

kubectl rollout history deployment web

1是未升级的1.14版本

2是升级后的1.15版本

 ⑤回滚到上一个版本和指定版本语法

kubectl rollout undo deployment web         #回滚到上一个版本

kubectl rollout undo deployment web --to-revision=2     #回滚到指定的版本2

图示还原到1.1.4版本了。当前1.14版本即现在的3

图示还原到1.15版本了,当前1.15版本即现在的4

 

 

6.弹性伸缩

kubectl scale deployment web --replicas=6

原来这个deployment只有2个pod,现在扩到6总共6个

kubenetes官网:

https://kubernetes.io/zh/docs/concepts/workloads/controllers/deployment/

https://kubernetes.io/zh/docs/concepts/workloads/controllers/replicaset/

kubenetes社区:

https://www.kubernetes.org.cn/deployment

原文地址:https://www.cnblogs.com/you-xiaoqing/p/14371676.html