生产环境

创建生产质量的 Kubernetes 集群

创建生产质量的 Kubernetes 集群需要规划和准备。如果您的 Kubernetes 集群要运行关键工作负载,则必须配置为具有弹性。本页解释了您可以采取的步骤来设置一个生产就绪的集群,或将现有集群升级为生产用途。如果您已经熟悉生产设置并希望获取链接,请跳至 下一步

生产注意事项

通常,生产 Kubernetes 集群环境比个人学习、开发或测试环境 Kubernetes 具有更多要求。生产环境可能需要许多用户安全访问、持续可用性以及适应不断变化的需求的资源。

在决定希望将生产 Kubernetes 环境部署在何处(本地或云端)以及希望承担多少管理工作或交给他人处理时,请考虑以下问题如何影响您对 Kubernetes 集群的要求

  • 可用性:单机 Kubernetes 学习环境 具有单点故障。创建高度可用的集群意味着要考虑

    • 将控制平面与工作节点分离。
    • 在多个节点上复制控制平面组件。
    • 将流量负载均衡到集群的 API 服务器
    • 根据不断变化的工作负载,提供足够的工作节点,或能够快速提供工作节点。
  • 规模:如果您预计您的生产 Kubernetes 环境将接收稳定的需求量,则可以为所需容量进行设置,然后完成。但是,如果您预计需求会随着时间的推移而增长,或者根据季节或特殊事件发生剧烈变化,则需要计划如何扩展以缓解来自更多请求对控制平面和工作节点的压力,或者缩小规模以减少未使用的资源。

  • 安全性和访问管理:您对自己的 Kubernetes 学习集群拥有完全的管理员权限。但是,具有重要工作负载和超过一两个用户的共享集群需要更完善的方法来确定谁以及什么可以访问集群资源。您可以使用基于角色的访问控制 (RBAC) 和其他安全机制,以确保用户和工作负载可以访问所需的资源,同时保持工作负载和集群本身的安全性。您可以通过管理 策略容器资源 来限制用户和工作负载可以访问的资源。

在自行构建 Kubernetes 生产环境之前,请考虑将某些或全部工作交给 现成的云解决方案 提供商或其他 Kubernetes 合作伙伴。选项包括

  • 无服务器:只需在第三方设备上运行工作负载,而无需管理集群。您将为 CPU 使用量、内存和磁盘请求等付费。
  • 托管控制平面:让提供商管理集群控制平面的规模和可用性,以及处理补丁和升级。
  • 托管工作节点:配置节点池以满足您的需求,然后提供商确保这些节点可用并准备好在需要时实施升级。
  • 集成:有一些提供商将 Kubernetes 与您可能需要的其他服务集成,例如存储、容器注册表、身份验证方法和开发工具。

无论您是自行构建生产 Kubernetes 集群还是与合作伙伴合作,请查看以下部分,以评估您的需求与集群的控制平面工作节点用户访问工作负载资源之间的关系。

生产集群设置

在生产质量的 Kubernetes 集群中,控制平面管理集群中的服务,这些服务可以以不同的方式分布在多台计算机上。但是,每个工作节点都表示一个配置为运行 Kubernetes Pod 的单个实体。

生产控制平面

最简单的 Kubernetes 集群将整个控制平面和工作节点服务运行在同一台机器上。您可以添加工作节点来扩展该环境,如 Kubernetes 组件 中图所示。如果集群旨在短时间内可用,或者如果出现严重问题可以丢弃,则这可能满足您的需求。

