Pods 和 Workloads 实验指南
难度: 初级 预计时间: 50 分钟 最后更新: February 11, 2026
学习目标
- 使用 YAML 创建和管理 Pods
- 部署和扩缩 Deployments
- 执行滚动更新和回滚
前提条件
- [ ] 已安装 kubectl 并具有集群访问权限(minikube 或 kind)
- [ ] 已完成 Pods 和 Workloads 学习
练习 1:Pod 创建与管理
步骤
步骤 1.1:编写 Pod YAML
bash
cat > /tmp/nginx-pod.yaml << 'EOF'
apiVersion: v1
kind: Pod
metadata:
name: nginx-lab
labels:
app: nginx
env: lab
spec:
containers:
- name: nginx
image: nginx:1.25
ports:
- containerPort: 80
resources:
requests:
memory: "64Mi"
cpu: "100m"
limits:
memory: "128Mi"
cpu: "200m"
EOF
kubectl apply -f /tmp/nginx-pod.yaml步骤 1.2:检查 Pod 状态
bash
kubectl get pod nginx-lab -o wide
kubectl describe pod nginx-lab
kubectl logs nginx-lab步骤 1.3:访问 Pod 内部
bash
kubectl exec -it nginx-lab -- bash
# Run inside:
curl localhost
exit验证
bash
kubectl get pod nginx-lab -o jsonpath='{.status.phase}'
# Output: Running练习 2:Deployment
步骤
步骤 2.1:创建 Deployment
bash
cat > /tmp/nginx-deployment.yaml << 'EOF'
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deploy
spec:
replicas: 3
selector:
matchLabels:
app: nginx-deploy
template:
metadata:
labels:
app: nginx-deploy
spec:
containers:
- name: nginx
image: nginx:1.24
ports:
- containerPort: 80
EOF
kubectl apply -f /tmp/nginx-deployment.yaml步骤 2.2:检查 Deployment 状态
bash
kubectl get deployment nginx-deploy
kubectl get replicaset
kubectl get pods -l app=nginx-deploy步骤 2.3:扩缩容
bash
kubectl scale deployment nginx-deploy --replicas=5
kubectl get pods -l app=nginx-deploy -w
# Press Ctrl+C to stop watching需要提示吗?
kubectl get pods -w会实时监控变化- ReplicaSet 由 Deployment 自动管理
- 使用
-l选项按标签过滤
验证
bash
READY=$(kubectl get deployment nginx-deploy -o jsonpath='{.status.readyReplicas}')
echo "Ready replicas: $READY"练习 3:滚动更新
步骤
步骤 3.1:更新镜像
bash
kubectl set image deployment/nginx-deploy nginx=nginx:1.25 --record
kubectl rollout status deployment/nginx-deploy步骤 3.2:检查更新历史
bash
kubectl rollout history deployment/nginx-deploy
kubectl get replicaset -o wide验证
bash
kubectl get deployment nginx-deploy -o jsonpath='{.spec.template.spec.containers[0].image}'
# Output: nginx:1.25练习 4:回滚
步骤
步骤 4.1:使用无效镜像更新(有意错误)
bash
kubectl set image deployment/nginx-deploy nginx=nginx:invalid-tag --record
kubectl rollout status deployment/nginx-deploy --timeout=30s步骤 4.2:检查错误并回滚
bash
kubectl get pods -l app=nginx-deploy
kubectl rollback deployment/nginx-deploy 2>/dev/null || kubectl rollout undo deployment/nginx-deploy
kubectl rollout status deployment/nginx-deploy验证
bash
IMAGE=$(kubectl get deployment nginx-deploy -o jsonpath='{.spec.template.spec.containers[0].image}')
echo "Current image: $IMAGE"
[ "$IMAGE" = "nginx:1.25" ] && echo "Rollback successful!" || echo "Please verify the image"清理
bash
kubectl delete pod nginx-lab
kubectl delete deployment nginx-deploy
rm -f /tmp/nginx-pod.yaml /tmp/nginx-deployment.yaml