Google Kubernetes Engine

GKE

你只描述「我想要几个什么程序在跑」,它就自动帮你安排、盯着、坏了重来。

计算与运行时出现时间 · 2015按集群节点消耗的算力计费;控制面本身通常不收额外费用,节点用多少算多少。Kubernetes容器编排声明式自动扩缩容
看官方文档

01 它是干嘛的

GKE 是谷歌云上托管的容器编排服务。它来源于谷歌内部运行海量服务的经验,把「怎么在一大堆机器上安排成百上千个程序、保证它们正常运行」这件事自动化。你只需写下期望状态,系统负责把它实现并持续维持,出问题自动修复,机器不够自动加。

02 为什么会有它

2015 年之前:几千个程序跑在几万台机器上,靠人盯着根本管不过来

应用拆成很多小服务后,运维就变成一场灾难。你得手工决定哪个程序放在哪台机器、机器坏了上面的程序往哪搬、流量涨了怎么加机器、某个程序卡死了怎么重启。几百个服务乘以几千台机器,靠人写脚本和维护文档,几乎不可能不出错。

谷歌内部早就面对这个规模,为此自研了一套叫 Borg 的调度系统,把公司内部成千上万的服务统一安排到机房里,自动处理故障、扩容、发版。这套系统运行了十多年,积累了极其宝贵的经验。

2014 年,谷歌把这套经验重新设计后开源,命名为 Kubernetes,并在 2015 年与第一版正式发布一同推出托管服务 GKE。它带来了一个关键思想的转变:不再由人下命令「把 A 挪到 B 机器」,而是让用户写下「我想要三个这个程序的副本一直在跑」,剩下的全部交给系统。系统会不断对比「现在实际是什么样」和「你期望是什么样」,不一致就动手把现实拉回期望。这个「声明式期望状态 + 控制器持续调谐」的思路,是理解 Kubernetes 的钥匙。

03 它怎么工作

用户提交一份描述期望状态的文件,系统把这份描述存进一个统一的「账本」,再由一组常驻的控制器反复比对现实与期望,不断采取行动把两者对齐。

容器编排:你只说「要什么」,系统负责做到① 提交:我要 3 个副本② 选节点③ 少了就补一个开发者声明期望状态(yaml)调度器挑一台合适的机器控制面 API期望状态存这里工作节点 A实际跑容器工作节点 B实际跑容器Pod你的容器实例Pod挂了就自动重建你描述「最终应该是什么样」,系统不断对比现状并自动纠正差值(调谐循环)。期望状态的持有者实际被创建的东西
重点看那个环绕的「调谐循环」箭头:期望状态与实际状态被反复比较,不一致就修正。理解了这条回路,就理解了它为什么能自愈和自动扩容。

写下期望状态之后,系统是怎么一步步把它变成现实的

  1. 1
    ① 提交声明式配置

    用户写一份配置文件,说明「要跑哪个程序、几个副本、暴露哪个端口」,而不是逐步的操作命令。这份配置就是期望状态。

  2. 2
    ② 存入统一的期望账本

    配置被存进集群的中央存储,成为唯一的事实来源。所有组件都以这份账本为准,避免各自为政。

  3. 3
    ③ 调度器挑选运行位置

    调度器读取账本后,结合各台机器的剩余资源与约束条件,为每个程序副本挑选合适的机器。

  4. 4
    ④ 节点代理拉起程序

    目标机器上的代理程序负责拉取镜像、启动容器,并持续向中央汇报这个程序是否还活着。

  5. 5
    ⑤ 控制器持续调谐

    控制器不断对比账本里的期望与现实的状况:程序崩了就重启,副本少了就补一个,机器不够就申请扩容。这就是「调谐循环」,也是它能自愈的根本原因。

04 谁在用它

微服务的统一部署

把一个应用拆成的几十个服务统一编排,各自独立扩缩容与发版,互不影响。

流量波动大的业务

大促或活动期间流量暴涨时自动增加副本,闲时自动收缩,资源不浪费。

自动故障恢复

某个副本崩溃或某台机器失联时,系统自动把程序在别处重新拉起来,服务不中断。

灰度发布与回滚

按比例逐步把新版本放出来,观察指标正常再扩大,出问题快速切回旧版本。

多环境一致性

开发、测试、生产用同一套配置描述,避免「本地能跑线上不行」的差异。

05 怎么用

需要懂一点容器与命令行,配好集群后主要靠一份份配置文件来管理应用。

  1. 01在云控制台创建一个集群,选择机器规格与节点数量,等待几分钟集群就绪。
  2. 02在本地配置好命令行工具,让它连接到刚创建的集群。
  3. 03编写一份部署配置,写明用哪个镜像、要几个副本、需要哪些资源。
  4. 04把配置提交给集群,观察它自动把副本调度到各台机器上跑起来。
  5. 05用命令行查看程序状态、扩缩容副本数、查看日志,并在需要时更新镜像版本完成发版。
创建集群并部署一个应用bash
# 1. 创建集群(也可在控制台完成)
gcloud container clusters create my-cluster --num-nodes=3 --zone=us-central1-a

# 2. 把本地的命令行工具指向这个集群
gcloud container clusters get-credentials my-cluster --zone=us-central1-a

# 3. 部署应用:声明期望状态为「3 个副本」
kubectl create deployment web --image=nginx --replicas=3

# 4. 观察它自动把 3 个副本调度并启动
kubectl get pods -w

# 5. 需要扩容时,只改期望副本数,系统自动补齐
kubectl scale deployment web --replicas=6

避坑提示

  • !一定要给每个程序设置资源请求与上限,否则某个程序吃光机器资源会影响同机器上的其他程序。
  • !副本数要按业务的容错需求设置,只跑一个副本时,这个副本出问题就是服务中断。
  • !不要手工去改集群里的实际状态,所有变化都应通过修改配置文件完成,否则会被调谐循环纠正回来。

06 关键概念

容器
把程序和它依赖的运行环境一起打包成的小盒子,换台机器也能一模一样地跑。
声明式
你只描述「最终要什么」,不描述「一步步怎么做」,具体实现交给系统。
调谐循环
不断对比期望状态与现实状态、发现不一致就修正的持续过程,是自愈的来源。
副本(Replica)
同一个程序的多个相同实例,多跑几份是为了分担流量并互为备份。

07 容易混淆的对比

自建 Kubernetes完全自主可控,但要自己维护集群的升级、存储、网络与安全,运维负担很重。
AWS EKS / 阿里云 ACK其他云厂商的托管容器服务,能力相近,选哪家通常取决于业务已经在用哪家云。
图软件图鉴

纯静态站点,无后端、无追踪。内容为中文原创撰写,用于帮助非技术读者理解主流软件产品。

关于本站

全部内容在构建时生成
产品名称与商标归各自公司所有

© 2026 软件图鉴Nuxt 4 · Vue 3 · Tailwind 4 · 纯静态