Kubernetes探针机制与Deployment控制器(自用笔记)

一、Pod探针机制

1.1 探针类型对比

|--------------------------|--------------|-----------------------|-----------|
| 探针类型 | 核心作用 | 失败处理 | 适用场景 |
| Liveness Probe 存活探针 | 判定容器是否"活着" | Kubelet重启容器 | 检测死锁、进程假死 |
| Readiness Probe 就绪探针 | 判定容器是否"就绪" | 从Service Endpoint中 移除 | 控制流量分发 |
| Startup Probe 启动探针 | 判定容器是否"启动完成" | 容器被删除并重启 | 启动慢的应用 |

关键区别

1.存活探针失败 → 重启容器

2.就绪探针失败 → 停止转发流量(Pod仍存在)

3.启动探针成功后,才会启用Liveness/Readiness探针

1.2 探针属性配置

bash 复制代码
yaml

    livenessProbe:
       initialDelaySeconds: 30    # 初始化延迟(容器启动后多久开始探测)
       periodSeconds: 10          # 探测周期,默认10秒
       timeoutSeconds: 1          # 探测超时时间,默认1秒
       failureThreshold: 3        # 从成功到失败的重试次数
       successThreshold: 1        # 从失败到成功的重试次数

参数说明:

1.initialDelaySeconds :数据库等重载应用需合理设置,避免过早探测

2.failureThreshold :存活探针最小值为1

3.successThreshold :默认为1

1.3 探针测试案例

存活探针测试

bash 复制代码
yaml

    # exec方式:探测文件存在性
    livenessProbe:
       exec:
          command:
          - test
          - -f
          - /tmp/health

现象:删除文件后,探针失败,Pod重启次数增加,容器被重建。

bash 复制代码
yaml

    # httpGet方式:探测HTTP端点
    livenessProbe:
       httpGet:
          path: /healthz
          port: 80

现象:修改Nginx配置或移除页面文件,触发Pod重启。

就绪探针测试

bash 复制代码
yaml 

    readinessProbe:
      exec:
        command:
        - test
        - -f
        - /tmp/ready

现象对比:

|----------|-----------|-----------------------|----------|
| 操作 | Pod状态 | Service Endpoints | 外部访问 |
| 删除文件 | Running | Pod IP被移除 | 失败 |
| 恢复文件 | Running | Pod IP重新加入 | 成功 |

重要结论:就绪探针失败不影响Pod间直接访问,只影响Service流量转发。

二、Pod状态排查

2.1 常用命令

|------------------------------------------|-----------------|
| 命令 | 用途 |
| kubectl run --dry-run=client -o yaml | 生成YAML模板 |
| kubectl get pods | 查看Pod状态 |
| kubectl describe pod <pod-name> | 查看详细信息(含Events) |
| kubectl logs <pod-name> | 查看容器日志 |
| kubectl exec -it <pod-name> -- /bin/sh | 进入容器 |

2.2常见异常状态

|----------------------|-------------------|---------------|
| 状态 | 含义 | 可能原因 |
| Pending | 调度未完成 | 无节点满足资源需求 |
| Succeeded | 所有容器正常终止 | Job任务完成 |
| Failed | 至少一个容器非正常终止 | 容器崩溃、OOM等 |
| Unknown | API Server与节点通信异常 | 网络故障、组件异常 |
| CrashLoopBackOff | 容器反复重启失败 | 探针配置错误、应用启动失败 |

2.3故障处理原则

生产环境故障处理流程

1.首要任务 :恢复业务(切换灾备、限流)

2.其次任务 :排查根因

3.严禁越权操作,紧急情况需上报并留痕

三、Deployment控制器

3.1核心概念

Deployment → ReplicaSet → Pod

功能:

1.声明式定义

2.副本管理

3.滚动更新

4.版本回滚

5.扩缩容

3.2YAML结构

