4.7. 인프라 노드에 머신 세트 리소스 할당
인프라 머신 세트를 생성 한 후 worker
및 infra
역할이 새 인프라 노드에 적용됩니다. infra
역할이 적용된 노드는 worker
역할이 적용된 경우에도 환경을 실행하는 데 필요한 총 서브스크립션 수에 포함되지 않습니다.
그러나 인프라 노드에 작업자 역할이 할당되면 사용자 워크로드를 의도치 않게 인프라 노드에 할당할 수 있습니다. 이를 방지하려면 제어하려는 pod에 대한 허용 오차를 적용하고 인프라 노드에 테인트를 적용할 수 있습니다.
4.7.1. 테인트 및 허용 오차를 사용하여 인프라 노드 워크로드 바인딩
infra
및 worker
역할이 할당된 인프라 노드가 있는 경우 사용자 워크로드가 할당되지 않도록 노드를 구성해야 합니다.
인프라 노드에 대해 생성된 이중 infra,worker
레이블을 유지하고 테인트 및 허용 오차를 사용하여 사용자 워크로드가 예약된 노드를 관리하는 것이 좋습니다. 노드에서 worker
레이블을 제거하는 경우 이를 관리할 사용자 지정 풀을 생성해야 합니다. master
또는 worker
이외의 레이블이 있는 노드는 사용자 지정 풀없이 MCO에서 인식되지 않습니다. worker
레이블을 유지 관리하면 사용자 정의 레이블을 선택하는 사용자 정의 풀이 없는 경우 기본 작업자 머신 구성 풀에서 노드를 관리할 수 있습니다. infra
레이블은 총 서브스크립션 수에 포함되지 않는 클러스터와 통신합니다.
사전 요구 사항
-
OpenShift Container Platform 클러스터에서 추가
MachineSet
개체를 구성합니다.
프로세스
인프라 노드에 테인트를 추가하여 사용자 워크로드를 예약하지 않도록합니다.
노드에 테인트가 있는지 확인합니다.
$ oc describe nodes <node_name>
샘플 출력
oc describe node ci-ln-iyhx092-f76d1-nvdfm-worker-b-wln2l Name: ci-ln-iyhx092-f76d1-nvdfm-worker-b-wln2l Roles: worker ... Taints: node-role.kubernetes.io/infra:NoSchedule ...
이 예에서는 노드에 테인트가 있음을 보여줍니다. 다음 단계에서 Pod에 허용 오차를 추가할 수 있습니다.
사용자 워크로드를 예약하지 않도록 테인트를 구성하지 않은 경우 다음을 수행합니다.
$ oc adm taint nodes <node_name> <key>=<value>:<effect>
예를 들면 다음과 같습니다.
$ oc adm taint nodes node1 node-role.kubernetes.io/infra=reserved:NoSchedule
작은 정보다음 YAML을 적용하여 테인트를 추가할 수도 있습니다.
kind: Node apiVersion: v1 metadata: name: <node_name> labels: ... spec: taints: - key: node-role.kubernetes.io/infra effect: NoSchedule value: reserved ...
이 예에서는 키
node-role.kubernetes.io/infra
및 taint 효과NoSchedule
이 있는node1
에 taint를 배치합니다.NoSchedule
효과가 있는 노드는 taint를 허용하는 pod만 예약하지만 기존 pod는 노드에서 예약된 상태를 유지할 수 있습니다.참고descheduler를 사용하면 노드 taint를 위반하는 pod가 클러스터에서 제거될 수 있습니다.
NoSchedule Effect와 위의 테인트와 함께 NoExecute Effect를 사용하여 테인트를 추가합니다.
$ oc adm taint nodes <node_name> <key>=<value>:<effect>
예를 들면 다음과 같습니다.
$ oc adm taint nodes node1 node-role.kubernetes.io/infra=reserved:NoExecute
작은 정보다음 YAML을 적용하여 테인트를 추가할 수도 있습니다.
kind: Node apiVersion: v1 metadata: name: <node_name> labels: ... spec: taints: - key: node-role.kubernetes.io/infra effect: NoExecute value: reserved ...
이 예에서는
node-role.kubernetes.io/infra
및 taint 효과NoExecute
가 있는node1
에 taint를 배치합니다.NoExecute
효과가 있는 노드는 테인트를 허용하는 Pod만 예약합니다. 이 효과에서는 일치하는 톨러레이션이 없는 노드에서 기존 Pod를 제거합니다.
라우터, 레지스트리 및 모니터링 워크로드와 같이 인프라 노드에서 예약하려는 pod 구성에 대한 허용 오차를 추가합니다. 다음 코드를
Pod
개체 사양에 추가합니다.tolerations: - effect: NoSchedule 1 key: node-role.kubernetes.io/infra 2 value: reserved 3 - effect: NoExecute 4 key: node-role.kubernetes.io/infra 5 operator: Exists 6 value: reserved 7
이 허용 오차는
oc adm taint
명령으로 생성된 taint와 일치합니다. 이 허용 오차가 있는 pod를 인프라 노드에 예약할 수 있습니다.참고OLM을 통해 설치된 Operator의 pod를 인프라 노드로 이동할 수는 없습니다. Operator pod를 이동하는 기능은 각 Operator의 구성에 따라 다릅니다.
- 스케줄러를 사용하여 pod를 인프라 노드에 예약합니다. 자세한 내용은 노드에서 pod 배치 제어에 대한 설명서를 참조하십시오.
추가 리소스
- 노드에 Pod 예약에 대한 일반적인 정보는 스케줄러를 사용하여 Pod 배치 제어를 참조하십시오.