但是,如果您需要一个更永久、高度可用的集群,则应考虑扩展控制平面的方法。通过设计,在单个机器上运行的单机控制平面服务并非高度可用。如果保持集群正常运行并确保在出现问题时可以修复它很重要,请考虑以下步骤

  • 选择部署工具:您可以使用 kubeadm、kops 和 kubespray 等工具部署控制平面。请参阅 使用部署工具安装 Kubernetes,以了解使用每种部署方法进行生产质量部署的技巧。有不同的 容器运行时 可用于您的部署。
  • 管理证书:使用证书实现控制平面服务之间的安全通信。证书在部署期间自动生成,或者您可以使用自己的证书颁发机构生成证书。有关详细信息,请参阅 PKI 证书和要求
  • 为 apiserver 配置负载均衡器:配置负载均衡器将外部 API 请求分发到在不同节点上运行的 apiserver 服务实例。有关详细信息,请参阅 创建外部负载均衡器
  • 分离和备份 etcd 服务:etcd 服务可以与控制平面上的其他服务位于同一台机器上,也可以运行在单独的机器上,以提高额外的安全性和可用性。由于 etcd 存储集群配置数据,因此应定期备份 etcd 数据库,以确保在需要时可以修复该数据库。有关详细信息,请参阅 etcd FAQ。请参阅 操作 Kubernetes 的 etcd 集群使用 kubeadm 设置高可用性 etcd 集群 以获取详细信息。
  • 创建多个控制平面系统:为了实现高可用性,控制平面不应限制为单个机器。如果控制平面服务由 init 服务(例如 systemd)运行,则每个服务应至少在三台机器上运行。但是,将控制平面服务作为 Kubernetes 中的 Pod 运行可确保始终可用您请求的已复制服务数量。调度程序应具有容错能力,但并非高度可用。一些部署工具设置 Raft 共识算法来选举 Kubernetes 服务的领导者。如果主节点消失,则另一个服务会选举自己并接管。
  • 跨多个区域分布:如果保持集群始终可用至关重要,请考虑在多个数据中心(在云环境中称为区域)上创建集群。区域组称为区域。通过将集群分布在同一区域的多个区域中,即使某个区域不可用,也可以提高集群继续运行的机会。有关详细信息,请参阅 在多个区域中运行
  • 管理持续功能:如果您计划长期保留集群,则需要执行一些任务来维护其健康和安全性。例如,如果您使用 kubeadm 安装,则有一些说明可以帮助您进行 证书管理升级 kubeadm 集群。请参阅 管理集群 以获取更长的 Kubernetes 管理任务列表。

要了解在运行控制平面服务时可用的选项,请参阅 kube-apiserverkube-controller-managerkube-scheduler 组件页面。有关高可用性控制平面示例,请参阅 高可用性拓扑选项使用 kubeadm 创建高可用性集群为 Kubernetes 运营 etcd 集群。有关 etcd 集群备份的信息,请参阅 备份 etcd 集群

生产工作节点

生产质量的工作负载需要具有弹性,并且它们所依赖的任何内容也需要具有弹性(例如 CoreDNS)。无论您是自行管理控制平面还是让云提供商为您管理,您仍然需要考虑如何管理您的工作节点(也简称为节点)。

  • 配置节点:节点可以是物理机或虚拟机。如果您想创建和管理自己的节点,可以安装受支持的操作系统,然后添加并运行适当的 节点服务。请考虑
    • 在设置节点时,根据工作负载的需求,提供适当的内存、CPU 和磁盘速度以及存储容量。
    • 是否需要通用计算机系统,或者您有需要 GPU 处理器、Windows 节点或 VM 隔离的工作负载。
  • 验证节点:有关如何确保节点满足加入 Kubernetes 集群的要求的信息,请参阅 有效节点设置
  • 将节点添加到集群:如果您正在管理自己的集群,可以通过设置自己的机器并手动添加它们或让它们向集群的 apiserver 注册来添加节点。有关如何设置 Kubernetes 以添加节点的方式的信息,请参阅 节点 部分。
  • 扩展节点:制定一个计划,以扩展集群最终需要的容量。请参阅 大型集群注意事项,以帮助确定您需要的节点数量,具体取决于您需要运行的 Pod 和容器的数量。如果您自行管理节点,这意味着购买和安装自己的物理设备。
  • 自动扩展节点:阅读 节点自动扩展,以了解可用于自动管理节点及其提供的容量的工具。
  • 设置节点健康检查:对于重要的工作负载,您希望确保节点以及在这些节点上运行的 Pod 都是健康的。使用 节点问题检测器 守护程序,您可以确保您的节点是健康的。

生产用户管理

