예약을 사용하여 노드에 데이터베이스 클러스터 할당

문서 버전을 선택합니다.

AlloyDB Omni Kubernetes 연산자에서 예약은 클러스터 전반에서 노드 분포의 균형을 맞추고 성능을 최적화하는 데 도움이 되도록 새 데이터베이스 포드를 노드에 매칭하는 프로세스입니다. 포드와 노드는 CPU 및 메모리와 같은 여러 기준과 사용 가능한 리소스를 기반으로 일치됩니다.

예약에 관한 자세한 내용은 Kubernetes 문서의 예약, 선점, 제거를 참고하세요.

이 페이지에서는 Kubernetes 매니페스트에서 기본 및 읽기 풀 인스턴스의 톨러레이션, 노드 어피니티, 토폴로지 분산 제약 조건 예약 구성을 지정하는 방법을 보여줍니다.

노드에서 taint를 정의하는 방법에 관한 자세한 내용은 Kubernetes 문서의 taint 및 톨러레이션(toleration)을 참고하세요.

톨러레이션(toleration) 지정

다른 애플리케이션 포드가 없거나 해당 노드에 정의된 특정 taint와 일치하는 노드에 AlloyDB Omni 포드를 예약하려면 다음과 같이 노드에 하나 이상의 톨러레이션(toleration)을 적용합니다.

  1. 다음 섹션 중 하나의 schedulingConfig 섹션에 tolerations 섹션을 포함하도록 AlloyDB Omni Kubernetes 연산자 클러스터의 매니페스트를 수정합니다.
    • 기본 인스턴스의 경우 primarySpec
    • 읽기 풀 인스턴스의 경우 spec
         tolerations:
          - key: "TAINT_KEY"
            operator: "OPERATOR_VALUE"
            value: "VALUE"
            effect: "TAINT_EFFECT"
       

    다음을 바꿉니다.

    • TAINT_KEY: 노드의 호스트 이름 또는 톨러레이션(toleration)이 적용되는 로컬에서 추론된 다른 값과 같은 taint 키의 기존 고유한 이름입니다. 노드에 이미 taint 키가 정의되어 있습니다. 빈 필드와 OPERATOR_VALUEexists로 설정된 경우 톨러레이션(toleration)이 모든 값과 모든 키와 일치해야 함을 나타냅니다.
    • OPERATOR_VALUE: 키와 값 집합의 관계를 나타냅니다. 파라미터를 다음 중 하나로 설정합니다.
      • exists: Kubernetes는 taint의 값과 관계없이 taint가 정의된 경우 모든 값과 일치합니다.
      • equal: 값이 다른 경우 Kubernetes는 포드를 노드에 예약하지 않습니다. 이 연산자에는 taint true 값이 필요합니다.
    • VALUE: 톨러레이션(toleration)이 일치할 taint 값입니다. 연산자가 Exists인 경우 값은 비어 있고, 그렇지 않으면 일반 문자열입니다. 예를 들면 true입니다.
    • TAINT_EFFECT: 일치할 taint 효과를 나타냅니다. 빈 필드는 모든 taint 효과가 일치해야 함을 나타냅니다. 파라미터를 다음 중 하나로 설정합니다.
      • NoSchedule: Kubernetes는 taint가 적용된 노드에 새 포드를 예약하지 않습니다.
      • PreferNoSchedule: Kubernetes는 필요한 경우가 아니라면 taint가 적용된 노드에 새 포드를 배치하지 않습니다.
      • NoExecute: Kubernetes는 taint를 허용하지 않는 기존 Pod를 제거합니다.
  2. 매니페스트를 다시 적용합니다.

노드 어피니티 정의

Kubernetes 스케줄러는 노드 어피니티를 일련의 규칙으로 사용하여 포드를 배치할 위치를 결정합니다. 노드 어피니티는 노드 선택기의 더 유연하고 표현력이 뛰어난 버전입니다.

