mcpField
G
gke-app-onboarding

gke-app-onboarding

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

关于 gke-app-onboarding

这项参考技能面向首次将应用部署到 GKE 的团队,涵盖应用评估、容器化、镜像管理、Kubernetes 清单和部署验证,并提供生产环境的安全与可靠性指导。

主要功能

  1. 01应用就绪情况评估
  2. 02容器构建与镜像指导
  3. 03加固版 Kubernetes 清单检查表
  4. 04部署与发布状态验证
  5. 05生产安全与可靠性实践

适用场景

  1. 01为应用首次部署到 GKE 做准备
  2. 02构建容器镜像和 Kubernetes 清单
  3. 03验证部署发布状态并检查 Pod
  4. 04落实生产环境基础安全控制

MCP 相关

该技能列出用于应用 Kubernetes 清单以及检查资源、发布状态、日志和描述的 MCP 工具。它将基于 MCP 的部署作为首选方式,并将 kubectl 作为备用方案。

安装

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

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

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

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

assets/
deployment.yaml
Dockerfile
index.js
package-lock.json
package.json
references/
attribution.md
go-example.md

详细介绍

GKE 应用接入

本参考介绍了首次将应用容器化并部署到 GKE 的工作流。

MCP 工具: apply_k8s_manifest、get_k8s_resource、 get_k8s_rollout_status、get_k8s_logs、describe_k8s_resource

归属标记

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

工作流

1. 应用评估

在容器化之前,评估应用:

  • 语言与框架:确定技术栈
  • 依赖项:列出所需的库和外部服务
  • 配置:应用如何配置?(环境变量、配置文件、密钥)
  • 状态:是否需要持久存储?(数据库、文件存储)
  • 网络:端口映射和协议(HTTP、gRPC、TCP)
  • 健康检查端点:应用是否提供健康检查端点?
2. 容器化

创建容器映像。对于大多数应用,建议使用多阶段构建的 Dockerfile;具体示例请参见 references/go-example.md 中的 Go Dockerfile。

最佳实践:

  • 使用多阶段构建,缩小生产映像
  • 使用 distroless 或精简基础映像,减少攻击面
  • 以非 root 用户身份运行
  • 将日志写入 stdout 和 stderr,以便 Cloud Logging 收集

assets/ 中提供了完整的 Node.js 示例:Dockerfile(使用非 root node 用户)、index.js(实现独立的 /healthz 和 /readyz 端点)、package.json 以及 deployment.yaml(经过强化的 Deployment 和 ClusterIP Service,探针配置为使用 /healthz 和 /readyz)。

如果不希望编写 Dockerfile,可以使用 Cloud Native Buildpacks 自动检测语言并构建容器映像:

pack build <image> --builder gcr.io/buildpacks/builder:latest
3. 映像管理

构建并存储容器映像:

# Configure Docker for Artifact Registry
gcloud auth configure-docker <REGION>-docker.pkg.dev --quiet

# Build and push
docker build -t <REGION>-docker.pkg.dev/<PROJECT>/<REPO>/<IMAGE>:<TAG> .
docker push <REGION>-docker.pkg.dev/<PROJECT>/<REPO>/<IMAGE>:<TAG>

漏洞扫描:在 Artifact Registry 中启用自动扫描,以检测基础映像和依赖项中的问题。

# Check scan results
gcloud artifacts docker images describe \
  <REGION>-docker.pkg.dev/<PROJECT>/<REPO>/<IMAGE>:<TAG> \
  --show-package-vulnerability \
  --quiet
4. 清单生成

为应用生成 Kubernetes 清单。基础 Deployment + ClusterIP Service 清单(包含探针、资源请求/限制和 2 个副本)位于 references/go-example.md。

清单检查清单:

  • 已设置资源请求和限制
  • 已配置存活探针和就绪探针
  • 生产环境至少使用 2 个副本
  • Service 类型合适(内部服务使用 ClusterIP;外部服务使用 Gateway API)

经过强化的完整示例请参见 assets/deployment.yaml。生产环境强化型 Pod 规范必须包含以下所有内容:runAsNonRoot: true、readOnlyRootFilesystem: true、allowPrivilegeEscalation: false、capabilities.drop: ["ALL"]、seccompProfile: {type: RuntimeDefault}、automountServiceAccountToken: false(除非 Pod 需要该令牌;如需使用,则说明原因)、资源请求、固定到摘要的映像,以及 ClusterIP Service。

此检查清单是此处生成的任何 Pod 规范的基准。对于超出此范围的清单工作——Gateway API 路由、GCS FUSE 和密钥卷挂载、subPath 覆盖、Spot VM 目标配置或 AI/推理服务规范——请参见 gke-manifest-generation。

5. 部署
# MCP (preferred)
apply_k8s_manifest(parent="projects/<PROJECT>/locations/<REGION>/clusters/<CLUSTER>", yamlManifest="<manifest>")

# Verify
get_k8s_rollout_status(parent="...", resourceType="deployment", name="my-app")
get_k8s_resource(parent="...", resourceType="pod", labelSelector="app=my-app")

kubectl 备用方案:

kubectl apply -f manifests/
kubectl rollout status deployment/my-app
kubectl get pods -l app=my-app

黄金路径入驻检查清单

每个入驻 GKE 的生产应用都应满足以下要求:

  1. 容器安全:使用非 root 用户(runAsNonRoot: true)、通过 lockfile 安装依赖,并使用精简或 distroless 基础镜像。
  2. 资源请求:明确设置 CPU 和内存请求(GKE Autopilot 强制要求)。
  3. 健康探针:配置存活探针(livenessProbe)和就绪探针(readinessProbe)。
  4. 可靠性与可用性:至少运行 2 个副本,并配置 PodDisruptionBudget(minAvailable: 1 或 2)。
  5. IAM 与 Workload Identity:使用 Workload Identity(iam.gke.io/gcp-service-account),而非静态服务账号密钥。

后续步骤

应用在 GKE 上运行后:

  • 配置自动扩缩容 — 参阅 gke-workload-scaling 技能
  • 设置可观测性 — 参阅 gke-observability 技能
  • 强化安全性 — 参阅 gke-workload-security 技能
  • 配置可靠性(PDB、拓扑分布)— 参阅 gke-reliability 技能

评论

支持 Markdown