bash 复制代码
yaml

   apiVersion: apps/v1
   kind: Deployment
   metadata:
     name: nginx-deployment
   spec:
     replicas: 3              # 副本数
     selector:
        matchLabels:          # 必须与template.labels一致
          app: nginx
     template:
       metadata:
         labels:
            app: nginx
         spec:
            containers:
            - name: nginx
              image: nginx:1.14
            volumes:           # 定义在template.spec下

            - name: data
              emptyDir: {}

注意: spec.selector.matchLabels 必须与 template.metadata.labels 一致,用于关联Pod模
板。

3.3滚动更新策略

bash 复制代码
yaml

    spec:
      strategy:
        type: RollingUpdate
        rollingUpdate:
           maxSurge: 25%             # 更新过程中允许超出期望副本数的最大数量
           maxUnavailable: 25%       # 更新过程中允许不可用的最大副本数

策略说明:

|----------------|-------------|-------------|
| 参数 | 作用 | 影响 |
| maxSurge | 允许额外创建的Pod数 | 值越大,更新越快 |
| maxUnavailable | 允许不可用的Pod数 | 值越小,更新越平滑稳定 |

约束 :两者不能同时为0

1.maxUnavailable 向下取整

2.maxSurge 向上取整

3.4版本回滚操作

bash 复制代码
bash
   
    # 查看历史版本
    kubectl rollout history deployment/nginx-deployment

    # 回滚到上一版本
    kubectl rollout undo deployment/nginx-deployment

    # 回滚到指定版本
    kubectl rollout undo deployment/nginx-deployment --to-revision=2

    # 暂停/继续更新
    kubectl rollout pause deployment/nginx-deployment
    kubectl rollout resume deployment/nginx-deployment

默认保留10个历史版本

四、架构对比

4.1无状态vs有状态

|----------|------------|-------------|
| 特性 | 无状态服务 | 有状态服务 |
| 控制器 | Deployment | StatefulSet |
| 启动顺序 | 无依赖 | 需特定顺序 |
| 存储需求 | 可共享 | 需独立持久化 |
| 网络标识 | 随机 | 固定 |
| 典型应用 | Web应用、API | 数据库主从、集群 |

4.2单体vs微服务

|-----------|----------|-------------------|
| 特性 | 单体架构 | 微服务架构 |
| 组件数量 | 少 | 多(网关、注册中心、监控、日志等) |
| 部署复杂度 | 简单 | 复杂 |
| 资源利用率 | 可能浪费 | 更灵活(结合k8s容器化编排) |
| 扩展性 | 整体扩展 | 独立扩展 |

关键记忆点:存活探针负责"活着",就绪探针负责"干活",启动探针负责"慢启动"

相关推荐
自传.1 小时前
尚硅谷 Vibe Coding|第一章 AI 编程基础理论 学习笔记
笔记·学习·尚硅谷·vibe coding
开发者联盟league2 小时前
使用k8s安装Sonarqube
云原生·容器·kubernetes
chase。2 小时前
【学习笔记】SimpleVLA-RL:通过强化学习扩展 VLA 训练
笔记·学习
AOwhisky3 小时前
Redis 学习笔记(第一期):概述、安装配置与核心理论
运维·数据库·redis·笔记·学习·云计算
智者知已应修善业3 小时前
【51单片机8位数码管同时倒计时从9999】2024-1-25
c++·经验分享·笔记·算法·51单片机
AOwhisky4 小时前
Redis 学习笔记(第四期):高可用与集群(哨兵 + Cluster + 容器化)
linux·运维·数据库·redis·笔记·学习·缓存
m0_738120724 小时前
渗透测试基础——基于Docker的Rsync服务靶场搭建与原理讲解
运维·服务器·网络·安全·web安全·docker·容器
2501_938176884 小时前
924期权赚了2000倍真的吗?
笔记
yzqy_4 小时前
AMD AI 开发者计划学习笔记:从 ROCm 到 Ryzen AI,理解 AMD 的 AI 开发生态
人工智能·笔记·学习·datawhale·amdev