Skip to main content

Pod 部署位置

在 Kubernetes 中,新创建的和未调度的 pod 将自动调度到满足其要求的节点上。 当集群中存在不同类型的节点时,对 pod 被调度到的节点进行控制可能非常重要。 可使用四个工具控制 pod 部署位置:

  • 节点标注被应用于节点,以指定有关节点的信息。 标注可以是键或键/值对。

  • 节点亲和性被应用于 pod,以限制该 pod 在具有指定标注的节点上运行。

  • 污点被应用于节点,以防在该节点上调度 pod。

  • 容忍度被应用于 pod,以允许该 pod 忽略指定污点。

要了解关于节点标注、节点亲和性、污点和容忍度的详细信息,请参阅 Kubernetes 文档。 有关在 ArcGIS Enterprise on Kubernetes 中对 pod 应用节点亲和性和容忍度的信息,请参阅管理 pod 部署位置。

优势

节点标注和节点亲和性确保在相应节点上调度 pod。 污点和容忍度确保仅在节点上调度适当的 pod。 将它们结合使用,有助于提高隔离性,优化资源分配,并有效满足 Kubernetes 集群内的合规要求:

  • 隔离具有特定要求的工作负载 - 使用标注和节点亲和性规则来确保在专用节点上调度某些 pod。 使用污点将具有特定特征(如高 CPU 或内存要求)的节点标记为专用于 ArcGIS 工作负载。 在服务 pod 上应用容忍度,以确保将其调度到具有必要资源的节点上。

  • 优化资源分配 - 在资源有限的节点上应用污点以防止资源过载,并在服务 pod 上定义容忍度以匹配这些节点上的资源约束。 将节点亲和性与污点及容忍度相结合,可确保仅在能够满足其资源需求的节点上调度服务 pod。

  • 基于地理位置的安排 - 对于需要数据本地化或遵守特定法规的应用程序,可以使用节点亲和性根据节点的地理位置调度服务 pod。 根据节点的物理位置或数据主权法规对其进行污点标记,并在服务 pod 上应用容忍度以确保它们被调度到符合所需位置约束要求的节点上。

自动扩缩可根据工作负载需求动态调整 pod 数量,增强了节点亲和性和容忍度的使用。 这种动态扩缩可确保在满足特定要求或具有必要可用资源的节点上高效地调度 pod,从而优化资源分配。 通过将自动扩缩容与节点亲和性及容忍度相结合,Kubernetes 集群能够在适应工作负载波动的同时遵守节点约束和偏好,从而实现更高的资源利用率、性能和可扩展性。 有关自动扩缩的详细信息,请参阅服务扩缩。

管理 Pod 部署位置

建议在节点亲和性之前应用节点标注。 这样可以防止 pod 因节点尚未获得匹配标注而卡在待处理状态。 同样,建议在为节点设置污点之前应用容忍度。 这样可以确保您不会无意中驱逐尚未配置相应容忍度的 pod,从而导致服务中断。

在大多数环境中,可以使用节点池或节点组对工作负载进行分组。 建议您将标注和污点应用于节点组,而非单个节点。

在 ArcGIS Enterprise on Kubernetes 中,您可以使用 ArcGIS Enterprise Manager 为以下部署设置节点亲和性和容忍度:

节点亲和性配置

要配置节点亲和性规则,请设置以下值:

  • 类型 - 节点亲和性类型。 以下是可用的类型:

    • 首选 (PreferredDuringSchedulingIgnoredDuringExecution) - 该 pod 优先调度在满足规则要求的节点上。

    • 必选 (RequiredDuringSchedulingIgnoredDuringExecution) - 该 pod 必须调度在满足规则要求的节点上。

  • 键 - 规则应该符合的节点标注或注记的键。

  • 运算符 - 规则的运算符。 以下是可用的运算符:

    • 位于 - 节点标注或注记必须位于指定的值列表中。

    • 不位于 - 节点标注或注记不得位于指定的值列表中。

    • 存在 - 节点必须具有指定标注或注记。

    • 不存在 - 节点不得具有指定标注或注记。

  • 值 - 用于与节点标注或注记匹配的值列表。 当选择存在或不存在运算符时不可用。

容忍度配置

要配置容忍度,请设置以下值:

  • 效果 - 容忍度应匹配的污点效果。 以下是可用的效果:

    • 无计划 - 没有匹配容忍度的新 pod 无法调度到带有污点的节点上。

    • 无计划优先 - 没有匹配容忍度的新 pod 会尽量避免被调度到带有污点的节点,但不能完全保证。

    • 不执行 - 在节点被添加污点后,任何容忍度不匹配的 pod 都会立即被驱逐。 容忍度不匹配的新 pod 无法调度到带有污点的节点上。

  • 键 - 容忍度应匹配的污点的键。

  • 运算符 - 用于容忍度的运算符。 以下是可用的运算符:

    • 等于 - Pod 可容忍具有指定键值的污点。

    • 存在 - Pod 可容忍任意具有指定键的污点。

  • 值 - 当运算设置为等于时,容忍度应匹配的污点值。 当选择存在运算符时不可用。

