Kubernetes Pod 管理
·
文章目录
Kubernetes Pod 管理
1. 核心概念速览
| 术语 | 一句话记忆 |
|---|---|
| Pod | K8s 最小调度单元,1-N 个容器共享网络/存储 |
| Workload | 由 Pod + 控制器(Deployment、StatefulSet…)组成 |
| 静态 Pod | 直接由 kubelet 管理,无控制器,kube-apiserver 不可见 |
| 控制器 Pod | 由控制器管理,支持副本伸缩、滚动升级、回滚 |
2. 资源模型:Pod ↔ Controller 关联
唯一关联方式:Label-Selector
# Pod 端
metadata:
labels:
app: nginx
# 控制器端
selector:
matchLabels:
app: nginx
3. 常用命令 30s 速查
kubectl get pod -A # 看所有 Pod
kubectl get pod --show-labels # 带标签
kubectl top pod <name> # 实时资源
kubectl describe pod <name> # 事件排障
kubectl logs <pod> [-c <container>] # 日志
kubectl exec <pod> [-c <c>] -- <cmd> # 进入容器
kubectl label pod <name> k=v # 打标签
kubectl delete pod <name> [--force] # 删除单 Pod
4. YAML 模板骨架(最小可运行)
apiVersion: v1
kind: Pod
metadata:
name: demo
namespace: default
labels:
app: demo
spec:
containers:
- name: c1
image: nginx:1.26-alpine
ports:
- containerPort: 80
resources:
requests:
cpu: 100m
memory: 128Mi
limits:
cpu: 200m
memory: 256Mi
livenessProbe:
httpGet:
path: /
port: 80
initialDelaySeconds: 3
periodSeconds: 5
restartPolicy: Always
5. 镜像拉取策略
| 策略值 | 行为 | 默认触发条件 |
|---|---|---|
| Always | 每次都尝试 pull | 镜像 tag 为 latest |
| IfNotPresent | 本地有就用本地 | 非 latest |
| Never | 只用本地镜像 | 手动指定 |
6. 资源限制与 QoS
resources:
requests: # 调度权重 & kubelet 预留
cpu: 100m
memory: 100Mi
limits: # 运行时硬限制
cpu: 200m
memory: 200Mi
- QoS 等级(系统 OOM 时按顺序 kill)
- Guaranteed:requests == limits
- Burstable:requests < limits
- BestEffort:未写 requests/limits
7. Pod 多容器实践
- 共享网络:同一 Pod 内
127.0.0.1互通 - 共享存储:挂载同一 volume
- 常见组合:主容器 + sidecar(日志/代理/监控)
⚠️ 端口冲突场景:两个 nginx 都监听 80 → 第二容器
CrashLoopBackOff
8. 生命周期钩子
lifecycle:
postStart: # 容器启动后
exec:
command: ["mkdir", "-p", "/var/www/cache"]
preStop: # 容器终止前
exec:
command: ["/bin/sh","-c","sleep 10 && nginx -s quit"]
preStop最长宽限期 30s,之后强制 SIGKILL
9. 健康检查探针
| 探针类型 | 作用 | 失败行为 |
|---|---|---|
| liveness | 存活检查 | kubelet 重启容器 |
| readiness | 就绪检查 | 从 Service Endpoints 摘流 |
| startup | 启动保护 | 成功前禁用其他探针 |
探测方式:exec、httpGet、tcpSocket、grpc
10. 调度约束
- nodeName(直接绕过 scheduler)
spec:
nodeName: node2
- nodeSelector(标签匹配)
kubectl label nodes node1 disktype=ssd
spec:
nodeSelector:
disktype: ssd
- 亲和/反亲和、污点容忍
11. 重启策略与现场恢复
| 策略 | 说明 | 场景 |
|---|---|---|
| Always(默认) | 无限重启,指数退避(10s→20s→40s…) | 长期服务 |
| OnFailure | 仅异常退出重启 | 批处理 Job |
| Never | 不重启 | 一次性任务 |
12. 排障三板斧
kubectl describe pod <name>→ 看 Eventskubectl logs <pod> -c <container> --previous→ 看上次退出日志kubectl exec -it <pod> -c <c> -- /bin/sh→ 现场交互
13. 一键实验清单
# 1. 创建
kubectl apply -f https://raw.githubusercontent.com/polinux/stress/master/k8s/pod-stress.yaml
# 2. 监控
watch -n 1 kubectl top pod pod-stress
# 3. 打标签
kubectl label pod pod-stress region=hz env=test
# 4. 删除观察重启
kubectl delete pod pod-stress
14. 思维导图
Pod
├── 定义:最小调度单元
├── 分类
│ ├── 静态 Pod(kubelet 自管)
│ └── 控制器 Pod(Deployment 等)
├── 操作
│ ├── 创建:kubectl run / apply
│ ├── 查询:get, describe, top, logs
│ └── 删除:delete(级联 vs 孤立)
├── YAML 核心字段
│ ├── metadata:name/namespace/labels
│ ├── spec.containers:image/resources/probes
│ └── spec.restartPolicy
├── 生命周期
│ ├── Init → Main → PostStart → Probes → PreStop
│ └── 重启策略:Always | OnFailure | Never
├── 调度
│ ├── nodeName(直连)
│ ├── nodeSelector(标签)
│ └── 亲和/污点(进阶)
└── 排障
├── Events
├── Logs
└── exec 现场
更多推荐



所有评论(0)