Pod 部署位置

Kubernetes 中,新创建的和未计划的 pod 将自动调度到满足其要求的节点。 通过使用节点亲和性、污点和容忍度,您可以更好地控制 pod 调度到的节点。

通过节点亲和性,您可以指定约束 pod 在特定标注节点上运行的规则。 污点应用于节点以排斥 pod,而容忍度应用于 pod 以容忍污点。 要了解关于节点亲和性、污点和容忍度的详细信息,请参阅 Kubernetes 文档。 有关如何在 ArcGIS Enterprise on Kubernetes 中对 Pod 应用节点亲和性和容忍度的信息,请参阅管理 Pod 部署位置

将节点亲和性、污点和容忍度相结合,可帮助您实现对工作负载部署位置的精细控制,从而增强隔离、优化资源分配并有效满足 Kubernetes 集群中的合规性要求:

  • 隔离具有特定要求的工作负载 - 使用标注和节点亲和性规则来确保在专用节点上调度某些 pod。 使用污点将具有特定特征(如高 CPU 或内存要求)的节点标记为专用于 ArcGIS 工作负载。 在服务 pod 上应用容忍度,以确保将其调度到具有必要资源的节点上。
  • 优化资源分配 - 在资源有限的节点上应用污点以防止资源过载,并在服务 pod 上定义容忍度以匹配这些节点上的资源约束。 将节点亲和性与污点及容忍度相结合,可确保仅在能够满足其资源需求的节点上调度服务 pod。
  • 基于地理位置的安排 - 对于需要数据本地化或遵守特定法规的应用程序,可以使用节点亲和性根据节点的地理位置调度服务 pod。 根据节点的物理位置或数据主权法规对其进行污点标记,并在服务 pod 上应用容忍度以确保它们被调度到符合所需位置约束要求的节点上。

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

方案

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

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

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

  • 使用键值对 high-performance: true 为节点配置高 CPU 和内存资源。
  • 应用节点亲和性规则以确保在具有高 CPU 和内存资源的节点上调度地图 pod:
    • 类型 - 首选
    • - high-performance
    • 运算符 - Exists
    • - true
  • 应用容忍度以允许 pod 在添加了高性能工作负载污点的节点上运行,从而确保地图服务可以处理激增的流量:
    • 效果 - NoSchedule
    • - workload
    • 运算符 - Equal
    • - high-performance
  • 使用 workload=high-performance:NoSchedule 为高性能节点设置污点。

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

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

  • 使用键值对 gpu: true 配置启用 GPU 的节点。
  • 应用节点亲和性规则以在 GPU 节点上调度分析 pod:
    • 类型 - 必选
    • - gpu
    • 运算符 - In
    • - true
  • 应用容忍度以允许 pod 在已添加污点的 GPU 节点上运行:
    • 效果 - NoSchedule
    • - workload
    • 运算符 - Equal
    • - high-resource
  • 使用 workload=high-resource:NoSchedule 为 GPU 节点添加污点,以防止在该处调度资源密集程度较低的 pod。

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

某城市的 GIS 部门有许多要素服务,这些服务并没有被大量使用,但却共同承担着单个服务部署。 为了使部门能够在不使系统过载的情况下维护服务可用性,组织管理员:

  • 使用键 resource-constrained 配置节点。
  • 在资源可用性较低的节点上应用节点亲和性规则以确定调度优先级:
    • 类型 - 首选
    • - resource-constrained
    • 运算符 - DoesNotExist
  • 对要素服务 pod 应用容忍度,以确保它们可以在有污点的节点上调度(尽管存在约束):
    • 效果 - PreferNoSchedule
    • - resource-constrained
    • 运算符 - Exists
  • 使用 resource-constrained:PreferNoSchedule 为资源受限的节点添加污点。

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

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

  • 为数据存储 Pod 创建单独的节点组,并为每个节点标注 data-store: true 键值对。
  • 应用节点亲和性规则以确保数据存储 Pod 调度到此组中的节点上
    • 类型 - 必选
    • - data-store
    • 运算符 - In
    • - true
  • 应用容忍度以允许数据存储 Pod 在已设置污点的数据存储节点上运行:
    • 效果 - NoSchedule
    • - workload
    • 运算符 - Equal
    • - data-store
  • 使用 workload=data-store:NoSchedule 为数据存储节点设置污点。
  • 夜间缩减集群节点时请勿缩减数据存储节点群组。

在本主题中
  1. 方案