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 删除
相关推荐
m0_7381207222 分钟前
渗透测试基础——基于Docker的Rsync服务靶场搭建与原理讲解
运维·服务器·网络·安全·web安全·docker·容器
小义_1 小时前
【Ansible】(三)基础配置与连接设置
云原生·ansible
松岩2 小时前
网络问题导致 Pod Pending
kubernetes·aiops
极客先躯6 小时前
高级java每日一道面试题-2026年02月09日-实战篇[Docker]-Docker 容器有哪些安全风险?如何缓解?
java·运维·网络·安全·docker·容器
yuanzhengme6 小时前
Ollama【部署 07】搭建本地智能体的简单说明(局域网离线部署Ollama+模型迁移+Docker部署AnythingLLM)
运维·docker·容器·大模型·ollama·本地智能体
运维老郭6 小时前
Kubernetes 二进制部署完全指南:从零搭建生产级HA集群
运维·云原生·kubernetes
成为你的宁宁6 小时前
【K8S黑盒监控实践:Probe配置、Prometheus验证与Grafana可视化】
kubernetes·grafana·prometheus
成为你的宁宁7 小时前
【Prometheus Operator监控K8S Nginx】
nginx·kubernetes·prometheus
宇明一不急7 小时前
k8s headless svc
云原生·容器·kubernetes
容器魔方7 小时前
Karmada v1.18 版本发布!新增混合云溢出式调度能力
人工智能·云原生·容器·华为云·云计算