3.10. 다중 아키텍처 컴퓨팅 머신으로 클러스터 관리
여러 아키텍처가 있는 노드가 있는 클러스터를 관리하려면 클러스터를 모니터링하고 워크로드를 관리할 때 노드 아키텍처를 고려해야 합니다. 이를 위해서는 클러스터 리소스 요구 사항 및 동작을 구성하거나 다중 아키텍처 클러스터에서 워크로드를 예약할 때 고려해야 할 추가 고려 사항을 고려해야 합니다.
3.10.1. 다중 아키텍처 컴퓨팅 머신을 사용하여 클러스터에서 워크로드 예약
다른 아키텍처를 사용하는 컴퓨팅 노드를 사용하여 클러스터에 워크로드를 배포하는 경우 Pod 아키텍처를 기본 노드의 아키텍처와 조정해야 합니다. 또한 기본 노드 아키텍처에 따라 특정 리소스에 대한 추가 구성이 필요할 수도 있습니다.
Multiarch Tuning Operator를 사용하여 다중 아키텍처 컴퓨팅 머신이 있는 클러스터에서 워크로드의 아키텍처 인식 스케줄링을 활성화할 수 있습니다. Multiarch Tuning Operator는 생성 시 Pod에서 지원할 수 있는 아키텍처를 기반으로 Pod 사양에서 추가 스케줄러 서술자를 구현합니다.
3.10.1.1. 다중 아키텍처 노드 워크로드 배포 샘플
아키텍처를 기반으로 하는 적절한 노드에 워크로드를 예약하는 것은 다른 노드 특성을 기반으로 하는 스케줄링과 동일한 방식으로 작동합니다. 워크로드 예약 방법을 결정할 때 다음 옵션을 고려하십시오.
nodeAffinity
를 사용하여 특정 아키텍처로 노드 예약이미지에서 지원하는 노드 세트에서만 워크로드를 예약할 수 있습니다. Pod의 템플릿 사양에
spec.affinity.nodeAffinity
필드를 설정할 수 있습니다.apiVersion: apps/v1 kind: Deployment metadata: # ... spec: # ... template: # ... spec: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: kubernetes.io/arch operator: In values: 1 - amd64 - arm64
- 1
- 지원되는 아키텍처를 지정합니다. 유효한 값에는
amd64
,arm64
또는 두 값이 모두 포함됩니다.
- 특정 아키텍처에 대해 각 노드 테인트
노드에 테인트를 적용하여 해당 아키텍처와 호환되지 않는 노드 스케줄링 워크로드를 방지할 수 있습니다. 클러스터에서
MachineSet
오브젝트를 사용하는 경우.spec.template.spec.taints
필드에 매개변수를 추가하여 지원되지 않는 아키텍처가 있는 노드에서 워크로드가 예약되지 않도록 할 수 있습니다.노드에 테인트를 추가하기 전에
MachineSet
오브젝트를 축소하거나 사용 가능한 기존 머신을 제거해야 합니다. 자세한 내용은 컴퓨팅 머신 세트 수정을 참조하십시오.apiVersion: machine.openshift.io/v1beta1 kind: MachineSet metadata: # ... spec: # ... template: # ... spec: # ... taints: - effect: NoSchedule key: multiarch.openshift.io/arch value: arm64
다음 명령을 실행하여 특정 노드에 테인트를 설정할 수도 있습니다.
$ oc adm taint nodes <node-name> multiarch.openshift.io/arch=arm64:NoSchedule
- 네임스페이스에서 기본 허용 오차 생성
노드 또는 머신 세트에 테인트가 있는 경우 해당 테인트를 허용하는 워크로드만 예약할 수 있습니다. 다음 명령을 실행하여 모든 워크로드가 동일한 기본 허용 오차를 갖도록 네임스페이스에 주석을 달 수 있습니다.
$ oc annotate namespace my-namespace \ 'scheduler.alpha.kubernetes.io/defaultTolerations'='[{"operator": "Exists", "effect": "NoSchedule", "key": "multiarch.openshift.io/arch"}]'
- 워크로드의 아키텍처 테인트 허용
노드 또는 머신 세트에 테인트가 있는 경우 해당 테인트를 허용하는 워크로드만 예약할 수 있습니다. 특정 아키텍처 테인트가 있는 노드에서 예약되도록
허용 오차
를 사용하여 워크로드를 구성할 수 있습니다.apiVersion: apps/v1 kind: Deployment metadata: # ... spec: # ... template: # ... spec: tolerations: - key: "multiarch.openshift.io/arch" value: "arm64" operator: "Equal" effect: "NoSchedule"
이 예제 배포는
multiarch.openshift.io/arch=arm64
테인트가 지정된 노드 및 머신 세트에 예약할 수 있습니다.
- 테인트 및 톨러레이션에서 노드 유사성 사용
스케줄러에서 Pod를 예약할 노드 세트를 계산하면 노드 유사성이 설정된 동안 허용 오차가 세트를 확장할 수 있습니다. 특정 아키텍처가 있는 노드에 테인트를 설정하는 경우 예약하려는 워크로드에 허용 오차를 추가해야 합니다.
apiVersion: apps/v1 kind: Deployment metadata: # ... spec: # ... template: # ... spec: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: kubernetes.io/arch operator: In values: - amd64 - arm64 tolerations: - key: "multiarch.openshift.io/arch" value: "arm64" operator: "Equal" effect: "NoSchedule"
3.10.2. RHCOS(Red Hat Enterprise Linux CoreOS) 커널에서 64k 페이지 활성화
클러스터의 64비트 ARM 컴퓨팅 머신의 RHCOS(Red Hat Enterprise Linux CoreOS) 커널에서 64k 메모리 페이지를 활성화할 수 있습니다. 64k 페이지 크기 커널 사양은 대규모 GPU 또는 높은 메모리 워크로드에 사용할 수 있습니다. 이 작업은 머신 구성 풀을 사용하여 커널을 업데이트하는 MCO(Machine Config Operator)를 사용합니다. 64k 페이지 크기를 활성화하려면 커널에서 활성화하려면 ARM64에 대한 머신 구성 풀을 전용으로 설정해야 합니다.
64k 페이지를 사용하는 것은 64비트 ARM 시스템에 설치된 64비트 ARM 아키텍처 컴퓨팅 노드 또는 클러스터 전용입니다. 64비트 x86 머신을 사용하여 머신 구성 풀에서 64k 페이지 커널을 구성하는 경우 머신 구성 풀 및 MCO의 성능이 저하됩니다.
사전 요구 사항
-
OpenShift CLI(
oc
)를 설치합니다. - 지원되는 플랫폼 중 하나에 서로 다른 아키텍처의 컴퓨팅 노드가 있는 클러스터를 생성하셨습니다.
프로세스
64k 페이지 크기 커널을 실행할 노드에 레이블을 지정합니다.
$ oc label node <node_name> <label>
명령 예
$ oc label node worker-arm64-01 node-role.kubernetes.io/worker-64k-pages=
ARM64 아키텍처 및
worker-64k-pages
역할을 사용하는 작업자 역할이 포함된 머신 구성 풀을 생성합니다.apiVersion: machineconfiguration.openshift.io/v1 kind: MachineConfigPool metadata: name: worker-64k-pages spec: machineConfigSelector: matchExpressions: - key: machineconfiguration.openshift.io/role operator: In values: - worker - worker-64k-pages nodeSelector: matchLabels: node-role.kubernetes.io/worker-64k-pages: "" kubernetes.io/arch: arm64
컴퓨팅 노드에 시스템 구성을 생성하여
64k-pages
매개변수로64k-pages
를 활성화합니다.$ oc create -f <filename>.yaml
MachineConfig의 예
apiVersion: machineconfiguration.openshift.io/v1 kind: MachineConfig metadata: labels: machineconfiguration.openshift.io/role: "worker-64k-pages" 1 name: 99-worker-64kpages spec: kernelType: 64k-pages 2
참고64k-pages
유형은 64비트 ARM 아키텍처 기반 컴퓨팅 노드에서만 지원됩니다.실시간
유형은 64비트 x86 아키텍처 기반 컴퓨팅 노드에서만 지원됩니다.
검증
새
worker-64k-pages
머신 구성 풀을 보려면 다음 명령을 실행합니다.$ oc get mcp
출력 예
NAME CONFIG UPDATED UPDATING DEGRADED MACHINECOUNT READYMACHINECOUNT UPDATEDMACHINECOUNT DEGRADEDMACHINECOUNT AGE master rendered-master-9d55ac9a91127c36314e1efe7d77fbf8 True False False 3 3 3 0 361d worker rendered-worker-e7b61751c4a5b7ff995d64b967c421ff True False False 7 7 7 0 361d worker-64k-pages rendered-worker-64k-pages-e7b61751c4a5b7ff995d64b967c421ff True False False 2 2 2 0 35m
3.10.3. 다중 아키텍처 컴퓨팅 머신의 이미지 스트림에서 매니페스트 목록 가져오기
다중 아키텍처 컴퓨팅 머신이 있는 OpenShift Container Platform 4.17 클러스터에서는 클러스터의 이미지 스트림에서 매니페스트 목록을 자동으로 가져오지 않습니다. 매니페스트 목록을 가져오려면 기본 importMode
옵션을 PreserveOriginal
옵션으로 수동으로 변경해야 합니다.
사전 요구 사항
-
OpenShift Container Platform CLI(
oc
)가 설치되어 있어야 합니다.
프로세스
다음 예제 명령은
cli-artifacts:latest
이미지 스트림 태그가 매니페스트 목록으로 가져오기 위해ImageStream
cli-artifacts를 패치하는 방법을 보여줍니다.$ oc patch is/cli-artifacts -n openshift -p '{"spec":{"tags":[{"name":"latest","importPolicy":{"importMode":"PreserveOriginal"}}]}}'
검증
이미지 스트림 태그를 검사하여 매니페스트 목록을 올바르게 가져온지 확인할 수 있습니다. 다음 명령은 특정 태그에 대한 개별 아키텍처 매니페스트를 나열합니다.
$ oc get istag cli-artifacts:latest -n openshift -oyaml
dockerImageManifests
오브젝트가 있는 경우 매니페스트 목록 가져오기에 성공했습니다.dockerImageManifests
오브젝트 출력 예dockerImageManifests: - architecture: amd64 digest: sha256:16d4c96c52923a9968fbfa69425ec703aff711f1db822e4e9788bf5d2bee5d77 manifestSize: 1252 mediaType: application/vnd.docker.distribution.manifest.v2+json os: linux - architecture: arm64 digest: sha256:6ec8ad0d897bcdf727531f7d0b716931728999492709d19d8b09f0d90d57f626 manifestSize: 1252 mediaType: application/vnd.docker.distribution.manifest.v2+json os: linux - architecture: ppc64le digest: sha256:65949e3a80349cdc42acd8c5b34cde6ebc3241eae8daaeea458498fedb359a6a manifestSize: 1252 mediaType: application/vnd.docker.distribution.manifest.v2+json os: linux - architecture: s390x digest: sha256:75f4fa21224b5d5d511bea8f92dfa8e1c00231e5c81ab95e83c3013d245d1719 manifestSize: 1252 mediaType: application/vnd.docker.distribution.manifest.v2+json os: linux