데이터베이스 실행을 위해 예약해야 하는 노드를 지정하려면 다음 단계를 따르세요.

  1. 기본 인스턴스의 경우 primarySpecschedulingConfig 섹션 또는 읽기 풀 인스턴스의 경우 spectolerations 섹션 뒤에 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는 정의된 규칙에 따라 정확하게 포드를 예약합니다.
      • preferredDuringSchedulingIgnoredDuringExecution: Kubernetes 스케줄러는 정의된 예약 규칙을 충족하는 노드를 찾으려고 시도합니다. 그러나 이러한 노드가 없으면 Kubernetes는 클러스터의 다른 노드로 예약합니다.
    • WAIT_VALUE: 지정된 노드의 선호도 가중치를 나타냅니다. 값이 클수록 선호도가 더 강합니다. 유효한 값은 1부터 100까지입니다.
    • LABEL_KEY: 위치 표시기 역할을 하고 클러스터 전반에서 균일한 포드 분산을 용이하게 하는 키의 노드 라벨입니다. 예를 들면 disktype=ssd입니다.
    • OPERATOR_VALUE: 키와 값 집합의 관계를 나타냅니다. 파라미터를 다음 중 하나로 설정합니다.
      • In: 값 배열은 비어 있지 않아야 합니다.
      • NotIn: 값 배열은 비어 있지 않아야 합니다.
      • Exists: 값 배열은 비어 있어야 합니다.
      • DoesNotExist: 값 배열은 비어 있어야 합니다.
      • Gt: 값 배열에는 정수로 해석되는 단일 요소가 있어야 합니다.
      • Lt: 값 배열에는 정수로 해석되는 단일 요소가 있어야 합니다.
    • LABEL_KEY_VALUE: 라벨 키의 값입니다. 다음과 같이 파라미터를 문자열 값 배열로 설정합니다.
      • 연산자가 In 또는 NotIn인 경우 값 배열은 비어 있지 않아야 합니다.
      • 연산자가 Exists 또는 DoesNotExist인 경우 값 배열은 비어 있어야 합니다.
      • 연산자가 Gt 또는 Lt인 경우 값 배열에는 정수로 해석되는 단일 요소가 있어야 합니다.
  2. 매니페스트를 다시 적용합니다.

토폴로지 분산 제약조건 정의

Kubernetes 포드 API의 spec에 있고 결과적으로 AlloyDB Omni 데이터베이스 클러스터 매니페스트의 schedulingConfig에 있는 topologySpreadConstraints 필드는 클러스터의 영역, 노드, 리전과 같은 다양한 토폴로지 도메인에 포드가 분산되는 방식을 제어합니다. 이를 통해 너무 많은 AlloyDB Omni 데이터베이스 클러스터 포드가 단일 장애 지점에 배치되지 않도록 하여 고가용성과 균형 잡힌 리소스 사용을 촉진할 수 있습니다.

AlloyDB Omni 데이터베이스 클러스터가 클러스터 토폴로지에 분산되는 방식을 지정하려면 기본 인스턴스의 경우 primarySpec 또는 읽기 풀 인스턴스의 경우 specschedulingConfigtopologySpreadConstraints 섹션을 포함하세요.

schedulingconfig:
      # Other scheduling configs like tolerations, nodeaffinity
      topologySpreadConstraints:
        - maxSkew: MAXSKEW_VALUE
          topologyKey: "TOPOLOGY_KEY"
          whenUnsatisfiable: WHEN_UNSATISFIABLE_VALUE
          # labelSelector: <object> # optional
          # minDomains: <integer> # optional
          # matchLabelKeys: <list> # optional
          # nodeAffinityPolicy: [Honor|Ignore] # optional
          # nodeTaintsPolicy: [Honor|Ignore] # optional

