2. Kubernetes 核心编排概念回顾

在深入 SLO 自愈剧本与 Kubernetes 联动之前,必须重新校准五个核心编排原语:Pod(最小调度单元)、Deployment(声明式更新)、Service(网络抽象)、HPA(弹性伸缩)以及 Operator 模式(领域知识编码)。这些概念是自愈剧本的“执行细胞”。

2.1 Pod:不可变的最小原子

Pod 是 Kubernetes 中可创建和部署的最小计算单元,一个 Pod 代表集群上正在运行的一个进程。关键设计原则:

  • 共享网络与存储:同一 Pod 内的容器共享 IP、端口空间和 Volume。
  • Sidecar 模式:通过同 Pod 多容器实现日志收集、代理、健康检查等辅助功能。
  • 不可变性:Pod 一旦创建,其 spec 不可原地修改(除少数字段);更新必须通过重建或 Deployment 滚动。
💡 SRE 视角: Pod 的 restartPolicy 和 livenessProbe 是自愈的第一道防线。当 Pod 内进程崩溃或挂起,kubelet 自动重启容器,无需上层编排介入。

2.2 Deployment:声明式滚动与回滚

Deployment 为 Pod 和 ReplicaSet 提供声明式更新能力。它不直接管理 Pod,而是通过 ReplicaSet 控制 Pod 副本数。核心字段与行为:

字段 / 策略 说明 自愈关联
replicas 期望运行的 Pod 副本数 自愈剧本的“期望状态”基准
strategy.type RollingUpdate(默认)或 Recreate 滚动更新期间可维持服务不中断
minReadySeconds Pod 就绪后等待时间再标记可用 防止抖动,配合自愈冷却期
revisionHistoryLimit 保留的历史 ReplicaSet 数量 支持快速回滚到已知健康版本
# 典型 Deployment 定义片段
apiVersion: apps/v1
kind: Deployment
metadata:
  name: slo-app
spec:
  replicas: 3
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 1
      maxSurge: 1
  template:
    spec:
      containers:
      - name: app
        image: myapp:v1.2.3
        livenessProbe:
          httpGet:
            path: /healthz
            port: 8080
          initialDelaySeconds: 5
          periodSeconds: 10

2.3 Service:稳定的网络端点抽象

Service 为一组动态变化的 Pod 提供稳定的虚拟 IP(ClusterIP)和 DNS 名称。自愈剧本中,Service 是流量入口与健康检查的目标。

  • ClusterIP:集群内虚拟 IP,默认类型。
  • NodePort:在每个节点上开放静态端口,外部流量可访问。
  • LoadBalancer:云厂商 LB 集成,自动分配公网入口。
  • Headless Service:无 ClusterIP,直接返回 Pod IP 列表,用于 StatefulSet 或自定义发现。
📌 自愈联动: Service 的 selector 与 Pod 标签匹配。当自愈剧本替换 Pod 时,新 Pod 只要携带正确标签,Service 自动将流量引入,无需手动干预。

2.4 HPA:基于指标的弹性伸缩

Horizontal Pod Autoscaler(HPA)根据 CPU、内存或自定义指标(如 QPS、延迟)自动调整 Deployment 或 StatefulSet 的副本数。这是 SLO 自愈中“容量恢复”的核心执行器。

# 基于 CPU 和自定义 QPS 指标的 HPA 示例
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: slo-app-hpa
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: slo-app
  minReplicas: 2
  maxReplicas: 10
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 70
  - type: Pods
    pods:
      metric:
        name: http_requests_per_second
      target:
        type: AverageValue
        averageValue: 500
⚠️ 常见陷阱: HPA 默认每 15 秒采集一次指标,但缩放决策有 3-5 分钟冷却窗口。自愈剧本需要将 HPA 的伸缩延迟纳入 SLO 响应时间预算(SLO burn budget)中,避免误判。

2.5 Operator 模式:领域知识编码为控制器

Operator 将运维人员的领域知识(备份、扩缩容、故障恢复)编码为 Kubernetes 控制器,通过 CRD(Custom Resource Definition)扩展 API。自愈剧本通常以 Operator 形式实现,监听 SLO 指标并执行恢复动作。

Operator 的核心工作循环(Reconciliation Loop):

  1. Observe:通过 Informer 监听 CR 和关联资源状态。
  2. Analyze:对比当前状态与期望状态(如 SLO 阈值)。
  3. Act:调用 Kubernetes API 执行修复(滚动更新、扩容、重启等)。
Kubernetes 核心编排概念关系图 Pod Deployment Service HPA Operator 管理 选择 扩缩 编排 自愈剧本本质:Operator 监听 SLO 指标 → 驱动 HPA/Deployment → 影响 Pod 状态 → Service 自动适配流量

2.6 概念对比与自愈角色

概念 抽象层级 自愈中的角色 关键 API
Pod 工作负载单元 自愈目标(重启、替换) PodSpec, Container
Deployment 工作负载控制器 期望状态维护、滚动回滚 apps/v1
Service 网络抽象 流量路由、端点健康 core/v1
HPA 弹性控制器 容量自愈、突发应对 autoscaling/v2
Operator 应用控制器 领域自愈逻辑编码 CRD + controller-runtime
Operator 自愈工作循环(Reconciliation Loop) 1. Observe(观察) 2. Analyze(分析) 3. Act(执行) Observe:通过 Informer 监听 CR/SLO 指标变化 Analyze:对比当前状态与期望 SLO → 决定修复动作 Act:调用 K8s API 执行滚动更新、扩容、重启等