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容器化编排) |
| 扩展性 | 整体扩展 | 独立扩展 |

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

相关推荐
D4c-lovetrain2 小时前
Linux个人心得28(k8s实战)
linux·运维·kubernetes
疯狂成瘾者2 小时前
Docker的学习路线
学习·docker·容器
羊群智妍2 小时前
2026免费GEO监测工具技术评测与使用
笔记
maosheng11462 小时前
HCIA的笔记(第四天)
笔记
YaBingSec2 小时前
玄机网络安全靶场:Jackson-databind 反序列化漏洞(CVE-2017-7525)
linux·网络·笔记·安全·web安全
随风,奔跑2 小时前
Mybatis-Plus学习笔记
java·笔记·学习·mybatis
求学的小高2 小时前
数据结构Day10(ASL、二分查找、分块查找)
数据结构·笔记·考研
RainCity2 小时前
Java Swing 自定义组件库分享(三)
java·笔记