用途
Google Kubernetes Engine(GKE)用于在 Google Cloud Platform 上部署、运维和扩展托管 Kubernetes 集群。适合以下场景:以自动扩缩和自愈方式大规模运行容器化微服务;需要细粒度编排、服务网格或自定义调度的工作负载;已投入 Kubernetes 工具链(Helm、Argo CD、Flux)的团队;以及 Cloud Run 基于请求的模型不适用时(长时间运行、有状态工作负载)。
主要能力
- Standard 与 Autopilot 两种模式:Standard 由用户管理节点池,按节点(VM)计费,完整支持 GPU/TPU,允许 DaemonSet,适合需要完全控制和专用硬件的场景;Autopilot 由 Google 管理节点,按 Pod 资源请求计费,GPU/TPU 支持但有限制,DaemonSet 受限,适合免运维、成本优化的场景。
- 节点池管理:可创建高内存池(带 taint)、GPU 池(如 nvidia-tesla-t4)、Spot 池(用于批处理工作负载),并配置自动扩缩、自动修复、自动升级。
- Workload Identity:将 Kubernetes ServiceAccount(KSA)绑定到 Google ServiceAccount(GSA),实现细粒度、资源范围的工作负载权限,避免使用宽泛的项目级授权。
- 工作负载部署:通过 Deployment、Service、Ingress 部署应用,支持托管 SSL 证书(ManagedCertificate)和全局静态 IP。
- Terraform 配置:以基础设施即代码方式创建集群、节点池和子网,包含私有节点、网络策略、日志与监控、托管 Prometheus 等配置。
- 常用运维操作:集群列表、主节点升级、资源用量查看、扩缩容、自动扩缩、日志跟踪。
- 故障排查:覆盖 Pod 处于 Pending、ImagePullBackOff、Workload Identity 账号错误、节点 NotReady、Ingress 返回 502、集群创建配额错误、网络策略不生效等常见问题。
使用方式
前置条件:安装 Google Cloud SDK(gcloud)与 kubectl;启用 Kubernetes Engine、Compute Engine API;具备 roles/container.admin 角色。
gcloud services enable container.googleapis.com compute.googleapis.com
gcloud components install kubectl
创建 Standard 集群示例:
gcloud container clusters create prod-cluster \
--region=us-central1 --num-nodes=2 \
--machine-type=e2-standard-4 --disk-size=100 \
--enable-autoscaling --min-nodes=1 --max-nodes=5 \
--enable-autorepair --enable-autoupgrade \
--release-channel=regular \
--workload-pool=${PROJECT_ID}.svc.id.goog \
--enable-ip-alias --enable-network-policy \
--enable-shielded-nodes \
--logging=SYSTEM,WORKLOAD --monitoring=SYSTEM,WORKLOAD \
--labels=env=production,team=platform
gcloud container clusters get-credentials prod-cluster --region=us-central1
创建 Autopilot 集群示例:
gcloud container clusters create-auto autopilot-prod \
--region=us-central1 --release-channel=regular \
--workload-pool=${PROJECT_ID}.svc.id.goog \
--network=my-vpc --subnetwork=gke-subnet
Workload Identity 绑定示例:
gcloud iam service-accounts create app-gsa
gcloud projects add-iam-policy-binding ${PROJECT_ID} \
--member="serviceAccount:app-gsa@${PROJECT_ID}.iam.gserviceaccount.com" \
--role="roles/storage.objectViewer"
kubectl create namespace myapp
kubectl create serviceaccount app-ksa --namespace=myapp
gcloud iam service-accounts add-iam-policy-binding \
app-gsa@${PROJECT_ID}.iam.gserviceaccount.com \
--role=roles/iam.workloadIdentityUser \
--member="serviceAccount:${PROJECT_ID}.svc.id.goog[myapp/app-ksa]"
kubectl annotate serviceaccount app-ksa --namespace=myapp \
iam.gke.io/gcp-service-account=app-gsa@${PROJECT_ID}.iam.gserviceaccount.com
常用运维命令:
gcloud container clusters list
gcloud container clusters upgrade prod-cluster --region=us-central1 --master
kubectl top nodes && kubectl top pods --namespace=myapp
kubectl scale deployment web-app --replicas=5 --namespace=myapp
kubectl autoscale deployment web-app --namespace=myapp --min=3 --max=20 --cpu-percent=70
kubectl logs -f deployment/web-app --namespace=myapp --all-containers
适用场景
- 大规模容器化微服务的自动扩缩与自愈。
- 需要服务网格、自定义调度或专用硬件(GPU/TPU)的工作负载。
- 已使用 Kubernetes 生态工具链的团队。
- 长时间运行或有状态、不适合 Cloud Run 请求模型的工作负载。
限制与注意事项
- 写入操作前需确认 gcloud 账号/项目、集群上下文、区域及配额/预算。
- 区域级 Standard 节点数与自动扩缩标志可能按可用区计算,需显式核算总节点数与成本;Autopilot 计费与限制取决于计算类别与当前定价。
- 建议使用专用的最小权限节点服务账号,以及按存储桶/资源范围限定的工作负载权限,而非宽泛的项目级授权。
- 私有节点本身并不使控制平面端点变为私有。
- 文档中的 Terraform 为节选,需要 provider、变量和网络定义;启用某项策略功能并不等于安装拒绝/允许规则或证明其已生效。
- 基础设施命令可能中断服务:变更状态前应确认目标主机/范围,并准备备份或快照。
- 本条目为仅文档导入,上游脚本与模板未随附。
相关技能
gcp-networking(GKE 集群的 VPC、防火墙规则与负载均衡)、terraform-gcp(以基础设施即代码方式创建 GKE 集群)、gcp-compute(工作负载更适合 VM 而非容器时)、gcp-cloud-sql(通过 sidecar 代理将 GKE Pod 连接到 Cloud SQL)。