다음을 바꿉니다.

  • MAXSKEW_VALUE: 두 토폴로지 도메인 간에 일치하는 포드 수의 허용되는 최대 차이를 정의합니다. 이 매개변수는 0보다 커야 합니다.
  • TOPOLOGY_KEY: 토폴로지 도메인을 정의하는 노드 라벨의 키입니다(예: 영역의 경우 topology.kubernetes.io/zone). 스케줄러는 이러한 도메인 간에 Pod의 균형을 맞추려고 시도합니다.
  • WHEN_UNSATISFIABLE_VALUE: 포드가 분산 제약 조건을 충족하지 않는 경우 스케줄러가 포드를 처리하는 방법을 나타냅니다. 파라미터를 다음 중 하나로 설정합니다.
    • DoNotSchedule: 분산 제약 조건이 충족되지 않으면 스케줄러가 포드를 노드에 예약하지 않습니다. 기본값입니다.
    • ScheduleAnyway: 스케줄러는 여전히 포드를 예약하지만 스큐를 최소화하는 노드의 우선순위를 지정합니다.

Pod 토폴로지 분산 제약 조건에 대한 자세한 내용은 공식 Kubernetes 문서를 참고하세요.

다음 예는 AlloyDB Omni Kubernetes 연산자 기본 인스턴스와 읽기 풀 인스턴스에서 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
      topologySpreadConstraints:
        - maxSkew: 1
          topologyKey: "topology.kubernetes.io/zone"
          whenUnsatisfiable: DoNotSchedule

다음 세부정보로 인해 컨트롤 플레인 노드로 표시된 노드에 포드를 예약할 수 있는 톨러레이션(toleration) 예시입니다.

  • node-role.kubernetes.io/control-plane taint 키는 노드에 컨트롤 플레인 노드가 있음을 나타냅니다.
  • Exists 연산자는 값에 관계없이 지정된 taint 키가 있는 모든 taint와 톨러레이션(toleration)이 일치함을 의미합니다.
  • NoSchedule 효과는 일치하는 톨러레이션(toleration)이 없는 한 포드가 컨트롤 플레인 노드에 예약되지 않는다는 것을 의미합니다.

preferredDuringSchedulingIgnoredDuringExecution 노드 어피니티 유형은 노드 어피니티에 정의된 규칙이 선호되지만 예약 중에 필수는 아니라고 지정합니다. 선호하는 노드를 사용할 수 없는 경우에도 포드는 다른 노드에 예약될 수 있습니다. 1 가중치 값은 약한 선호도를 나타냅니다. 노드 선택 기준은 preference 섹션에 정의되어 있습니다. matchExpressions 섹션에는 노드를 일치시키는 데 사용되는 표현식 배열이 포함됩니다. another-node-label-key 키는 일치시킬 노드 라벨의 키를 나타냅니다. In 연산자는 노드에 지정된 값 중 하나가 포함된 키가 있어야 함을 의미합니다. another-node-label-key 키에는 another-node-label-value 값이 있어야 합니다.

노드 어피니티 규칙의 예는 another-node-label-value 값이 있는 another-node-label-key 라벨이 있는 노드에서 Pod를 예약하는 것을 선호한다고 나타냅니다. 이 환경설정은 약하므로 강력한 요구사항은 아닙니다.

이 예의 topologySpreadConstraints는 여러 Kubernetes 영역에 포드를 분산합니다. 1maxSkew 값은 다른 영역의 최소 포드 수에 비해 지정된 영역에 최대 하나의 포드가 더 있을 수 있음을 나타냅니다. whenUnsatisfiable 설정(값이 DoNotSchedule)은 이 제약 조건을 충족할 수 없는 경우 포드가 예약되지 않은 상태로 유지됨을 의미합니다.

이 예에서는 다음을 결합합니다.

  • NoSchedule taint를 허용하여 컨트롤 플레인 노드에 포드를 예약할 수 있는 톨러레이션(toleration)입니다.
  • 특정 라벨이 있는 노드를 선호하지만 엄격하게 요구하지는 않는 노드 어피니티입니다. 따라서 예약 시 유연성을 제공합니다.
  • 가용성 영역 간에 포드의 균형 잡힌 분산을 적용하여 복원력을 강화하고 리소스 사용률을 개선하는 토폴로지 분산 제약 조건

다음 단계