이 페이지에서는 스케줄러 옵션과 베어메탈용 Google Distributed Cloud 소프트웨어 전용 클러스터에서 기본 포드 예약 제약 조건을 구성하는 방법을 설명합니다.
Google Distributed Cloud는 다음과 같이 포드 예약을 제어하는 데 사용할 수 있는 여러 표준 Kubernetes 기능을 제공합니다.
Kubernetes의 포드 토폴로지 분산 제약 조건에 대한 자세한 내용은 Kubernetes 스케줄러 를 참조하세요.
시작하기 전에
기본 포드 분산을 구성하기 전에 클러스터의 각 노드에 올바른 토폴로지 라벨이 있는지 확인합니다. Nodepool.Spec.TaintsAndLabels API를 사용하여 라벨을 적용할 수 있습니다. kubectl label로 노드에 수동으로 라벨을 지정하면 더 많은 유연성을 제공하지만 클러스터에 새 노드를 추가할 때 수동으로 라벨을 지정해야 합니다.
기본 커스텀 스케줄러 구성 {#:config-default}
노드 라벨 지정
클러스터 및 노드 풀 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업데이트된 클러스터 구성을 적용합니다.
bmctl update cluster -c CLUSTER_NAMECLUSTER_NAME을 클러스터 이름으로 바꿉니다.topology.k8s.io/rack라벨이 클러스터의 모든 노드로 전파될 때까지 기다립니다.
기본 포드 분산 제약 조건 사용 설정
클러스터 YAML 파일에
preview.baremetal.cluster.gke.io/custom-scheduler-configuration:enable주석을 추가합니다.클러스터 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업데이트된 클러스터 구성을 적용합니다.
bmctl update cluster -c CLUSTER_NAMECLUSTER_NAME을 클러스터 이름으로 바꿉니다.클러스터 조정이 완료될 때까지 기다립니다.
cluster.status.clusterState가Running으로 표시될 때까지 모니터링합니다. 이 프로세스 중에 각 제어 영역 노드에 대해control-plane-update작업이 실행됩니다.
포드 분산 구성 확인
복제본이 5개인 테스트 배포를 만듭니다.
포드 배포를 관찰합니다.
nodepool-rack1및nodepool-rack2의 포드 수 차이는 정확히 1이어야 합니다.각 제어 영역 노드에서
kube-scheduler-profile.config파일을 확인합니다./etc/kubernetes/kube-scheduler-profile.config에 있는 파일은cluster.spec의 토폴로지 분산 구성을 포함해야 합니다.
문제 해결
기본 포드 분산 문제를 진단하고 해결하려면 다음을 확인하세요.
- 기능의 상태는
BareMetalMachine.Status.ControlPlaneComponents를 검토합니다. - 관련 이벤트가 있는지
cluster-operator및cap-controller-manager의 로그를 검사합니다. kube-scheduler정적 포드가 비정상 종료되면 클러스터 YAML 파일에서 스케줄러 구성이 올바른지 확인합니다.
다음 단계
- Kubernetes 문서에서 포드 토폴로지 분산 제약 조건 에 대해 자세히 알아보세요.
- 문제가 발생하면 Kubernetes 스케줄러 문제 해결 을 참조하세요.