谷歌云 GKE 完整教程:集群创建、Autopilot 与 Standard 模式、节点池配置与计费方式

谷歌云 GKE 教程

Google Kubernetes Engine(GKE)是 GCP 提供的全托管 Kubernetes 服务。它负责运行和维护 Kubernetes 控制平面,用户负责管理工作负载和应用。相比在 Compute Engine 上自建 Kubernetes 集群,GKE 省去了 etcd 备份、API Server 高可用、控制平面升级等运维工作,让工程团队专注于应用本身。

GKE 和 AWS EKS 在功能上基本对等,但有几个明显差别:GKE 的 Autopilot 模式让节点管理完全由 Google 负责,而 EKS 没有等价的完全托管节点模式;GKE 的控制平面在 Standard 模式下每月 $72,EKS 同样每集群 $72,但 GKE 每个 Billing Account 有一个免费的 Zonal 集群可以抵扣;GKE 与 GCP 的 IAM、VPC、Cloud Load Balancing 整合更原生,配置一致性更高。

GKE 适合什么场景

GKE 适合以下几类工作负载:

容器化的微服务架构,多个服务各自独立部署和扩缩,通过 Kubernetes Service 和 Ingress 互相通信。有状态应用(数据库、消息队列)通过 PersistentVolume 挂载 GCE 持久化磁盘,配合 StatefulSet 管理 Pod 的顺序启动和稳定网络标识。AI/ML 推理服务需要 GPU 实例,通过节点池按需分配 GPU 资源,推理服务 Pod 通过节点亲和性调度到 GPU 节点。批处理任务使用 Job 和 CronJob,Spot VM 节点池降低成本,任务完成后节点自动缩容。

不适合 GKE 的场景:单个无状态 HTTP 服务、团队没有 Kubernetes 经验且不打算投入学习时间——这类场景选 Cloud Run 更简单,运维负担更低,成本也更可控。

Autopilot 与 Standard:两种运行模式的核心差别

这是 GKE 中最重要的选择,直接影响运维工作量和成本结构。

Autopilot 模式

Autopilot 是 GKE 当前推荐的生产模式。在 Autopilot 下,Google 负责节点的创建、维护、升级和扩缩容,用户看不到任何节点,也不需要选择机型或配置 Auto Scaler。计费方式是按 Pod 实际请求的 CPU、内存和临时存储计算,控制平面费用已包含在 Pod 定价内,不单独计费。

Autopilot 的计费价格(us-central1,2026 年):$0.0445/vCPU-小时,$0.0049/GiB-小时(内存)。以 4 个 Pod(每个请求 0.5 vCPU、1GiB 内存)全月运行为例,月度费用约 $78–80,控制平面成本已包含其中。

Autopilot 的核心优势是消除了节点空闲浪费。Standard 模式下,即使节点上只运行了 20% 的工作负载,剩余 80% 的节点资源仍然计费。Autopilot 按 Pod 请求计费,空闲节点资源的成本完全消失。Google 官方数据显示,在常见工作负载下,Autopilot 比节点利用率不高的 Standard 集群便宜 12–40%。

每个 Billing Account 每月有 $74.40 的 GKE 免费 Credits,足以覆盖一个测试集群的基础运行成本。

Standard 模式

Standard 模式保留了对 Kubernetes 集群基础设施的完整控制:自行选择节点机型、配置节点池、调整 Cluster Autoscaler 参数、使用 Spot VM。控制平面固定收费 $0.10/小时(约 $72/月),节点按 GCE 实例按需价格计费。

Standard 在以下情况比 Autopilot 更合适:节点利用率持续维持在 85% 以上,且工程团队有能力通过精细的 Pod 资源请求设置实现高密度调度;需要使用 GPU 节点池(Autopilot 也支持 GPU,但 Standard 在节点池配置上更灵活);有特殊的操作系统或内核配置需求;或者需要使用 Spot VM 节点池进一步压低成本(Autopilot 有 Spot Pod 机制,但 Standard 的 Spot VM 节点池配置更直接)。

判断原则: 节点利用率难以持续维持在 85% 以上、或团队没有专职平台工程师管理节点池,选 Autopilot;需要极致成本优化且有能力进行节点级调优,选 Standard。

创建 GKE 集群

创建 Autopilot 集群

# 创建 Autopilot 集群(推荐生产环境)

gcloud container clusters create-auto my-cluster \

  –location=asia-east2

