生产环境

创建生产级 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): 允许您通过允许特定权限集访问经过身份验证的用户来分配对集群的访问权限。权限可以针对特定命名空间(角色)或整个集群(集群角色)进行分配。然后,使用角色绑定和集群角色绑定,这些权限可以附加到特定用户。
    • 基于属性的访问控制 (ABAC): 允许您根据集群中的资源属性创建策略,并将根据这些属性允许或拒绝访问。策略文件的每一行都标识版本控制属性(apiVersion 和 kind)以及一个映射,将 spec 属性与主体(用户或组)、资源属性、非资源属性(/version 或 /apis)和只读进行匹配。查看 示例 以了解详细信息。

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

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

设置工作负载资源限制

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

  • 设置命名空间限制: 设置每命名空间的配额,例如内存和 CPU。查看 管理内存、CPU 和 API 资源 以了解详细信息。您还可以设置 分层命名空间 来继承限制。
  • 为 DNS 需求做好准备: 如果您预计工作负载会大幅扩展,则您的 DNS 服务也必须做好扩展准备。查看 在集群中自动扩展 DNS 服务
  • 创建额外的服务帐户: 用户帐户决定用户可以在集群上做什么,而服务帐户定义了 Pod 在特定命名空间内的访问权限。默认情况下,Pod 会采用其命名空间中的默认服务帐户。查看 管理服务帐户 以获取有关创建新服务帐户的信息。例如,您可能想要

下一步

上次修改时间:2024 年 2 月 18 日下午 2:59 PST: 添加关于集群自动扩展的概念页面(b39e01b971)