搜索

4.8. 使用 pod 拓扑分布限制控制 pod 放置

download PDF

您可以使用 pod 拓扑分布约束来控制 pod 在节点、区、区域或其他用户定义的拓扑域间的放置。

4.8.1. 关于 pod 拓扑分布限制

通过使用 pod 拓扑分布约束,您可以对故障域中的 pod 分布提供精细的控制,以帮助实现高可用性和更有效的资源使用。

OpenShift Container Platform 管理员可以标记节点以提供拓扑信息,如区域、区、节点或其他用户定义域。在节点上设置了这些标签后,用户才能定义 pod 拓扑分布约束,以控制 pod 在这些拓扑域中的放置。

您可以指定哪些 pod 要分组在一起,它们分散到哪些拓扑域以及可以接受的基点。只有同一命名空间中的 pod 在因为约束而分散时才会被匹配和分组。

4.8.2. 配置 pod 拓扑分布限制

以下步骤演示了如何配置 pod 拓扑扩展约束,以根据区分配与指定标签匹配的 pod。

您可以指定多个 pod 拓扑分散约束,但您必须确保它们不会相互冲突。必须满足所有 pod 拓扑分布约束才能放置 pod。

先决条件

  • 集群管理员已将所需的标签添加到节点。

流程

  1. 创建 Pod spec 并指定 pod 拓扑分散约束:

    pod-spec.yaml 文件示例

    apiVersion: v1
    kind: Pod
    metadata:
      name: my-pod
      labels:
        region: us-east
    spec:
      topologySpreadConstraints:
      - maxSkew: 1 1
        topologyKey: topology.kubernetes.io/zone 2
        whenUnsatisfiable: DoNotSchedule 3
        labelSelector: 4
          matchLabels:
            region: us-east 5
      containers:
      - image: "docker.io/ocpqe/hello-pod"
        name: hello-pod

    1
    两个拓扑域间的 pod 数量的最大差别。默认为 1,您不能指定 0 值。
    2
    节点标签的密钥。具有此键和相同值的节点被视为在同一拓扑中。
    3
    如果不满足分布式约束,如何处理 pod。默认为 DoNotSchedule,它会告诉调度程序不要调度 pod。设置为 ScheduleAnyway,它仍然会调度 pod,但调度程序会优先考虑 skew 的根据情况以使集群不要出现不平衡的情况。
    4
    匹配此标签选择器的 Pod 在分发时被计算并识别为组,以满足约束要求。确保指定标签选择器,否则就无法匹配 pod。
    5
    如果您希望以后正确计数此 Pod 规格,请确保此 Pod spec 也会设置其标签选择器来匹配这个标签选择器。
  2. 创建 pod:

    $ oc create -f pod-spec.yaml

4.8.3. pod 拓扑分布限制示例

以下示例演示了 pod 拓扑分散约束配置。

4.8.3.1. 单个 pod 拓扑分布约束示例

Pod spec 示例定义了一个 pod 拓扑分散约束。它与标记为 region: us-east 的 pod 匹配:在区域间分布,指定 skew 1,并在不满足这些要求时不调度 pod。

kind: Pod
apiVersion: v1
metadata:
  name: my-pod
  labels:
    region: us-east
spec:
  topologySpreadConstraints:
  - maxSkew: 1
    topologyKey: topology.kubernetes.io/zone
    whenUnsatisfiable: DoNotSchedule
    labelSelector:
      matchLabels:
        region: us-east
  containers:
  - image: "docker.io/ocpqe/hello-pod"
    name: hello-pod

4.8.3.2. 多个 pod 拓扑分布约束示例

Pod spec 示例定义了两个 pod 拓扑分布限制。在标有 region: us-east 的 pod 上匹配:指定 skew 1,并在不满足这些要求时不调度 pod。

第一个限制基于用户定义的标签 node 发布 pod,第二个约束根据用户定义的标签 rack 分发 pod。调度 pod 必须满足这两个限制。

kind: Pod
apiVersion: v1
metadata:
  name: my-pod-2
  labels:
    region: us-east
spec:
  topologySpreadConstraints:
  - maxSkew: 1
    topologyKey: node
    whenUnsatisfiable: DoNotSchedule
    labelSelector:
      matchLabels:
        region: us-east
  - maxSkew: 1
    topologyKey: rack
    whenUnsatisfiable: DoNotSchedule
    labelSelector:
      matchLabels:
        region: us-east
  containers:
  - image: "docker.io/ocpqe/hello-pod"
    name: hello-pod

4.8.4. 其他资源

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.