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. ノード配置ルールの適用

コマンドラインを使用して SubscriptionHyperConverged、または HostPathProvisioner オブジェクトを編集することで、ノード配置ルールを適用できます。

前提条件

  • oc CLI ツールがインストールされている。
  • クラスター管理者の権限でログインしています。

手順

  1. 次のコマンドを実行して、デフォルトのエディターでオブジェクトを編集します。

    $ oc edit <resource_type> <resource_name> -n {CNVNamespace}
  2. 変更を適用するためにファイルを保存します。

5.2.3. ノード配置ルールの例

SubscriptionHyperConverged、または 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.10
  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.10
  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

1
インフラストラクチャーリソースは、example.io/example-infra-key = example-infra-value というラベルの付いたノードに配置されます。
2
ワークロードは、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 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

1
インフラストラクチャーリソースは、example.io/example-infra-key = example-value というラベルの付いたノードに配置されます。
2
ワークロードは、example.io/example-workloads-key = example-workloads-value というラベルの付いたノードに配置されます。
3
ワークロード用には 9 つ以上の CPU を持つノードが優先されますが、それらが利用可能ではない場合も、Pod は依然としてスケジュールされます。

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 フィールドに nodeSelectoraffinity、または 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 というラベルの付いたノードに配置されます。

5.2.4. 関連情報

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.