Kubernetes 中的控制器
1.概述
Kubernetes 中内建了很多类型的控制器,用来控制 Pod 的具体状态和行为。
2. Deployment
Deployment 为 Pod 和 ReplicaSet 提供了一个声明式定义方法。Deployment 是一个比 RS 应用模式更广的资源,可以是创建一个新的服务,更新一个新的服务,也可以是滚动升级一个服务。

典型的应用场景:
- 定义 Deployment 来创建 Pod 和ReplicaSet
- 滚动升级和回滚应用
- 扩容和缩容
- 暂停和继续 Deployment
2.1 配置文件定义 Deployment

2.2 扩容和缩容

kubectl edit deploy nginx-deploy-s1





2.3 滚动更新







2.4 回滚版本







2.5 更新的暂停和恢复
kubectl rollout pause deploy nginx-deploy-s1
kubectl rollout resume deploy nginx-deploy-s1
3. StatefulSet
StatefulSet 可以保证部署和 scale 的顺序。StatefulSet 是为了解决有状态服务的问题,其应用场景:
- 稳定的持久化存储,即 Pod 重新调度后还是能访问到相同的持久化数据
- 稳定的网络标识,即 Pod 重新调度后,其 PodName 和 HostName 不变,基于Headless Service 来实现
- 有序部署,有序扩展,即Pod是有顺序的,在部署或者扩展的时候要依据定义的顺序依次依次进行(即从0到N-1,在下一个Pod运行之前所有之前的Pod必须都是Running和Ready状态),基于init containers来实现
- 有序收缩,有序删除(即从N-1到0)


3.1 扩容缩容与滚动更新
3.1.1 扩容




3.1.2 缩容



3.1.3 滚动更新


3.2 灰度发布
利用滚动更新中 partition 属性,可以实现简单的灰度发布的效果。有三个 pod,如果当前的 partition 设置为2,那么此时更新的序号>=2.





3.3 删除时更新





4. DaemonSet
DaemonSet 确保全部(或者一些)Node 上运行一个 Pod 的副本。当有 Node 加入集群时,也会为他们新增一个 Pod。当有 Node 从集群移除时,这些 Pod 也会被回收。删除 DaemonSet 将会删除它创建的所有 Pod。使用 DaemonSet 的一些典型用法:
- 运行集群存储 daemon,例如在每个 Node 上运行 glusterd、ceph
- 在每个 Node 上运行日志收集 daemon,例如 fluentd、logstash
- 每个 Node 上运行监控 daemon,例如 Prometheus Node Exporter、collectd、Datadog 代理、New Relic 代理,或 Ganglia gmond
5. Job/CronJob
Job 负责批处理任务,即仅执行一次的任务,它保证批处理任务的一个或多个 Pod 成功结束。
CronJob 管理基于时间的Job,即
- 给定时间只运行一次
- 周期性地在给定的时间点运行
6. Horizontal Pod Autoscaling
6.1 准备一个具有资源限制的 Deployment




6.2 创建HPA



自动缩容

6.3 自动扩容




6.4 自动缩容

- 点赞
- 收藏
- 关注作者
评论(0)