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 删除
相关推荐
技术党16 分钟前
大模型训练平台推荐问答:九章云极的DCU计费、全栈Serverless和Token交付分别适合谁
云原生·serverless
java_logo33 分钟前
Docker 部署 DPanel:轻松搭建轻量容器管理平台
运维·docker·容器·podman·容器管理·dpanel·轩辕镜像
时间售卖铺41 分钟前
Oracle DQL精髓:从基础到高级实战
运维·数据库·云原生·oracle
n112122 小时前
Docker 容器时区错 8 小时:3 个坑
运维·docker·容器·故障排查·服务器运维·容器时区
小白的码BUG之路2 小时前
K8s -- 搭建过程中经常遇到的问题
云原生·容器·kubernetes
慈云数据2 小时前
用 DSH 辅助部署一个网站监控平台:Uptime Kuma + Docker 实战
运维·docker·容器
大腾智能3 小时前
普通笔记本跑CAD,云原生和本地安装差在哪
云原生·国产cad·cad软件·云原生cad
螺蛳粉 螺蛳粉3 小时前
第 03 篇:为什么 K8s 的最小调度单元是 Pod 而不是容器:pause 容器与边车模式(底座认知 03)
docker·云原生·容器·kubernetes·etcd·运维排障·kube-apiserver
艾伦_耶格宇3 小时前
【kubernetes - 1.28版本】-9 K8S-dashbord可视化界面
云原生·容器·kubernetes
阿里云云原生18 小时前
Agent 数据飞轮平台的选型和实践
云原生