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
相关推荐
会飞的小蛮猪3 小时前
K8s-1.29.2二进制安装-第三章(Node组件 及其他插件安装)
云原生·容器·kubernetes
weixin_466814 小时前
K8S-RBAC
云原生·容器·kubernetes
处女座_三月17 小时前
kubectl 命令行更新项目版本号
docker·容器·kubernetes
Selegant18 小时前
Kubernetes + Helm + ArgoCD:打造 GitOps 驱动的 Java 应用交付流水线
java·kubernetes·argocd
Jewel Q19 小时前
QEMU、KVM、Docker、K8s(Kubernetes)
docker·容器·kubernetes
wuxingge1 天前
k8s部署xxl-job
容器·kubernetes
Wang's Blog1 天前
RabbitMQ: 解析Kubernetes原理与高可用集群部署实践
分布式·kubernetes·rabbitmq
山沐与山1 天前
【K8S】Kubernetes架构与原理详解
容器·架构·kubernetes
小陈运维1 天前
升级二进制kubernetes集群(小版本升级)
kubernetes
小陈运维1 天前
二进制安装Kubernetes(k8s)v1.35.0
kubernetes