# 获取集群凭证,配置 kubectl

gcloud container clusters get-credentials my-cluster \

  –location=asia-east2

Autopilot 集群的 –location 参数指定区域(Region),而不是单个可用区(Zone),GKE 自动在区域内的多个可用区分配 Pod,提供跨可用区高可用能力。

创建 Standard 集群

# 创建 Standard 集群,3 个节点,e2-standard-4 机型

gcloud container clusters create my-cluster \

  –zone=asia-east2-b \

  –machine-type=e2-standard-4 \

  –num-nodes=3 \

  –enable-autoscaling \

  –min-nodes=1 \

  –max-nodes=10

# 获取集群凭证

gcloud container clusters get-credentials my-cluster \

  –zone=asia-east2-b

Standard 集群创建时指定 –zone(单可用区)或 –region(多可用区),多可用区集群节点数是指每个可用区的节点数,3 个可用区各 3 节点意味着实际有 9 个节点。生产环境建议创建区域集群(Regional Cluster)以获得跨可用区高可用能力。

验证集群状态

# 查看集群节点状态

kubectl get nodes

# 查看集群信息

kubectl cluster-info

部署应用:Deployment 与 Service

创建 Deployment

Deployment 定义了应用的期望状态,包括运行的副本数、容器镜像和资源请求。资源请求(requests)是 Kubernetes 调度 Pod 到节点的依据,在 Autopilot 模式下也直接决定计费量,设置过高会浪费成本,设置过低会影响性能:

apiVersion: apps/v1

kind: Deployment

metadata:

  name: web-app

  namespace: production

spec:

  replicas: 3

  selector:

    matchLabels:

      app: web-app

  template:

    metadata:

      labels:

        app: web-app

    spec:

      containers:

      – name: web-app

        image: asia-east2-docker.pkg.dev/my-project/my-repo/web-app:v1

        resources:

          requests:

            cpu: “250m”

            memory: “512Mi”

          limits:

            cpu: “500m”

            memory: “1Gi”

        ports:

        – containerPort: 8080

        env:

        – name: PORT

          value: “8080”

kubectl apply -f deployment.yaml

kubectl get pods -n production

通过 Service 暴露应用

Service 将外部流量路由到 Pod。type: LoadBalancer 会在 GCP 创建一个 Network Load Balancer,分配一个外部 IP:

apiVersion: v1

kind: Service

metadata:

  name: web-app-service

  namespace: production

spec:

  type: LoadBalancer

  selector:

    app: web-app

  ports:

  – port: 80

    targetPort: 8080

kubectl apply -f service.yaml

kubectl get service web-app-service -n production

每个 LoadBalancer 类型的 Service 会创建一个独立的 GCP 负载均衡器,按小时计费(约 $18/月起)。如果有多个 HTTP/HTTPS 服务需要对外暴露,使用 Ingress + 一个 HTTP(S) 负载均衡器更经济:多个服务共用同一个负载均衡器,通过域名或路径路由到不同 Service。

节点池配置(Standard 模式)

Standard 集群支持多个节点池,每个节点池可以有不同的机型、操作系统和标签。将不同类型的工作负载分配到不同节点池,是 Standard 模式最常见的成本优化策略。

混合 Spot VM 和按需节点池:

# 创建 Spot VM 节点池,用于批处理任务

gcloud container node-pools create spot-pool \

  –cluster=my-cluster \

  –zone=asia-east2-b \

  –machine-type=e2-standard-4 \

  –spot \

  –num-nodes=0 \

  –enable-autoscaling \

  –min-nodes=0 \

  –max-nodes=20

# 创建 GPU 节点池,用于 AI 推理

gcloud container node-pools create gpu-pool \

  –cluster=my-cluster \

  –zone=asia-east2-b \

  –machine-type=g2-standard-4 \

  –accelerator=type=nvidia-l4,count=1 \

  –num-nodes=0 \

  –enable-autoscaling \

  –min-nodes=0 \

  –max-nodes=5

Spot VM 节点池最小节点数设为 0,空闲时完全缩容,不产生任何节点费用。通过节点亲和性(Node Affinity)和污点(Taint/Toleration)配置,将批处理 Job 调度到 Spot 节点池,将核心在线服务保留在按需节点池,两类工作负载各自独立扩缩,互不影响。

Workload Identity:Pod 访问 GCP 资源

