生产环境

创建生产质量的 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 常见问题解答。有关详细信息,请参阅 为 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 可以使用客户端证书、持有者令牌、身份验证代理或 HTTP 基本身份验证来验证用户身份。您可以选择要使用的身份验证方法。通过使用插件,apiserver 可以利用您组织现有的身份验证方法,例如 LDAP 或 Kerberos。有关这些不同的 Kubernetes 用户身份验证方法的描述,请参阅身份验证
  • 授权:当您开始授权您的普通用户时,您可能会在 RBAC 和 ABAC 授权之间进行选择。请参阅授权概述,以查看授权用户帐户(以及服务帐户对您的集群的访问权限)的不同模式。
    • 基于角色的访问控制 (RBAC):允许您通过向经过身份验证的用户授予特定权限集来分配对您的集群的访问权限。可以在特定命名空间(角色)或整个集群(ClusterRole)中分配权限。然后,使用 RoleBindings 和 ClusterRoleBindings,可以将这些权限附加到特定用户。
    • 基于属性的访问控制 (ABAC):允许您基于集群中的资源属性创建策略,并基于这些属性允许或拒绝访问。策略文件的每一行都标识版本控制属性(apiVersion 和 kind)以及用于匹配主题(用户或组)、资源属性、非资源属性(/version 或 /apis)和只读的 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)。然后,您可以将角色和 ClusterRole 绑定到每个用户。有关详细信息,请参阅证书签名请求
  • 创建组合属性的策略 (ABAC):如果您使用 ABAC 授权,则可以分配属性组合以形成策略,从而授权选定的用户或组访问特定资源(例如 pod)、命名空间或 apiGroup。有关更多信息,请参阅示例
  • 考虑准入控制器:可通过 API 服务器传入的请求的其他授权形式包括Webhook 令牌身份验证。需要通过将准入控制器添加到 API 服务器来启用 Webhook 和其他特殊授权类型。

设置工作负载资源限制

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

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

下一步

上次修改时间为太平洋标准时间 2024 年 10 月 18 日下午 3:31:KEP-3221:将 StructuredAuthorizationConfiguration 提升为 GA (32aad9dd3f)