Kubernetes 中的控制器

举报
剑指南天 发表于 2026/10/15 13:20:43 2026/10/15
【摘要】 Kubernetes 中内建了很多类型的控制器,用来控制 Pod 的具体状态和行为。

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 自动缩容

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。