k8s, deployment

控制循环(control loop)

go 复制代码
for {
  实际状态 := 获取集群中对象X的实际状态(Actual State)
  期望状态 := 获取集群中对象X的期望状态(Desired State)
  if 实际状态 == 期望状态{
    什么都不做
  } else {
    执行编排动作,将实际状态调整为期望状态
  }
}

"用一种对象管理另一种对象"的"艺术"。

Deployment看似简单,但实际上,它实现了Kubernetes项目中一个非常重要的功能:Pod的"水平扩展/收缩"(horizontal scaling out/in)。这个功能,是从PaaS时代开始,一个平台级项目就必须具备的编排能力。

Deployment就需要遵循一种叫作"滚动更新"(rolling update)的方式,来升级现有的容器。依赖的是Kubernetes项目中的一个非常重要的概念(API对象):ReplicaSet。

Deployment控制器实际操纵的,正是这样的ReplicaSet对象,而不是Pod对象。

查看滚动升级:

Deployment的控制器,实际上控制的是ReplicaSet的数目,以及每个ReplicaSet的属性。

而一个应用的版本,对应的正是一个ReplicaSet;这个版本应用的Pod数量,则由ReplicaSet通过它自己的控制器(ReplicaSet Controller)来保证。

kubectl rollout history命令,查看每次Deployment变更对应的版本
kubectl rollout history deployment/nginx-deployment --revision=2
kubectl rollout undo deployment/nginx-deployment --to-revision=2

我们对Deployment进行的每一次更新操作,都会生成一个新的ReplicaSet对象,是不是有些多余,甚至浪费资源呢?
kubectl rollout pause deployment/nginx-deployment

Deployment正处于"暂停"状态,所以我们对Deployment的所有修改,都不会触发新的"滚动更新",也不会创建新的ReplicaSet。
kubectl rollout resume deployment/nginx-deployment

kubectl rollout resume指令执行之前,在kubectl rollout pause指令之后的这段时间里,我们对Deployment进行的所有修改,最后只会触发一次"滚动更新"。

相关推荐
anew___4 分钟前
《从零手写操作系统 (29):管道与重定向进阶——命名管道、Here Document与Shell语法扩展》
java·开发语言·前端·javascript·网络
Mikko79 分钟前
JVM 线上排查实战(六):JFR 怎么用?JDK 8 要不要加 UnlockCommercialFeatures、jfr 命令在哪、录的文件为什么读不了
java·运维·jvm·后端
奇牙coding24 分钟前
GPT-5.5 API 报 401 但 GPT-5.4 正常怎么办?不是 Key 失效,是 Organization 头的强制校验变了
java·网络·gpt·ai
a努力。33 分钟前
Context-State-Memory三重信息架构揭秘
java·服务器·前端
紫神1 小时前
DDS 通信技术说明
网络·云原生·容器·k8s·dds·弱网
captain3761 小时前
Maven
java·后端·idea
java_logo1 小时前
Docker 部署 DeepSeek Harness:轻松搭建局域网里的 AI Agent 平台
运维·docker·容器·ai agent·deepseek·轩辕镜像·deepseekharness
liangshanbo12151 小时前
主系统登录后,子系统怎么实现自动登录?
java·网络·数据库
ShineWinsu2 小时前
对于Redis:缓存的解析
java·redis·缓存·缓存穿透·缓存击穿·缓存雪崩·缓存预热
rannn_1112 小时前
【Java面试题】高频面试题1|Java 后端、MySQL、Redis 与 RAG 面试整理
java·jvm·数据库·后端·面试