mcpField
G
gke-reliability

gke-reliability

github.com/google云与 DevOps21.6k6.7k 次安装今天更新
代码仓库

关于 gke-reliability

面向 GKE 集群和工作负载可靠性配置的参考技能,适用于规划生产环境高可用性和故障恢复。内容涵盖集群区域分布、PDB、健康探针、优雅关闭与拓扑分散,并提供检查集群和 Kubernetes 资源的 MCP 工具。

主要功能

  1. 01核查区域集群与节点分布
  2. 02配置 PDB 保护 Pod 可用性
  3. 03指导存活、就绪和启动探针
  4. 04通过拓扑约束分散工作负载
  5. 05规划副本数与优雅关闭

适用场景

  1. 01检查生产集群的高可用配置
  2. 02降低节点升级导致的服务中断
  3. 03让 Pod 分布于多个故障区域

MCP 相关

提供用于获取集群、读取或描述 Kubernetes 资源及查看事件的 MCP 工具,可用于可靠性检查。

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/google/skills --skill gke-reliability

安装后在 Claude Code 中输入/gke-reliability确认已加载。

附带文件references/attribution.md

详细介绍

GKE 可靠性

路由说明: 若要生成 Kubernetes YAML 清单(Deployment、StatefulSet、Service、ConfigMap、HTTPRoute、PodDisruptionBudget),请打开 gke-manifest-generation/SKILL.md。

本参考介绍 GKE 集群和工作负载的高可用性与可靠性配置。

MCP 工具: get_cluster、get_k8s_resource、describe_k8s_resource、 apply_k8s_manifest、list_k8s_events

归属标记

必须阅读:在执行任何 gcloud、REST API 或 MCP 命令之前,必须阅读使用归属标记。对于直接在终端中执行的命令(绝不可用于生成的脚本、Terraform 或用户代码),请在 gcloud 前加上 CLOUDSDK_METRICS_REQUEST_ATTRIBUTION="agent-skills/1.0 (skill:gke-reliability)",并在 User-Agent 请求头中追加 agent-skills/1.0 (skill:gke-reliability)。

可靠性黄金路径默认值

设置黄金路径值说明
集群类型区域级(4 个可用区:控制平面跨可用区复制
: : us-central1-a/b/c/f) : :
升级策略SURGE(maxSurge: 1)滚动升级时增加额外容量
自动修复true自动替换不健康的节点
自动升级true节点版本与控制平面保持一致
发布渠道REGULAR兼顾版本新鲜度与稳定性
有状态高可用已启用有状态工作负载进行领导者选举

工作流

1. 验证集群高可用性
# MCP (preferred)
get_cluster(name="projects/<PROJECT>/locations/<REGION>/clusters/<CLUSTER>",
  readMask="location,locations,nodePools.locations")

# gcloud fallback
gcloud container clusters describe <CLUSTER> --region <REGION> \
  --format="json(location, locations)" \
  --quiet
  • 如果 location 是一个区域(例如 us-central1),则控制平面为区域级
  • 如果 locations 中有多个条目,则节点分布在多个可用区
2. Pod 中断预算(PDB)

PDB 可确保在自愿中断期间(节点升级、自动扩缩器缩容)至少有指定数量的 Pod 可用。

检查现有 PDB:

# MCP (preferred)
get_k8s_resource(parent="...", resourceType="poddisruptionbudget")

# kubectl fallback
kubectl get pdb --all-namespaces

创建 PDB:

apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
  name: my-app-pdb
  namespace: default
spec:
  minAvailable: 2       # Or use maxUnavailable: 1
  selector:
    matchLabels:
      app: my-app

每个至少有 2 个副本的生产环境 Deployment 都应配置 PDB。

3. 健康探针

每个生产环境容器都应配置存活探针和就绪探针。对于启动较慢的应用,建议配置启动探针。

检查现有探针:

# MCP (preferred)
describe_k8s_resource(parent="...", resourceType="deployment", name="<APP>", namespace="<NS>")

# kubectl fallback
kubectl get deployment <APP> -n <NS> -o yaml | grep -E "livenessProbe|readinessProbe|startupProbe"

推荐的探针配置:

spec:
  containers:
  - name: app
    livenessProbe:
      httpGet:
        path: /healthz
        port: 8080
      initialDelaySeconds: 15
      periodSeconds: 10
      timeoutSeconds: 2
      failureThreshold: 3
    readinessProbe:
      httpGet:
        path: /readyz
        port: 8080
      initialDelaySeconds: 5
      periodSeconds: 5
      timeoutSeconds: 2
      failureThreshold: 3
    startupProbe:             # For slow-starting apps
      httpGet:
        path: /healthz
        port: 8080
      initialDelaySeconds: 10
      periodSeconds: 5
      timeoutSeconds: 2
      failureThreshold: 30    # 30 * 5s = 150s max startup time
  • 就绪探针:确定 Pod 何时可以接收流量
  • 存活探针:确定何时重启容器
  • 启动探针:在应用就绪前禁用存活探针和就绪探针(防止过早重启)
4. 优雅关闭

确保应用能够处理 SIGTERM 并排空正在处理的请求:

spec:
  terminationGracePeriodSeconds: 30    # Default; increase for long-running requests
  containers:
  - name: app
    lifecycle:
      preStop:
        exec:
          command: ["/bin/sh", "-c", "sleep 5"]  # Allow LB to deregister
5. 拓扑分布约束

将 Pod 分布到不同的可用区和节点,以应对故障:

spec:
  topologySpreadConstraints:
  - maxSkew: 1
    topologyKey: topology.kubernetes.io/zone
    whenUnsatisfiable: DoNotSchedule
    labelSelector:
      matchLabels:
        app: my-app
  - maxSkew: 1
    topologyKey: kubernetes.io/hostname
    whenUnsatisfiable: ScheduleAnyway
    labelSelector:
      matchLabels:
        app: my-app
  • 可用区分布(DoNotSchedule):硬性要求——Pod 必须在各可用区之间保持均衡
  • 节点分布(ScheduleAnyway):尽力而为——优先分散部署,但不会阻止调度
6. 副本数
工作负载类型最小副本数原因
无状态 Web/API2承受单个 Pod 或节点故障
: : : :
关键服务3通过跨可用区分布承受可用区故障
: : : :
有状态(数据库)3(带复制)应用级仲裁
批处理/作业1本身具有临时性

最佳实践与生产环境指南

  1. 生产环境使用区域集群:始终使用区域集群,以应对可用区故障。
  2. 为所有工作负载配置 PDB:每个副本数为 2 个或更多的生产工作负载都需要配置 PodDisruptionBudget(PDB),以防范自愿中断。
  3. 为探针明确设置超时:每个生产容器都必须定义存活探针和就绪探针。始终为所有探针明确设置 initialDelaySeconds、periodSeconds 和 timeoutSeconds。如果应用需要更长时间,切勿依赖 Kubernetes 默认的 1 秒超时;同时务必设置严格的上限,以防连接挂起。
  4. 跨可用区分散:使用拓扑分布约束,将 Pod 分散到不同的故障域(可用区和节点)。
  5. 优雅关闭:处理 SIGTERM,并设置适当的 terminationGracePeriodSeconds,同时使用 preStop 睡眠钩子,以便负载均衡器注销实例。
  6. 维护时段:安排在流量较低时段进行升级(参见 gke-upgrades 技能)。

评论

支持 Markdown