☰
k8s(4)Kubernetes Pod 管控例子
2026/10/7 7:16:42 网站建设 项目流程

一、Namespace 与 LimitRange —— 默认资源配额

实操过程

  1. 创建命名空间

    bash

    bash

    kubectl create namespace test-limit kubectl get ns

    ✅ 新建了一个名为test-limit的独立资源空间,用于隔离本次实验的所有资源。

  2. 配置 LimitRange

    • 目录:/opt/k8s/test-limit/limitrange.yaml

    yaml

    yaml

    apiVersion: v1 kind: LimitRange metadata: name: default-resources namespace: test-limit spec: limits: - type: Container default: cpu: "500m" memory: "512Mi" defaultRequest: cpu: "100m" memory: "128Mi"
    • 应用并验证:

    bash

    bash

    kubectl apply -f limitrange.yaml kubectl get limitrange -n test-limit
  3. 验证默认资源继承

    • 创建 BusyBox Pod(无 resources 配置)

    yaml

    yaml

    apiVersion: v1 kind: Pod metadata: name: demo namespace: test-limit spec: containers: - name: app image: busybox command: ["sleep", "3600"]
    • 查看 Pod 详情:

    bash

    bash

    kubectl describe pod demo -n test-limit

    ✅ 发现 Pod 自动带上 CPU/MEM 的 request 和 limit。

对应知识点

概念

说明

Namespace

逻辑隔离单元,不同 NS 的资源默认不可见

LimitRange

为 NS 内 Pod/容器设置默认资源请求和上限

requests

调度依据,确保节点有足够资源

limits

运行时资源上限,防资源滥用

单位

CPU:1000m = 1核,内存:Mi/Gi


二、Pod 探针(Probe)—— 健康检测

实操过程

  1. 第一次错误配置

    • 三个容器分别用 Exec / HTTP / TCP 方式做存活探针

    • 未配置 startupProbe,探针几乎立即启动

    • 结果:Pod 一直CrashLoopBackOff

  2. 分析错误原因

    • 容器还没完全启动,存活探针就失败 → 容器被杀 → 重启 → 再失败

    • 探针没有“等待应用启动”的机制

  3. 正确配置

    yaml

    yaml

    startupProbe: httpGet: path: / port: 80 periodSeconds: 5 failureThreshold: 12 # 最长等60秒 livenessProbe: httpGet: path: / port: 80 periodSeconds: 20 failureThreshold: 3 readinessProbe: httpGet: path: / port: 80 periodSeconds: 5 failureThreshold: 1

    ✅ 启动探针成功 → 存活/就绪探针才开始工作

对应知识点

探针类型

作用

StartupProbe

防止慢启动应用被误杀

LivenessProbe

检测存活,失败即重启

ReadinessProbe

检测是否可接流量,失败摘除

检测方式

exec / httpGet / tcpSocket

参数

initialDelaySeconds / periodSeconds / failureThreshold / timeoutSeconds


三、生命周期钩子(Lifecycle Hook)

实操过程

  1. 配置钩子

    yaml

    yaml

    lifecycle: postStart: exec: command: ["/bin/sh","-c","echo 'nginx started' >> /tmp/poststart.log"] preStop: exec: command: ["/bin/sh","-c","echo 'nginx stopping' >> /tmp/prestop.log; sleep 5"]
  2. 验证

    • 查看 postStart 日志:

      bash

      bash

      kubectl exec -n test-limit lifecycle-demo -- cat /tmp/poststart.log
    • 删除 Pod 触发 preStop:

      bash

      bash

      kubectl delete pod lifecycle-demo -n test-limit

知识点

钩子

说明

postStart

容器启动后立即执行,常用于初始化

preStop

容器终止前执行,用于优雅下线

区别

探针只检测状态,钩子执行动作


四、标签(Label)与节点调度

实操过程

  1. 给 Pod 打标签

    bash

    bash

    kubectl label pod lifecycle-demo version=v1.0 -n test-limit kubectl get pods -n test-limit --show-labels
  2. 指定节点部署

    yaml

    yaml

    spec: nodeName: k8s-node2

    ✅ Pod 成功调度到 node2

知识点

概念

说明

Label

键值对,用于分组和选择

nodeName

硬性调度,跳过调度器

推荐方式

nodeSelector / affinity / taint-toleration


五、整体流程串联(实操 + 知识点)

Pod 生命周期全景:

纯文本

纯文本

创建 Namespace → LimitRange 设置默认资源 ↓ Pod 创建 → 资源自动继承 ↓ StartupProbe 成功 ↓ Liveness / Readiness 开始检测 ↓ postStart 执行初始化 ↓ 运行中(探针持续检测) ↓ preStop 执行优雅下线 ↓ Pod 删除

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询