运维部署
首次将应用容器化并部署到 GKE 时的完整上线流程
当需要把一个应用首次容器化并部署到 GKE 时,按评估、容器化、镜像管理、清单生成、部署的流程操作。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 38/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 60/100 ×0.15
适用场景
首次将应用容器化并部署到 GKE 时的完特定
解决思路
- 先做应用评估:识别语言与框架、依赖库与外部服务、配置方式(环境变量、配置文件、密钥)、是否有状态(是否需要持久化存储)、网络端口映射与协议(HTTP、gRPC、TCP)、是否暴露健康检查端点。
- 容器化:编写 Dockerfile,推荐使用多阶段构建以减小生产镜像体积。
- 容器化最佳实践:使用 distroless 或最小基础镜像以减少攻击面;以非 root 用户运行;日志输出到 stdout 和 stderr 以便 Cloud Logging 采集。
- 若不想手写 Dockerfile,可用 Cloud Native Buildpacks 自动检测语言并构建镜像:pack build <image> --builder gcr.io/buildpacks/builder:latest。
- 配置 Docker 访问 Artifact Registry:gcloud auth configure-docker <REGION>-docker.pkg.dev --quiet。
- 构建并推送镜像:docker build -t <REGION>-docker.pkg.dev/<PROJECT>/<REPO>/<IMAGE>:<TAG> . 然后 docker push <REGION>-docker.pkg.dev/<PROJECT>/<REPO>/<IMAGE>:<TAG>。
- 在 Artifact Registry 中启用自动漏洞扫描,并用 gcloud artifacts docker images describe <REGION>-docker.pkg.dev/<PROJECT>/<REPO>/<IMAGE>:<TAG> --show-package-vulnerability --quiet 查看扫描结果。
- 生成 Kubernetes 清单,检查项包括:设置资源 requests 和 limits;配置 liveness 和 readiness 探针;生产环境至少 2 个副本;Service 类型合适(内部用 ClusterIP,外部用 Gateway API)。
- 生产加固的 pod spec 必须全部包含:runAsNonRoot: true、readOnlyRootFilesystem: true、allowPrivilegeEscalation: false、capabilities.drop: ["ALL"]、seccompProfile: {type: RuntimeDefault}、automountServiceAccountToken: false(除非 pod 需要该 token,此时需说明原因)、资源 requests、以 digest 固定镜像,以及一个 ClusterIP Service。
- 部署(优先用 MCP):apply_k8s_manifest(parent="projects/<PROJECT>/locations/<REGION>/clusters/<CLUSTER>", yamlManifest="<manifest>")。
- 验证部署: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。
- 按 Golden Path 上线检查清单逐项确认:容器安全(runAsNonRoot: true、lockfile 安装、最小/distroless 基础镜像);资源 requests(显式 CPU 和内存 requests,GKE Autopilot 强制要求);健康探针(同时配置 livenessProbe 和 readinessProbe);可靠性与可用性(至少 2 个副本和 PodDisruptionBudget,minAvailable: 1 或 2);IAM 与 Workload Identity(使用 iam.gke.io/gcp-service-account 而非静态服务账号密钥)。
- 上线后继续配置:自动扩缩容参考 gke-workload-scaling,可观测性参考 gke-observability,安全加固参考 gke-workload-security,可靠性(PDB、拓扑分布)参考 gke-reliability。
适用边界 · 注意事项
- 不适用于通用的 GKE 集群管理与升级(应使用 gke-basics 或 gke-upgrades)。
- 超出基线清单的清单工作(Gateway API 路由、GCS FUSE 与 secret 卷挂载、subPath 覆盖、Spot VM 定向、AI/推理服务 spec)应参考 gke-manifest-generation。