5.2. OpenShift Virtualization コンポーネントのノードの指定
ベアメタルノード上の仮想マシンのデフォルトのスケジューリングは適切です。任意で、ノードの配置ルールを設定して、OpenShift Virtualization Operator、ワークロード、およびコントローラーをデプロイするノードを指定できます。
OpenShift Virtualization のインストール後に一部のコンポーネントに対してノード配置ルールを設定できますが、ワークロードに対してノード配置ルールを設定する場合は仮想マシンが存在できません。
5.2.1. OpenShift Virtualization コンポーネントのノード配置ルールについて リンクのコピーリンクがクリップボードにコピーされました!
ノード配置ルールは次のタスクに使用できます。
- 仮想マシンは、仮想化ワークロードを対象としたノードにのみデプロイしてください。
- Operator はインフラストラクチャーノードにのみデプロイメントします。
- ワークロード間の分離を維持します。
オブジェクトに応じて、以下のルールタイプを 1 つ以上使用できます。
nodeSelector- このフィールドで指定したキーと値のペアでラベル付けされたノードで Pod をスケジュールできるようにします。ノードには、リスト表示されたすべてのペアに一致するラベルがなければなりません。
affinity- より表現的な構文を使用して、ノードと Pod に一致するルールを設定できます。アフィニティーを使用すると、ルールの適用方法に追加のニュアンスを持たせることができます。たとえば、ルールが要件ではなく設定であると指定できます。ルールが優先の場合、ルールが満たされていない場合でも Pod はスケジュールされます。
tolerations- 一致する taint を持つノードに Pod をスケジュールすることを許容します。ノードに taint が適用されると、そのノードはその taint を許容する Pod のみを受け入れます。
5.2.2. ノード配置ルールの適用 リンクのコピーリンクがクリップボードにコピーされました!
コマンドラインを使用して Subscription、HyperConverged、または HostPathProvisioner オブジェクトを編集することで、ノード配置ルールを適用できます。
前提条件
-
ocCLI ツールがインストールされている。 - クラスター管理者の権限でログインしています。
手順
次のコマンドを実行して、デフォルトのエディターでオブジェクトを編集します。
$ oc edit <resource_type> <resource_name> -n openshift-cnv- 変更を適用するためにファイルを保存します。
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.15.10
channel: "stable"
config:
nodeSelector:
example.io/example-infra-key: example-infra-value
- 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.15.10
channel: "stable"
config:
tolerations:
- key: "key"
operator: "Equal"
value: "virtualization"
effect: "NoSchedule"
- 1
- OLM は、
key = virtualization:NoScheduletaint のラベルが付けられているノードに OpenShift Virtualization Operator をデプロイします。このノードには、一致する toleration を持つ 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
workloads:
nodePlacement:
nodeSelector:
example.io/example-workloads-key: example-workloads-value
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
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
tolerations ルールを備えた HyperConverged オブジェクトの例
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"
- 1
- OpenShift Virtualization コンポーネント用に予約されているノードには、
key = virtualization:NoScheduletaint のラベルが付けられています。予約済みノードには、一致する toleration を持つ 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
- ワークロードは、
example.io/example-workloads-key = example-workloads-valueというラベルの付いたノードに配置されます。