注意:
- 本教程需要访问 Oracle Cloud。要注册免费账户,请参阅开始使用 Oracle Cloud Infrastructure 免费套餐。
- 它对 Oracle Cloud Infrastructure 身份证明、租户和区间使用示例值。完成实验室后,请使用特定于云环境的那些值替换这些值。
管理具有不同容量类型的 OCI Kubernetes 引擎并解决可抢占节点上的常见问题
简介
随着我们持续经历数字化转型的每个周期,企业将继续创新和迭代,推动大规模基础设施、应用和管理的边界。Kubernetes 是用于支持基础设施和应用管理的最新且广泛采用的技术之一。在进一步深入了解 Kubernetes 之前,我们必须首先从容器的概念来看待。
容器是一个软件包,包括一组特定于应用程序的代码以及必要的运行时和程序库,以支持应用程序的可靠执行。容器配置为在底层服务器的操作系统 (Operating System,OS) 中的用户空间内运行。通过此架构,可以对轻量级应用部署的核心服务和依赖项进行分离。应用容器化的好处包括改进工作负载隔离、资源效率、可扩展性和容错能力。
为了大规模利用容器的强大功能和效率,我们需要某种工具来接口或管理基于容器的部署。Kubernetes(也称为 K8s)是一种开源容器编排工具,通过创建可以运行、扩展和交付容器的服务器集群来自动执行容器部署。Kubernetes 集群体系结构包括一个主节点(控制层)和多个 worker 节点。每个 Worker 都会托管一个 pod/s(容器集合),以提供您的应用。
目标
- 使用 Oracle Cloud Infrastructure Kubernetes Engine(OCI Kubernetes Engine 或 OKE)处理不同容量类型,并解决可抢占的常见问题。
先决条件
- 管理员可以访问正在运行的 OCI 租户和 OKE 集群。
Oracle 如何看待容器技术?
OKE 是完全托管、可扩展的高可用性 Kubernetes 服务,可帮助客户将容器化应用部署到云中。OKE 让 OCI 客户能够优化计算资源利用率,以满足独特的工作负载要求,并随着工作负载需求的变化而快速适应。OKE 提供无缝的客户体验,为客户提供无与伦比的性价比、资源效率、可移植性和可靠性。OKE 提供与各种容器生命周期管理产品(包括容器注册表、CI/CD 框架、网络解决方案、存储选件和一流的安全功能)的多项关键集成。
在 OKE 中,您可以将群集类型指定为基本群集或增强群集。基本群集支持 OKE 提供的所有核心功能。为了实现更多功能,增强型集群支持所有可用功能,包括虚拟节点、自托管节点、集群附加管理、更细粒度的 Oracle Cloud Infrastructure Identity and Access Management (OCI IAM) 配置等。
不同容量类型的 OKE
-
按需容量:按需容量是给定配置类型的标准可用容量。这是默认容量类型,实际上是为您使用的容量付费。虽然这是标准选择,但根据配置类型和时间,对于大型多实例工作负载,执行这些请求可能会有困难。
-
预留容量:容量预留可用于预配 OKE 受管节点。容量预留通常用于确保在生产影响事件(包括计划维护、用户需求增长和灾难恢复)期间为关键业务工作负载提供足够的可用容量。容量预留产生的成本是 SKU 标价的 85%,而预留资源未被有效使用。要利用容量预留,必须先创建容量预留对象并指定区域/可用性域以及配置类型和大小。创建容量预留后,您可以在节点池中部署节点时将特定预留指定为容量类型。
-
可抢占容量: OKE 托管节点现在可以预配抢占式计算配置。可抢占配置可以节约成本(SKU 定价为 50% 的折扣),但如果/当需要更高优先级的需求,Oracle 仍有权回收这些计算资源。如果您具有可承受中断的无状态容错工作负载,则抢占式计算是一个不错的选择。为了提高可见性,您可以选择在部署抢占式计算时终止实例时收到通知。在 OKE 集群中,节点池预期状态将尝试启动新实例以替换回收的实例。
具有可抢占节点池和 OnDemand 节点池的 OKE 部署
可抢占的已知问题
对 OKE 使用可抢占项时,存在一些已知问题。
-
问题:某些客户会收到错误 NonRetryable BmcException:计算服务中的 LaunchInstance 操作返回了错误。(400,InvalidParameter,false) 在创建 E3/E4 抢占配置时无法启动具有容量预留 ID 的抢占实例。
- 解决方法:存在一个已知的 OKE bug,其中包含空的
<capacityreservationId>
和可抢占 worker 节点。如果在通过 Oracle Cloud Infrastructure 命令行界面 (OCI CLI) 或 terraform 创建节点池时尝试使用可抢占容量,但未将<capacityReservationId>
参数作为放置配置部分的一部分传递,则可以创建可抢占 worker 节点。但是,如果通过控制台创建节点池,默认情况下会传递一个空的<capacityReservationId>
,这将在尝试使用可抢占配置时引发错误。解决方法是在放置配置中显式将<capacityReservationId>
设置为空值。
- 解决方法:存在一个已知的 OKE bug,其中包含空的
-
问题:当您使用两个节点池(一个使用抢占,另一个使用按需)并将基于优先级的扩展器用于自动缩放器时。将可抢占节点池配置为最高优先级的按需节点池,如果可抢占节点池由于具有可抢占容量的 OutOfHostCapacity 错误而显示不健康,则设置为使用该池。在某些情况下,即使可抢占节点池具有 0 个节点,群集自动缩放器也不会回退到按需节点池。
- 解决方法:此设置将起作用,但仅当两个节点池各自至少具有 1 个节点时才起作用。
-
问题:通过控制台在 OKE 预配向导中选择可抢占的容量时,可用的 AMD 配置限制为 E3 和 E4。此处未显示 E5;但是,OKE 支持 E5 可抢占容量。
-
解决方法:使用 API 或 CLI 创建具有可抢占 E5 配置的托管节点池。
--node-shape VM.Standard.E5.Flex
-
任务 1:使用命令行界面 (Command Line Interface,CLI) 创建 E5 Preemptible OKE Worker Nodepool 的步骤
-
登录到 OCI 控制台,然后单击服务菜单。
-
导航到开发人员服务。
-
在容器和对象下,单击单击 Kubernetes 引擎 (OKE) 。
-
单击 OCI Cloud shell 以显示 CLI。
-
在租户中运行以下 CLI 命令之前,请编辑
node-pool
OCID、compartment
OCID、subnet-id
、fault domain
、配置和大小。oci ce node-pool create --cluster-id ocid1.cluster.oc1.iad.aaaaaaaaxlokvt2r25b6dmdxxxxxxxxxxxxxxxxxkhdilj7kpehc5vke2ve5gq --compartment-id ocid1.compartment.oc1..aaaaaaaaqufgrkgzr4zb3dxxxxxxxxxxxxxxxxxxp7jx7yckglghxppfrui6a --name E5_Preemtible --node-shape VM.Standard.E5.Flex --placement-configs '[{"availabilityDomain": "FZyT:US-ASHBURN-AD-2", "preemptibleNodeConfig": {"preemptionAction":{"isPreserveBootVolume":true, "type": "TERMINATE"}}, "subnet-id": "ocid1.subnet.oc1.iad.aaaaaaaapmekowq4rqhu72xxxxxxxxxxxxxxxxxxxxtlkp4dmixebzhgrwdlmtteclq", "faultDomains":["FAULT-DOMAIN-1"]}]' --size 1 --node-image-id ocid1.image.oc1.iad.aaaaaaaajvtta4i5sq4xxxxxxxxxxxxxcskfxjwz4vwxz6ersmmax6q --node-shape-config '{"memoryInGBs": 6.0, "ocpus": 1.0}' --pod-subnet-ids '["ocid1.subnet.oc1.iad.aaaaaaaapmekowq4rqhxxxxxxxxxxxxxxxkp4dmixebzhgrwdlmtteclq"]'
这将输出用于创建节点池的工作请求的 OCID,并在现有集群中创建 E5 可抢占 worker 节点,如下图中所示。
相关链接
确认
- Authors — Payal Sharma(高级企业云架构师)、Anthony Vernava IV(高级企业云架构师)
更多学习资源
浏览 docs.oracle.com/learn 上的其他实验室,或者访问 Oracle Learning YouTube 渠道上的更多免费学习内容。此外,请访问 education.oracle.com/learning-explorer 成为 Oracle Learning Explorer。
有关产品文档,请访问 Oracle 帮助中心。
Manage OCI Kubernetes Engine with Different Capacity Types and Resolve Common Issues on Preemptible Nodes
G19917-01
November 2024