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