2.3.3. Pod 중단 예산을 사용하여 실행 중인 pod 수를 지정하는 방법
노드 유지보수 또는 클러스터 업데이트와 같은 자발적으로 중단되는 동안 Pod 가용성을 보장하기 위해 Pod 중단 예산을 사용하여 애플리케이션의 안전 제약 조건을 정의할 수 있습니다.
PodDisruptionBudget 은 동시에 작동해야 하는 최소 복제본 수 또는 백분율을 지정하는 API 오브젝트입니다. 프로젝트에서 이러한 설정은 노드 유지 관리 (예: 클러스터 축소 또는 클러스터 업그레이드) 중에 유용할 수 있으며 (노드 장애 시가 아니라) 자발적으로 제거된 경우에만 적용됩니다.
PodDisruptionBudget 오브젝트의 구성은 다음과 같은 주요 부분으로 구성되어 있습니다.
- 일련의 pod에 대한 라벨 쿼리 기능인 라벨 선택기입니다.
동시에 사용할 수 있어야 하는 최소 pod 수를 지정하는 가용성 수준입니다.
-
minAvailable은 중단 중에도 항상 사용할 수 있어야하는 pod 수입니다. -
maxUnavailable은 중단 중에 사용할 수없는 pod 수입니다.
-
available 은 조건이 Ready=True 인 Pod 수를 나타냅니다. ready=True 는 요청을 제공할 수 있는 Pod를 나타내며 일치하는 모든 서비스의 로드 밸런싱 풀에 추가해야 합니다.
maxUnavailable 0 % 또는 0이나 minAvailable의 100 % 혹은 복제본 수와 동일한 값은 허용되지만 이로 인해 노드가 드레인되지 않도록 차단할 수 있습니다.
maxUnavailable 의 기본 설정은 AWS의 Red Hat OpenShift Service에 있는 모든 머신 구성 풀에 대해 1 입니다. 이 값을 변경하지 않고 한 번에 하나의 컨트롤 플레인 노드를 업데이트하는 것이 좋습니다. 컨트롤 플레인 풀의 경우 이 값을 3 으로 변경하지 마십시오.
다음을 사용하여 모든 프로젝트에서 pod 중단 예산을 확인할 수 있습니다.
$ oc get poddisruptionbudget --all-namespaces
다음 예제에는 AWS의 Red Hat OpenShift Service와 관련된 몇 가지 값이 포함되어 있습니다.
출력 예
NAMESPACE NAME MIN AVAILABLE MAX UNAVAILABLE ALLOWED DISRUPTIONS AGE
openshift-apiserver openshift-apiserver-pdb N/A 1 1 121m
openshift-cloud-controller-manager aws-cloud-controller-manager 1 N/A 1 125m
openshift-cloud-credential-operator pod-identity-webhook 1 N/A 1 117m
openshift-cluster-csi-drivers aws-ebs-csi-driver-controller-pdb N/A 1 1 121m
openshift-cluster-storage-operator csi-snapshot-controller-pdb N/A 1 1 122m
openshift-cluster-storage-operator csi-snapshot-webhook-pdb N/A 1 1 122m
openshift-console console N/A 1 1 116m
#...
PodDisruptionBudget은 시스템에서 최소 minAvailable pod가 실행중인 경우 정상으로 간주됩니다. 이 제한을 초과하는 모든 pod는 제거할 수 있습니다.
Pod 우선 순위 및 선점 설정에 따라 우선 순위가 낮은 pod는 pod 중단 예산 요구 사항을 무시하고 제거될 수 있습니다.
2.3.3.1. Pod 중단 예산을 사용하여 실행해야 할 pod 수 지정 링크 복사링크가 클립보드에 복사되었습니다!
PodDisruptionBudget 오브젝트를 사용하여 동시에 가동되어야 하는 최소 복제본 수 또는 백분율을 지정할 수 있습니다. 이렇게 하면 노드 유지보수 또는 클러스터 업데이트와 같은 자발적으로 중단되는 동안 Pod의 가용성을 보장합니다.
다음 절차에서는 Pod 중단 예산을 구성하는 방법을 보여줍니다.
프로세스
다음과 같은 오브젝트 정의를 사용하여 YAML 파일을 만듭니다.
apiVersion: policy/v1 kind: PodDisruptionBudget metadata: name: my-pdb spec: minAvailable: 2 selector: matchLabels: name: my-pod다음과 같습니다.
apiVersion-
policy/v1API 그룹을 지정합니다. spec.minAvailable-
동시에 사용할 수 있어야 하는 최소 Pod 수를 지정합니다. 정수 또는 백분율 (예:
20 %)을 지정하는 문자열을 사용할 수 있습니다. spec.selector-
리소스 집합에 대한 레이블 쿼리를 지정합니다.
matchLabels및matchExpressions의 결과는 논리적으로 결합됩니다. 프로젝트의 모든 포드를 선택하려면 이 매개변수(예:selector {})를 비워 둡니다.
또는 다음을 수행합니다.
apiVersion: policy/v1 kind: PodDisruptionBudget metadata: name: my-pdb spec: maxUnavailable: 25% selector: matchLabels: name: my-pod다음과 같습니다.
apiVersion-
policy/v1API 그룹을 지정합니다. spec.maxUnavailable-
동시에 사용할 수 없는 최대 Pod 수를 지정합니다. 정수 또는 백분율 (예:
20 %)을 지정하는 문자열을 사용할 수 있습니다. spec.selector-
리소스 집합에 대한 레이블 쿼리를 지정합니다.
matchLabels및matchExpressions의 결과는 논리적으로 결합됩니다. 프로젝트의 모든 포드를 선택하려면 이 매개변수(예:selector {})를 비워 둡니다.
다음 명령을 실행하여 오브젝트를 프로젝트에 추가합니다.
$ oc create -f </path/to/file> -n <project_name>