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 删除
相关推荐
Linux-187414 小时前
分布式链路追踪系统之二进制安装skywalking
elasticsearch·云原生·skywalking·分布式链路追踪系统·应用程序性能监控
BullSmall18 小时前
Anolis OS 8.10 完整安装 Docker CE(生产可用,解决 podman 冲突)
docker·容器·podman
heimeiyingwang19 小时前
【架构实战】可观测性三支柱:日志、指标、链路的融合
elasticsearch·架构·kubernetes
阿里云云原生21 小时前
阿里云 AgentTeams 7月第二周产品动态
云原生
CodexDave1 天前
数据库连接池耗尽:排查顺序与三层兜底
服务器·前端·数据库·git·云原生·容器·kubernetes
java_logo1 天前
ELK Docker Compose 部署指南:轻松搭建日志检索平台
elk·elasticsearch·docker·容器·kibana·logstash·轩辕镜像
ShallWeL1 天前
Orin 上用 Docker 跑通目标检测功能
人工智能·目标检测·docker·容器
辰同学ovo1 天前
用“舞台换景”讲清 Docker 的 Restart 与 Recreate
运维·docker·容器
名字还没想好☜1 天前
Kubernetes Ingress 实战:域名路由、TLS 证书与 502/404 排查
运维·云原生·容器·kubernetes·ingress
Zhu7581 天前
在k8s部署alist 3.62.0
云原生·容器·kubernetes