5.2. OpenShift Virtualization コンポーネントのノードの指定
ベアメタルノード上の仮想マシンのデフォルトのスケジューリングは適切です。任意で、ノードの配置ルールを設定して、OpenShift Virtualization Operator、ワークロード、およびコントローラーをデプロイするノードを指定できます。
OpenShift Virtualization のインストール後に一部のコンポーネントに対してノード配置ルールを設定できますが、ワークロードに対してノード配置ルールを設定する場合は仮想マシンが存在できません。
5.2.1. OpenShift Virtualization コンポーネントのノード配置ルールについて
ノード配置ルールは次のタスクに使用できます。
- 仮想マシンは、仮想化ワークロードを対象としたノードにのみデプロイしてください。
- Operator はインフラストラクチャーノードにのみデプロイメントします。
- ワークロード間の分離を維持します。
オブジェクトに応じて、以下のルールタイプを 1 つ以上使用できます。
nodeSelector
- Pod は、キーと値のペアまたはこのフィールドで指定したペアを使用してラベルが付けられたノードに Pod をスケジュールできます。ノードには、リスト表示されたすべてのペアに一致するラベルがなければなりません。
affinity
- より表現的な構文を使用して、ノードと Pod に一致するルールを設定できます。アフィニティーを使用すると、ルールの適用方法に追加のニュアンスを持たせることができます。たとえば、ルールが要件ではなく設定であると指定できます。ルールが優先の場合、ルールが満たされていない場合でも Pod はスケジュールされます。
tolerations
- 一致するテイントを持つノードで 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
オブジェクトを編集します。
現時点では、Web コンソールを使用して Subscription
オブジェクトのノードの配置ルールを設定することはできません。
Subscription
オブジェクトは、affinity
ノードの配置ルールをサポートしていません。
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.14.9
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 をデプロイします。
tolerations
ルールを備えた 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.14.9
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
affinity
ルールを使用した 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
tolerations
ルールを備えた 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
オブジェクトは、直接編集することも、Web コンソールを使用して編集することもできます。
ホストパスプロビジョナーと OpenShift Virtualization コンポーネントを同じノード上でスケジュールする必要があります。スケジュールしない場合は、ホストパスプロビジョナーを使用する仮想化 Pod を実行できません。仮想マシンを実行することはできません。
ホストパスプロビジョナー (HPP) ストレージクラスを使用して仮想マシン (VM) をデプロイした後、ノードセレクターを使用して同じノードからホストパスプロビジョナー Pod を削除できます。ただし、少なくともその特定のノードについては、まずその変更を元に戻し、仮想マシンを削除しようとする前に Pod が実行されるのを待つ必要があります。
ノード配置ルールを設定するには、ホストパスプロビジョナーのインストール時に作成する 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
というラベルの付いたノードに配置されます。