K8S-[二]Deployment控制器
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了K8S-[二]Deployment控制器相关的知识,希望对你有一定的参考价值。
参考技术A 工作负载控制器(Workload Controllers)是K8s的一个抽象概念,用于更高级层次对象,部署和管理Pod。常用工作负载控制器:
• Deployment : 无状态应用部署
• StatefulSet : 有状态应用部署
• DaemonSet : 确保所有Node运行同一个Pod
• Job : 一次性任务
• Cronjob : 定时任务
控制器的作用:
• 管理Pod对象
• 使用标签与Pod关联
• 控制器实现了Pod的运维,例如滚动更新、伸缩、副本管理、维护Pod状态等。
• 管理Pod和ReplicaSet(副本数量设定)
• 具有上线部署、副本设定、滚动升级、回滚等功能
• 提供声明式更新,例如只更新一个新的Image
应用场景:网站、API、微服务
第一次写deploy的yaml可以用命令导出的方式获取模板,在进行删减。
最终版deployment的yaml:
deploy就是管理Pod的,所以关于对Pod管理的配置都可以放在这个配置文件,如资源配额(resource),污点容忍(tolrations),健康检查(linvenessProbe)等
部署:
查看:
暴露到外部访问:
输入 http://NodeIP:32149 访问
应用的升级其实就是换个镜像,更新镜像的三种方式
• kubectl apply -f xxx.yaml
• kubectl set image deployment/web nginx=nginx:1.16 (这个好处是这样回滚的时候可看到版本记录)
• kubectl edit deployment/web
滚动升级:K8s对Pod升级的默认策略,通过使用新版本Pod逐步更新旧版本Pod,实现零停机发布,用户无感知。
原理: 对Pod的升级,是先启动一个新的pod ,并启动。如果配了健康检查会在健康检查后完全没问题,出现running状态,才删掉一个旧pod。在启动一个新的,在删掉一个旧的。反复下去,这一切也都是deployment控制的。滚动升级在k8s中,也是由1个deployment 和 2个 replicaset 实现的。2个replicaset分别控制 增加新启动Pod副本数量;减少原pod的副本数量。 加一减一的原则。达到用户无感知。
集群内部访问一下service的集群IP,看下nginx此时版本是1.15
编辑delpoy.yaml,修改镜像版本为1.18
图中可看到,k8s先启动了2个新pod, 在新pod成功运行后,再删除一个旧的。直到最后成功更新2个Pod。
• maxSurge:滚动更新过程中最大Pod副本数,确保在更新时启动的Pod数量比期望(replicas)Pod数量最大多出25%
• maxUnavailable:滚动更新过程中最大不可用Pod副本数,确保在更新时最大25% Pod数量不可用,即确保75% Pod数量是可用状态。
deployment中replicas参数控制Pod副本数量
ReplicaSet控制器用途:
• Pod副本数量管理,不断对比当前Pod数量与期望Pod数量,一直循环这个过程。
• Deployment每次发布都会创建一个RS作为记录,用于实现回滚
所以刚才实现扩容都是ReplicaSet控制器做的。
可以查看ReplicaSet(RS)的信息
项目的下线很简单。删除对应的deploy控制器,svc 即可。
如果是用deploy创建的pod,那么直接删除Pod 是不起作用的,还会被拉起来,反复循环。这都是因为上面说的deployment控制器中的replicaset 一直在循环一个动作 : 对比当前pod数量是否和期望的一样,不一样就拉起。所以不能直接删除pod。
CronJob用于实现定时任务,像Linux的Crontab一样。
• 定时任务
应用场景:通知,备份
cronjob.yaml
每过一分钟会启动这个pod,执行定义的命令
R假设检验之k-s检验(KOLMOGOROV AND SMIRNOV TEST)
以上是关于K8S-[二]Deployment控制器的主要内容,如果未能解决你的问题,请参考以下文章
03.kubernetes笔记 Pod控制器(二) Deployment