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

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

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

이 페이지에서는 Kubernetes 매니페스트에서 기본 및 읽기 풀 인스턴스의 허용오차 및 노드 어피니티 예약 구성을 지정하는 방법을 보여줍니다.

노드에서 taint를 정의하는 방법에 관한 자세한 내용은 Kubernetes 문서의 taint 및 내결함성을 참고하세요.

톨러레이션 지정

다른 애플리케이션 포드가 없거나 해당 노드에 정의된 특정 오염과 일치하는 노드에 AlloyDB Omni 포드를 예약하려면 다음과 같이 노드에 하나 이상의 허용 오류를 적용합니다.

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

    다음을 바꿉니다.

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

노드 어피니티 정의

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

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

  1. 기본 인스턴스의 경우 primarySpecschedulingConfig 섹션 또는 읽기 풀 인스턴스의 경우 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는 정의된 규칙에 따라 정확하게 포드를 예약합니다.
      • 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. 매니페스트를 다시 적용합니다.

예시

다음 예는 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

다음 세부정보로 인해 제어 영역 노드로 표시된 노드에 포드를 예약할 수 있는 톨러레이션 예시입니다.

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

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를 예약하는 것을 선호한다고 나타냅니다. 이 환경설정은 약하므로 강력한 요구사항은 아닙니다.

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

  • NoSchedule taint를 허용하여 제어 영역 노드에 포드를 예약할 수 있는 톨러레이션입니다.
  • 특정 라벨이 있는 노드를 선호하지만 엄격하게 요구하지는 않는 노드 어피니티입니다. 따라서 예약 시 유연성을 제공합니다.

다음 단계