GCP K8S 部署Deployment
前提:已完成 GCP K8s 部署指南-进入工作区 中的项目选择、集群选择和子菜单导航。
2. 部署后端
2.1 进入 Workloads 并选择集群和命名空间
左侧子菜单点击 「Workloads(工作负载)」,进入工作负载页面。
页面顶部有工具栏和两个下拉框用于选择集群和命名空间:
| 名称 | 状态 | 类型 | Pod | 命名空间 | 集群 |
|---|---|---|---|---|---|
| 负载名 | ok | Deployment | 3/3 | 命名空间名 | 集群名 |
- 集群:下拉选你要部署到的 GKE(Google Kubernetes Engine,谷歌 Kubernetes 引擎)集群。如果只有一个,默认已选中
- 命名空间:下拉选命名空间,选择要部署服务的命名空间
选好集群和命名空间后,点击列表上方的 「部署」按钮,开始部署新的服务。
2.2 容器配置
点击「部署」后进入「创建部署作业」表单。第一步是容器配置:
选择
继续
表单从上到下的每个区域:
① 修改内容 — 选择镜像来源。已经推送到 Artifact Registry(谷歌构件仓库)的镜像选「现有容器映像」。如果是 Docker Hub 的公共镜像(如 nginx:latest),也可以选这个然后直接在输入框填镜像地址。
② 映像路径 — 点「选择」按钮,右侧滑出抽屉面板:
选择
抽屉顶部有两个标签页:「Artifact Registry」和「Container Registry」。Container Registry(GCR)已被 Google 关停(2025 年 5 月),现在统一使用 Artifact Registry。先点「Container Registry」,如果里面没有旧镜像,再切到「Artifact Registry」。
在抽屉里:
- 项目:顶部下拉确认是当前项目。一个账号可能关联多个项目,确保选的是镜像所在的项目
- 镜像路径树:逐级展开,
gcr.io(旧格式,Artifact Registry 仍兼容)→ 项目ID → 环境 → 项目名 → 版本号。新项目可能显示为{region}-docker.pkg.dev格式 - 版本号:最底层叶子节点如
🖼️ hash [dev.5],hash是旧版存储格式标记,看括号里的dev.5才是版本号 - 点击版本号后点「选择」,抽屉关闭,路径自动填入
③ 环境变量 — 以键值对形式给容器注入配置。比如 APP_ENV = TEST,程序用 os.Getenv("APP_ENV") 读取。不需要的话跳过,不要填无意义的值。
④ 初始命令 — 覆盖容器镜像默认的启动命令。一般留空即可。
⑤ 添加其他容器 — 一个 Pod 里可以跑多个容器(如主程序 + 日志采集 sidecar)。大部分情况一个容器就够了,不用管。
填完后点 「继续」,进入下一步配置。
2.3 配置
继续往下翻到配置区域:
- 部署名称:填
backend。* 表示必填。这个名字就是 Deployment 在列表里显示的名字,建议和容器名一致 - 命名空间:前面选好的值会自动带入,确认一下即可
- 标签:GCP 根据 Deployment 名称自动生成
app: backend。标签的作用是让 Service 能找到对应的 Pod——后面公开 Service 时 GCP 会自动通过这个标签关联。如果你手动改过标签,公开时要确保 Service 的 Selector 和标签一致 - 配置 YAML:点「查看 YAML」可以预览 GCP 帮你生成的完整 YAML 内容。初次部署不用管,以后熟悉了可以直接在这里编辑 YAML 来代替填表单
- 集群:显示当前要部署到的集群名称和机房位置。如果发现集群不对,回到 2.1 重新选择
2.4 公开(可选)
往下翻到「Expose(公开)」区域:
将部署作为新服务公开
不要勾选。我们习惯先创建 Deployment → 改镜像标签 → 再从 Deployment 详情里单独公开,两步分开更清晰。
2.5 提交部署
翻到表单最底部,点蓝色的 「部署」按钮。
等待部署完成。回到工作负载(Workloads)列表,backend 会出现在列表里,状态短暂显示 「Pending」,几十秒后变成绿色 ✅ 就说明 Pod 启动成功了。
2.6 修改镜像标签
部署创建成功后,运行的镜像默认带上 Artifact Registry 自动生成的 sha256(安全哈希算法,用作镜像唯一标识)。需要把它改成你指定的版本号(如 dev.5)。
在工作负载(Workloads)列表中,点击 backend 这一行,进入 Deployment 详情页。
在详情页顶部,找到 「YAML」 标签页(或「Edit」按钮,视控制台版本而定)。点进去会看到当前 Deployment 的完整配置。
找到 spec.template.spec.containers 这一段,往下找 image 字段。它长这样:
template:
spec:
containers:
- env:
image: gcr.io/项目ID/backend@sha256:abc123def456...
把 @sha256:abc123def456... 这个摘要值删掉,换成你的版本号:
改完后点底部的 「Save(保存)」。GKE 检测到变更,自动触发滚动更新——一个一个替换旧 Pod,服务不会中断。
dev.5是你给镜像打的 tag(标签/版本号)。每次docker build后docker tag给它一个版本号,常见的命名:v1.0.0、dev.5、latest。
等滚动更新完成(列表状态回到绿色),继续下一步。
2.7 公开 Service
Deployment 创建了 Pod,但外界还访问不到。需要创建一个 Service 暴露端口。
在 Deployment 详情页,点顶部右侧的 「Actions(操作)」下拉按钮 → 选 「Expose(公开)」。
弹出「公开部署」表单:
公开
- 端口 1 / 目标端口 1:后端 Gin 程序填它的监听端口(如
gin.Run(":8080")就填8080),前端 Nginx 填80。一般两个端口填一样的值。一个 Service 通常只暴露一个端口,表单里「端口 1」的1是编号,不用管 - 服务类型:必须选「节点端口」(Node Port)。如果选「集群 IP」(ClusterIP),服务只在集群内部通信,外部 GCP Load Balancer 访问不到。节点端口在集群节点上开一个端口,外部 LB(Load Balancer,负载均衡器)通过它把流量转进 Pod
- 服务名称:建议
{Deployment名}-service,如backend-service。方便在列表里一眼认出和哪个 Deployment 关联 - 查看 YAML:点这个可以预览 Service 的 YAML 内容,初次部署不用管
相关文档
- GCP K8s 部署服务 — 入口导航、项目选择、集群选择
- GCP-K8s-部署Deployment — 创建 Deployment 和暴露 Service
- GCP-K8s-部署Ingress.md — UI 操作版 Ingress 完整配置
点 「公开」 按钮完成。