查看部署状态
学习目标
- 掌握查看 Deployment 状态的各种方法
- 理解状态字段的含义
- 掌握调试部署问题的技巧
核心概念
基本状态查看
# 查看 Deployment 列表
$ kubectl get deployments
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-deployment 3/3 3 3 5m
# 查看详细信息
$ kubectl get deployment nginx-deployment -o wide
# 查看 YAML 配置
$ kubectl get deployment nginx-deployment -o yaml
状态字段说明
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-deployment 3/3 3 3 5m
READY: 当前就绪 Pod 数 / 期望 Pod 数
UP-TO-DATE: 已更新到最新版本的 Pod 数
AVAILABLE: 可用的 Pod 数(就绪且运行足够长时间)
AGE: Deployment 创建时间
查看详情
# 查看 Deployment 详情
$ kubectl describe deployment nginx-deployment
# 输出包含:
# - 基本信息
# - 标签
# - 副本数
# - 更新策略
# - Pod 模板
# - Conditions(状态条件)
# - Events(事件)
Conditions 状态
$ kubectl describe deployment nginx-deployment
Conditions:
Type Status Reason
---- ------ ------
Available True MinimumReplicasAvailable
Progressing True NewReplicaSetAvailable
| Condition | 说明 |
|---|---|
| Available | 是否有足够可用 Pod |
| Progressing | 是否正在更新 |
查看更新状态
# 实时查看更新进度
$ kubectl rollout status deployment/nginx-deployment
# 输出:
Waiting for deployment "nginx-deployment" rollout to finish: 1 out of 3 new replicas have been updated...
Waiting for deployment "nginx-deployment" rollout to finish: 2 out of 3 new replicas have been updated...
deployment "nginx-deployment" successfully rolled out
查看 ReplicaSet
# 查看 ReplicaSet
$ kubectl get replicasets
NAME DESIRED CURRENT READY AGE
nginx-deployment-5d8f4c4c5 3 3 3 5m
# 查看 Deployment 关联的 ReplicaSet
$ kubectl get rs -l app=nginx
# 查看详情
$ kubectl describe rs nginx-deployment-5d8f4c4c5
查看 Pod 状态
# 查看 Pod
$ kubectl get pods -l app=nginx
# 查看 Pod 详情
$ kubectl describe pod <pod-name>
# 查看 Pod 日志
$ kubectl logs <pod-name>
# 查看 Pod 事件
$ kubectl get events --field-selector involvedObject.name=<pod-name>
使用 jsonpath 查看特定字段
# 查看期望副本数
$ kubectl get deployment nginx-deployment -o jsonpath='{.spec.replicas}'
# 查看当前就绪副本数
$ kubectl get deployment nginx-deployment -o jsonpath='{.status.readyReplicas}'
# 查看更新策略
$ kubectl get deployment nginx-deployment -o jsonpath='{.spec.strategy.type}'
# 查看镜像版本
$ kubectl get deployment nginx-deployment -o jsonpath='{.spec.template.spec.containers[0].image}'
使用 jq 格式化输出
# 查看所有 Deployment 的状态
$ kubectl get deployments -o json | jq '.items[] | {name: .metadata.name, ready: .status.readyReplicas, desired: .spec.replicas}'
# 查看未就绪的 Deployment
$ kubectl get deployments -o json | jq '.items[] | select(.status.readyReplicas < .spec.replicas) | .metadata.name'
监控状态变化
# 实时监控 Pod 变化
$ kubectl get pods -w
# 实时监控 Deployment 变化
$ kubectl get deployments -w
# 监控特定 Deployment
$ kubectl get deployment nginx-deployment -w
查看历史版本
# 查看更新历史
$ kubectl rollout history deployment/nginx-deployment
# 查看特定版本详情
$ kubectl rollout history deployment/nginx-deployment --revision=2
# 查看当前版本
$ kubectl get deployment nginx-deployment -o jsonpath='{.metadata.annotations.deployment\.kubernetes\.io/revision}'
实践练习
练习 1:状态检查
# 1. 创建 Deployment
$ kubectl create deployment web --image=nginx:1.24 --replicas=3
# 2. 查看基本状态
$ kubectl get deployment web
# 3. 查看详细信息
$ kubectl describe deployment web
# 4. 查看 ReplicaSet
$ kubectl get rs
# 5. 查看 Pod
$ kubectl get pods
练习 2:监控更新过程
# 1. 开始更新
$ kubectl set image deployment/web nginx=nginx:1.25
# 2. 实时监控
$ kubectl rollout status deployment/web
# 3. 同时在另一个终端查看 Pod
$ kubectl get pods -w
# 4. 查看更新历史
$ kubectl rollout history deployment/web
练习 3:调试问题
# 1. 创建一个有问题的 Deployment
cat <<EOF | kubectl apply -f -
apiVersion: apps/v1
kind: Deployment
metadata:
name: broken-app
spec:
replicas: 3
selector:
matchLabels:
app: broken
template:
metadata:
labels:
app: broken
spec:
containers:
- name: app
image: nginx:nonexistent-tag
EOF
# 2. 查看状态
$ kubectl get deployment broken-app
# 3. 查看 Pod 状态
$ kubectl get pods -l app=broken
# 4. 查看 Pod 详情
$ kubectl describe pod <pod-name>
# 5. 查看事件
$ kubectl get events --field-selector involvedObject.name=broken-app
常见问题
1. READY 显示 0/3
# 可能原因:
# - Pod 启动失败
# - 就绪探针失败
# - 资源不足
# 检查方法:
$ kubectl get pods
$ kubectl describe pod <pod-name>
$ kubectl logs <pod-name>
2. UP-TO-DATE 不等于 READY
# 说明更新正在进行中
# 可能原因:
# - 新 Pod 启动慢
# - 就绪探针未通过
# - minReadySeconds 未到
# 查看更新状态
$ kubectl rollout status deployment/web
3. Deployment 一直 Progressing
# 查看 Conditions
$ kubectl describe deployment web
# 可能原因:
# - 新版本无法启动
# - 就绪探针一直失败
# - 资源不足
# 查看事件
$ kubectl get events --field-selector involvedObject.name=web
小结
| 要点 | 说明 |
|---|---|
| 基本状态 | kubectl get deployment |
| 详细信息 | kubectl describe deployment |
| 更新状态 | kubectl rollout status |
| 查看历史 | kubectl rollout history |
| READY | 当前就绪 / 期望数量 |
| Conditions | Available 和 Progressing |
| 调试 | describe + logs + events |
练习编辑器
bash
Loading...