3.2. 자동화 컨트롤러 Pod 컨테이너의 크기 권장 사항
개요 섹션에서 그림 1.1. “자동화 컨트롤러 아키텍처” 를 다시 보면 제어 Pod에 4개의 컨테이너가 포함되어 있습니다.
- web
- ee
- Redis
- task
이러한 각 컨테이너는 Ansible 자동화 컨트롤러에서 고유한 기능을 수행하고 리소스 구성이 제어 Pod에 미치는 영향을 이해하는 것이 중요합니다. 기본적으로 Red Hat OpenShift는 최소 테스트 설치에 충분하지만 프로덕션에서 Ansible Automation Platform을 실행하는 데는 적합하지 않습니다.
Ansible Automation Platform의 Red Hat OpenShift 기본값은 다음과 같습니다.
- CPU: 100m
- 메모리: 128Mi
기본적으로 Red Hat OpenShift는 최대 리소스 제한을 구성하지 않으며 Ansible Automation Platform 제어 Pod에서 요청하는 모든 가능한 리소스를 할당하려고 합니다. 이 구성으로 인해 리소스가 중단되고 Red Hat OpenShift 클러스터에서 실행되는 다른 애플리케이션에 영향을 미칠 수 있습니다.
제어 Pod에서 컨테이너의 리소스 요청 및 제한에 대한 시작점을 설명하기 위해 다음 가정을 사용합니다.
- Red Hat OpenShift 클러스터 내에서 각각 4개의 vCPU 및 16GiB RAM이 있는 작업자 노드 3개
- 자동화 작업을 위한 리소스 극대화가 고가용성보다 더 중요합니다.
- 자동화 컨트롤러 실행을 위한 전용 작업자 노드 1개
- 자동화 작업을 실행하기 위한 나머지 두 개의 작업자 노드
컨트롤 Pod 내에서 컨테이너의 크기를 조정하는 경우 워크로드의 세부 사항을 고려하는 것이 중요합니다. 이 참조 환경에 대한 특정 권장 사항을 제공하는 성능 테스트를 수행했지만 이러한 권장 사항은 모든 유형의 워크로드에 적용되지 않을 수 있습니다.
시작점으로 성능 컬렉션 플레이북, 특히 chatty_tasks.yml 을 활용하기로 결정했습니다.
성능 벤치마크는 다음과 같이 구성되어 있습니다.
- 호스트 1개로 인벤토리 생성
-
chatty
_tasks.yml 파일을
실행하는 작업 템플릿 생성
chatty _tasks 작업
템플릿은 ansible.builtin.debug
모듈을 사용하여 호스트당 일련의 디버그 메시지를 생성하고 필요한 인벤토리를 생성합니다. ansible.builtin.debug
모듈을 사용하면 추가 오버헤드를 도입하지 않고도 자동화 컨트롤러의 성능을 정확하게 표시할 수 있습니다.
작업 템플릿은 10에서 50 사이의 지정된 동시성 수준으로 실행되었으며 작업 템플릿의 동시 호출 수를 나타냅니다.
아래에 표시된 리소스 요청 및 리소스 제한은 성능 벤치마크의 결과이며 유사한 리소스가 있는 Red Hat OpenShift 클러스터에서 AAP를 실행하기 위한 시작 기준으로 사용할 수 있습니다.
spec: ... ee_resource_requirements: limits: cpu: 500m memory: 400Mi requests: cpu: 100m memory: 400Mi task_resource_requirements: limits: cpu: 4000m memory: 8Gi requests: cpu: 1000m memory: 8Gi web_resource_requirements: limits: cpu: 2000m memory: 1.5Gi requests: cpu: 500m memory: 1.5Gi redis_resource_requirements: limits: cpu: 500m memory: 1.5Gi requests: cpu: 250m memory: 1.5Gi
Red Hat OpenShift 클러스터 내에서 메모리 리소스를 과도하게 사용하지 않도록 메모리 리소스 요청 및 제한이 일치하므로 Pod가 OOM(Out Of Memory)이 종료될 수 있습니다. 리소스 제한이 리소스 요청보다 크면 Red Hat OpenShift 노드를 과도하게 사용할 수 있는 시나리오가 발생할 수 있습니다.
CPU 리소스가 압축 가능한 것으로 간주되므로 CPU 리소스 요청 및 제한은 메모리와 다릅니다. 즉, Red Hat OpenShift는 리소스 제한에 도달할 때 컨테이너의 CPU를 제한하려고 하지만 컨테이너를 종료하지는 않습니다. 제어 Pod 내의 위의 컨테이너에서는 지정된 워크로드에 충분한 CPU가 제공되지만 임계값(CPU 제한)을 더 높은 값으로 설정하여 부하에서 더 높은 CPU 요청이 제공되었습니다.
위의 시나리오는 다른 애플리케이션이 해당 작업자 노드 내의 리소스를 사용하지 않고 제어 Pod가 전용 Red Hat OpenShift 작업자 노드를 사용하므로 이 노드에 상주하지 않는 것으로 가정하고 있습니다. 자세한 내용은 3.7절. “자동화 컨트롤러 Pod를 위한 전용 노드 지정” 에서 확인할 수 있습니다.