일정 구성

이 페이지에서는 스케줄러 옵션과 베어메탈용 Google Distributed Cloud 소프트웨어 전용 클러스터에서 기본 포드 예약 제약 조건을 구성하는 방법을 설명합니다.

Google Distributed Cloud는 다음과 같이 포드 예약을 제어하는 데 사용할 수 있는 여러 표준 Kubernetes 기능을 제공합니다.

Kubernetes의 포드 토폴로지 분산 제약 조건에 대한 자세한 내용은 Kubernetes 스케줄러 를 참조하세요.

시작하기 전에

기본 포드 분산을 구성하기 전에 클러스터의 각 노드에 올바른 토폴로지 라벨이 있는지 확인합니다. 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 라벨이 클러스터의 모든 노드로 전파될 때까지 기다립니다.

기본 포드 분산 제약 조건 사용 설정

  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.clusterStateRunning으로 표시될 때까지 모니터링합니다. 이 프로세스 중에 각 제어 영역 노드에 대해 control-plane-update 작업이 실행됩니다.

포드 분산 구성 확인

  1. 복제본이 5개인 테스트 배포를 만듭니다.

  2. 포드 배포를 관찰합니다. nodepool-rack1nodepool-rack2의 포드 수 차이는 정확히 1이어야 합니다.

  3. 각 제어 영역 노드에서 kube-scheduler-profile.config 파일을 확인합니다. /etc/kubernetes/kube-scheduler-profile.config에 있는 파일은 cluster.spec의 토폴로지 분산 구성을 포함해야 합니다.

문제 해결

기본 포드 분산 문제를 진단하고 해결하려면 다음을 확인하세요.

  1. 기능의 상태는 BareMetalMachine.Status.ControlPlaneComponents를 검토합니다.
  2. 관련 이벤트가 있는지 cluster-operatorcap-controller-manager의 로그를 검사합니다.
  3. kube-scheduler 정적 포드가 비정상 종료되면 클러스터 YAML 파일에서 스케줄러 구성이 올바른지 확인합니다.

다음 단계