在 Kubernetes 中实时监控滚动更新的详细过程,可以通过组合使用多个 kubectl命令来实现。下面这个表格汇总了最核心的命令及其用途,你可以根据不同的监控需求来选择。
| 监控命令 | 主要用途 | 关键参数 / 说明 |
|---|---|---|
kubectl rollout status deployment/<部署名称> |
核心进度监控:实时显示更新整体进度,直到完成或失败。 | 无特殊参数,专注于进度状态。 |
kubectl get pods -w -l <标签> |
Pod级别详情:动态显示Pod的新旧替换、状态变化等详细过程。 | -w用于实时监视;-l按标签筛选特定Deployment的Pod。 |
kubectl describe deployment <部署名称> |
事件与配置洞察:查看更新触发原因、ReplicaSet变化及关键事件日志。 | 输出信息详细,适合在更新停滞或出错时深挖原因。 |
kubectl get replicasets -w |
幕后视角:观察为新旧版本创建的ReplicaSet及其副本数量的变化。 | 了解Deployment控制器如何通过管理ReplicaSet来完成滚动更新。 |
🧩 理解监控的关键节点
在监控时,理解一些关键状态的含义能让你更清楚更新进行到了哪一步:
UP-TO-DATE:显示当前已更新到新版本的 Pod 数量。AVAILABLE:显示当前可供用户使用的 Pod 数量,这些 Pod 已经处于就绪(Ready)状态。- Pod 的状态 :在
kubectl get pods的输出中,ContainerCreating表示Pod正在创建,Terminating表示旧Pod正在终止。
🛠️ 综合监控实战示例
假设你要监控一个名为 my-app的 Deployment 的更新过程。
-
触发更新:首先执行更新命令,例如更新镜像版本。
perlkubectl set image deployment/my-app my-app=my-app:v2.0.0 -
开启多个终端标签页进行综合监控:
-
标签页1:启动核心进度监控
bashkubectl rollout status deployment/my-app这个命令会持续输出类似
Waiting for rollout to finish: 2 out of 3 new replicas have been updated...的信息,并在成功后提示deployment "my-app" successfully rolled out。 -
标签页2:启动Pod详情监控
inikubectl get pods -w -l app=my-app这里你可以清晰地看到Kubernetes如何逐步启动新Pod(状态从
Pending到ContainerCreating再到Running),并终止旧Pod(状态变为Terminating)。 -
标签页3(可选):启动幕后视角监控
arduinokubectl get replicasets -w此命令可让你观察到,Deployment 会创建一个新的 ReplicaSet 来管理新版本的 Pod(其副本数从0逐步增加),而旧的 ReplicaSet 的副本数则逐渐缩减到0。
-
-
遇到问题时进行深度排查 :如果更新卡住或失败,使用
describe命令查看详细信息和事件。perlkubectl describe deployment my-app在输出结果的
Events部分,包含了关于滚动更新过程的详细日志,例如Scaled up replica set my-app-7c54d5c99 to 1(扩容新ReplicaSet)和Scaled down replica set my-app-7d47f45c6 to 2(缩容旧ReplicaSet)等,这对于排查就绪探针失败、资源不足等问题非常有帮助。
💡 进阶技巧与注意事项
-
就绪探针的重要性 :为了使
rollout status命令能准确判断新Pod是否可用,你的Pod定义中必须配置有效的readinessProbe(就绪探针)。Kubernetes 只有在新Pod的就绪探针检查通过后,才会认为该Pod已就绪,然后继续替换下一个旧Pod。 -
进度期限 :Deployment 有一个
progressDeadlineSeconds配置(默认为600秒)。如果更新过程超过此时间仍未完成,Kubernetes 会将其标记为失败。你可以通过kubectl describe deployment命令的结果来查看状态。 -
一键回滚:如果发现新版本有问题,可以快速回滚到上一个版本。
bashkubectl rollout undo deployment/my-app