在生产环境中,您可能会从您或一小群人访问集群的模型转变为可能存在数十甚至数百人的模型。在学习环境或平台原型中,您可能拥有一个用于执行所有操作的单个管理帐户。在生产环境中,您需要更多具有不同访问级别的帐户,这些帐户可以访问不同的命名空间。

采用生产质量的集群意味着决定如何选择性地允许其他用户访问。特别是,您需要选择验证尝试访问集群的人员身份的策略(身份验证)以及决定他们是否有权执行他们所要求操作的策略(授权)。

  • 身份验证:apiserver 可以使用客户端证书、Bearer 令牌、身份验证代理或 HTTP 基本身份验证来验证用户。您可以选择要使用哪些身份验证方法。通过使用插件,apiserver 可以利用您组织现有的身份验证方法,例如 LDAP 或 Kerberos。有关这些不同 Kubernetes 用户身份验证方法,请参阅 身份验证
  • 授权:当您开始授权您的常规用户时,您可能会选择 RBAC 和 ABAC 授权。请参阅 授权概述,以查看用于授权用户帐户(以及服务帐户对集群的访问)的不同模式。
    • 基于角色的访问控制 (RBAC):允许您通过允许经过身份验证的用户具有特定的权限集来访问集群。权限可以分配给特定的命名空间(Role)或整个集群(ClusterRole)。然后,使用 RoleBinding 和 ClusterRoleBinding,可以将这些权限附加到特定的用户。
    • 基于属性的访问控制 (ABAC):允许您基于集群中的资源属性创建策略,并根据这些属性允许或拒绝访问。策略文件的每一行都标识版本属性(apiVersion 和 kind)以及要匹配主题(用户或组)、资源属性、非资源属性(/version 或 /apis)和 readonly 的 spec 属性的映射。有关详细信息,请参阅 示例

作为设置生产 Kubernetes 集群上的身份验证和授权的人员,以下是一些需要考虑的事项

  • 设置授权模式:当 Kubernetes API 服务器 (kube-apiserver) 启动时,必须使用--authorization-config 文件或--authorization-mode 标志设置受支持的授权模式。例如,kube-adminserver.yaml 文件(在/etc/kubernetes/manifests 中)中的该标志可以设置为 Node,RBAC。这将允许对经过身份验证的请求进行 Node 和 RBAC 授权。
  • 创建用户证书和角色绑定 (RBAC):如果您正在使用 RBAC 授权,用户可以创建一个可以由集群 CA 签名的 CertificateSigningRequest (CSR)。然后,您可以将 Role 和 ClusterRole 绑定到每个用户。有关详细信息,请参阅 证书签名请求
  • 创建组合属性的策略 (ABAC):如果您正在使用 ABAC 授权,您可以分配属性组合以形成策略,以授权选定的用户或组访问特定的资源(例如 Pod)、命名空间或 apiGroup。有关更多信息,请参阅 示例
  • 考虑准入控制器:可以通过 API 服务器传入的请求的附加授权形式包括 Webhook 令牌身份验证。Webhook 和其他特殊授权类型需要通过将 准入控制器 添加到 API 服务器来启用。

设置工作负载资源限制

生产工作负载的需求可能会对 Kubernetes 控制平面内外造成压力。在为集群的工作负载需求进行设置时,请考虑以下事项

  • 设置命名空间限制:为内存和 CPU 等内容设置每个命名空间的配额。有关详细信息,请参阅 管理内存、CPU 和 API 资源
  • 为 DNS 需求做好准备:如果您预计工作负载会大规模扩展,您的 DNS 服务也必须准备好进行扩展。请参阅 自动扩展集群中的 DNS 服务
  • 创建其他服务帐户:用户帐户确定用户可以在集群上执行的操作,而服务帐户定义 Pod 在特定命名空间内的访问权限。默认情况下,Pod 会采用其命名空间的默认服务帐户。有关创建新服务帐户的信息,请参阅 管理服务帐户。例如,您可能希望

接下来

最后修改时间为 2025 年 4 月 18 日下午 3:26 PST:移除对已归档 HNC 项目的引用 (c5441a5da7)