6.2. OpenShift Virtualization 구성 요소를 위한 노드 지정
노드 배치 규칙을 구성하여 OpenShift Virtualization Operator, 워크로드 및 컨트롤러를 배포할 노드를 지정합니다.
OpenShift Virtualization을 설치한 후에는 일부 구성 요소에 대한 노드 배치를 구성할 수 있지만, 워크로드에 대한 노드 배치를 구성하려면 가상 머신이 없어야 합니다.
6.2.1. 가상화 구성 요소를 위한 노드 배치 정보
다음이 수행되도록 OpenShift Virtualization이 구성 요소를 배포하는 위치를 사용자 지정하는 것이 좋습니다.
- 가상 머신은 가상화 워크로드를 위한 노드에만 배포됩니다.
- Operator는 인프라 노드에만 배포됩니다.
- 특정 노드는 OpenShift Virtualization의 영향을 받지 않습니다. 예를 들어, 클러스터에서 실행되는 가상화와 관련이 없는 워크로드가 있으며 해당 워크로드가 OpenShift Virtualization과 격리되기를 원하는 경우가 이에 해당합니다.
6.2.1.1. 가상화 구성 요소에 노드 배치 규칙을 적용하는 방법
해당 오브젝트를 직접 편집하거나 웹 콘솔을 사용하여 구성 요소의 노드 배치 규칙을 지정할 수 있습니다.
-
OLM(Operator Lifecycle Manager)이 배포하는 OpenShift Virtualization Operator의 경우, OLM
서브스크립션
오브젝트를 직접 편집합니다. 현재는 웹 콘솔을 사용하여서브스크립션
오브젝트에 대한 노드 배치 규칙을 구성할 수 없습니다. -
OpenShift Virtualization Operator가 배포하는 구성 요소의 경우, OpenShift Virtualization 설치 중에 웹 콘솔을 사용하여
HyperConverged
오브젝트를 직접 편집하거나 구성합니다. hostpath 프로비전 프로그램의 경우,
HostPathProvisioner
오브젝트를 직접 편집하거나 웹 콘솔을 사용하여 이를 구성합니다.주의hostpath 프로비전 프로그램과 가상화 구성 요소를 동일한 노드에 예약해야 합니다. 예약하지 않으면 hostpath 프로비전 프로그램을 사용하는 가상화 Pod를 실행할 수 없습니다.
오브젝트에 따라, 다음 규칙 유형 중 하나 이상을 사용할 수 있습니다.
nodeSelector
- 이 필드에서 지정하는 키-값 쌍으로 라벨이 지정된 노드에 Pod를 예약할 수 있습니다. 노드에는 나열된 모든 쌍과 정확히 일치하는 라벨이 있어야 합니다.
유사성
- 더 많은 표현 구문을 사용하여 노드와 Pod의 일치 규칙을 설정할 수 있습니다. 유사성을 사용하면 규칙 적용 방법을 보다 자세하게 설정할 수 있습니다. 예를 들어, 규칙을 엄격한 요구 사항이 아닌 기본 설정으로 지정할 수 있으므로 규칙이 충족되지 않은 경우에도 Pod를 예약할 수 있습니다.
허용 오차
- 일치하는 테인트가 있는 노드에 Pod를 예약할 수 있습니다. 테인트가 노드에 적용되는 경우, 해당 노드는 테인트를 허용하는 Pod만 허용합니다.
6.2.1.2. OLM 서브스크립션 오브젝트에서의 노드 배치
OLM이 OpenShift Virtualization Operator를 배포하는 노드를 지정하려면, OpenShift Virtualization 설치 중에 서브스크립션
오브젝트를 편집합니다. 다음 예와 같이 spec.config
필드에 노드 배치 규칙을 추가할 수 있습니다.
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.13.11
channel: "stable"
config: 1
- 1
config
필드는nodeSelector
및허용 오차
를 지원하지만유사성
은 지원되지 않습니다.
6.2.1.3. HyperConverged 오브젝트에서의 노드 배치
OpenShift Virtualization이 해당 구성 요소를 배포하는 노드를 지정하려면 OpenShift Virtualization을 설치하는 동안 생성한 HyperConverged Cluster 사용자 정의 리소스(CR) 파일에 nodePlacement
개체를 포함할 수 있습니다. 다음 예와 같이 spec.infra
및 spec.workloads
필드에 nodePlacement
를 추가할 수 있습니다.
apiVersion: hco.kubevirt.io/v1beta1
kind: HyperConverged
metadata:
name: kubevirt-hyperconverged
namespace: openshift-cnv
spec:
infra:
nodePlacement: 1
...
workloads:
nodePlacement:
...
- 1
- The
nodePlacement
필드는nodeSelector
,affinity
및tolerations
필드를 지원합니다.
6.2.1.4. HostPathProvisioner 오브젝트에서의 노드 배치
hostpath 프로비전 프로그램을 설치할 때 생성할 HostPathProvisioner
오브젝트의 spec.workload
필드에 노드 배치 규칙을 구성할 수 있습니다.
apiVersion: hostpathprovisioner.kubevirt.io/v1beta1
kind: HostPathProvisioner
metadata:
name: hostpath-provisioner
spec:
imagePullPolicy: IfNotPresent
pathConfig:
path: "</path/to/backing/directory>"
useNamingPrefix: false
workload: 1
- 1
워크로드
필드는nodeSelector
,유사성
및허용 오차
필드를 지원합니다.
6.2.1.5. 추가 리소스
6.2.2. 예시 매니페스트
다음 예시 YAML 파일은 nodePlacement
, affinity
및 tolerations
오브젝트를 사용하여 OpenShift Virtualization 구성 요소를 위한 노드 배치를 사용자 지정합니다.
6.2.2.1. Operator Lifecycle Manager 서브스크립션 오브젝트
6.2.2.1.1. 예: OLM 서브스크립션 오브젝트에서 nodeSelector를 사용한 노드 배치
이 예에서는 example.io/example-infra-key = example-infra-value
로 라벨이 지정된 노드에 OLM이 OpenShift Virtualization Operator를 배치하도록 nodeSelector
를 구성합니다.
apiVersion: operators.coreos.com/v1beta1 kind: Subscription metadata: name: hco-operatorhub namespace: openshift-cnv spec: source: redhat-operators sourceNamespace: openshift-marketplace name: kubevirt-hyperconverged startingCSV: kubevirt-hyperconverged-operator.v4.13.11 channel: "stable" config: nodeSelector: example.io/example-infra-key: example-infra-value
6.2.2.1.2. 예: OLM 서브스크립션 오브젝트에서 허용 오차를 사용한 노드 배치
이 예에서는 OpenShift Virtualization Operator를 배포하기 위해 OLM에 예약된 노드가 key=virtualization:NoSchedule
테인트로 라벨이 지정됩니다. 허용 오차가 일치하는 Pod만 이러한 노드에 예약됩니다.
apiVersion: operators.coreos.com/v1beta1 kind: Subscription metadata: name: hco-operatorhub namespace: openshift-cnv spec: source: redhat-operators sourceNamespace: openshift-marketplace name: kubevirt-hyperconverged startingCSV: kubevirt-hyperconverged-operator.v4.13.11 channel: "stable" config: tolerations: - key: "key" operator: "Equal" value: "virtualization" effect: "NoSchedule"
6.2.2.2. HyperConverged 오브젝트
6.2.2.2.1. 예: HyperConverged Cluster CR에서 nodeSelector를 사용한 노드 배치
이 예에서는 인프라 리소스가 example.io/example-infra-key = example-infra-value
로 라벨이 지정된 노드에 배치되고 워크로드가 example.io/example-workloads-key = example-workloads-value
로 라벨이 지정된 노드에 배치되도록 nodeSelector
가 구성됩니다.
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 workloads: nodePlacement: nodeSelector: example.io/example-workloads-key: example-workloads-value
6.2.2.2.2. 예: HyperConverged Cluster CR에서 유사성을 사용한 노드 배치
이 예에서는 인프라 리소스가 example.io/example-infra-key = example-value
로 라벨이 지정된 노드에 배치되고 워크로드가 example.io/example-workloads-key = example-workloads-value
로 라벨이 지정된 노드에 배치되도록 유사성
이 구성됩니다. 워크로드에 9개 이상의 CPU를 사용하는 것이 좋지만, 사용할 수 없는 경우에도 Pod가 예약됩니다.
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 workloads: nodePlacement: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: example.io/example-workloads-key operator: In values: - example-workloads-value preferredDuringSchedulingIgnoredDuringExecution: - weight: 1 preference: matchExpressions: - key: example.io/num-cpus operator: Gt values: - 8
6.2.2.2.3. 예: HyperConverged Cluster CR에서 허용 오차를 사용한 노드 배치
이 예에서는 OpenShift Virtualization 구성 요소를 위해 예약된 노드가 key=virtualization:NoSchedule
테인트로 라벨이 지정됩니다. 허용 오차가 일치하는 Pod만 이러한 노드에 예약됩니다.
apiVersion: hco.kubevirt.io/v1beta1 kind: HyperConverged metadata: name: kubevirt-hyperconverged namespace: openshift-cnv spec: workloads: nodePlacement: tolerations: - key: "key" operator: "Equal" value: "virtualization" effect: "NoSchedule"
6.2.2.3. HostPathProvisioner 오브젝트
6.2.2.3.1. 예: HostPathProvisioner 오브젝트에서 nodeSelector를 사용한 노드 배치
이 예에서는 라벨이 example.io/example-workloads-key = example-workloads-value
로 지정된 노드에 워크로드가 배치되도록 nodeSelector
가 구성됩니다.
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