创建高度可用的群集策略
通过 Red Hat® OpenShift® on IBM Cloud® 设计标准集群,以实现应用程序的最大可用性和容量。 使用内置功能提高集群的高可用性,并在集群中的某个组件发生故障时保护应用程序免受停机影响。 但是,要想知道你的集群设置必须能支持你的工作负载,这并不是一门精确的科学。 您可能需要测试其他配置并进行相应调整。
高可用性(HA)是 IT 基础设施中的一项核心技术,即使在部分或全部站点发生故障后,也能保证应用程序正常运行。 高可用性的主要目的是消除 IT 基础架构中的潜在故障点。 例如,可以通过添加冗余并设置故障转移机制来准备好应对一个系统发生故障的情况。 请参见 IBM Cloud 如何确保高可用性和灾难恢复。
要开始规划和调整集群大小,请在创建集群前查看这些决策点。
完成后,试试测验。
决定创建多少个群集
跨多个工作程序节点、专区和集群分布应用程序时,用户不太可能会遇到中断。 内置功能(例如负载均衡和隔离)可在主机、网络或应用程序发生潜在故障时更快恢复。
创建集群的数量取决于工作量、公司政策和法规、业务要求、与客户签订的服务级别协议、想要使用的资源以及想要对计算资源做什么。
-
多个群集:多个集群的管理通常较为复杂,但可以帮助您实现以下重要目标。
- 符合要求隔离工作负载的安全策略。
- 测试应用程序在不同版本的 Red Hat OpenShift 或其他集群软件(如 Calico )中的运行情况。
- 为不同地理区域的用户提供更高的性能。
- 在群集实例级别配置访问权限,而不是在命名空间级别定制和管理多个 RBAC 策略,从而简化用户访问,控制群集内的访问权限。
- 减少工作节点的数量。 扩展虚拟机的网络带宽约为 1000 Mbps。 如果一个集群中需要数百个工作节点,可以将配置拆分成多个节点数量较少的集群,或者订购裸机节点。
- 允许更多 服务集成,例如 5,000 多个服务。
- 为应用程序提供更高的可用性。 与在多区群集中使用 3 个区类似,您可以通过跨区设置 3 个群集为应用程序提供更多可用性。
- 购买较小的机器来处理工作量,从而降低成本。
-
具有更多工作节点的一个群集:较少的群集可帮助您减少操作工作量和每个群集的固定资源成本。 您可以在一个集群中添加工作者池,为应用程序和服务组件提供不同类型的计算资源,而不是创建更多集群。 在开发应用程序时,应用程序使用的资源位于同一专区中,或者在多专区中以其他方式密切关联,以便您可以对等待时间、带宽或相关故障进行假设。 不过,当你只有一个群集时,使用命名空间、资源配额和标签来组织群集就变得更加重要。
确定需要多少个地点
集群既可以在单个位置的工作节点上分发副本,也可以在多个位置的工作节点上分发副本。 这一选择会影响下一节中的群集类型。
将工作负载分布在三个区域,可确保在一个区域不可用的情况下,应用程序的高可用性。 您必须让工作节点均匀分布在所有三个可用性区域,以满足 HA 配置的 IBM Cloud 服务级别协议(SLA)。
专区故障会影响所有物理计算主机和 NFS 存储器。 故障包括电源、散热、联网或存储中断,以及洪水、地震和飓风等自然灾害。 为防止区域故障,您必须在两个不同的区域建立集群,并通过外部负载平衡器实现负载平衡;在多区域位置创建集群,将主服务器分散到各个区域;或者考虑在另一个区域建立第二个集群。
多专区集群
经典 VPC
多区群集可将工作负载分配到多个工作节点和区域,从而为区域故障提供额外保护。 工作节点会自动部署三个副本,分布在多个区域。 如果整个区域发生故障,您的工作负载会被调度到其他区域的工作节点上,从而保护您的应用程序免受故障影响。
每个区域都设置有高可用性负载均衡器,可从特定于区域的 API 端点进行访问。 负载均衡器用于将入局和出局请求路由到区域专区中的集群。 整个区域发生故障的可能性较低。 但是,要应对此故障,可以在不同区域中设置多个集群,并使用外部负载均衡器来连接这些集群。 如果整个区域出现故障,另一区域的群集可以接管工作负载。
例如,您将多区域群集 部署在一个都会区(如 sydney
),三个副本将自动分布在都会区的三个区域(如 au-syd-1
、au-syd-2
和 au-syd-3
)。 如果一个专区中的资源停止运行,集群工作负载仍会继续在其他专区中运行。
多区域集群需要多种云资源,并且根据应用程序的情况,该集群可能会十分复杂且昂贵。 请检查您是否需要多区域设置,或者是否可以容忍潜在的服务中断。 如果您想建立一个多区域集群,请确保您的应用程序和数据可以托管在另一个区域,并且您的应用程序可以处理全局数据复制。
使用负载平衡器连接多个集群
经典 VPC
为了防止主控失效,您可以在一个区域内的不同区域创建多个群集,并用全局负载平衡器将它们连接起来。 如果您必须在经典数据中心配置一个只有一个区域的群集,但仍希望获得多区域可用性的优势,则此选项非常有用。
要使用全局负载平衡器连接多个集群,必须使用公共网络连接设置这些集群,而且必须通过 Ingress、路由 或 Kubernetes负载平衡器服务 暴露应用程序。
要在多个群集之间平衡工作负载,必须通过 Cloud Internet Services (CIS) 设置全局负载平衡器,并将路由器服务或负载平衡器服务的公共 IP 地址添加到域中。 通过添加这些 IP 地址,可以在集群之间路由入局流量。
要使全局负载均衡器检测其中一个集群是否不可用,请考虑向每个 IP 地址添加基于 ping 操作的运行状况检查。 设置此检查后,DNS 提供程序会定期对添加到域的 IP 地址执行 ping 操作。 如果一个 IP 地址变为不可用,那么不会再将流量发送到此 IP 地址。 但是,Red Hat OpenShift 不会自动在可用群集的工作节点上重新启动不可用群集中的 pod。 如果希望 Red Hat OpenShift 自动重新启动可用群集中的 pod,请考虑设置多区群集。
单专区集群
经典
工作节点分布在单个区域内的不同物理主机上。 该选项可防止某些中断,如主站更新期间的中断,而且更易于管理。 但是,如果整个区域发生故障,它也无法保护您的应用程序。 如果后来发现可用性是个问题,在某些地点部署的单区群集以后可以转换为多区群集。
如果您的群集是在单个区域中创建的所有工作节点,那么您的经典群集 Kubernetes 主站具有高可用性,并为主站 API 服务器、etcd、调度程序和控制器管理器提供独立的物理主机,以防止主站更新等过程中出现中断。 您可以向单区群集添加额外的工作节点,以提高可用性,并在一个工作节点出现故障时提供保护。
如果一个工作节点宕机,可用工作节点上的应用实例将继续运行。Red Hat OpenShift会自动重新安排不可用工作节点上的 pod,以确保应用程序的性能和容量。 为确保 Pod 均匀分布在各个工作节点上,请实施 pod 亲和性。
选择群组类型
可供您使用的工作程序节点类型模板和隔离级别取决于要使用的容器平台、集群类型、要使用的基础架构提供者以及要创建集群的 Red Hat OpenShift on IBM Cloud 位置。 您可以选择经典、VPC 或 Satellite 群集。 您所需要的群组类型取决于您对群组数量和位置所做的决定。
- VPC 集群
- 可使用标准基础设施或专用主机上的虚拟工作节点来配置工作节点。 如果速度是您的重要考虑因素,VPC 集群可能是最佳选择。
- Satellite 集群
- 工作节点可在云提供商(如 AWS、Azure、GCP 等)的虚拟机上配置。 工作节点也可以使用自己的内部基础设施进行配置。
- 经典集群
- 可在虚拟和裸机工作节点上创建工作节点。 如果需要更多本地磁盘,那么还可以选择为软件定义的存储解决方案(例如,Portworx)设计的其中一个裸机类型模板。
为群集选择操作系统
您可使用的操作系统取决于您选择的群集类型。
- Red Hat Enterprise Linux (RHEL) 版本 8
- Classic VPC Satellite
- Red Hat Enterprise Linux on IBM Cloud 为企业提供了一个强大、可扩展的环境,该环境在构建时充分考虑了安全性,并专为关键工作负载量身定制。 通过将Red Hat Enterprise Linux平台与IBM Cloud的基础架构相结合,企业可以获得高可用性、灾难恢复和简化的管理功能。 有关 RHEL 8 的概述,请参阅 Why run Linux on IBM Cloud?。
- Red Hat Enterprise Linux CoreOS (RHCOS)
- VPC Satellite
- 适用于4.15及更高版本创建的群集。 Red Hat Enterprise Linux CoreOS (RHCOS) 专为 Red Hat OpenShift Container Platform (OCP) 而设计。 在利用Red Hat Enterprise Linux(RHEL)的稳定性和安全性的同时,RHCOS 是轻量级和最小化的,专注于高效、大规模地运行容器化工作负载。 由于它由 RHEL 组件组成,因此你可以获得与 RHEL 相同的安全级别,还能获得以容器为中心的最小占用空间、只读文件系统、基于镜像的部署等额外优势。 有关 RHCOS 的概述,请参阅 Red Hat Enterprise Linux CoreOS(RHCOS)。 VPC 群集的 RHCOS 工作节点仅适用于以支持 RHCOS 的版本创建的群集。 从不支持 RHCOS 的版本升级到支持 RHCOS 的版本的集群不能使用 RHCOS Worker。
确定群组命名策略
请考虑为集群提供在帐户中的各资源组和区域中唯一的名称,以避免发生命名冲突。 创建群集后不能重新命名。
决定每个群集有多少个工作节点
您为群集设置的可用性级别会影响 IBM Cloud HA 服务级别协议条款下的覆盖范围。 例如,要获得 SLA 条款规定的完全 HA 覆盖,您必须建立一个多区群集,其中至少有 6 个工作节点,每个区两个工作节点,均匀分布在三个区中。
集群中的工作程序节点总数决定了可用于集群中应用程序的计算容量。 通过在群集中设置多个工作节点,可以在工作节点发生故障时保护您的设置。 工作节点故障可能包括电源、冷却或网络等硬件中断,以及虚拟机本身的问题。
-
多区群集 经典 VPC:计划每个区域至少有两个工作节点,因此三个区域共有六个节点。 此外,将集群的总容量计划为至少等于总工作负载所需容量的 150%,这样,如果一个专区停止运行,您仍有资源可用于维持工作负载。
-
单区群集计划在群集中至少有三个工作节点。 此外,需要在集群中提供可容纳 1 个额外节点的 CPU 和内存容量。 如果您的应用程序所需的资源少于工作者节点上的可用资源,您可以限制部署到一个工作者节点上的 pod 数量。
请记住:
- 您可以试用 群集自动分压器,以确保您始终有足够的工作节点来应对工作负载。
- Kubernetes 限制了在一个集群中可以拥有的最大工作程序节点数。 查看 Worker 节点和 pod 配额,了解更多信息。
选择工作节点类型
工作节点是在物理硬件上运行的虚拟机。 工作程序节点类型模板描述了供应工作程序节点时获取的计算资源,例如 CPU、内存和磁盘容量。 相同类型模板的工作程序节点会分组成工作程序节点池。
在选择集群类型时,您已经考虑过工作节点的风味位置和机器类型会如何影响您的决定。 在选择工作节点时,请考虑以下几点。
-
租用:根据您所需的硬件隔离级别,虚拟工作站节点可设置为多个 IBM 客户共享(多租户)或仅为您专用(单租户)节点。 裸机始终设置为专用。 在决定使用共享节点还是专用节点时,您可能需要咨询法律部门,讨论应用程序环境所需的基础架构隔离和合规性级别。
- 共享:物理资源(如 CPU 和内存)在部署到相同物理硬件的所有虚拟机之间共享。 要确保每个虚拟机都能独立运行,虚拟机监视器(也称为系统管理程序)会将物理资源分段成隔离的实体,并将其作为专用资源分配给虚拟机(系统管理程序隔离)。 共享节点通常比专用节点更便宜,因为底层硬件的开销由多个客户分担。
- 专用:所有物理资源仅供您使用。 您可以将多个工作程序节点作为虚拟机部署在同一物理主机上。 与多租户设置类似,系统管理程序也会确保每个工作程序节点在可用物理资源中获得应有的份额。
-
机器类型:您可以选择多种机器类型。
-
虚拟机:使用虚拟机可以获得更大的灵活性、更快的配置时间、更多的自动扩展功能和更具成本效益的价格。 您可以将 VM 用于最通用的用例,例如测试和开发环境、编译打包和生产环境、微服务以及业务应用程序。 不过,在性能方面需要做出权衡。
-
裸机(物理):如果您需要为数据或 RAM 密集型工作负载提供高性能计算,请考虑使用裸机工作节点创建经典集群。 由于您可以完全控制工作负载的隔离和资源消耗,因此您可以使用裸机为您的环境实现 HIPAA 和 PCI 合规性。 通过裸机,您可以直接访问机器上的物理资源,例如内存或 CPU。 此设置无需虚拟机系统管理程序将物理资源分配给在主机上运行的虚拟机。 相反,裸机的所有资源都专门用于工作者,所以你不必担心“吵闹的邻居”会共享资源或降低性能。 物理类型模板的本地存储器大于虚拟类型模板,并且某些类型模板具有 RAID,可提高数据可用性。 工作节点上的本地存储仅用于短期处理,主磁盘和辅助磁盘会在更新或重新加载工作节点时被擦除。 物理机仅适用于传统群集,不支持 VPC 群集。
裸机服务器按月计费。 如果您在月底之前取消裸机服务器,那么仍将收取该整月的费用。 订购或取消裸机服务器后,该过程在 IBM Cloud 基础架构帐户中手动完成。 因此,完成此过程可能需要超过一个工作日的时间。
-
SDS 机器:软件定义存储 (SDS) 具有额外的原始磁盘,用于物理本地存储。 与主磁盘和辅助本地磁盘不同,这些原始磁盘在工作节点更新或重载时不会被擦除。 因为数据与计算节点并存,因此 SDS 机器适合高性能工作负载。 软件定义的存储功能仅适用于传统群集,不支持 VPC 群集。
由于您可以完全控制工作负载的隔离和资源消耗,因此您可以使用 SDS 机器为您的环境实现 HIPAA 和 PCI 合规性。
在下列情况下,通常使用 SDS 机器:
- 如果使用 SDS 附加组件,如 Portworx,请使用 SDS 机器。
- 如果您的应用程序是 StatefulSet 需要本地存储,可以使用 SDS 机器并配置 Kubernetes 本地持久卷。
- 如果具有需要其他原始本地存储器的定制应用程序。
-
-
成本:一般来说,您的密集型工作负载更适合在裸机物理机上运行,而对于成本效益高的测试和开发工作,您可能会选择共享或专用硬件上的虚拟机。
-
位置:决定要在哪些地点建立群集。 您希望在哪里使用也可能会影响到您需要多少个集群或集群的类型。 例如,如果您知道您需要的地点在蒙特利尔,那么这将有助于缩小您的选择范围。 查看 可用地点。
-
大小:较大的节点比较小的节点更具成本效益,特别是对于那些在高性能机器上处理时可提高效率的工作负载。 但是,如果一个大型工作节点宕机,您需要确保集群有足够的容量将所有工作负载 pod 安全地重新安排到集群中的其他工作节点上。 较小的工人节点可以帮助您安全扩展。 了解更多能力信息。
-
GPU:您可以使用 GPU 机器加快计算密集型工作负载(如人工智能、机器学习、推理等)所需的处理时间。
-
存储:每个虚拟机都附带一个磁盘,用于存储虚拟机运行所需的信息,如操作系统文件系统、容器运行时和
kubelet
。 工作程序节点上的本地存储器仅用于短期处理,删除、重新装入、替换或更新工作程序节点时将擦除存储磁盘。 此外,经典和 VPC 基础架构在磁盘设置方面有所不同。- 经典 VM:经典 VM 有两个连接的磁盘。 主存储磁盘有 25 GB 用于操作系统文件系统,辅助存储磁盘有 100 GB 用于容器运行时和
kubelet
等数据。 为了提高可靠性,主存储卷和辅助存储卷都是本地磁盘,而不是存储区域网络(SAN)。 可靠性优势包括在将字节序列化到本地磁盘时可提高吞吐量,以及减少因网络故障而导致的文件系统降级。 辅助磁盘默认已加密。 - VPC 计算虚拟机:VPC 虚拟机有一个主磁盘,它是一个通过网络连接的块存储卷。 存储层未与其他联网层分隔,并且网络和存储流量在同一网络上路由。 主存储磁盘用于存储操作系统文件系统、容器运行时和
kubelet
等数据,并且缺省情况下已加密。 对于 VPC 群集,您还可以在工作节点上配置辅助磁盘。 这些可选磁盘已在您的账户中配置,您可以在 VPC 控制台中看到它们。 这些磁盘的费用与每个工人的费用是分开的,在账单上显示为不同的细列项目。 这些辅助卷也计入账户的配额使用量。 为防止默认 pod 被驱逐,Kubernetes 数据磁盘(经典中为辅助磁盘,VPC 中为主启动磁盘)的 10% 将保留给系统组件。
在有状态应用程序中,数据在保持应用程序正常启动并运行方面起着重要作用。 请确保您的数据具有高可用性,以便可以从潜在故障中恢复。 在 Red Hat OpenShift on IBM Cloud 中,可以从多个选项中进行选择来持久存储数据。 例如,可以使用 Kubernetes 本机持久卷来供应 NFS 存储器,也可以使用 IBM Cloud 数据库服务来存储数据。 更多信息,请参阅 规划高可用数据。
选择具有正确存储配置的机型或机器类型,以支持您的工作负载。 一些类型模板具有以下磁盘和存储配置的组合。 例如,一些类型模板可能具有一个 SATA 主磁盘以及一个原始 SSD 辅助磁盘。
- 经典 VM:经典 VM 有两个连接的磁盘。 主存储磁盘有 25 GB 用于操作系统文件系统,辅助存储磁盘有 100 GB 用于容器运行时和
有关可用版本的列表,请参阅 VPC Gen 2 版本 或 Classic 版本。
确定资源的工作节点容量
要充分发挥工作节点的性能,请在设置资源时考虑以下几点:
-
考虑您的应用程序正在执行的任务:首先将应用程序的大小与一个可用工作节点的容量相匹配。 此外,还要考虑应用程序是否会拉动大型或大量图片,因为它们会占用工作节点上的本地存储空间。
-
保持核心力量每台机器都有一定数量的核心。 根据应用程序的工作负载,为每个核心的 pod 数设置限制,例如 10 个。
-
避免节点超载:将工作者节点的容量保持在 75% 左右,为其他可能需要调度的 pod 留出空间。 如果应用程序需要的资源超过工作程序节点上的可用资源,请使用可以满足这些需求的其他工作程序节点类型模板。 根据应用程序的工作负载,为每个节点的 pod 数设置限制,例如 40 个。
-
选择服务:在考虑创建多少个群集时,您决定包含多少个服务集成? 这些集成服务和附加组件可启动 pod,消耗并影响集群资源。
-
应用程序副本数:要确定所需的工作程序节点数,您还可以考虑要运行的应用程序副本数。 例如,如果您知道工作负载需要 32 个 CPU 核心,并且计划运行 16 个应用程序副本,那么每个副本 pod 需要 2 个 CPU 核心。 如果希望每个工作程序节点仅运行一个应用程序 pod,那么可以为集群类型订购相应数量的工作程序节点以支持此配置。
-
为运行时需求留出空间:工作节点必须预留一定量的 CPU 和内存资源,以运行操作系统或容器运行时等所需组件。
选择在群集中创建多少个命名空间
如果您有共享集群的多个团队和项目,请设置多个名称空间。 命名空间是使用 资源配额和 默认限制来划分群集资源的一种方法。 创建新的名称空间时,请确保设置正确的 RBAC 策略来控制访问权。 更多信息,请参阅 Kubernetes 文档中的 使用命名空间共享群集。
如果您有一个小型集群、数十个用户以及类似的资源(例如,同一软件的不同版本),那么可能并不需要多个名称空间。 您可以改为使用标签。
在 容器隔离和安全性 中查看有关此决定的安全信息。
为命名空间建立资源请求和限制
为确保每个团队都有必要的资源在群集中部署服务和运行应用程序,必须为每个命名空间设置 资源配额。 资源配额决定了部署限制,如可部署的 Kubernetes 资源数量,以及这些资源可消耗的 CPU 和内存数量。 设置配额后,用户必须在其部署中包含资源请求和限制。
创建部署时,也要对其进行限制,使应用程序的 pod 只能部署在具有最佳资源组合的机器上。 例如,您可能希望将数据库应用程序限制为部署到具有大容量本地磁盘存储器的裸机机器,如 md1c.28x512.4x4tb
。
让您的应用程序也具有高可用性
根据设计,容器和 pod 的生存时间短,并且可能会意外发生故障。 例如,如果应用程序中发生错误,那么容器或 pod 可能会崩溃。 要使应用程序具有高可用性,您必须确保有足够的实例来处理工作负载,并在出现故障时提供额外的实例。 您可以通过设置 自动缩放 来确保有足够的实例。
后续步骤
要继续规划过程,请在 VPC 群集联网 和 Classic 群集联网 之间进行选择。 如果您已准备好开始创建群集,请首先 准备您的账户以创建群集。