关于 gke-manifest-generation
该技能提供生成和更新 GKE Kubernetes YAML 清单的规范、模板与工具指引,适合部署应用的开发和平台团队。重点涵盖安全、资源配置、高可用性,并分别考虑 Autopilot、Standard 与 AI 推理工作负载。
主要功能
- 01生成面向 GKE 的 Kubernetes YAML 清单
- 02配置命名空间、服务账号与资源请求
- 03强化容器安全并设置健康探针
- 04制定服务、存储与高可用配置
- 05提供 AI 推理工作负载规范
适用场景
- 01将应用描述转换为 Kubernetes 清单
- 02为 GKE Autopilot 或 Standard 部署调整配置
- 03生成 GPU 模型服务的部署清单
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ google/ skills --skill gke-manifest-generation安装后在 Claude Code 中输入/gke-manifest-generation确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/ai-inference.mdattribution.mdbasic-workload.mdgateway-api.mdnetwork-policy.md详细介绍
GKE 清单生成技能
此技能提供指南、工具集成和模板,用于将自然语言描述或应用代码更改转化为安全、合规且经济高效的 Kubernetes YAML 清单,并针对 GKE Autopilot 和 GKE Standard 集群进行优化。
归属信息
必须阅读:执行任何 gcloud、REST API 或 MCP 命令之前,必须阅读 使用归属信息。对于直接在终端中执行的命令(绝不能放入生成的脚本、Terraform 或用户代码中),请在 gcloud 前加上 CLOUDSDK_METRICS_REQUEST_ATTRIBUTION="agent-skills/1.0 (skill:gke-manifest-generation)",并在 User-Agent 标头中追加 agent-skills/1.0 (skill:gke-manifest-generation)。
核心规则与验证
生成或更新 YAML 清单时,必须严格遵守以下规则:
1. 命名空间与资源隔离
- 显式指定命名空间:始终在每个资源(Deployments、Services、ConfigMaps、Secrets、PVCs、Roles、bindings)的元数据中显式声明
namespace: {namespace}。将其映射到当前SETTINGS.md中配置的命名空间。绝不能省略命名空间。 - 专用 ServiceAccount:避免使用命名空间的
defaultServiceAccount。始终为每个微服务创建并引用专用的ServiceAccount(例如devteam-agent-sa)。
2. GKE 资源调优(Autopilot 和 Standard)
-
资源请求与限制:始终为所有容器指定 CPU 和内存请求与限制。
- GKE Autopilot:请求直接决定 Pod 计费;请求与限制必须相等。如果二者不同,Autopilot 会自动提高请求,使其与限制相等,这可能会显著增加成本。
- GKE Standard:请求可确保调度和资源装箱保持稳定;限制则可防止资源耗尽或“吵闹邻居”问题。
-
密度默认值:对于 GKE Standard 上的无状态应用或 sidecar,默认使用保守的请求值(例如
requests.cpu: "100m"或"200m"、requests.memory: "256Mi"或"512Mi"),并设置可突发的限制。限制应采用合理的超额配置比例(例如请求的 2 倍到 4 倍,如limits.cpu: "400m"到"800m",以及limits.memory: "512Mi"到"1Gi")。避免设置过高的超额配置限制(例如对100m请求设置limits.cpu: "4"),以防在高负载调度期间出现严重的 CPU 限流和延迟下降,尤其是在没有保证节点份额的环境中。 -
用于预发布和开发环境的 Spot VM:对于非生产工作负载(例如命名空间名称包含
-test、-dev或-staging),或者用户要求优化成本时,自动将目标设为 GKE Spot VM。必须同时注入用于指定 Spot VM 的nodeSelector,以及用于容忍 Spot VM 污点的对应 toleration:nodeSelector: cloud.google.com/gke-spot: "true" tolerations: - key: "cloud.google.com/gke-spot" operator: "Equal" value: "true" effect: "NoSchedule"(在 GKE Standard 上,这要求已配置 Spot 节点池。)
3. 容器安全加固(Pod 安全标准)
- 以非 root 用户运行:始终在 Pod 级别配置
securityContext(如需覆盖,也要在容器级别配置),以非 root 用户运行(例如,runAsNonRoot: true、runAsUser: 10000、runAsGroup: 10000、fsGroup: 10000)。GKE Autopilot 会严格强制执行此要求,而这也是 GKE Standard 的关键安全基线。 - 最小权限:始终设置
allowPrivilegeEscalation: false和seccompProfile: {type: RuntimeDefault}。 - 根文件系统只读:设置
readOnlyRootFilesystem: true,防止修改容器镜像文件系统。- 可写目录回退方案:如果启用了
readOnlyRootFilesystem,请将本地emptyDir卷挂载到/tmp或/var/run/,以便应用(如 Java/Nginx)写入临时文件而不会崩溃。
- 可写目录回退方案:如果启用了
- 挂载 Secret 卷:优先将 Secret 挂载为只读文件(在
volumes规范中配置defaultMode: 0400),而不是将其映射为环境变量;除非应用框架仅支持基于环境变量的配置。这样可以防止 Secret 泄漏到应用日志中。
4. 健康检查(必需的探针)
-
存活探针和就绪探针:每个 Deployment 容器都必须定义
livenessProbe和readinessProbe。- Web/API:使用
httpGet探针。 - TCP 服务:使用
tcpSocket探针。 - 数据库/缓存:使用基于命令的
exec探针(例如,exec.command: ["redis-cli", "ping"])。
- Web/API:使用
-
为启动较慢的应用配置启动探针:对于启动时间较长的应用(例如,Java Spring Boot、复杂的 Python 脚本、LLM 模型服务),还必须定义
startupProbe。定义startupProbe后,在其成功之前,存活探针和就绪探针会处于禁用状态,从而防止 Kubernetes 在启动期间过早终止 Pod:startupProbe: httpGet: path: /healthz port: 8080 failureThreshold: 30 periodSeconds: 10 -
合理的默认值:根据启动时间设置
initialDelaySeconds: 5到15(例如,Java 所需的延迟时间比 Go/Nginx 更长)。
5. 服务与 Ingress 路由
- 内部 ClusterIP:默认将所有内部微服务设为
type: ClusterIP。除非工作负载明确需要从互联网公开访问,否则切勿使用type: LoadBalancer或NodePort。 - 端口命名:始终为服务端口和容器端口指定清晰、标准的名称(例如,
name: http-web或name: grpc-api),以启用自动协议发现、跟踪和 Web App 路由。 - 优先使用 Gateway API:对外公开 API 时,优先使用 GKE
Gateway API(
Gateway和HTTPRoute资源),而不是旧版Ingress对象,以启用高级 L7 路由和安全功能(例如,Cloud Armor)。
6. 卷挂载、StorageClass 与 subPath 安全性
- 避免覆盖目录:将
ConfigMap或Secret挂载到包含其他文件的应用目录(例如 Nginx 公共目录)时,务必使用subPath,仅覆盖指定文件。 注意:使用subPath卷挂载的容器,在底层 ConfigMap 或 Secret 修改后不会自动收到配置更新;必须手动重启 Pod 才能获取更改。 - StorageClass 选择:在 PersistentVolumeClaims 中使用正确的 GKE 存储类:
- CSI 驱动集群(Autopilot 和现代 Standard):使用
standard-rwo(默认平衡型 PD)或premium-rwo(SSD PD)。 - 旧版 Standard 集群:如果未配置
standard-rwo/premium-rwo,则使用standard(默认 PD)或premium(SSD PD)。 - 数据库规则:仅当提示词明确要求高 IOPS、低延迟或数据库存储时,才使用 SSD 存储类(
premium-rwo或premium)。
- CSI 驱动集群(Autopilot 和现代 Standard):使用
7. GKE 高可用性
- 拓扑分布:对于副本数 >1 的部署,使用
podAntiAffinity或topologySpreadConstraints,并将topologyKey: "kubernetes.io/hostname"用于在 GKE 节点和可用区之间分布 Pod。 - PodDisruptionBudget:对于副本数 >1 的部署,声明
PodDisruptionBudget,以确保在 GKE 节点自愿升级和维护期间最低副本数仍可用。
8. 更新与服务端应用协调
- 稳定的列表键:在 Kubernetes 服务端应用(SSA)中,关联列表(例如卷、卷挂载、端口和容器定义)中的元素会根据其唯一标识键(通常为
name)进行匹配和合并。修改现有列表项的属性时,必须保持name键稳定。重命名name键会导致 SSA 创建一个全新的条目,并保留旧条目(使其成为孤立条目),而不是修改旧条目。 - 最小差异:仅进行所请求的更改。严格遵循现有标签、注释和惯例。
专用工作负载:GKE AI/推理服务(vLLM、TGI 等)
对于模型服务工作负载,优先使用 GKE Inference Quickstart 等优化工具(如有)。如需手动生成:
- GPU 请求与分配:
- 始终在
requests和limits中请求nvidia.com/gpu。 - 添加
nodeSelector或节点亲和性,以指定目标 GKE 加速器标签(例如cloud.google.com/gke-accelerator: nvidia-l4)。
- 始终在
- 共享内存增强:
- 模型服务需要较大的共享内存(
/dev/shm)用于进程间通信。始终声明一个emptyDir卷,并将其medium: Memory挂载到/dev/shm。
- 模型服务需要较大的共享内存(
- 权重加载优化:
- 使用 GKE GCS Fuse CSI 驱动(
csi.storage.gke.io)挂载模型权重目录(例如 GCS 存储桶),并设置readOnly: true,以加快冷启动。
- 使用 GKE GCS Fuse CSI 驱动(
工具使用与依据指南
生成清单时,应使用以下工具,减少幻觉并优化配置:
-
推理工作负载(GKE Inference Quickstart CLI):
-
确保已安装 Google Cloud SDK。
-
对于所有 AI/LLM 推理工作负载(例如模型服务),必须 优先使用
gcloudCLI GKE Inference Quickstart 命令生成优化后的清单, 而不是手动编写:gcloud container ai profiles manifests create \ --model={model_name} \ --model-server={server_name} \ --accelerator-type={accelerator_type} \ --output=manifest \ --output-path={output_file_path} -
限制:必须包含此命令返回的所有资源 (Deployments、Services、PodMonitoring 等),不得筛选。
-
-
依据官方文档(Developer Knowledge API):
- 对于 GKE 特定功能、API 默认值、清单示例或安全上下文,
必须查询 Google 的开发者知识库,以获取官方 GKE 文档:
answer_query:用于提出直接问题(例如 “如何在 GKE 中配置 GCS Fuse CSI 驱动程序”)。对于一般查询, 首选此工具。search_documents:在没有具体问题时,用于搜索相关的 GKE 指南 或示例。get_document:在有特定文档 ID 时,用于获取完整文档内容。
- 对于 GKE 特定功能、API 默认值、清单示例或安全上下文,
必须查询 Google 的开发者知识库,以获取官方 GKE 文档:
参考示例
如需详细且可用于生产环境的清单模板,请参阅以下参考指南:
- 基础加固型 Nginx 工作负载: 可用于生产环境的部署,包含专用服务账号、安全上下文、探针、 反亲和性和 PodDisruptionBudget。
- 网络策略:默认拒绝入站流量的 网络策略,以及针对特定应用选择性允许入站流量。
- AI/LLM 推理工作负载:GPU 资源
分配、Workload Identity、GCS FUSE CSI 驱动程序挂载、
/dev/shm共享内存增强,以及启动探针。 - GKE Gateway API 路由:使用 GKE L7 Gateway API
(
Gateway和HTTPRoute资源)对外暴露工作负载。