3.4. 자동 스케일링 구성
Red Hat OpenShift Dev Spaces 자동 스케일링의 다양한 측면에 대해 알아보십시오.
3.4.1. Red Hat OpenShift Dev Spaces 컨테이너의 복제본 수 구성
Kubernetes HorizontalPodAutoscaler
(HPA)를 사용하여 OpenShift Dev Spaces 피연산자의 복제본 수를 구성하려면 배포에 대한 HPA
리소스를 정의할 수 있습니다. HPA
는 지정된 메트릭을 기반으로 복제본 수를 동적으로 조정합니다.
프로세스
대상 지표와 원하는 복제본 수를 지정하여 배포에 대한
HPA
리소스를 생성합니다.apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: name: scaler namespace: openshift-devspaces spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: <deployment_name> 1 ...
- 1
- &
lt;deployment_name
>은 다음 배포에 해당합니다.-
devspaces
-
che-gateway
-
devspaces-dashboard
-
plugin-registry
-
devfile-registry
-
예 3.14. devspaces 배포를 위한 HorizontalPodAutoscaler
를 생성합니다.
apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: name: devspaces-scaler namespace: openshift-devspaces spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: devspaces minReplicas: 2 maxReplicas: 5 metrics: - type: Resource resource: name: cpu target: type: Utilization averageUtilization: 75
이 예에서 HPA는 최소 2개의 복제본, 최대 5개의 복제본 및 CPU 사용률을 기반으로 하는 스케일링을 사용하여 devspace라는 배포를 대상으로 합니다.
추가 리소스
3.4.2. 머신 자동 스케일링 구성
리소스 요구 사항에 따라 노드 수를 조정하도록 클러스터를 구성한 경우 OpenShift Dev Spaces 작업 공간의 원활한 작동을 유지하기 위해 추가 구성이 필요합니다.
자동 스케일러가 노드를 추가하고 제거할 때 작업 공간을 특별히 고려해야 합니다.
자동 스케일러에서 새 노드를 추가하면 노드 프로비저닝이 완료될 때까지 작업 공간 시작 시간이 평상보다 오래 걸릴 수 있습니다.
반대로 노드를 제거하면 작업 공간을 사용하는 동안 중단을 방지하고 저장된 데이터가 손실될 가능성이 있는 자동 스케일러에서 작업 공간 Pod를 실행하는 노드를 제거할 수 없습니다.
3.4.2.1. 자동 스케일러가 새 노드를 추가하는 경우
새 노드를 추가하는 동안 적절한 작업 공간을 시작하도록 OpenShift Dev Spaces 설치를 구성해야 합니다.
프로세스
CheCluster 사용자 지정 리소스에서 자동 스케일러가 새 노드를 프로비저닝할 때 적절한 작업 공간 시작을 허용하도록 다음 필드를 설정합니다.
spec: devEnvironments: startTimeoutSeconds: 600 1 ignoredUnrecoverableEvents: 2 - FailedScheduling
3.4.2.2. 자동 스케일러가 노드를 제거하는 경우
자동 스케일러가 노드를 제거해야 할 때 작업 공간 Pod가 제거되지 않도록 하려면 모든 작업 공간 Pod에 "cluster-autoscaler.kubernetes.io/safe-to-evict": "false"
주석을 추가합니다.
프로세스
CheCluster 사용자 정의 리소스에서
spec.devEnvironments.workspacesPodAnnotations
필드에cluster-autoscaler.kubernetes.io/safe-to-evict: "false"
주석을 추가합니다.spec: devEnvironments: workspacesPodAnnotations: cluster-autoscaler.kubernetes.io/safe-to-evict: "false"
검증 단계
작업 영역을 시작하고 작업 공간 Pod에
cluster-autoscaler.kubernetes.io/safe-to-evict: "false"
주석이 포함되어 있는지 확인합니다.$ oc get pod <workspace_pod_name> -o jsonpath='{.metadata.annotations.cluster-autoscaler\.kubernetes\.io/safe-to-evict}' false