
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 + Standard | 28% |
| Flex CUD(3 年) | Autopilot + Standard | 46% |
| Resource CUD(1 年) | 仅 Standard | 最高 37% |
| Resource CUD(3 年) | 仅 Standard | 最高 57% |
| Spot Pod / Spot VM | Autopilot / 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 和对公转账。


