18·Pod 基础入门

删除 Pod

kubernetespodkubectl

删除 Pod

学习目标

  1. 掌握删除 Pod 的方法
  2. 理解优雅删除和强制删除
  3. 了解删除的注意事项

核心概念

基本删除命令

# 删除指定 Pod
kubectl delete pod nginx

# 按标签删除
kubectl delete pods -l app=web

# 删除命名空间内所有 Pod
kubectl delete pods --all -n default

# 通过 YAML 文件删除
kubectl delete -f pod.yaml

优雅删除(Graceful Delete)

默认删除流程:

kubectl delete pod nginx
        ↓
发送 SIGTERM 信号
        ↓
等待优雅终止期(默认 30s)
        ↓
发送 SIGKILL 信号
        ↓
Pod 删除
apiVersion: v1
kind: Pod
metadata:
  name: nginx
spec:
  terminationGracePeriodSeconds: 60  # 优雅终止时间
  containers:
  - name: nginx
    image: nginx

强制删除

# 强制删除(不等待优雅终止)
kubectl delete pod nginx --grace-period=0 --force

# 立即删除
kubectl delete pod nginx --now
强制删除流程:

kubectl delete pod nginx --force
        ↓
立即发送 SIGKILL
        ↓
Pod 强制删除

风险:数据可能丢失,连接可能中断

删除等待时间

# 自定义优雅终止时间
kubectl delete pod nginx --grace-period=60

# 立即终止
kubectl delete pod nginx --grace-period=0

删除状态说明

删除后的状态变化:

Running → Terminating → Deleted

Terminating 状态表示:
- 已发送删除请求
- 正在执行优雅终止
- 等待容器退出

删除与控制器

直接创建的 Pod:
kubectl run nginx --image=nginx --restart=Never
kubectl delete pod nginx
→ Pod 永久删除

Deployment 管理的 Pod:
kubectl create deployment web --image=nginx
kubectl delete pod web-xxx
→ Pod 被重建

控制器会维护期望状态

删除行为对比

场景删除后行为
独立 Pod永久删除
Deployment Pod自动重建
DaemonSet Pod自动重建
StatefulSet Pod按序重建
Job Pod不重建

批量删除

# 删除所有 Pod
kubectl delete pods --all

# 删除指定命名空间所有 Pod
kubectl delete pods --all -n dev

# 按标签删除
kubectl delete pods -l env=dev
kubectl delete pods -l 'app in (web, api)'

# 删除所有状态异常的 Pod
kubectl delete pods --field-selector=status.phase=Failed

删除确认

# 删除前确认
kubectl get pods
kubectl delete pod nginx

# 使用 --dry-run 预览
kubectl delete pod nginx --dry-run=client

常见删除场景

场景 1: Pod 卡在 Terminating

# 查看状态
kubectl get pods

# 强制删除
kubectl delete pod nginx --grace-period=0 --force

# 检查节点状态
kubectl describe node <node-name>

场景 2: 重建 Pod

# 方式 1: 删除后重建
kubectl delete pod nginx
kubectl run nginx --image=nginx

# 方式 2: 使用 Deployment
kubectl rollout restart deployment nginx

场景 3: 清理资源

# 删除所有测试 Pod
kubectl delete pods -l env=test

# 删除已完成的 Job
kubectl delete jobs --field-selector=status.successful=1

删除前检查

# 确认 Pod 名称
kubectl get pods

# 检查是否有依赖
kubectl describe pod nginx | grep -i volume

# 检查是否有 Service 关联
kubectl get svc -l app=web

实践练习

练习 1: 基本删除

创建并删除 Pod:

kubectl run test --image=nginx --restart=Never
kubectl get pods
kubectl delete pod test
kubectl get pods

练习 2: 优雅删除

观察优雅删除过程:

kubectl run test --image=nginx --restart=Never
kubectl delete pod test --grace-period=30
# 在另一个终端观察
kubectl get pods -w

练习 3: 强制删除

练习强制删除:

kubectl run test --image=nginx --restart=Never
kubectl delete pod test --grace-period=0 --force

练习 4: 按标签删除

练习批量删除:

kubectl run test1 --image=nginx --labels=env=dev
kubectl run test2 --image=nginx --labels=env=dev
kubectl run test3 --image=nginx --labels=env=prod

kubectl delete pods -l env=dev
kubectl get pods

练习 5: Deployment Pod

理解控制器行为:

kubectl create deployment web --image=nginx
kubectl get pods
kubectl delete pod <pod-name>
kubectl get pods  # 观察 Pod 被重建

常见误解

1. 删除不等于停止

错误:delete pod 是停止 Pod
正确:delete pod 是删除 Pod

Pod 删除后,控制器可能会重建
只有删除控制器才能真正停止

2. 强制删除有风险

错误:强制删除和普通删除一样
正确:
- 强制删除跳过优雅终止
- 可能导致数据丢失
- 可能导致连接中断
- 尽量避免在生产环境使用

3. Terminating 不是卡住

错误:Pod 一直是 Terminating 就是卡住了
正确:
- Terminating 状态等待容器退出
- 等待时间受 terminationGracePeriodSeconds 控制
- 超过等待时间才会强制终止

小结

要点说明
基本删除kubectl delete pod <name>
优雅删除默认等待 30s
强制删除--grace-period=0 --force
控制器行为Deployment Pod 会被重建
批量删除按标签或命名空间
注意事项强制删除有数据丢失风险

练习编辑器

bash
Loading...

继续学习

完成本课后,建议继续学习下一课「Pod 标签」 以巩固所学知识。