K8s: 如何通过kubectl命令实时监控滚动更新的详细过程?

在 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 的更新过程。

  1. 触发更新:首先执行更新命令,例如更新镜像版本。

    perl 复制代码
    kubectl set image deployment/my-app my-app=my-app:v2.0.0
  2. 开启多个终端标签页进行综合监控

    • 标签页1:启动核心进度监控

      bash 复制代码
      kubectl 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详情监控

      ini 复制代码
      kubectl get pods -w -l app=my-app

      这里你可以清晰地看到Kubernetes如何逐步启动新Pod(状态从 PendingContainerCreating再到 Running),并终止旧Pod(状态变为 Terminating)。

    • 标签页3(可选):启动幕后视角监控

      arduino 复制代码
      kubectl get replicasets -w

      此命令可让你观察到,Deployment 会创建一个新的 ReplicaSet 来管理新版本的 Pod(其副本数从0逐步增加),而旧的 ReplicaSet 的副本数则逐渐缩减到0。

  3. 遇到问题时进行深度排查 :如果更新卡住或失败,使用 describe命令查看详细信息和事件。

    perl 复制代码
    kubectl 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命令的结果来查看状态。

  • 一键回滚:如果发现新版本有问题,可以快速回滚到上一个版本。

    bash 复制代码
    kubectl rollout undo deployment/my-app
相关推荐
岚天start2 小时前
K8S环境中Containerd运行时占用文件定位清理
java·rpc·kubernetes
赵文宇(温玉)6 小时前
不翻墙,基于Rancher极速启动Kubernetes,配置SSO登录,在线环境开放学习体验
学习·kubernetes·rancher
炸裂狸花猫6 小时前
开源域名证书工具 - cert-manager
云原生·容器·kubernetes·开源·cert-manager
会飞的小蛮猪7 小时前
Ubuntu24.04基于Docker部署K8s(使用私服部署)
经验分享·docker·云原生·容器·kubernetes
mobº1 天前
K8s 集群部署微服务 - yaml 版本(三)
微服务·容器·kubernetes
拾心212 天前
【云运维】k8s管理(一)
运维·容器·kubernetes
究極の法則に通じた野犬2 天前
K8S 本地机器 windows 推送官方镜像到本地镜像仓库 (Docker) -- 以curl镜像为例
docker·容器·kubernetes
似水流年 光阴已逝2 天前
用架构图理解k8s系列
云原生·容器·kubernetes