GKE Pod 通常需要访问 GCP 资源,如 Cloud Storage、Cloud SQL、Pub/Sub。最常见的错误做法是将服务账号密钥文件挂载到 Pod 内,这带来密钥泄露的安全风险。

Workload Identity 是 GKE 推荐的无密钥认证方式:将 Kubernetes ServiceAccount 绑定到 GCP Service Account,Pod 使用 Kubernetes SA 运行时自动获得对应 GCP SA 的权限,无需任何密钥文件。

# 启用 Workload Identity(创建集群时指定,或更新现有集群)

gcloud container clusters update my-cluster \

  –workload-pool=my-project.svc.id.goog \

  –zone=asia-east2-b

# 创建 GCP Service Account

gcloud iam service-accounts create gke-app-sa \

  –display-name=”GKE App Service Account”

# 授予 GCP SA 访问 Cloud Storage 的权限

gcloud projects add-iam-policy-binding my-project \

  –member=”serviceAccount:gke-app-sa@my-project.iam.gserviceaccount.com” \

  –role=”roles/storage.objectViewer”

# 将 Kubernetes SA 绑定到 GCP SA

gcloud iam service-accounts add-iam-policy-binding \

  gke-app-sa@my-project.iam.gserviceaccount.com \

  –role=roles/iam.workloadIdentityUser \

  –member=”serviceAccount:my-project.svc.id.goog[production/web-app-sa]”

在 Pod 的 ServiceAccount 上添加注解:

apiVersion: v1

kind: ServiceAccount

metadata:

  name: web-app-sa

  namespace: production

  annotations:

    iam.gke.io/gcp-service-account: gke-app-sa@my-project.iam.gserviceaccount.com

配置完成后,使用这个 Kubernetes SA 运行的 Pod 可以直接调用 GCP API,GCP 客户端库自动从 GKE 的元数据服务获取临时凭证。关于 GCP Service Account 的权限配置和 IAM 最小权限原则,可以参考 谷歌云 IAM 权限管理教程。关于 GKE 集群的 VPC 网络配置和私有集群设置,可以参考谷歌云 VPC 网络配置教程。

计费方式与成本控制

GKE 账单由以下部分构成:

控制平面费用: Standard 模式 $0.10/小时(约 $72/月),每个 Billing Account 有一个免费的 Zonal 集群(Standard 或 Autopilot),免费额度可覆盖开发测试集群的控制平面成本。Autopilot 的控制平面成本包含在 Pod 定价中。

节点/Pod 计算费用: Standard 模式按 GCE 实例价格计费;Autopilot 按 Pod 请求的 CPU 和内存计费。

附加资源费用: 持久化磁盘(PVC)按 GCE 持久化磁盘定价;LoadBalancer 类型 Service 每个约 $18/月起;Ingress 使用的 HTTP(S) 负载均衡器按规则数和流量计费;Pod 之间的跨区域流量按 GCP 出站费率计费。

折扣选项:

折扣类型适用模式节省幅度
Flex CUD(1 年)Autopilot + Standard28%
Flex CUD(3 年)Autopilot + Standard46%
Resource CUD(1 年)仅 Standard最高 37%
Resource CUD(3 年)仅 Standard最高 57%
Spot Pod / Spot VMAutopilot / Standard最高 60%

成本控制的几个直接操作:为每个 Pod 设置准确的资源请求(requests),避免在 Autopilot 模式下因请求过高多付费用;非生产环境的集群在下班时间扩缩节点到零(Standard)或删除 Pod(Autopilot);使用 Namespace 和资源配额(ResourceQuota)控制各团队的资源用量上限,防止某个团队的错误配置导致集群资源耗尽;定期通过 Cloud Monitoring 的 GKE 工作负载指标检查 CPU 和内存利用率,识别长期低利用率的 Pod 并调整请求值。

账号开通与代理充值

使用 GKE 需要有效的谷歌云账号,且 GPU 节点池(L4、A100、H100)的配额在新账号下默认为零,需要单独申请。通过 谷歌云账号出售 渠道获取的稳定账号,配额更宽松,可以直接用于生产环境部署,1 分钟交付,免实名免绑卡。

对于月均 GKE 消耗在 $500 以上的团队,通过 谷歌云代理商 充值可以享受赠金返点(充值 $1000 到账 $1150,充值 $3000 到账 $3500),叠加 Flex CUD 的 46% 折扣,年度实际集群运行成本明显低于官网按需计费价格,付款支持 USDT 和对公转账。

滚动至顶部