使用调度功能将节点分配给数据库集群

AlloyDB Omni Kubernetes Operator 中,调度是将新的数据库 Pod 与节点进行匹配的过程,用于平衡集群中的节点分布并帮助优化性能。Pod 和节点是根据多种条件和可用资源(例如 CPU 和内存)进行匹配的。

如需详细了解调度,请参阅 Kubernetes 文档中的调度、抢占和驱逐

本页介绍了如何在 Kubernetes 清单中为主存储空间实例和读取存储空间实例指定容忍度和节点亲和性调度配置。

如需了解如何在节点上定义污点,请参阅 Kubernetes 文档中的污点和容忍

指定容忍

如需将 AlloyDB Omni Pod 调度到没有其他应用 Pod 的节点,或与这些节点上定义的特定污点匹配,请按如下方式向这些节点应用一个或多个容忍:

  1. 修改 AlloyDB Omni Kubernetes Operator 集群的清单,在以下任一部分的 schedulingConfig 部分中添加 tolerations 部分:
    • primarySpec(适用于主实例)
    • spec(适用于读取池实例)
         tolerations:
          - key: "TAINT_KEY"
            operator: "OPERATOR_VALUE"
            value: "VALUE"
            effect: "TAINT_EFFECT"
       

    替换以下内容:

    • TAINT_KEY:污点键的现有唯一名称,例如节点的主机名或容忍度应用到的其他本地推断值。节点上已定义污染键。空字段和设置为 existsOPERATOR_VALUE 表示容差必须与所有值和所有键匹配。
    • OPERATOR_VALUE:表示键与一组值的关系。将该参数设置为以下任一项:
      • exists:如果定义了污点,无论污点的值如何,Kubernetes 都会与任何值匹配。
      • equal:如果值不同,Kubernetes 不会将 Pod 调度到节点。该运算符需要污点 true 值。
    • VALUE:容忍度匹配的污点值。如果运算符为“存在”,则值为空,否则为常规字符串。例如 true
    • TAINT_EFFECT:表示要匹配的污染影响。空字段表示必须匹配所有污染影响。将该参数设置为以下任一项:
      • NoSchedule:Kubernetes 不会在已污染的节点上调度新的 Pod。
      • PreferNoSchedule:除非必要,否则 Kubernetes 会避免将新 Pod 放置在污点节点上。
      • NoExecute:Kubernetes 会驱逐不能容忍污点的现有 Pod。
  2. 重新应用清单。

定义节点亲和性

Kubernetes 调度器使用节点亲和性作为一组规则来确定将 Pod 放置在何处。节点亲和性是节点选择器的一种更灵活、更具表现力的版本。

如需指定必须安排哪些节点运行数据库,请按以下步骤操作:

  1. 修改数据库集群清单,在主实例的 primarySpec 或读取池实例的 specschedulingConfig 部分的 tolerations 部分后面添加 nodeaffinity 部分:
          nodeaffinity:
             NODE_AFFINITY_TYPE:
             - weight: WAIT_VALUE
               preference:
                 matchExpressions:
                 - key: LABEL_KEY
                   operator: OPERATOR_VALUE
                   values:
                   - LABEL_KEY_VALUE
        

    替换以下内容:

    • NODE_AFFINITY_TYPE:将该参数设置为以下某一项:
      • requiredDuringSchedulingIgnoredDuringExecution:Kubernetes 会完全根据定义的规则调度 Pod。
      • preferredDuringSchedulingIgnoredDuringExecution:Kubernetes 调度器会尝试找到符合所定义调度规则的节点。不过,如果没有这样的节点,Kubernetes 会将 Pod 调度到集群中的其他节点。
    • WAIT_VALUE:表示指定节点的偏好权重。值越高,偏好程度越高。有效值介于 1100 之间。
    • LABEL_KEY:节点的键标签,该键用作位置指示器,有助于在集群中均匀分布 Pod。例如 disktype=ssd
    • OPERATOR_VALUE:表示键与一组值的关系。将该参数设置为以下任一项:
      • In:值数组不得为空。
      • NotIn:值数组不得为空。
      • Exists:值数组必须为空。
      • DoesNotExist:值数组必须为空。
      • Gt:值数组必须包含一个元素,该元素会被解读为整数。
      • Lt:值数组必须包含一个元素,该元素会被解读为整数。
    • LABEL_KEY_VALUE:标签键的值。将该参数设置为字符串值数组,如下所示:
      • 如果运算符为 InNotIn,则值数组不得为空。
      • 如果运算符为 ExistsDoesNotExist,则值数组必须为空。
      • 如果运算符为 GtLt,则值数组必须包含一个元素,该元素会被解读为整数。
  2. 重新应用清单。

示例

以下示例展示了如何在 AlloyDB Omni Kubernetes Operator 主实例和读取池实例中调度 Pod。这种调度设置有助于确保数据库集群的主实例在适当的节点上调度,同时在节点选择方面提供一定的灵活性。这种灵活性对于平衡负载、优化资源使用情况或遵循特定节点角色和特性非常有用。

    schedulingconfig:
      tolerations:
      - key: "node-role.kubernetes.io/control-plane"
        operator: "Exists"
        effect: "NoSchedule"
      nodeaffinity:
        preferredDuringSchedulingIgnoredDuringExecution:
        - weight: 1
          preference:
            matchExpressions:
            - key: another-node-label-key
              operator: In
              values:
              - another-node-label-value

由于以下详细信息,示例容忍设置允许将 Pod 调度到标记为控制平面节点的节点上:

  • node-role.kubernetes.io/control-plane 污染键表示节点具有控制平面节点。
  • Exists 运算符表示容忍性与指定污染键的任何污染都匹配,无论值如何。
  • NoSchedule 效果意味着,除非 Pod 具有匹配的容忍设置,否则不会在控制平面节点上调度。

preferredDuringSchedulingIgnoredDuringExecution 节点亲和性类型指定为节点亲和性定义的规则是首选规则,但在调度期间不是必需的。如果首选节点不可用,Pod 可能仍会被调度到其他节点上。1 权重值表示偏好度较弱。节点选择条件在 preference 部分中定义。matchExpressions 部分包含用于匹配节点的表达式数组。another-node-label-key 键表示要匹配的节点标签的键。In 运算符表示节点必须具有值为指定值之一的键。another-node-label-key 键必须具有 another-node-label-value 值。

示例节点亲和性规则表明,系统会优先将 pod 调度到具有 another-node-label-value 值的 another-node-label-key 标签的节点上。此偏好设置不强制要求,因此不是强制性要求。

该示例结合了以下内容:

  • 容错机制,用于通过容忍 NoSchedule 污点来允许将 Pod 调度到控制平面节点上。
  • 一种节点亲和性,它会优先选择具有特定标签的节点,但并不严格要求必须具有该标签;因此,它在调度方面提供了灵活性。

后续步骤