配置调度

本页面介绍了调度器选项以及如何在 Google Distributed Cloud 软件(仅限裸机集群)中配置默认 Pod 调度限制条件。

Google Distributed Cloud 提供了许多标准 Kubernetes 功能,您可以使用这些功能来控制调度 Pod,例如:

如需了解 Kubernetes 中的 Pod 拓扑分布限制,请参阅 Kubernetes 文档中的 Kubernetes 调度器。

准备工作

在配置默认 Pod 分布之前,请确保集群中的每个节点都具有正确的拓扑标签。您可以使用 Nodepool.Spec.TaintsAndLabels API 应用标签。使用 kubectl label 手动为节点加标签可提供更大的灵活性,但在向集群添加新节点时需要手动加标签。

配置默认自定义调度器 {#:config-default}

为节点添加标签

  1. 将拓扑标签添加到集群和节点池 YAML 文件中。以下示例假设两个工作器节点池位于不同的机架中,并且控制平面节点位于 rack1 中。

    apiVersion: baremetal.cluster.gke.io/v1
    kind: Cluster
    metadata:
      name: abm-cluster
      namespace: cluster-abm-cluster
    spec:
      controlPlane:
        nodePoolSpec:
          labels:
            topology.k8s.io/rack: rack1
    ---
    apiVersion: baremetal.cluster.gke.io/v1
    kind: NodePool
    metadata:
      name: nodepool-rack1
      namespace: cluster-abm-cluster
    spec:
      labels:
        topology.k8s.io/rack: rack1
    ---
    apiVersion: baremetal.cluster.gke.io/v1
    kind: NodePool
    metadata:
      name: nodepool-rack2
      namespace: cluster-abm-cluster
    spec:
      labels:
        topology.k8s.io/rack: rack2
    
  2. 应用更新后的集群配置。

    bmctl update cluster -c CLUSTER_NAME
    

    将 CLUSTER_NAME 替换为您的集群名称。

  3. 等待 topology.k8s.io/rack 标签传播到集群中的所有节点。

启用默认 Pod 分布限制条件

  1. 向集群 YAML 文件添加 preview.baremetal.cluster.gke.io/custom-scheduler-configuration:enable 注解。

  2. 在集群 YAML 文件中的 cluster.spec.controlPlane 下添加 schedulerConfiguration 部分。

    apiVersion: baremetal.cluster.gke.io/v1
    kind: Cluster
    metadata:
      name: abm-cluster
      namespace: cluster-abm-cluster
      annotations:
        preview.baremetal.cluster.gke.io/custom-scheduler-configuration: enable
    spec:
      controlPlane:
        schedulerConfiguration:
          defaultTopologySpreadConstraint:
            defaultConstraints:
            - topologyKey: topology.k8s.io/rack
              whenUnsatisfiable: DoNotSchedule
              maxSkew: 1
            defaultingType: List
    
  3. 应用更新后的集群配置。

    bmctl update cluster -c CLUSTER_NAME
    

    将 CLUSTER_NAME 替换为您的集群名称。

  4. 等待集群协调完成。监控 cluster.status.clusterState,直到其显示 Running。在此过程中,系统会为每个控制平面节点运行一个 control-plane-update 作业。

验证 Pod 分布配置

  1. 创建一个包含五个副本的测试部署。

  2. 观察 Pod 分布。nodepool-rack1 和 nodepool-rack2 上的 Pod 数量之差应恰好为 1。

  3. 验证每个控制平面节点上的 kube-scheduler-profile.config 文件。 该文件位于 /etc/kubernetes/kube-scheduler-profile.config,必须包含 cluster.spec 中的拓扑分布配置。

问题排查

如需诊断和解决默认 Pod 分布问题,请检查以下各项:

  1. 查看 BareMetalMachine.Status.ControlPlaneComponents,了解该功能的状态。
  2. 检查 cluster-operator 和 cap-controller-manager 中的日志,查找相关事件。
  3. 如果 kube-scheduler 静态 Pod 崩溃,请检查集群 YAML 文件中的调度器配置是否正确。

后续步骤