6.2. OpenShift Virtualization コンポーネントのノードの指定
ノードの配置ルールを設定して、OpenShift Virtualization Operator、ワークロード、およびコントローラーをデプロイするノードを指定します。
OpenShift Virtualization のインストール後に一部のコンポーネントのノードの配置を設定できますが、ワークロード用にノードの配置を設定する場合には仮想マシンを含めることはできません。
6.2.1. 仮想化コンポーネントのノード配置について
OpenShift Virtualization がそのコンポーネントをデプロイする場所をカスタマイズして、以下を確認する必要がある場合があります。
- 仮想マシンは、仮想化ワークロード用のノードにのみデプロイされる。
- Operator はインフラストラクチャーノードにのみデプロイされる。
- 特定のノードは OpenShift Virtualization の影響を受けない。たとえば、クラスターで実行される仮想化に関連しないワークロードがあり、それらのワークロードを OpenShift Virtualization から分離する必要があるとします。
6.2.1.1. ノードの配置ルールを仮想化コンポーネントに適用する方法
対応するオブジェクトを直接編集するか、または Web コンソールを使用して、コンポーネントのノードの配置ルールを指定できます。
-
Operator Lifecycle Manager (OLM) がデプロイする OpenShift Virtualization Operator の場合は、OLM
Subscriptionオブジェクトを直接編集します。現時点では、Web コンソールを使用してSubscriptionオブジェクトのノードの配置ルールを設定することはできません。 -
OpenShift Virtualization Operator がデプロイするコンポーネントの場合は、
HyperConvergedオブジェクトを直接編集するか、または OpenShift Virtualization のインストール時に Web コンソールを使用してこれを設定します。 ホストパスプロビジョナーの場合、
HostPathProvisionerオブジェクトを直接編集するか、または Web コンソールを使用してこれを設定します。警告ホストパスプロビジョナーと仮想化コンポーネントを同じノードでスケジュールする必要があります。スケジュールしない場合は、ホストパスプロビジョナーを使用する仮想化 Pod を実行できません。
オブジェクトに応じて、以下のルールタイプを 1 つ以上使用できます。
nodeSelector- Pod は、キーと値のペアまたはこのフィールドで指定したペアを使用してラベルが付けられたノードに Pod をスケジュールできます。ノードには、一覧表示されたすべてのペアに一致するラベルがなければなりません。
affinity- より表現的な構文を使用して、ノードと Pod に一致するルールを設定できます。アフィニティーを使用すると、ルールの適用方法に追加のニュアンスを持たせることができます。たとえば、ルールがハード要件ではなく基本設定になるように指定し、ルールの条件が満たされない場合も Pod がスケジュールされるようにすることができます。
tolerations- 一致するテイントを持つノードで Pod をスケジュールできます。テイントがノードに適用される場合、そのノードはテイントを容認する Pod のみを受け入れます。
6.2.1.2. OLM Subscription オブジェクトのノード配置
OLM が OpenShift Virtualization Operator をデプロイするノードを指定するには、OpenShift Virtualization のインストール時に Subscription オブジェクトを編集します。以下の例に示されるように、spec.config フィールドにノードの配置ルールを追加できます。
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.3
channel: "stable"
config: 1- 1
configフィールドはnodeSelectorおよびtolerationsをサポートしますが、affinityはサポートしません。
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
nodePlacementフィールドは、nodeSelector、affinity、およびtolerationsフィールドをサポートします。
6.2.1.4. HostPathProvisioner オブジェクトのノード配置
ノードの配置ルールは、ホストパスプロビジョナーのインストール時に作成する 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
workloadフィールドは、nodeSelector、affinity、およびtolerationsフィールドをサポートします。
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 Subscription オブジェクトの nodeSelector を使用したノード配置
この例では、OLM が example.io/example-infra-key = example-infra-value のラベルが付けられたノードに 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.3
channel: "stable"
config:
nodeSelector:
example.io/example-infra-key: example-infra-value6.2.2.1.2. 例: OLM Subscription オブジェクトの容認を使用したノード配置
この例では、OLM が OpenShift Virtualization Operator をデプロイするために予約されるノードには 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.3
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 を使用したノード配置
この例では、nodeSelector は、インフラストラクチャーリソースが example.io/example-infra-key = example-infra-value のラベルが付けられたノードに配置されるように設定され、ワークロードは example.io/example-workloads-key = example-workloads-value のラベルが付けられたノードに配置されるように設定されます。
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-value6.2.2.2.2. 例: HyperConverged Cluster CR のアフィニティーを使用したノード配置
この例では、affinity は、インフラストラクチャーリソースが example.io/example-infra-key = example-infra-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:
- 86.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