本文档介绍了开源容器编排平台 Kubernetes 的基本原理。Google Distributed Cloud (GDC) 空气隔离版中的许多组件都基于 Kubernetes,并且许多文档假定您已经熟悉基本的 Kubernetes 概念和术语。如果您不熟悉 Kubernetes,请将本文档作为参考,了解建议阅读的内容,以便入门。
学习 Kubernetes 基础知识对于设计、部署和管理 GDC 应用及底层系统组件至关重要。以下技术专业人员必须了解 Kubernetes,才能成功运行 GDC:
- 基础架构运维者群组中的运维者负责安装和维护底层 GDC 软件和硬件基础架构。
- 平台管理员群组中的管理员,负责在 GDC 上设计弹性基础设施和应用架构。
- 应用运维人员群组中负责构建应用的开发者。
如需了解详情,请参阅 GDC 气隙环境文档的受众群体。
关于 Kubernetes
Kubernetes 是一个开源容器编排平台。从本质上讲,Kubernetes 集群是一组称为节点的工作器机器,用于运行容器化应用。整个集群由控制平面管理,其中包括 API 服务器、调度器和 etcd 数据库等组件,负责维护集群的状态。
应用会打包到 Pod 中,Pod 是 Kubernetes 中最小的可部署单元,可以包含一个或多个容器,并在节点上运行。为了整理集群中的资源(通常是针对不同的团队或环境),Kubernetes 使用命名空间。
Pod 的生命周期和状态由控制器管理。例如,Deployment 对象管理滚动更新,而 ReplicaSet 对象则确保运行特定数量的 pod 副本。为了提供稳定的网络端点(例如用于访问 Pod 的 IP 地址和 DNS 名称),Kubernetes 使用服务。
由于容器存储默认是临时性的,因此 Kubernetes 提供了各种存储抽象(例如卷和永久性卷)来管理数据。
为了确保对集群资源和 Kubernetes API 的访问安全,Kubernetes 使用基于角色的访问权限控制 (RBAC) 来定义角色、集群角色和绑定,以便向用户和服务账号授予特定权限。
主要概念
以下是我们在整个 GDC 文档中用到的一些关键概念。以下列表并未详尽列出所有 Kubernetes 概念。您可以在 Kubernetes 文档和我们的推荐读物中找到更多相关主题,以便阅读和探索。
节点和集群
所有 Kubernetes 工作负载都在节点上运行。在 GDC 中,节点是虚拟机 (VM)。在其他 Kubernetes 平台上,节点可以是物理机或虚拟机。每个节点都由 Kubernetes 控制平面管理,并包含运行 Pod 所需的所有组件。集群是一组可以被视为单个实体的节点,您可以在其中部署容器化应用。
如需了解详情,请参阅 Kubernetes 文档:
Kubernetes 控制平面
Kubernetes 控制平面是一组管理集群整体状态的系统组件,包括 Kubernetes API 服务器(可让您使用 kubectl CLI 和其他工具与集群和应用互动)、调度器(用于在可用节点上调度 pod)和控制器(用于跟踪和管理集群状态)。控制平面由 GDC 提供和管理。
如需了解详情,请参阅 Kubernetes 控制平面组件文档。
pod
在 Kubernetes 中,容器化应用在 pod 中运行。Pod 是您可以在 Kubernetes 中创建和管理的最小可部署计算单元。一个 pod 包含一个或多个容器。当 pod 运行多个容器(例如,应用服务器和代理服务器)时,这些容器将作为一个实体进行管理并共享 pod 的资源。
如需了解详情,请参阅 Kubernetes 文档:
命名空间
Kubernetes 命名空间提供了一种机制,用于进一步对集群内的资源(例如 pod 和服务)进行分组和选择。例如,如果您有多个应用团队在单个集群上运行工作负载。
如需了解详情,请参阅 Kubernetes 命名空间文档。
控制器
Kubernetes 控制器会根据您指定的状态(例如,“我希望在此集群上运行 3 个此 Pod,每个 Pod 中包含此容器”)跟踪和管理集群和工作负载的状态。不同的控制器会跟踪不同的 Kubernetes 资源类型,包括以下类型:
Kubernetes 控制器会根据您指定的状态跟踪和管理集群和工作负载的状态。例如,您可以将集群的行为设置为运行三个 pod,每个 pod 中都有一个指定的容器。不同的控制器会跟踪不同的 Kubernetes 资源类型,包括:
- Deployment:
Deployment自定义资源是一种 Kubernetes 对象,表示一个或多个相同的 pod(称为副本)。部署会运行分布在集群节点中的 Pod 的多个副本。部署会自动替换失败或无响应的任何 pod。 - StatefulSet:一种
StatefulSet自定义资源,类似于部署,但可为其每个 pod 保留一个永久的唯一身份。StatefulSet资源在具有持久状态的应用(例如有状态应用)中非常有用。 - DaemonSet:借助
DaemonSet自定义资源,您可以向部分或全部节点添加默认 Pod。这些通常是工作负载的辅助服务,例如日志收集守护程序或监控守护程序。 - ReplicaSet:
ReplicaSet自定义资源是一组相同的 Pod。ReplicaSet通常作为Deployment资源的一部分进行管理。
如需了解详情,请参阅 Kubernetes 文档:
- 部署
- StatefulSets
- DaemonSets
- ReplicaSets
Kubernetes Service
默认情况下,您无法控制 Pod 在哪个集群节点上运行,因此 Pod 没有稳定的 IP 地址。如需为在 Kubernetes 中运行的应用获取 IP 地址,您必须在其 Pod 上定义网络抽象(称为 Kubernetes Service)。Kubernetes Service 为一组 Pod 提供稳定的网络端点。有几种类型的服务,包括 LoadBalancer 服务,它们会公开一个外部 IP 地址,以便您可以从集群外部访问应用。
Kubernetes 还具有用于内部地址解析的内置 DNS 系统,该系统可将 DNS 名称(例如 helloserver.default.cluster.local)分配给服务。这允许集群内的 Pod 访问使用稳定地址的集群中的其他 Pod。您无法在集群外部(例如通过 gdcloud CLI)使用此 DNS 名称。
如需了解详情,请参阅 Kubernetes 服务文档。
存储
如果您的应用需要保存超出其 pod 生命周期的数据(例如在有状态应用中),您可以使用 Kubernetes PersistentVolume 对象来预配此存储空间。您还可以选择使用临时存储,该存储会在相应 pod 终止时销毁。
如需了解详情,请参阅 Kubernetes 文档:
基于角色的访问权限控制
Kubernetes 包含一种基于角色的访问权限控制 (RBAC) 机制,可让您创建授权政策来控制对集群及其资源的访问权限。使用 GDC 时,您通常会结合使用 Kubernetes RBAC 和 GDC 的 Identity and Access Management (IAM) 来保护应用。
如需了解详情,请参阅 Kubernetes 的基于角色的访问权限控制文档。
推荐的阅读内容
本部分提供了一些链接,指向可帮助您详细了解 Kubernetes 的推荐资源。尤其是 Kubernetes.io(Kubernetes 官方网站),其中包含有关 Kubernetes 的全面可靠的资料。
外部指南和教程
- Kubernetes 概览:对 Kubernetes 的全面概念性概览。
- 教程:了解 Kubernetes 基础知识:通过示例了解 Kubernetes 基础知识。
- Kubernetes 教程:如果您已准备好学习更深入的知识,可以查看 Kubernetes 文档的这一部分,其中提供了有关各种 Kubernetes 主题的教程,从有状态应用到安全性,应有尽有。
参考文档
- Kubernetes 术语表:一份全面、标准化的 Kubernetes 术语列表。如果您不确定某个 Kubernetes 术语的含义,请参阅术语库。