生产环境

创建生产级 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 的详细信息,请参阅 etcd FAQ。有关详细信息,请参阅为 Kubernetes 运行 etcd 集群使用 kubeadm 设置高可用性 etcd 集群
  • 创建多个控制平面系统:为了实现高可用性,控制平面不应限于单台机器。如果控制平面服务由 init 服务(例如 systemd)运行,则每个服务应至少在三台机器上运行。但是,将控制平面服务作为 Pod 在 Kubernetes 中运行可确保你请求的复制服务数量始终可用。调度程序应具有容错能力,但不具备高可用性。一些部署工具设置了 Raft 共识算法来实现 Kubernetes 服务的领导者选举。如果主服务器宕机,另一项服务将自行选举并接管。
  • 跨多个区域:如果你的集群必须始终可用,请考虑创建一个跨多个数据中心运行的集群,在云环境中称为区域。区域组被称为地区。通过将集群分布在同一区域的多个区域中,即使一个区域变得不可用,它也能提高集群继续运行的可能性。有关详细信息,请参阅在多个区域中运行
  • 管理持续特性:如果你计划长期保留集群,则需要执行一些任务来维护其健康和安全。例如,如果你使用 kubeadm 安装,则有说明可帮助你进行证书管理升级 kubeadm 集群。有关 Kubernetes 管理任务的更长列表,请参阅管理集群

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

生产工作节点

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

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

生产用户管理

在生产环境中,你可能从一个由你或少数几个人访问集群的模型,转变为可能有多达数十或数百人访问集群的模型。在学习环境或平台原型中,你可能只有一个管理账户来处理所有事务。在生产环境中,你将需要更多账户,它们对不同的命名空间具有不同级别的访问权限。

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

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

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

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

设置工作负载资源限制

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

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

下一步

上次修改时间为 2025 年 4 月 18 日太平洋标准时间下午 3:26:删除对已归档 HNC 项目的引用 (c5441a5da7)