5.2. OpenShift Virtualization 구성 요소를 위한 노드 지정
베어 메탈 노드의 VM(가상 머신)의 기본 예약이 적합합니다. 선택적으로 노드 배치 규칙을 구성하여 OpenShift Virtualization Operator, 워크로드 및 컨트롤러를 배포할 노드를 지정할 수 있습니다.
OpenShift Virtualization을 설치한 후 일부 구성 요소에 대한 노드 배치 규칙을 구성할 수 있지만 워크로드에 대한 노드 배치 규칙을 구성하려면 가상 머신이 존재할 수 없습니다.
5.2.1. OpenShift Virtualization 구성 요소의 노드 배치 규칙 정보
다음 작업에 노드 배치 규칙을 사용할 수 있습니다.
- 가상화 워크로드를 위한 노드에만 가상 머신을 배포합니다.
- 인프라 노드에만 Operator를 배포합니다.
- 워크로드 분리를 유지 관리합니다.
오브젝트에 따라, 다음 규칙 유형 중 하나 이상을 사용할 수 있습니다.
nodeSelector
- 이 필드에서 지정하는 키-값 쌍으로 라벨이 지정된 노드에 Pod를 예약할 수 있습니다. 노드에는 나열된 모든 쌍과 정확히 일치하는 라벨이 있어야 합니다.
유사성
- 더 많은 표현 구문을 사용하여 노드와 Pod의 일치 규칙을 설정할 수 있습니다. 유사성을 사용하면 규칙 적용 방법을 보다 자세하게 설정할 수 있습니다. 예를 들어 규칙은 요구 사항이 아닌 기본 설정임을 지정할 수 있습니다. 규칙이 기본 설정인 경우 규칙이 충족되지 않으면 Pod가 계속 예약됩니다.
허용 오차
- 일치하는 테인트가 있는 노드에 Pod를 예약할 수 있습니다. 테인트가 노드에 적용되는 경우, 해당 노드는 테인트를 허용하는 Pod만 허용합니다.
5.2.2. 노드 배치 규칙 적용
명령줄을 사용하여 Subscription
,HyperConverged
또는 HostPathProvisioner
오브젝트를 편집하여 노드 배치 규칙을 적용할 수 있습니다.
사전 요구 사항
-
oc
CLI 툴이 설치되어 있습니다. - 클러스터 관리자 권한으로 로그인되어 있습니다.
프로세스
다음 명령을 실행하여 기본 편집기에서 오브젝트를 편집합니다.
$ oc edit <resource_type> <resource_name> -n {CNVNamespace}
- 파일을 저장하여 변경 사항을 적용합니다.
5.2.3. 노드 배치 규칙 예
Subscription
,HyperConverged
또는 HostPathProvisioner
오브젝트를 편집하여 OpenShift Virtualization 구성 요소에 대한 노드 배치 규칙을 지정할 수 있습니다.
5.2.3.1. 서브스크립션 오브젝트 노드 배치 규칙 예
OLM이 OpenShift Virtualization Operator를 배포하는 노드를 지정하려면, OpenShift Virtualization 설치 중에 서브스크립션
오브젝트를 편집합니다.
현재는 웹 콘솔을 사용하여 서브스크립션
오브젝트에 대한 노드 배치 규칙을 구성할 수 없습니다.
Subscription
오브젝트는 유사성
노드 pplacement 규칙을 지원하지 않습니다.
nodeSelector
규칙이 있는 Subscription
오브젝트의 예
apiVersion: operators.coreos.com/v1alpha1
kind: Subscription
metadata:
name: hco-operatorhub
namespace: openshift-cnv
spec:
source: redhat-operators
sourceNamespace: openshift-marketplace
name: kubevirt-hyperconverged
startingCSV: kubevirt-hyperconverged-operator.v4.15.6
channel: "stable"
config:
nodeSelector:
example.io/example-infra-key: example-infra-value 1
- 1
- OLM은
example.io/example-infra-key = example-infra-value
레이블이 지정된 노드에 OpenShift Virtualization Operator를 배포합니다.
허용 오차
규칙이 있는 Subscription
오브젝트의 예
apiVersion: operators.coreos.com/v1alpha1
kind: Subscription
metadata:
name: hco-operatorhub
namespace: openshift-cnv
spec:
source: redhat-operators
sourceNamespace: openshift-marketplace
name: kubevirt-hyperconverged
startingCSV: kubevirt-hyperconverged-operator.v4.15.6
channel: "stable"
config:
tolerations:
- key: "key"
operator: "Equal"
value: "virtualization" 1
effect: "NoSchedule"
- 1
- OLM은
key = virtualization:NoSchedule
테인트에 레이블이 지정된 노드에 OpenShift Virtualization Operator를 배포합니다. 허용 오차가 일치하는 Pod만 이러한 노드에 예약됩니다.
5.2.3.2. HyperConverged 오브젝트 노드 배치 규칙 예
OpenShift Virtualization이 구성 요소를 배포하는 노드를 지정하려면 OpenShift Virtualization을 설치하는 동안 생성한 HyperConverged CR(사용자 정의 리소스) 파일에서 nodePlacement
오브젝트를 편집할 수 있습니다.
nodeSelector
규칙이 있는 HyperConverged
오브젝트의 예
apiVersion: hco.kubevirt.io/v1beta1 kind: HyperConverged metadata: name: kubevirt-hyperconverged namespace: openshift-cnv spec: infra: nodePlacement: nodeSelector: example.io/example-infra-key: example-infra-value 1 workloads: nodePlacement: nodeSelector: example.io/example-workloads-key: example-workloads-value 2
유사성
규칙이 있는 HyperConverged
오브젝트의 예
apiVersion: hco.kubevirt.io/v1beta1 kind: HyperConverged metadata: name: kubevirt-hyperconverged namespace: openshift-cnv spec: infra: nodePlacement: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: example.io/example-infra-key operator: In values: - example-infra-value 1 workloads: nodePlacement: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: example.io/example-workloads-key 2 operator: In values: - example-workloads-value preferredDuringSchedulingIgnoredDuringExecution: - weight: 1 preference: matchExpressions: - key: example.io/num-cpus operator: Gt values: - 8 3
허용 오차
규칙이 있는 HyperConverged
오브젝트의 예
apiVersion: hco.kubevirt.io/v1beta1
kind: HyperConverged
metadata:
name: kubevirt-hyperconverged
namespace: openshift-cnv
spec:
workloads:
nodePlacement:
tolerations: 1
- key: "key"
operator: "Equal"
value: "virtualization"
effect: "NoSchedule"
- 1
- OpenShift Virtualization 구성 요소로 예약된 노드는
key = virtualization:NoSchedule
테인트로 레이블이 지정됩니다. 허용 오차가 일치하는 Pod만 예약된 노드에 예약됩니다.
5.2.3.3. HostPathProvisioner 오브젝트 노드 배치 규칙의 예
직접 또는 웹 콘솔을 사용하여 HostPathProvisioner
오브젝트를 편집할 수 있습니다.
동일한 노드에 hostpath 프로비전 프로그램 및 OpenShift Virtualization 구성 요소를 예약해야 합니다. 예약하지 않으면 hostpath 프로비전 프로그램을 사용하는 가상화 Pod를 실행할 수 없습니다. 가상 머신을 실행할 수 없습니다.
HPP(Hostpath provisioner) 스토리지 클래스를 사용하여 VM(가상 머신)을 배포한 후 노드 선택기를 사용하여 동일한 노드에서 hostpath 프로비저너 Pod를 제거할 수 있습니다. 그러나 VM을 삭제하기 전에 먼저 특정 노드의 경우 해당 변경 사항을 되돌리고 Pod가 실행될 때까지 기다려야 합니다.
hostpath 프로비전 프로그램을 설치할 때 생성하는 HostPathProvisioner
오브젝트의 spec.workload
필드에 nodeSelector
,affinity
또는 tolerations
를 지정하여 노드 배치 규칙을 구성할 수 있습니다.
nodeSelector
규칙이 있는 HostPathProvisioner
오브젝트의 예
apiVersion: hostpathprovisioner.kubevirt.io/v1beta1
kind: HostPathProvisioner
metadata:
name: hostpath-provisioner
spec:
imagePullPolicy: IfNotPresent
pathConfig:
path: "</path/to/backing/directory>"
useNamingPrefix: false
workload:
nodeSelector:
example.io/example-workloads-key: example-workloads-value 1
- 1
- 워크로드는
example.io/example-workloads-key = example-workloads-value
라벨이 지정된 노드에 배치됩니다.