删除 Pod
学习目标
- 掌握删除 Pod 的方法
- 理解优雅删除和强制删除
- 了解删除的注意事项
核心概念
基本删除命令
# 删除指定 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...