AlloyDB Omni Kubernetes Operator에서 예약은 클러스터 전반에서 노드 분포의 균형을 맞추고 성능을 최적화하는 데 도움이 되도록 새 데이터베이스 포드를 노드에 매칭하는 프로세스입니다. 포드와 노드는 CPU 및 메모리와 같은 여러 기준과 사용 가능한 리소스를 기반으로 일치됩니다.
예약에 관한 자세한 내용은 Kubernetes 문서의 예약, 선점, 제거를 참고하세요.
이 페이지에서는 Kubernetes 매니페스트에서 기본 및 읽기 풀 인스턴스의 허용오차 및 노드 어피니티 예약 구성을 지정하는 방법을 보여줍니다.
노드에서 taint를 정의하는 방법에 관한 자세한 내용은 Kubernetes 문서의 taint 및 내결함성을 참고하세요.
톨러레이션 지정
다른 애플리케이션 포드가 없거나 해당 노드에 정의된 특정 오염과 일치하는 노드에 AlloyDB Omni 포드를 예약하려면 다음과 같이 노드에 하나 이상의 허용 오류를 적용합니다.
- 다음 섹션 중 하나의
schedulingConfig
섹션에tolerations
섹션을 포함하도록 AlloyDB Omni Kubernetes Operator 클러스터의 매니페스트를 수정합니다.- 기본 인스턴스의 경우
primarySpec
- 읽기 풀 인스턴스의 경우
spec
tolerations: - key: "TAINT_KEY" operator: "OPERATOR_VALUE" value: "VALUE" effect: "TAINT_EFFECT"
다음을 바꿉니다.
TAINT_KEY
: 노드의 호스트 이름 또는 톨러레이션이 적용되는 로컬에서 추론된 다른 값과 같은 taint 키의 기존 고유한 이름입니다. 노드에 이미 오염 키가 정의되어 있습니다. 빈 필드와OPERATOR_VALUE
가exists
로 설정된 경우 허용 범위가 모든 값과 모든 키와 일치해야 함을 나타냅니다.OPERATOR_VALUE
: 키와 값 집합의 관계를 나타냅니다. 매개변수를 다음 중 하나로 설정합니다.exists
: Kubernetes는 taint의 값과 관계없이 taint가 정의된 경우 모든 값과 일치합니다.equal
: 값이 다른 경우 Kubernetes는 포드를 노드에 예약하지 않습니다. 이 연산자에는 tainttrue
값이 필요합니다.
VALUE
: 톨러레이션(toleration)이 일치하는 taint 값입니다. 연산자가 Exists인 경우 값은 비어 있고, 그렇지 않으면 일반 문자열입니다. 예를 들면true
입니다.TAINT_EFFECT
: 일치할 taint 효과를 나타냅니다. 빈 필드는 모든 오염 효과가 일치해야 함을 나타냅니다. 매개변수를 다음 중 하나로 설정합니다.NoSchedule
: Kubernetes는 오염된 노드에 새 포드를 예약하지 않습니다.PreferNoSchedule
: Kubernetes는 필요한 경우가 아니라면 taint된 노드에 새 포드를 배치하지 않습니다.NoExecute
: Kubernetes는 taint를 허용하지 않는 기존 Pod를 제거합니다.
- 기본 인스턴스의 경우
- 매니페스트를 다시 적용합니다.
노드 어피니티 정의
Kubernetes 스케줄러는 노드 어피니티를 일련의 규칙으로 사용하여 포드를 배치할 위치를 결정합니다. 노드 어피니티는 노드 선택기의 더 유연하고 표현력이 뛰어난 버전입니다.
데이터베이스 실행을 위해 예약해야 하는 노드를 지정하려면 다음 단계를 따르세요.
- 기본 인스턴스의 경우
primarySpec
의schedulingConfig
섹션 또는 읽기 풀 인스턴스의 경우spec
의schedulingConfig
섹션에 있는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
인 경우 값 배열에는 정수로 해석되는 단일 요소가 있어야 합니다.
- 연산자가
-
- 매니페스트를 다시 적용합니다.
예시
다음 예는 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를 허용하여 제어 영역 노드에 포드를 예약할 수 있는 톨러레이션입니다.- 특정 라벨이 있는 노드를 선호하지만 엄격하게 요구하지는 않는 노드 어피니티입니다. 따라서 예약 시 유연성을 제공합니다.