예약에 관한 자세한 내용은 Kubernetes 문서의 예약, 선점, 제거를 참고하세요.
이 페이지에서는 Kubernetes 매니페스트에서 기본 및 읽기 풀 인스턴스의 톨러레이션, 노드 어피니티, 토폴로지 분산 제약 조건 예약 구성을 지정하는 방법을 보여줍니다.
노드에서 taint를 정의하는 방법에 관한 자세한 내용은 Kubernetes 문서의 taint 및 톨러레이션(toleration)을 참고하세요.
톨러레이션(toleration) 지정
다른 애플리케이션 포드가 없거나 해당 노드에 정의된 특정 taint와 일치하는 노드에 AlloyDB Omni 포드를 예약하려면 다음과 같이 노드에 하나 이상의 톨러레이션(toleration)을 적용합니다.
- 다음 섹션 중 하나의
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_VALUE
가exists
로 설정된 경우 톨러레이션(toleration)이 모든 값과 모든 키와 일치해야 함을 나타냅니다.OPERATOR_VALUE
: 키와 값 집합의 관계를 나타냅니다. 파라미터를 다음 중 하나로 설정합니다.exists
: Kubernetes는 taint의 값과 관계없이 taint가 정의된 경우 모든 값과 일치합니다.equal
: 값이 다른 경우 Kubernetes는 포드를 노드에 예약하지 않습니다. 이 연산자에는 tainttrue
값이 필요합니다.
VALUE
: 톨러레이션(toleration)이 일치할 taint 값입니다. 연산자가 Exists인 경우 값은 비어 있고, 그렇지 않으면 일반 문자열입니다. 예를 들면true
입니다.TAINT_EFFECT
: 일치할 taint 효과를 나타냅니다. 빈 필드는 모든 taint 효과가 일치해야 함을 나타냅니다. 파라미터를 다음 중 하나로 설정합니다.NoSchedule
: Kubernetes는 taint가 적용된 노드에 새 포드를 예약하지 않습니다.PreferNoSchedule
: Kubernetes는 필요한 경우가 아니라면 taint가 적용된 노드에 새 포드를 배치하지 않습니다.NoExecute
: Kubernetes는 taint를 허용하지 않는 기존 Pod를 제거합니다.
- 기본 인스턴스의 경우
- 매니페스트를 다시 적용합니다.
노드 어피니티 정의
Kubernetes 스케줄러는 노드 어피니티를 일련의 규칙으로 사용하여 포드를 배치할 위치를 결정합니다. 노드 어피니티는 노드 선택기의 더 유연하고 표현력이 뛰어난 버전입니다.
데이터베이스 실행을 위해 예약해야 하는 노드를 지정하려면 다음 단계를 따르세요.
- 기본 인스턴스의 경우
primarySpec
의schedulingConfig
섹션 또는 읽기 풀 인스턴스의 경우spec
의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
인 경우 값 배열에는 정수로 해석되는 단일 요소가 있어야 합니다.
- 연산자가
- 매니페스트를 다시 적용합니다.
토폴로지 분산 제약조건 정의
Kubernetes 포드 API의 spec
에 있고 결과적으로 AlloyDB Omni 데이터베이스 클러스터 매니페스트의 schedulingConfig
에 있는 topologySpreadConstraints
필드는 클러스터의 영역, 노드, 리전과 같은 다양한 토폴로지 도메인에 포드가 분산되는 방식을 제어합니다. 이를 통해 너무 많은 AlloyDB Omni 데이터베이스 클러스터 포드가 단일 장애 지점에 배치되지 않도록 하여 고가용성과 균형 잡힌 리소스 사용을 촉진할 수 있습니다.
AlloyDB Omni 데이터베이스 클러스터가 클러스터 토폴로지에 분산되는 방식을 지정하려면 기본 인스턴스의 경우 primarySpec
또는 읽기 풀 인스턴스의 경우 spec
의 schedulingConfig
에 topologySpreadConstraints
섹션을 포함하세요.
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 영역에 포드를 분산합니다. 1
의 maxSkew
값은 다른 영역의 최소 포드 수에 비해 지정된 영역에 최대 하나의 포드가 더 있을 수 있음을 나타냅니다. whenUnsatisfiable
설정(값 DoNotSchedule
)은 이 제약 조건을 충족할 수 없는 경우 포드가 예약되지 않은 상태로 유지됨을 의미합니다.
이 예에서는 다음을 결합합니다.
NoSchedule
taint를 허용하여 컨트롤 플레인 노드에 포드를 예약할 수 있는 톨러레이션(toleration)입니다.- 특정 라벨이 있는 노드를 선호하지만 엄격하게 요구하지는 않는 노드 어피니티입니다. 따라서 예약 시 유연성을 제공합니다.
- 가용성 영역 간에 포드의 균형 잡힌 분산을 적용하여 복원력을 강화하고 리소스 사용률을 개선하는 토폴로지 분산 제약 조건