Kubernetes Pod 管理

文章目录

  • [Kubernetes Pod 管理](#Kubernetes Pod 管理)
    • [1. 核心概念速览](#1. 核心概念速览)
    • [2. 资源模型:Pod ↔ Controller 关联](#2. 资源模型:Pod ↔ Controller 关联)
    • [3. 常用命令 30s 速查](#3. 常用命令 30s 速查)
    • [4. YAML 模板骨架(最小可运行)](#4. YAML 模板骨架(最小可运行))
    • [5. 镜像拉取策略](#5. 镜像拉取策略)
    • [6. 资源限制与 QoS](#6. 资源限制与 QoS)
    • [7. Pod 多容器实践](#7. Pod 多容器实践)
    • [8. 生命周期钩子](#8. 生命周期钩子)
    • [9. 健康检查探针](#9. 健康检查探针)
    • [10. 调度约束](#10. 调度约束)
    • [11. 重启策略与现场恢复](#11. 重启策略与现场恢复)
    • [12. 排障三板斧](#12. 排障三板斧)
    • [13. 一键实验清单](#13. 一键实验清单)
    • [14. 思维导图](#14. 思维导图)

Kubernetes Pod 管理

1. 核心概念速览

术语 一句话记忆
Pod K8s 最小调度单元,1-N 个容器共享网络/存储
Workload 由 Pod + 控制器(Deployment、StatefulSet...)组成
静态 Pod 直接由 kubelet 管理,无控制器,kube-apiserver 不可见
控制器 Pod 由控制器管理,支持副本伸缩、滚动升级、回滚

2. 资源模型:Pod ↔ Controller 关联

唯一关联方式:Label-Selector

yaml 复制代码
# Pod 端
metadata:
  labels:
    app: nginx

# 控制器端
selector:
  matchLabels:
    app: nginx

3. 常用命令 30s 速查

bash 复制代码
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 模板骨架(最小可运行)

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

yaml 复制代码
resources:
  requests:   # 调度权重 & kubelet 预留
    cpu: 100m
    memory: 100Mi
  limits:     # 运行时硬限制
    cpu: 200m
    memory: 200Mi
  • QoS 等级 (系统 OOM 时按顺序 kill)
    1. Guaranteed:requests == limits
    2. Burstable:requests < limits
    3. BestEffort:未写 requests/limits

7. Pod 多容器实践

  • 共享网络 :同一 Pod 内 127.0.0.1 互通
  • 共享存储:挂载同一 volume
  • 常见组合:主容器 + sidecar(日志/代理/监控)

⚠️ 端口冲突场景:两个 nginx 都监听 80 → 第二容器 CrashLoopBackOff


8. 生命周期钩子

yaml 复制代码
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 启动保护 成功前禁用其他探针

探测方式exechttpGettcpSocketgrpc


10. 调度约束

  1. nodeName(直接绕过 scheduler)
yaml 复制代码
spec:
  nodeName: node2
  1. nodeSelector(标签匹配)
bash 复制代码
kubectl label nodes node1 disktype=ssd
yaml 复制代码
spec:
  nodeSelector:
    disktype: ssd
  1. 亲和/反亲和、污点容忍

11. 重启策略与现场恢复

策略 说明 场景
Always(默认) 无限重启,指数退避(10s→20s→40s...) 长期服务
OnFailure 仅异常退出重启 批处理 Job
Never 不重启 一次性任务

12. 排障三板斧

  1. kubectl describe pod <name> → 看 Events
  2. kubectl logs <pod> -c <container> --previous → 看上次退出日志
  3. kubectl exec -it <pod> -c <c> -- /bin/sh → 现场交互

13. 一键实验清单

bash 复制代码
# 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 现场
相关推荐
哪里不会点哪里.2 小时前
Docker
运维·docker·容器
汪碧康2 小时前
一文掌握k8s的健康检查探针
云原生·容器·kubernetes·k8s·xkube·k8s管理平台
危笑ioi2 小时前
k8s创建pv和pvc部署jenkins
kubernetes·jenkins
七七powerful2 小时前
docker 搭建wtsap代理
运维·docker·容器
Serverless 社区3 小时前
进阶指南:BrowserUse + Agentrun Sandbox 最佳实践指南
人工智能·云原生·serverless
Shanxun Liao3 小时前
Docker vlmcsd 完整管理指南
运维·docker·容器
有谁看见我的剑了?4 小时前
K8s crictl 客户端学习
学习·容器·kubernetes
KubeSphere 云原生4 小时前
云原生周刊:Kubernetes 1.35 新机制与云原生生态更新
云原生·容器·kubernetes
Java程序员威哥4 小时前
云原生Java应用优化实战:资源限制+JVM参数调优,容器启动快50%
java·开发语言·jvm·python·docker·云原生