本页面介绍了运行容器化工作负载的 Google Kubernetes Engine (GKE) 集群的架构。您可以通过本页面了解控制平面、节点以及各种 GKE 集群组件如何相互交互。
本页面适用于定义 IT 解决方案和系统架构的管理员、架构师和运维人员。如需详细了解我们在 Google Cloud 内容中提及的常见角色和示例任务,请参阅常见的 GKE 用户角色和任务。
在阅读本页面内容之前,请确保您熟悉 Kubernetes 集群架构。
GKE 集群由控制平面和称为节点的工作器机器组成。控制平面和节点构成 Kubernetes 集群编排系统。GKE Autopilot 负责管理集群的整个底层基础设施,包括控制平面、节点和所有系统组件。
如果使用 GKE Standard 模式,则 GKE 会管理控制平面和系统组件,而您管理节点。
下图显示了 GKE 集群的架构:
该图展示了以下组件:
- 控制平面:由 GKE 管理。运行 Kubernetes API 服务器、工作负载控制器、Kubernetes 调度器和集群状态存储空间。
- 节点:在 Autopilot 模式下由 GKE 管理,在 Standard 模式下由客户管理。所有 Pod 都在节点中运行。
- 其他 Google Cloud 服务:可与 GKE 集成。
关于控制平面
控制平面运行 Kubernetes API 服务器、调度器和核心资源控制器等进程。GKE 管理从集群创建到删除的控制平面生命周期。其中包括对控制平面上运行的 Kubernetes 版本的升级。该升级将由 GKE 自动执行;如果您希望提前升级,而不按计划自动升级,可以请求手动执行。
控制平面和 Kubernetes API
控制平面是集群的统一端点。您可以通过 Kubernetes API 调用与控制平面进行交互。控制平面运行 Kubernetes API 服务器进程 (kube-apiserver
) 以处理 API 请求。您可以通过以下方式进行 Kubernetes API 调用:
- 直接调用:HTTP/gRPC
- 间接调用:Kubernetes 命令行客户端(例如
kubectl
)或Google Cloud 控制台。
API 服务器进程是集群所有通信的中心。所有内部集群组件(如节点、系统进程和应用控制器)都充当 API 服务器的客户端。
您的 API 请求告诉 Kubernetes 集群中对象的所需状态。Kubernetes 会尝试持续维持该状态。Kubernetes 支持您以命令方式或声明方式配置 API 中的对象。
如需详细了解 Kubernetes 中的对象管理,请参阅以下页面:
控制平面和集群状态数据库
开源 Kubernetes 项目默认使用 etcd 作为所有集群数据的存储数据库。集群状态保存在一个键值对存储区中,其中包含集群中每个 Kubernetes API 对象的状态信息。例如,集群状态数据库会存储每个 Secret、ConfigMap 和 Deployment。
GKE 集群将集群状态存储在以下键值对存储区之一中:
- etcd:GKE 将集群状态存储在每个控制平面虚拟机 (VM) 上运行的 etcd 实例中。
- Spanner:GKE 将集群状态存储在 Spanner 中。Spanner 数据库不在集群控制平面中运行。
无论数据库类型为何,每个 GKE 集群都会在控制平面中提供 etcd API。Kubernetes API 服务器使用 etcd API 与后端集群状态数据库进行通信。
控制平面与节点的交互
控制平面管理集群的所有节点上运行的内容。控制平面安排工作负载并管理工作负载的生命周期、扩缩和升级。此外,控制平面还会管理这些工作负载的网络和存储资源。控制平面和节点使用 Kubernetes API 相互通信。
控制平面与 Artifact Registry 的互动
当您创建或更新集群时,GKE 会从 pkg.dev
或 gcr.io
网域中的 Artifact Registry 制品库中拉取控制平面和节点上运行的 Kubernetes 系统软件的容器映像。如果发生影响这些注册表的服务中断,以下操作可能会失败:
- 创建新集群
- 集群版本升级
即使没有您的干预,也可能导致工作负载中断,具体取决于服务中断的具体性质和持续时间。
如果 Artifact Registry 制品库服务中断是区域性的,我们可能会将请求重定向到不受服务中断影响的可用区或区域。
如需查看 Google Cloud 服务的状态,请前往Google Cloud 状态信息中心。
跨多个区域部署,以便在区域发生服务中断期间使应用保持可用。
关于节点
节点是运行容器化应用和其他工作负载的工作器机器。各个机器是 GKE 创建的 Compute Engine 虚拟机 (VM)。控制平面管理和接收每个节点自我报告状态的更新。
节点运行支持容器(容器构成了集群的工作负载)所必需的服务。这些服务包括运行时和 Kubernetes 节点代理 (kubelet
);该节点代理会与控制平面通信,并负责启动和运行被调度到该节点上的容器。
GKE 还运行多个系统容器,这些容器作为每个节点的代理(称为 DaemonSet)运行,可提供日志收集和集群内网络连接等功能。
由于 stdout
可让平台处理应用日志,因此建议将 stdout
用于容器化应用。
节点管理因集群运维模式而异,具体如下所示:
节点组件 | AutoPilot 模式 | 标准模式 |
---|---|---|
生命周期 | 由 GKE 完全托管,包括: |
GKE 管理以下各项:
您可以管理以下各项: |
可见性 | 使用 kubectl 查看节点。无法通过 gcloud CLI 或 Google Cloud 控制台查看或访问的底层 Compute Engine 虚拟机。 |
使用 kubectl 、gcloud CLI 和 Google Cloud 控制台查看节点。查看和访问底层 Compute Engine 虚拟机。 |
连接 | 不直接连接至底层虚拟机。 | 使用 SSH 连接至底层虚拟机。 |
节点操作系统 (OS) | 由 GKE 管理。 所有节点都使用包含 containerd 的 Container-Optimized OS (cos_containerd )。 |
为节点选择操作系统。 |
机器硬件选择 | 根据用例请求 Pod 中的计算类。 GKE 管理机器配置、调度、数量和生命周期。 |
在创建节点池时选择并配置 Compute Engine 机器类型。根据需要配置大小调整、扩缩、数量、调度和位置的设置。 |