k8s(4)Kubernetes Pod 管控例子

一、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 删除
相关推荐
哈__2 小时前
KES-Operator重塑Kubernetes环境下的KES数据库集群管理
数据库·kubernetes·operator·kes
九皇叔叔4 小时前
K8S 资源菜单
docker·容器·kubernetes·k8s
wdfk_prog5 小时前
ROS教程08:从 TransportTCP::connect() 追到 TCPROS Connection Header、序列化与 Socket 数据传输
运维·缓存·docker·容器·ros
Zhu7585 小时前
docker环境快速部署postgresql数据库18及以上版本
postgresql·容器
安易算力7 小时前
PUE优化工程实践:从1.5到1.2的制冷架构与气流组织改造路径
网络·python·容器·架构·kubernetes
小马同学-8 小时前
nerdctl实战:Docker风格的Containerd操作利器
docker·容器·containerd
九皇叔叔8 小时前
Kubernetes 命令式对象配置详解:使用 YAML 管理 Kubernetes 资源
docker·容器·k8s
萤火夜9 小时前
Docker(四) Docker介绍
docker·容器
.冰块.10 小时前
Docker 镜像深度学习:分层 Copy‑on‑Write、Dockerfile 语法、Harbor 私有仓库实操
docker·容器·harbor·镜像·dockerfile·images
szephyr10 小时前
Docker 镜像瘦身实战:从 1.2GB 压到 85MB 的完整过程
docker·容器·部署·多阶段构建·镜像优化