2.3. OpenShift Serverless Serving의 확장 및 성능
OpenShift Serverless Serving은 다음 매개변수를 기반으로 확장 및 구성해야 합니다.
- Knative 서비스 수
- 버전 수
- 시스템의 동시 요청 수
- 요청 페이로드 크기
- 사용자의 웹 애플리케이션에서 추가한 Knative 서비스의 startup-latency 및 응답 대기 시간
- 시간 경과에 따른 KnativeService CR(사용자 정의 리소스) 변경 횟수
2.3.1. KnativeServing 기본 구성 링크 복사링크가 클립보드에 복사되었습니다!
기본적으로 OpenShift Serverless Serving은 고가용성 및 중간 크기의 CPU 및 메모리 요청 및 제한으로 모든 구성 요소를 실행하도록 구성됩니다. 즉 KnativeServing CR의 high-available 필드가 자동으로 2 값으로 설정되고 모든 시스템 구성 요소는 두 개의 복제본으로 확장됩니다. 이 구성은 중간 워크로드 시나리오에 적합하며 다음을 사용하여 테스트되었습니다.
- 170 Knative 서비스
- Knative 서비스당 1-2 버전
- 89 테스트 시나리오는 주로 컨트롤 플레인 테스트에 중점을 두고 있습니다.
- 48 Knative 서비스가 삭제되고 다시 생성되는 시나리오
- 41 안정적인 시나리오: 요청이 느리지만 지속적으로 시스템으로 전송됨
이러한 테스트 사례에서는 시스템 구성 요소가 효과적으로 소비됩니다.
| Component | 측정 리소스 |
|---|---|
|
프로젝트 | 1GB 메모리, 0.2 코어의 CPU |
|
프로젝트 | 5GB 메모리, 2.5 코어의 CPU |
2.3.2. OpenShift Serverless Serving의 최소 요구 사항 링크 복사링크가 클립보드에 복사되었습니다!
기본 설정은 중간 규모의 워크로드에 적합하지만 더 작은 설정이나 높은 워크로드 시나리오의 경우 크기가 초과될 수 있습니다. 최소 워크로드 시나리오를 위해 OpenShift Serverless Serving을 구성하려면 시스템 구성 요소의 유휴 사용량을 알아야 합니다.
2.3.2.1. 유휴 사용 링크 복사링크가 클립보드에 복사되었습니다!
유휴 사용은 Knative 서비스 수에 따라 다릅니다. knative-serving 및 OpenShift Container Platform 프로젝트의 구성 요소에 대해 다음 메모리 사용량이 측정되었습니다.
knative-serving -ingress
| Component | 0 서비스 | 100개의 서비스 | 500개의 서비스 | 1000개의 서비스 |
|---|---|---|---|---|
|
| 55Mi | 86Mi | 300Mi | 450Mi |
|
| 52Mi | 102Mi | 225Mi | 350Mi |
|
| 100Mi | 135Mi | 310Mi | 500Mi |
|
| 60Mi | 60Mi | 60Mi | 60Mi |
|
| 20Mi | 60Mi | 190Mi | 330Mi |
|
| 90Mi | 170Mi | 340Mi | 430Mi |
3scale-kourier-gateway 및 net-kourier-controller 구성 요소 또는 istio-ingressgateway 및 net-istio-controller 구성 요소가 설치됩니다.
net-istio 의 메모리 사용은 메시 내의 총 Pod 수를 기반으로 합니다.
2.3.3. 최소 워크로드에 대한 Serving 구성 링크 복사링크가 클립보드에 복사되었습니다!
프로세스
KnativeServing 사용자 정의 리소스(CR)를 사용하여 최소 워크로드에 대해
Knative Serving을 구성할 수 있습니다.KnativeServing CR의 최소 워크로드 구성
apiVersion: operator.knative.dev/v1beta1 kind: KnativeServing metadata: name: knative-serving namespace: knative-serving spec: high-availability: replicas: 11 workloads: - name: activator replicas: 22 resources: - container: activator requests: cpu: 250m3 memory: 60Mi4 limits: cpu: 1000m memory: 600Mi - name: controller replicas: 15 resources: - container: controller requests: cpu: 10m memory: 100Mi limits:6 cpu: 200m memory: 300Mi - name: webhook replicas: 2 resources: - container: webhook requests: cpu: 100m7 memory: 60Mi limits: cpu: 200m memory: 200Mi podDisruptionBudgets:8 - name: activator-pdb minAvailable: 1 - name: webhook-pdb minAvailable: 1- 1
- 이 값을
1로 설정하면 모든 시스템 구성 요소가 하나의 복제본으로 확장됩니다. - 2
- 다운타임을 방지하려면 활성기를 항상 최소
2개의 인스턴스로 스케일링해야 합니다. - 3
HorizontalPodAutoscaler는 이를 확장 및 축소하기 위한 참조로 사용하므로 활성화기 CPU 요청을250m미만으로 설정해야 합니다.- 4
- 이전 표의 유휴 값으로 메모리 요청을 조정합니다. 또한 예상 로드에 따라 메모리 제한을 조정합니다(최고의 값을 찾으려면 사용자 지정 테스트가 필요할 수 있음).
- 5
- 하나의 Webhook와 하나의 컨트롤러가 최소 워크로드 시나리오에 충분합니다.
- 6
- 이러한 제한은 최소 워크로드 시나리오에는 충분하지만 구체적인 워크로드에 따라 조정이 필요할 수 있습니다.
- 7
- HorizontalPodAutoscaler는 이를 확장 및 축소하기 위한 참조로 사용하므로 Webhook CPU 요청을
100m미만으로 설정하지 않아야 합니다. - 8
- 노드 유지보수 중 문제를 방지하기 위해
PodDistruptionBudgets를복제본보다 낮은 값으로 조정합니다.
2.3.4. 높은 워크로드에 대한 Serving 구성 링크 복사링크가 클립보드에 복사되었습니다!
KnativeServing 사용자 정의 리소스(CR)를 사용하여 높은 워크로드에 대해 Knative Serving 을 구성할 수 있습니다. 다음 결과는 높은 워크로드에 대해 Knative Serving을 구성하는 것과 관련이 있습니다.
이러한 결과는 페이로드 크기가 0-32 kb인 요청으로 테스트되었습니다. 해당 테스트에 사용되는 Knative 서비스 백엔드에는 0~10초 간 시작 대기 시간과 0~5초의 응답 시간이 있었습니다.
- 모든 데이터 플레인 구성 요소는 높은 요청 및 페이로드 시나리오에서 CPU 사용량이 크게 증가하므로 CPU 요청 및 제한을 테스트해야 하며 잠재적으로 증가할 수 있습니다.
- 또한 활성화 구성 요소에 더 많은 요청 페이로드를 버퍼링해야 하는 경우 더 많은 메모리가 필요할 수 있으므로 메모리 요청 및 제한도 늘려야 할 수 있습니다.
- 하나의 activator Pod는 대기 시간을 늘리기 전에 초당 약 2500 건의 요청을 처리할 수 있으며 어느 시점에서 오류가 발생합니다.
-
1개의
3scale-kourier-gateway또는istio-ingressgatewayPod는 대기 시간을 늘리기 전에 초당 약 2500개의 요청을 처리할 수 있으며 어느 시점에서 오류가 발생할 수도 있습니다. - 각 데이터 플레인 구성 요소는 초당 2500개의 요청을 처리하기 위해 최대 1개의 CPU vCPU를 사용합니다. 이는 Knative 서비스 백엔드의 페이로드 크기 및 응답 시간에 따라 달라집니다.
Knative 서비스 사용자 워크로드의 빠른 시작 및 빠른 응답 시간은 전체 시스템의 우수한 성능을 위해 중요합니다. Knative Serving 구성 요소는 Knative 서비스 사용자 백엔드가 확장되거나 요청 동시성이 용량에 도달했을 때 들어오는 요청을 버퍼링하고 있습니다. Knative 서비스 사용자 워크로드에서 긴 시작 또는 요청 대기 시간이 발생하는 경우 활성화 구성 요소(CPU 및 메모리 구성이 너무 낮은 경우)를 오버로드하거나 호출 클라이언트에 오류가 발생합니다.
프로세스
설치를 미세 조정하려면 자체 테스트 결과와 결합된 이전 결과를 사용하여
KnativeServing사용자 정의 리소스를 구성합니다.KnativeServing CR의 높은 워크로드 구성
apiVersion: operator.knative.dev/v1beta1 kind: KnativeServing metadata: name: knative-serving namespace: knative-serving spec: high-availability: replicas: 21 workloads: - name: component-name2 replicas: 23 resources: - container: container-name requests: cpu:4 memory: limits: cpu: memory: podDisruptionBudgets:5 - name: name-of-pod-disruption-budget minAvailable: 1- 1
- 이 매개변수를 최소
2개로 설정하여 모든 구성 요소의 인스턴스가 항상 두 개 이상 실행되고 있는지 확인합니다.워크로드를사용하여 특정 구성 요소의 복제본을 덮어쓸 수도 있습니다. - 2
워크로드목록을 사용하여 특정 구성 요소를 구성합니다. 구성 요소의배포이름을 사용하고replicas필드를 설정합니다.- 3
- HPA(수평 Pod 자동 스케일러)를 사용하는
activator,webhook,3scale-kourier-gateway구성 요소의 경우replicas필드는 최소 복제본 수를 설정합니다. 실제 복제본 수는 HPA에서 수행하는 CPU 로드 및 스케일링에 따라 다릅니다. - 4
- 이전 결과 및 자체 테스트 결과를 고려하여 최소한 유휴 사용량에 따라 요청된 CPU 및 메모리를 설정합니다.
- 5
- 노드 유지보수 중 문제를 방지하려면
PodDistruptionBudgets를복제본보다 낮은 값으로 조정합니다. 기본minAvailable은1로 설정되어 있으므로 필요한 복제본을 늘리는 경우minAvailable도 늘려야 합니다.
각 환경은 매우 구체적이므로 고유한 이상적인 구성을 테스트하고 찾아야 합니다. OpenShift Container Platform의 모니터링 및 경고 기능을 사용하여 실제 리소스 사용을 지속적으로 모니터링하고 필요한 경우 조정합니다.
OpenShift Serverless 및 Service Mesh 통합을 사용하는 경우 istio-proxy 사이드카 컨테이너에 의해 추가 CPU 처리가 추가됩니다. 이에 대한 자세한 내용은 Service Mesh 설명서를 참조하십시오.