注:

栅格分析和笔记本服务工作负载(需运行支持 GPU 的节点)需要特定的节点亲和性和容忍度设置。 有关这些设置的详细信息,请参阅为栅格分析工作负载配置支持 GPU 的节点和为笔记本服务工作负载查看和编辑运行时。

场景

要更好地了解管理服务上的 pod 部署位置如何使您的组织受益,请查看以下场景。

场景 1:公共制图服务的季节性流量激增

某公共组织在当地节日期间经历了显著的流量增长。 因对底层地图服务的高需求,用户在访问用于获取活动信息的 Web 地图时遇到了延迟问题。 为解决此问题,组织管理员执行了以下操作:

  • 将键/值标注 high-performance: true 添加至具有高 CPU 和内存资源的节点。

  • 应用节点亲和性规则,以优先在具有高 CPU 和内存资源的节点上调度地图服务 pod。 这确保了地图服务能够应对流量激增:

    • 类型 - 首选

    • 键 - high-performance

    • 运算符 - Exists

    • 值 - true

  • 对关键地图服务的 pod 应用容忍度,允许它们在为高性能工作负载设置了污点的节点上进行调度。

    • 效果 - NoSchedule

    • 键 - workload

    • 运算符 - Equal

    • 值 - high-performance

  • 为 workload=high-performance:NoSchedule 的高性能节点设置污点,以防在节点上调度没有匹配容忍度的不太重要 pod。 这确保高性能节点有空间为事件相关服务调度 pod。

场景 2:用于环境监测的数据处理

某环境机构正在进行一系列地理空间分析,以监测土地使用的变化。 该分析需要大量的计算资源,并且该机构具有包含用于此目的的 GPU 的专用节点。 为确保地理空间分析有效运行而不与其他服务争夺资源,组织管理员:

  • 将键/值标注 gpu: true 添加至启用 GPU 的节点。

  • 应用节点亲和性规则以仅在 GPU 节点上调度分析 pod:

    • 类型 - 必选

    • 键 - gpu

    • 运算符 - In

    • 值 - true

  • 对分析 pod 应用容忍度,以允许在具有污点的 GPU 节点上调度它们:

    • 效果 - NoSchedule

    • 键 - workload

    • 运算符 - Equal

    • 值 - high-resource

  • 为 workload=high-resource:NoSchedule 的 GPU 节点设置污点,以防止在该节点上调度没有匹配容忍度的资源密集程度较低的 pod。 这确保了启用 GPU 的昂贵设备仅用于需要它们的分析 pod。

场景 3:共享要素服务的资源优化

某城市的 GIS 部门有许多要素服务,这些服务并没有被大量使用,但却共同承担着单个服务部署。 集群包含高级节点以确保高优先级服务获得有保证的服务质量,以及资源可用性较低的节点用于低优先级服务。 为了确保这些低优先级要素服务优先调度到成本较低的节点,组织管理员需要执行以下操作:

  • 使用键 resource-constrained 配置资源可用性较低的节点。

  • 向要素服务 pod 应用节点亲和性规则,以优先在资源可用性较低的节点上调度:

    • 类型 - 首选

    • 键 - resource-constrained

    • 运算符 - DoesNotExist

  • 对要素服务 pod 应用容忍度,以确保它们可以在有污点的节点上调度(尽管存在约束):

    • 效果 - PreferNoSchedule

    • 键 - resource-constrained

    • 运算符 - Exists

  • 使用 resource-constrained:PreferNoSchedule 为资源可用性较低的节点设置污点。

场景 4:集群扩缩过程中防止数据存储中断

某国政府使用了一套服务使用模式,该模式中服务在白天时段处于使用量高峰。 该模式需要大量集群节点,以支持这些服务所需的全部 Pod 复本。 由于夜间服务不再使用,组织想要缩减节点数量以降低云计算成本。 然而,终止正在运行有状态系统管理的数据存储 Pod 的节点会造成 ArcGIS Enterprise 中断的风险。 要防止此潜在中断风险,组织管理员需要:

  • 创建一个独立的节点组。

  • 向组中的每个节点添加键/值标注 data-store: true。

  • 应用节点亲和性规则以确保数据存储 Pod 调度到此组中的节点上

    • 类型 - 必选

    • 键 - data-store

    • 运算符 - In

    • 值 - true

  • 对有状态数据存储 pod 应用容忍度,允许其在具有污点的数据存储节点上运行:

    • 效果 - NoSchedule

    • 键 - workload

    • 运算符 - Equal

    • 值 - data-store

  • 使用 workload=data-store:NoSchedule 为数据存储节点设置污点,以防在节点上调度无匹配容忍度的无状态 pod。 这确保了数据存储节点上有空间调度所有有状态数据存储 pod。

  • 夜间缩减集群节点时请勿缩减数据存储节点群组。 由于所有有状态数据存储 pod 都属于该节点组,因此它们不会受到缩小其他节点组的影响。