OpenShift Virtualization
OpenShift Virtualization のインストール、使用方法、およびリリースノート
概要
第1章 OpenShift Virtualization について
OpenShift Virtualization の機能およびサポート範囲について確認します。
1.1. OpenShift Virtualization の機能
OpenShift Virtualization は OpenShift Container Platform の機能であり、これを使用することにより仮想マシンのワークロードを実行し、コンテナーのワークロードと共に管理することができます。
OpenShift Virtualization は、Kubernetes カスタムリソースにより新規オブジェクトを OpenShift Container Platform クラスターに追加し、仮想化タスクを有効にします。これらのタスクには、以下が含まれます。
- Linux および Windows 仮想マシンの作成と管理
- 各種コンソールおよび CLI ツールの使用による仮想マシンへの接続
- 既存の仮想マシンのインポートおよびクローン作成
- ネットワークインターフェイスコントローラーおよび仮想マシンに割り当てられたストレージディスクの管理
- 仮想マシンのノード間でのライブマイグレーション
機能強化された Web コンソールは、これらの仮想化されたリソースを OpenShift Container Platform クラスターコンテナーおよびインフラストラクチャーと共に管理するためのグラフィカルポータルを提供します。
OpenShift Virtualization は OpenShift Container Storage (OCS) でテストされ、最適なエクスペリエンスを得るために OCS 機能と共に使用するように設計されています。
OVN-Kubernetes または OpenShiftSDN のデフォルトの Container Network Interface (CNI) ネットワークプロバイダーのいずれかで OpenShift Virtualization を使用できます。
1.1.1. OpenShift Virtualization のサポートクラスターバージョン
OpenShift Virtualization 2.4 は OpenShift Container Platform 4.5 クラスターで使用するためにサポートされます。
第2章 OpenShift Virtualization リリースノート
2.1. Red Hat OpenShift Virtualization について
Red Hat OpenShift Virtualization は OpenShift Container Platform 4.5 クラスターで使用するためにサポートされます。以前のバージョンで Container-native Virtualization として知られていた OpenShift Virtualization は、従来の仮想マシンをコンテナーと共に実行される OpenShift Container Platform に組み込み、それらをネイティブ Kubernetes オブジェクトとして管理することを可能にします。
OpenShift Virtualization は新たなロゴによって表されます。

2.1.1. OpenShift Virtualization の機能
OpenShift Virtualization は OpenShift Container Platform の機能であり、これを使用することにより仮想マシンのワークロードを実行し、コンテナーのワークロードと共に管理することができます。
OpenShift Virtualization は、Kubernetes カスタムリソースにより新規オブジェクトを OpenShift Container Platform クラスターに追加し、仮想化タスクを有効にします。これらのタスクには、以下が含まれます。
- Linux および Windows 仮想マシンの作成と管理
- 各種コンソールおよび CLI ツールの使用による仮想マシンへの接続
- 既存の仮想マシンのインポートおよびクローン作成
- ネットワークインターフェイスコントローラーおよび仮想マシンに割り当てられたストレージディスクの管理
- 仮想マシンのノード間でのライブマイグレーション
機能強化された Web コンソールは、これらの仮想化されたリソースを OpenShift Container Platform クラスターコンテナーおよびインフラストラクチャーと共に管理するためのグラフィカルポータルを提供します。
OpenShift Virtualization は OpenShift Container Storage (OCS) でテストされ、最適なエクスペリエンスを得るために OCS 機能と共に使用するように設計されています。
OVN-Kubernetes または OpenShiftSDN のデフォルトの Container Network Interface (CNI) ネットワークプロバイダーのいずれかで OpenShift Virtualization を使用できます。
2.2. 新機能および変更された機能
- CLI を使用して OpenShift Container Virtualization をインストール し、マニフェストを OpenShift Container Platform に適用できるようになりました。
OpenShift Virtualization は、Windows Server のワークロードを実行する Microsoft の Windows Server Virtualization Validation Program (SVVP) で認定されています。
SVVP の認定は以下に適用されます。
- Red Hat Enterprise Linux CoreOS 8 ワーカー。Microsoft SVVP Catalog では、Red Hat OpenShift Container Platform 4 on RHEL CoreOS 8 という名前が付けられます。
- Intel および AMD CPU。
- OpenShift Virtualization は、TLS 証明書を一定間隔でローテーションし、更新します。この自動プロセスは、いずれの操作も中断しません。
- 本リリースでは、セキュリティーが大幅に強化されました。OpenShift Virtualization は、仮想マシン (VM) を分離するために Mandatory Access Control (MAC) と共に SELinux をサポートします。以前のバージョンでは、すべての仮想マシンは特権付き SCC (Security Context Constraints) を使用して管理されていました。今回のリリースより、仮想マシンには低いレベル特権の付いたカスタム SCC を使用でき、特権付き SCC の使用をクラスター内のインフラストラクチャーに制限できるようになりました。
-
これで、RHEL 仮想マシン用の Red Hat Enterprise Linux エンタイトルメントへのアクセスが可能になります。OpenShift Container Platform クラスターで実行中の仮想マシンを報告するように
virt-who
デーモンを設定します。これにより、RHEL VM の Red Hat Subscription Manager にエンタイトルメントへのアクセスが付与されます。
2.2.1. サポート対象のゲストオペレーティングシステム
OpenShift Virtualization ゲストは以下のオペレーティングシステムを使用できます。
- Red Hat Enterprise Linux 6, 7, and 8。
- Microsoft Windows Server 2012 R2、2016、および 2019。
- Microsoft Windows 10。
OpenShift Virtualization に同梱される他のオペレーティングシステムテンプレートはサポートされていません。
2.2.2. ネットワーク
- OpenShift Virtualization は、SR-IOV (Single Root I/O Virtualization) Operator と統合されました。クラスター内の SR-IOV ネットワークに仮想マシンを割り当てる ことができるようになりました。
- MAC アドレスプール が OpenShift Virtualization でサポートされるようになりました。これはクラスター内でデフォルトで無効にされ、namespace ごとに有効にできます。
2.2.3. ストレージ
- Web コンソールで ディスクをマシンに追加する 際に、仮想ディスクの Volume Mode および Access Mode を設定できるようになりました。これは、ディスクを ウィザードを使用して新規仮想マシンに追加する にも可能です。
- OpenShift Container Storage (OCS) を OpenShift Virtualization で使用すると、耐障害性のあるストレージやノード間のライブマイグレーション機能の利点が得られます。
-
Containerized Data Importer (CDI) を使用して、CPU およびメモリーリソースの制限が適用される namespace に仮想マシンディスクをインポートし、アップロードし、そのクローンを作成できるようになりました。デフォルトのコンピュートリソース制限は
0
に設定されますが、管理者は CDI ワーカー Pod に適用されるリソース制限を設定できます。
-
virtctl
ツールでは、仮想マシンディスクをクラスターにアップロードする際にDataVolume
を使用できるようになりました。これは、アップロードの完了前に仮想マシンが誤って起動することを防ぐのに役立ちます。
- OpenShift Container Storage DataVolume には、仮想ディスクのインポート、クローン、およびアップロード操作の状態を簡単に理解できるようにする状態およびイベントを表示され、さらに強化されました。また、状態とイベントはトラブルシューティングを単純にできます。
2.2.4. Web コンソール
- Web コンソールでは、サイドバーの項目の Virtual Machines および Virtual Machine Templates が、 Virtualization というラベルが付けられた単一のサイドバーメニュー項目に置き換えられました。Virtualization をクリックすると、Virtual Machines と Virtual Machine Templates の 2 つのタブを使用できます。
- Virtual Machine Details ページの Scheduling and resources requirements セクションにアクセスして、仮想マシンのスケジューリングプロパティーを設定できるようになりました。たとえば、テイントのマークが付けられたノードのアフィニティールール、専用リソース、容認 (Toleration) を表示し、管理できます。また、ノードセレクターを使用して、特定のキー/値のペアに一致するラベルを持つノードを検索することもできます。
- OpenShift Container Platform Web コンソールの Virtual Machine Overview → Environment ページの仮想マシンに、シークレット、ConfigMap、およびサービスアカウント を追加できるようになりました。同じページでこれらのリソースを削除することもできます。
2.3. 主な技術上の変更点
- OpenShift Virtualization は、インターネット接続を持たないネットワークが制限された環境の非接続クラスターにインストールできます。OpenShift Virtualization Operator のローカルミラーを作成し、非接続クラスターがアクセスできるローカルカタログイメージから Operator をインストールできます。ネットワークが制限されたクラスターへの OpenShift Virtualization のインストールに ついて参照してください。
- 仮想マシンウィザードまたは CLI を使用して、単一の Red Hat Virtualization 仮想マシンをインポートできます。
-
OpenShift Virtualization のすべてのコンポーネントは、独自の API サブグループ
<component_name>.kubevirt.io
を使用するようになりました。
2.4. 既知の問題
-
KubeMacPool ラベルを適用し、その namespace の仮想マシンの
io
属性を使用して namespace の MAC アドレスプールを有効にする場合、仮想マシンに対してio
属性設定は保持されません。回避策として、仮想マシンにio
属性を使用しないでください。または、namespace に対して KubeMacPool を無効にすることができます。(BZ#1869527) Container-native Virtualization 2.3 が OpenShift Container Platform 4.4 クラスターにインストールされている場合、クラスターをバージョン 4.5 にアップグレードすると、仮想マシンインスタンス (VMI) の移行が失敗する可能性があります。これは、virt-launcher Pod が virt-handler Pod に対し、移行が失敗したことを正常に通知しないために生じます。この結果、ソース VMI
migrationState
は更新されません。(BZ#1859661)回避策として、VMI が実行されているソースノードで virt-handler Pod を削除します。これにより、virt-handler Pod が再起動され、VMI のステータスが更新され、VMI の移行が再開します。
VMI が実行されているソースノードの名前を見つけます。
$ oc get vmi -o wide
ソースノードで virt-handler Pod を削除します。
$ oc delete pod -n openshift-cnv --selector=kubevirt.io=virt-handler --field-selector=spec.nodeName=<source-node-name> 1
- 1
- ここで、<source-node-name> は VMI の移行元のソースノードの名前です。
以前のバージョンの OpenShift Virtualization の共通テンプレートでは、デフォルトの
spec.terminationGracePeriodSeconds
の値が0
でした。これらの古い共通テンプレートから作成された仮想マシンでは、ディスクが強制的に終了されることに関連する問題が生じる可能性があります。
OpenShift Virtualization 2.4 にアップグレードする場合には、オペレーティングシステム、ワークロード、およびフレーバーの組み合わせごとに、古いバージョンと新しいバージョンの共通テンプレートが利用できます。共通のテンプレートを使用して仮想マシンを作成する場合、新しいバージョンのテンプレートを使用する必要があります。問題を回避するために、古いバージョンを無視します。(BZ#1859235)仮想マシンがこのバグの影響を受けるかどうかを確認するには、仮想マシンの namespace で以下のコマンドを実行して
spec.terminationGracePeriodSeconds
の値を判別します。$ oc get vm <virtual-machine-name> -o yaml | grep "terminationGracePeriodSeconds"
仮想マシンの
terminationGracePeriodSeconds
の値が0
の場合、Linux 仮想マシンの場合はspec.terminationGracePeriodSeconds
の値が180
で、Windows 仮想マシンの場合は3600
の値で仮想マシン設定にパッチを適用します。$ oc patch vm <virtual-machine-name> --type merge -p '{"spec":{"template":{"spec":{"terminationGracePeriodSeconds":180}}}}'
ライブマイグレーションを実行できない仮想マシンを実行すると、OpenShift Container Platform クラスターのアップグレードがブロックされる可能性があります。これには、hostpath-provisioner ストレージまたは SR-IOV ネットワークインターフェイスを使用する仮想マシンが含まれます。回避策として、仮想マシンを再設定し、クラスターのアップグレード時にそれらの電源をオフになるようにできます。仮想マシン設定ファイルの
spec
セクションで、以下を実行します。-
evictionStrategy: LiveMigrate
フィールドを削除します。エビクションストラテジーの設定方法についての詳細は、仮想マシンのエビクションストラテジーの設定 について参照してください。 -
runStrategy
フィールドをAlways
に設定します。
-
-
不明な理由により、
containerDisk
ボリュームタイプのメモリー消費量が、メモリー制限を超えるまで徐々に増加する可能性があります。この問題を解決するには、仮想マシンを再起動します。(BZ#1855067) Web コンソールで OpenShift Virtualization Operator のサブスクリプションチャネルを編集しようとする際に、Subscription Overview の Channel ボタンをクリックすると JavaScript エラーが発生することがあります。(BZ#1796410)
回避策として、以下の
oc
patch コマンドを実行して、CLI から OpenShift Virtualization 2.4 へのアップグレードプロセスをトリガーします。$ export TARGET_NAMESPACE=openshift-cnv CNV_CHANNEL=2.4 && oc patch -n "${TARGET_NAMESPACE}" $(oc get subscription -n ${TARGET_NAMESPACE} --no-headers -o name) --type='json' -p='[{"op": "replace", "path": "/spec/channel", "value":"'${CNV_CHANNEL}'"}, {"op": "replace", "path": "/spec/installPlanApproval", "value":"Automatic"}]'
このコマンドは、アップグレードチャネル
2.4
にサブスクリプションをポイントし、自動更新を有効にします。
移行後、仮想マシンには新規の IP アドレスが割り当てられます。ただし、コマンドの
oc get vmi
およびoc describe vmi
は古くなった IP アドレスを含む出力を依然として出力します。(BZ#1686208)回避策として、以下のコマンドを実行して正しい IP アドレスを表示します。
$ oc get pod -o wide
ノードの CPU モデルが異なると、ライブマイグレーションに失敗します。ノードに同じ物理 CPU モデルがある場合でも、マイクロコードの更新によって導入される違いにより同じ状況が生じます。これは、デフォルト設定が、ライブマイグレーションと互換性のないホスト CPU パススルー動作をトリガーするためです。(BZ#1760028)
回避策として、以下の例のように
kubevirt-config
ConfigMap にデフォルトの CPU モデルを設定します。注記ライブマイグレーションをサポートする仮想マシンを起動する前に、この変更を行う必要があります。
以下のコマンドを実行して、編集するために
kubevirt-config
ConfigMap を開きます。$ oc edit configmap kubevirt-config -n openshift-cnv
ConfigMap を編集します。
kind: ConfigMap metadata: name: kubevirt-config data: default-cpu-model: "<cpu-model>" 1
- 1
<cpu-model>
を実際の CPU モデルの値に置き換えます。すべてのノードにoc describe node <node>
を実行し、cpu-model-<name>
ラベルを確認してこの値を判別できます。すべてのノードに存在する CPU モデルを選択します。
OpenShift Virtualization は、
oc adm drain
またはkubectl drain
のいずれかを実行してトリガーされるノードのドレイン (解放) を確実に特定することができません。これらのコマンドは、OpenShift Virtualization がデプロイされているクラスターのノードでは実行しないでください。ノードは、それらの上部で実行されている仮想マシンがある場合にドレイン (解放) を実行しない可能性があります。- 現時点の解決策として、ノードをメンテナーンス状態にする方法があります。
- Red Hat Virtualization (RHV) 仮想マシンを OpenShift Virtualization にインポートするには、カスタム ConfigMap を作成する必要があります。
- ターゲットの仮想マシン名が 63 文字を超える場合は、RHV 仮想マシンをインポートできません。(BZ#1857165)
-
OpenShift Virtualization ストレージ PV が RHV 仮想マシンのインポートに適切でない場合、進捗バーは 10% のままとなり、インポートは完了しません。VM Import Controller Pod ログには、以下のエラーメッセージが表示されます。
Failed to bind volumes: provisioning failed for PVC
(BZ#1857784) RHV 仮想マシンのインポート時に RHV Manager の誤った認証情報を入力すると、
vm-import-operator
が RHV API への接続を繰り返し試行するため、Manager は admin ユーザーアカウントをロックする可能性があります。アカウントのロックを解除するには、Manager にログインし、以下のコマンドを入力します。$ ovirt-aaa-jdbc-tool user unlock admin
-
RHV 仮想マシンディスクが
Locked
状態にある場合は、インポートする前に ディスクのロックを解除 する必要があります。 -
cloud-init
設定は RHV 仮想マシンでインポートされません。インポートプロセス後にcloud-init
を再作成する必要があります。
- OpenShift Virtualization は UEFI をサポートしません。UEFI BIOS を使用して VMware 仮想マシンを OpenShift Virtualization にインポートすると、仮想マシンは起動しません。(BZ#1880083)
第3章 OpenShift Virtualization のインストール
3.1. OpenShift Virtualization のクラスターの設定
OpenShift Virtualization をインストールする前に、OpenShift Container Platform クラスターが以下の要件を満たしていることを確認してください。
- クラスターは、Red Hat Enterprise Linux CoreOS ワーカーを使用して ベアメタルインフラストラクチャー にインストールする必要があります。
- ライブマイグレーションを有効にするには、共有ストレージが必要です。
- コンピュートノードを、クラスター内でホストする仮想マシンの数およびサイズに応じて管理する必要があります。
- OpenShift Virtualization を非接続環境でデプロイするには、Operator Lifecycle Manager をネットワークが制限された環境で設定する 必要があります。
- OpenShift Virtualization でプロキシーを使用するには、Operator Lifecycle Manager でプロキシーサポートを設定する 必要があります。
-
クラスターで複数の CPU ベンダーのワーカーノードを使用する場合、ライブマイグレーションが失敗する可能性があります。たとえば、AMD CPU を持つ仮想マシンは、Intel CPU を持つノードにライブマイグレーションを試み、移行に失敗する可能性があります。これを回避するには、ノードに
Vendor=Intel
またはVendor=AMD
などのベンダー固有のラベルを付け、仮想マシンでノードのアフィニティーを設定し、移行が正常に実行されるようにします。詳細は、ノードアフィニティーの required (必須) ルールの設定 について参照してください。
OpenShift Virtualization はデフォルトで OpenShift Container Platform と連携しますが、以下のインストール設定が推奨されます。
- クラスターで モニターリング を設定します。
OpenShift Container Platform の評価版バージョンを取得するには、OpenShift Container Platform ホームページから評価版をダウンロードしてください。
3.2. Web コンソールを使用した OpenShift Virtualization のインストール
OpenShift Virtualization をインストールし、仮想化機能を OpenShift Container Platform クラスターに追加します。
OpenShift Container Platform 4.5 Web コンソール を使用して、OpenShift Virtualization Operator にサブスクライブし、これをデプロイすることができます。
3.2.1. 前提条件
- OpenShift Container Platform 4.5 をクラスターにインストールします。
-
cluster-admin
パーミッションを持つユーザーとしてログインします。
3.2.2. OpenShift Virtualization カタログのサブスクライブ
OpenShift Virtualization をインストールする前に、OpenShift Container Platform Web コンソールから OpenShift Virtualization カタログにサブスクライブします。サブスクライブにより、openshift-cnv
namespace に OpenShift Virtualization Operator へのアクセスが付与されます。
手順
- ブラウザーウィンドウを開き、OpenShift Container Platform Web コンソールにログインします。
- Operators → OperatorHub ページに移動します。
- OpenShift Virtualization を検索し、これを選択します。
- Operator についての情報を確認してから、Install をクリックします。
Install Operator ページで以下を行います。
インストールされた namespace の場合、Operator recommended namespace オプションが選択されていることを確認します。これにより、Operator が必須の
openshift-cnv
namespace にインストールされます。この namespace は存在しない場合は、自動的に作成されます。警告OpenShift Virtualization Operator を
openshift-cnv
以外の namespace にインストールしようとすると、インストールが失敗します。- 選択可能な Update Channel オプションから 2.4 を選択します。
- Approval Strategyでは、デフォルト値である Automaticが選択されていることを確認します。OpenShift Virtualization は、z-stream の新規リリースが利用可能になると自動的に更新されます。
Install をクリックし、Operator を
openshift-cnv
namespace で利用可能にします。Installed Operators 画面では、OpenShift Virtualization がインストールを終了すると、Status に Succeeded が表示されます。
3.2.3. OpenShift Virtualization のデプロイ
OpenShift Virtualization カタログにサブスクライブした後に、OpenShift Virtualization Operator Deployment カスタムリソースを作成し、OpenShift Virtualization をデプロイします。
前提条件
-
openshift-cnv
namespace の OpenShift Virtualization カタログへのサブスクリプション。
手順
- Operators → Installed Operators ページに移動します。
- OpenShift Virtualization をクリックします。
OpenShift Virtualization Operator Deployment タブをクリックし、Create HyperConverged Cluster をクリックします。
警告デプロイメントのエラーを回避するには、カスタムリソースの名前を変更しないでください。次のステップに進む前に、カスタムリソースの名前がデフォルトの
kubevirt-hyperconverged
であることを確認します。- Create をクリックして OpenShift Virtualization を起動します。
- Workloads → Pods ページに移動して、OpenShift Virtualization Pod がすべて Running 状態になるまでこれらの Pod をモニターします。すべての Pod で Running 状態が表示された後に、OpenShift Virtualization にアクセスできます。
3.2.4. 次のステップ
以下のコンポーネントを追加で設定する必要がある場合があります。
- KubeMacPool コンポーネントは、指定の namespace に仮想マシン NIC の MAC アドレスプールサービスを提供します。KubeMacPool ラベルを namespace に適用して、namespace で MAC アドレスプールを有効にします。
- ホストパスプロビジョナー は、OpenShift Virtualization 用に設計されたローカルストレージプロビジョナーです。仮想マシンのローカルストレージを設定する必要がある場合、まずホストパスプロビジョナーを有効にする必要があります。
3.3. CLI を使用した OpenShift Virtualization のインストール
OpenShift Virtualization をインストールし、仮想化機能を OpenShift Container Platform クラスターに追加します。コマンドラインを使用してマニフェストをクラスターに適用し、OpenShift Virtualization Operator にサブスクライブし、デプロイできます。
3.3.1. 前提条件
- OpenShift Container Platform 4.5 をクラスターにインストールします。
-
OpenShift CLI (
oc
) をインストールします。 -
cluster-admin
権限を持つユーザーとしてログインしている。
3.3.2. CLI を使用した OpenShift Virtualization カタログのサブスクライブ
OpenShift Virtualization をインストールする前に、OpenShift Virtualization カタログにサブスクライブする必要があります。サブスクライブにより、openshift-cnv
namespace に OpenShift Virtualization Operator へのアクセスが付与されます。
単一マニフェストをクラスターに適用して Namespace
、OperatorGroup
、および Subscription
オブジェクトをサブスクライブし、設定します。
手順
以下のマニフェストを含む YAML ファイルを作成します。
apiVersion: v1 kind: Namespace metadata: name: openshift-cnv --- apiVersion: operators.coreos.com/v1 kind: OperatorGroup metadata: name: kubevirt-hyperconverged-group namespace: openshift-cnv spec: targetNamespaces: - openshift-cnv --- 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.v2.4.9 channel: "2.4"
以下のコマンドを実行して、OpenShift Virtualization に必要な
Namespace
、OperatorGroup
、およびSubscription
オブジェクトを作成します。$ oc apply -f <file name>.yaml
3.3.3. CLI を使用した OpenShift Virtualization Operator のデプロイ
oc
CLI を使用して OpenShift Virtualization Operator をデプロイすることができます。
前提条件
-
openshift-cnv
namespace の OpenShift Virtualization カタログへのアクティブなサブスクリプション。
手順
以下のマニフェストを含む YAML ファイルを作成します。
apiVersion: hco.kubevirt.io/v1alpha1 kind: HyperConverged metadata: name: kubevirt-hyperconverged namespace: openshift-cnv spec: BareMetalPlatform: true
以下のコマンドを実行して OpenShift Virtualization Operator をデプロイします。
$ oc apply -f <file name>.yaml
検証
openshift-cnv
namespace の ClusterServiceVersion (CSV) のPHASE
を監視して、OpenShift Virtualization が正常にデプロイされたことを確認します。以下のコマンドを実行します。$ watch oc get csv -n openshift-cnv
以下の出力は、デプロイメントに成功したかどうかを表示します。
出力例
NAME DISPLAY VERSION REPLACES PHASE kubevirt-hyperconverged-operator.v2.4.9 OpenShift Virtualization 2.4.9 Succeeded
3.3.4. 次のステップ
以下のコンポーネントを追加で設定する必要がある場合があります。
- KubeMacPool コンポーネントは、指定の namespace に仮想マシン NIC の MAC アドレスプールサービスを提供します。KubeMacPool ラベルを namespace に適用して、namespace で MAC アドレスプールを有効にします。
- ホストパスプロビジョナー は、OpenShift Virtualization 用に設計されたローカルストレージプロビジョナーです。仮想マシンのローカルストレージを設定する必要がある場合、まずホストパスプロビジョナーを有効にする必要があります。
3.4. virtctl クライアントのインストール
virtctl
クライアントは、OpenShift Virtualization リソースを管理するためのコマンドラインユーティリティーです。
OpenShift Virtualization リポジトリーを有効にし、kubevirt-virtctl
パッケージをインストールしてクライアントをシステムにインストールします。
3.4.1. OpenShift Virtualization リポジトリーの有効化
Red Hat は、Red Hat Enterprise Linux 8 および Red Hat Enterprise Linux 7 向けの OpenShift Virtualization リポジトリーを提供します。
-
Red Hat Enterprise Linux 8 リポジトリー:
cnv-2.4-for-rhel-8-x86_64-rpms
-
Red Hat Enterprise Linux 7 リポジトリー:
rhel-7-server-cnv-2.4-rpms
subscription-manager
でリポジトリーを有効にするプロセスはどちらのプラットフォームでも同様です。
手順
以下のコマンドを実行して、お使いのシステムに適した OpenShift Virtualization リポジトリーを有効にします。
# subscription-manager repos --enable <repository>
3.4.2. virtctl クライアントのインストール
kubevirt-virtctl
パッケージから virtctl
クライアントをインストールします。
手順
kubevirt-virtctl
パッケージをインストールします。# yum install kubevirt-virtctl
OpenShift Virtualization の Using the CLI tools も参照してください。
3.5. Web コンソールを使用した OpenShift Virtualization のアンインストール
OpenShift Container Platform Web コンソール を使用して OpenShift Virtualization をアンインストールできます。
3.5.1. 前提条件
- OpenShift Virtualization 2.4 がインストールされていること。
すべての 仮想マシン、仮想マシンインスタンス、および DataVolume を削除する必要があります。
重要これらのオブジェクトを削除せずに OpenShift Virtualization のアンインストールを試みると失敗します。
3.5.2. OpenShift Virtualization Operator Deployment カスタムリソースの削除
OpenShift Virtualization をアンインストールするには、まず OpenShift Virtualization Operator Deployment カスタムリソースを削除する必要がある。
前提条件
- OpenShift Virtualization Operator Deployment カスタムリソースを作成すること。
手順
-
OpenShift Container Platform Web コンソールから、Projects 一覧より
openshift-cnv
を選択します。 - Operators → Installed Operators ページに移動します。
- OpenShift Virtualization をクリックします。
- OpenShift Virtualization Operator Deployment タブをクリックします。
-
Options メニュー
を kubevirt-hyperconverged カスタムリソースを含む行でクリックします。拡張されたメニューで、Delete HyperConverged Cluster をクリックします。
- 確認ウィンドウで Delete をクリックします。
- Workloads → Pods ページに移動し、Operator Pod のみが実行中であることを確認します。
ターミナルウィンドウを開き、以下のコマンドを実行して残りのリソースをクリーンアップします。
$ oc delete apiservices v1alpha3.subresources.kubevirt.io -n openshift-cnv
3.5.3. OpenShift Virtualization カタログサブスクリプションの削除
OpenShift Virtualization のアンインストールを終了するには、OpenShift Virtualization カタログサブスクリプションを削除します。
前提条件
- OpenShift Virtualization カタログの有効なサブスクリプション。
手順
- Operators → OperatorHub ページに移動します。
- OpenShift Virtualization を検索し、これを選択します。
- Uninstall をクリックします。
openshift-cnv
namespace を削除できるようになりました。
3.5.4. Web コンソールを使用した namespace の削除
OpenShift Container Platform Web コンソールを使用して namespace を削除できます。
namespace を削除するパーミッションがない場合、Delete Namespace オプションは選択できなくなります。
手順
- Administration → Namespaces に移動します。
- namespace の一覧で削除する必要のある namespace を見つけます。
-
namespace の一覧の右端で、Options メニュー
から Delete Namespace を選択します。
- Delete Namespace ペインが表示されたら、フィールドから削除する namespace の名前を入力します。
- Delete をクリックします。
3.6. CLI を使用した OpenShift Virtualization のアンインストール
OpenShift Container Platform CLI を使用して OpenShift Virtualization をアンインストールできます。
3.6.1. 前提条件
- OpenShift Virtualization 2.4 がインストールされていること。
すべての 仮想マシン、仮想マシンインスタンス、および DataVolume を削除する必要があります。
重要これらのオブジェクトを削除せずに OpenShift Virtualization のアンインストールを試みると失敗します。
3.6.2. OpenShift Virtualization の削除
CLI を使用して OpenShift Virtualization を削除できます。
前提条件
-
OpenShift CLI (
oc
) をインストールしている。 -
cluster-admin
パーミッションを持つアカウントを使用して OpenShift Virtualization クラスターにアクセスできること。
CLI を使用して OLM で OpenShift Virtualization Operator のサブスクリプションを削除すると、ClusterServiceVersion (CSV) オブジェクトはクラスターから削除されません。OpenShift Virtualization を完全にアンインストールするには、CSV を明示的に削除する必要があります。
手順
HyperConverged カスタムリソースを削除します。
$ oc delete HyperConverged kubevirt-hyperconverged -n openshift-cnv
Operator Lifecycle Manager (OLM) で OpenShift Virtualization Operator のサブスクリプションを削除します。
$ oc delete subscription kubevirt-hyperconverged -n openshift-cnv
OpenShift Virtualization の ClusterServiceVersion (CSV) 名を環境変数として設定します。
$ CSV_NAME=$(oc get csv -n openshift-cnv -o=custom-columns=:metadata.name)
直前の手順で CSV 名を指定して、OpenShift Virtualization クラスターから CSV を削除します。
$ oc delete csv ${CSV_NAME} -n openshift-cnv
OpenShift Virtualization は、CSV が正常に削除されたことを示す確認メッセージが表示される際にアンインストールされます。
出力例
clusterserviceversion.operators.coreos.com "kubevirt-hyperconverged-operator.v2.4.9" deleted
第4章 OpenShift Virtualization のアップグレード
次のマイナーバージョンの OpenShift Virtualization に手動でアップグレードし、Web コンソールを使用して更新のステータスをモニターできます。
4.1. OpenShift Virtualization のアップグレードについて
4.1.1. OpenShift Virtualization のアップグレードの仕組み
- OpenShift Container Platform Web コンソールを使用して Operator サブスクリプションのチャネルを変更することで、OpenShift Virtualization の次のマイナーバージョンにアップグレードできます。
- OpenShift Virtualization のインストール時に z-stream の自動更新を有効にできます。
- 更新は、OpenShift Container Platform のインストール時にデプロイされる Marketplace Operator 経由で送信されます。Marketplace Operator は外部 Operator をクラスターに対して利用可能にします。
- 更新の完了までにかかる時間は、ネットワーク接続によって異なります。ほとんどの自動更新は 15 分以内に完了します。
4.1.2. OpenShift Virtualization アップグレードのクラスターへの影響
アップグレードを実行しても仮想マシンのワークロードは中断しません。
仮想マシン Pod は、アップグレード時に再起動したり、移行したりしません。
virt-launcher
Pod を更新する必要がある場合は、仮想マシンの再起動またはライブマイグレーションが必要になります。注記各仮想マシンには、仮想マシンインスタンスを実行する
virt-launcher
Pod があります。virt-launcher
Pod は、仮想マシンのプロセスを管理するために使用されるlibvirt
のインスタンスを実行します。
- アップグレードによってネットワーク接続が中断されることはありません。
DataVolume およびその関連付けられた PersistentVolumeClaim はアップグレード時に保持されます。
重要ライブマイグレーションを実行できない仮想マシンを実行すると、OpenShift Container Platform クラスターのアップグレードがブロックされる可能性があります。これには、hostpath-provisioner ストレージまたは SR-IOV ネットワークインターフェイスを使用する仮想マシンが含まれます。
回避策として、仮想マシンを再設定し、クラスターのアップグレード時にそれらの電源を自動的にオフになるようにできます。
evictionStrategy: LiveMigrate
フィールドを削除し、runStrategy
フィールドをAlways
に設定します。
4.2. OpenShift Virtualization の次のマイナーバージョンへのアップグレード
OpenShift Container Platform Web コンソールを使用して Operator サブスクリプションのチャネルを変更することで、OpenShift Virtualization を次のマイナーバージョンに手動でアップグレードできます。
前提条件
-
cluster-admin
ロールを持つユーザーとしてクラスターにアクセスできる。
手順
- OpenShift Container Platform Web コンソールにアクセスし、Operators → Installed Operators に移動します。
- OpenShift Virtualization をクリックし、Operator Details ページを開きます。
- Subscription タブをクリックし、Subscription Overview ページを開きます。
- Channel ペインで、バージョン番号の右側にある鉛筆アイコンをクリックし、Change Subscription Update Channel ウィンドウを開きます。
- 次のマイナーバージョンを選択します。たとえば、OpenShift Virtualization 2.4 にアップグレードする場合には、2.4 を選択します。
- Save をクリックします。
Operators → Installed Operators に移動してアップグレードのステータスを確認します。以下の
oc
コマンドを実行してステータスを確認することもできます。$ oc get csv -n openshift-cnv
4.3. アップグレードステータスの監視
OpenShift Virtualization アップグレードステータスをモニターする最適な方法として、ClusterServiceVersion (CSV) (CSV) PHASE
を監視できます。Web コンソールを使用するか、ここに提供されているコマンドを実行して CSV の状態をモニターすることもできます。
PHASE
および状態の値は利用可能な情報に基づく近似値になります。
前提条件
-
cluster-admin
ロールを持つユーザーとしてクラスターにアクセスできる。 -
OpenShift CLI (
oc
) をインストールしている。
手順
以下のコマンドを実行します。
$ oc get csv
出力を確認し、
PHASE
フィールドをチェックします。以下に例を示します。出力例
VERSION REPLACES PHASE 2.4.9 kubevirt-hyperconverged-operator.v2.4.6 Installing 2.4.6 Replacing
オプション: 以下のコマンドを実行して、すべての OpenShift Virtualization コンポーネントの状態の集約されたステータスをモニターします。
$ oc get hco -n openshift-cnv kubevirt-hyperconverged \ -o=jsonpath='{range .status.conditions[*]}{.type}{"\t"}{.status}{"\t"}{.message}{"\n"}{end}'
アップグレードが成功すると、以下の出力が得られます。
出力例
ReconcileComplete True Reconcile completed successfully Available True Reconcile completed successfully Progressing False Reconcile completed successfully Degraded False Reconcile completed successfully Upgradeable True Reconcile completed successfully
4.4. 追加リソース
第5章 kubevirt-controller および virt-launcher に付与される追加のセキュリティー権限
kubevirt-controller
および virt-launcher Pod には、通常の Pod 所有者の権限に加えて一部の SELinux ポリシーおよび SCC (Security Context Constraints) 権限が付与されます。これらの権限により、仮想マシンは OpenShift Virtualization 機能を使用できます。
5.1. virt-launcher Pod の拡張 SELinux ポリシー
virt-launcher Pod の container_t
SELinux ポリシーは以下のルールで拡張されます。
-
allow process self (tun_socket (relabelfrom relabelto attach_queue))
-
allow process sysfs_t (file (write))
-
allow process hugetlbfs_t (dir (add_name create write remove_name rmdir setattr))
-
allow process hugetlbfs_t (file (create unlink))
これらのルールは、以下の仮想化機能を有効にします。
- キューを独自の TUN ソケットに再度ラベル付けし、これに割り当てます。これは、ネットワークのマルチキューをサポートするために必要です。マルチキューは、利用可能な vCPU の数が増える際にネットワークのパフォーマンスをスケーリングできます。
-
virt-launcher Pod が情報を sysfs (
/sys
) ファイルに書き込むことを許可します。これは SR-IOV (Single Root I/O Virtualization) を有効にするために必要です。 -
hugetlbfs
エントリーの読み取り/書き込みを実行します。これは、Huge Page をサポートするために必要です。Huge Page は、メモリーページサイズを増やすことで大量のメモリーを管理する方法です。
5.2. kubevirt-controller サービスアカウントの追加の OpenShift Container Platform SCC (Security Context Constraints) および Linux 機能
SCC (Security Context Constraints) は Pod のパーミッションを制御します。これらのパーミッションには、コンテナーのコレクションである Pod が実行できるアクションおよびそれがアクセスできるリソース情報が含まれます。SCC を使用して、Pod がシステムに受け入れられるために必要な Pod の実行についての条件の一覧を定義することができます。
kubevirt-controller
は、クラスター内の仮想マシンの virt-launcher Pod を作成するクラスターコントローラーです。これらの virt-launcher Pod には、kubevirt-controller
サービスアカウントによってパーミッションが付与されます。
5.2.1. kubevirt-controller サービスアカウントに付与される追加の SCC
kubevirt-controller
サービスアカウントには追加の SCC および Linux 機能が付与され、これにより適切なパーミッションを持つ virt-launcher Pod を作成できます。これらの拡張パーミッションにより、仮想マシンは通常の Pod の範囲外の OpenShift Virtualization 機能を利用できます。
kubevirt-controller
サービスアカウントには以下の SCC が付与されます。
-
scc.AllowHostDirVolumePlugin = true
これは、仮想マシンが hostPath ボリュームプラグインを使用することを可能にします。 -
scc.AllowPrivilegedContainer = false
これは、virt-launcher Pod が権限付きコンテナーとして実行されないようにします。 -
scc.AllowedCapabilities = []corev1.Capability{"NET_ADMIN", "NET_RAW", "SYS_NICE"}
これは、NET_ADMIN
、NET_RAW
、およびSYS_NICE
などの追加の Linux 機能を提供します。
5.2.2. kubevirt-controller の SCC および RBAC 定義の表示
oc
ツールを使用して kubevirt-controller
の SecurityContextConstraints
定義を表示できます。
$ oc get scc kubevirt-controller -o yaml
oc
ツールを使用して kubevirt-controller
クラスターロールの RBAC 定義を表示できます。
$ oc get clusterrole kubevirt-controller -o yaml
5.3. 関連情報
- Red Hat Enterprise Linux 仮想化のチューニングと最適化ガイドには、ネットワークマルチキュー と Huge Page についての詳細情報が記載されています。
-
capabilities
man ページには、Linux 機能についての詳細情報が記載されています。 -
sysfs(5)
man ページには、sysfs についての詳細情報が記載されています。 - OpenShift Container Platform 認証ガイドには、SCC (Security Context Constraints) についての詳細が記載されています。
第6章 CLI ツールの使用
クラスターでリソースを管理するために使用される 2 つの主な CLI ツールは以下の通りです。
-
OpenShift virtualization
virtctl
クライアント -
OpenShift Container Platform
oc
クライアント
6.1. 前提条件
-
virtctl
クライアントをインストール する必要があります。
6.2. Virtctl クライアントコマンド
virtctl
クライアントは、OpenShift Virtualization リソースを管理するためのコマンドラインユーティリティーです。以下の表には、OpenShift Virtualization のドキュメント全体で使用されている virtctl
コマンドが記載されています。
コマンドで使用できるオプションの一覧を表示するには、これを -h
または --help
フラグを指定して実行します。以下は例になります。
$ virtctl image-upload -h
コマンド | 説明 |
---|---|
| 仮想マシンを起動します。 |
| 仮想マシンを停止します。 |
| 仮想マシンまたは仮想マシンインスタンスを一時停止します。マシンの状態がメモリーに保持されます。 |
| 仮想マシンまたは仮想マシンインスタンスの一時停止を解除します。 |
| 仮想マシンを移行します。 |
| 仮想マシンを再起動します。 |
| 仮想マシンまたは仮想マシンインスタンスの指定されたポートを転送するサービスを作成し、このサービスをノードの指定されたポートで公開します。 |
| 仮想マシンインスタンスのシリアルコンソールに接続します。 |
| 仮想マシンインスタンスへの VNC 接続を開きます。 |
| 仮想マシンイメージをすでに存在する DataVolume にアップロードします。 |
| 仮想マシンイメージを新規 DataVolume にアップロードします。 |
| クライアントおよびサーバーのバージョン情報を表示します。 |
|
|
6.3. OpenShift Container Platform クライアントコマンド
OpenShift Container Platform oc
クライアントは、仮想マシン (vm
) および仮想マシンインスタンス (vmi
) オブジェクトタイプを含む、OpenShift Container Platform リソースを管理するためのコマンドラインユーティリティーです。
-n <namespace>
フラグを使用して、別のプロジェクトを指定できます。
コマンド | 説明 |
---|---|
|
OpenShift Container Platform クラスターに |
| 現在のプロジェクトの指定されたオブジェクトタイプのオブジェクトの一覧を表示します。 |
| 現在のプロジェクトで特定のリソースの詳細を表示します。 |
| 現在のプロジェクトで、ファイル名または標準入力 (stdin) からリソースを作成します。 |
| 現在のプロジェクトのリソースを編集します。 |
| 現在のプロジェクトのリソースを削除します。 |
oc
client コマンドについてのより総合的な情報については、OpenShift Container Platform CLI ツール のドキュメントを参照してください。
第7章 仮想マシン
7.1. 仮想マシンの作成
以下のいずれかの手順を使用して、仮想マシンを作成します。
- 仮想マシンウィザードの実行
- 仮想マシンウィザードによる事前に設定された YAML ファイルの貼り付け
- CLI の使用
- 仮想マシンウィザードによる VMware 仮想マシンまたはテンプレートのインポート
openshift-*
namespace に仮想マシンを作成しないでください。代わりに、openshift
接頭辞なしの新規 namespace を作成するか、または既存 namespace を使用します。
7.1.1. 仮想マシンウィザードの実行による仮想マシンの作成
Web コンソールは、General、 Networking、Storage、Advanced、および Review ステップに移動し、仮想マシンの作成プロセスを単純化するインタラクティブなウィザードを特長としています。すべての必須フィールドには *
のマークが付けられます。必要なフィールドが完了したら、仮想マシンを確認し、これを作成することができます。
Network Interface Card (NIC) およびストレージディスクを作成し、それらの作成後に仮想マシンに割り当てることができます。
起動可能なディスク
URL
または Container
のいずれかが General ステップで Source として選択される場合、rootdisk
ディスクが作成され、Bootable Disk として仮想マシンに割り当てられます。rootdisk
を変更できますが、これを削除することはできません。
Bootable Disk は、仮想マシンにディスクが割り当てられていない場合、PXE ソースからプロビジョニングされる仮想マシンには不要です。1 つ以上のディスクが仮想マシンに割り当てられている場合、Bootable Disk を 1 つを選択する必要があります。
前提条件
- ウィザードを使用して仮想マシンを作成する場合、仮想マシンのストレージメディアは Read-Write-Many(RWX)PVC をサポートする必要があります。
手順
- サイドメニューから Workloads → Virtualization をクリックします。
- Virtual Machines タブをクリックします。
- Create Virtual Machine をクリックし、New with Wizard を選択します。
- General ステップで必要なすべてのフィールドに入力します。Template を選択すると、これらのフィールドへの入力が自動的に行われます。
Next をクリックして Networking ステップに進みます。デフォルトで
nic0
NIC が割り当てられます。- オプション: Add Network Interface をクリックし、追加の NIC を作成します。
-
オプション: すべての NIC の削除は、Options メニュー
をクリックし、Delete を選択して実行できます。仮想マシンの作成において、NIC が割り当てられている必要はありません。NIC は仮想マシンの作成後に作成することができます。
Next をクリックして Storage 画面に進みます。
-
オプション: Add Disk をクリックして追加のディスクを作成します。これらのディスクの削除は、Options メニュー
をクリックし、Delete を選択して実行できます。
-
オプション: Options メニュー
をクリックし、ディスクを編集して変更内容を保存します。
-
オプション: Add Disk をクリックして追加のディスクを作成します。これらのディスクの削除は、Options メニュー
- Review and Create をクリックします。Results 画面には、仮想マシンの JSON 設定ファイルが表示されます。
仮想マシンは Virtual Machines タブに一覧表示されます。
Web コンソールウィザードを実行する際は、仮想マシンウィザードのフィールドを参照します。
7.1.1.1. 仮想マシンウィザードのフィールド
名前 | パラメーター | 説明 |
---|---|---|
Template | 仮想マシンの作成に使用するテンプレート。テンプレートを選択すると、他のフィールドが自動的に入力されます。 | |
ソース | PXE | PXE メニューから仮想マシンをプロビジョニングします。クラスターに PXE 対応の NIC が必要になります。 |
URL | HTTP または S3 エンドポイントで利用できるイメージから仮想マシンをプロビジョニングします。 | |
コンテナー |
クラスターからアクセスできるレジストリーの起動可能なオペレーティングシステムコンテナーから仮想マシンをプロビジョニングします。例: | |
Disk | ディスクから仮想マシンをプロビジョニングします。 | |
Operating System | 仮想マシン用に選択される主なオペレーティングシステム。 | |
Flavor | small、medium、large、tiny、Custom | 仮想マシンに割り当てられる CPU およびメモリーの量を決定するプリセット。Flavor に設定される Preset はオペレーティングシステムによって決まります。 |
Memory | 仮想マシンに割り当てられるメモリーのサイズ (GiB 単位)。 | |
CPU | 仮想マシンに割り当てられる CPU の量。 | |
Workload Profile | High Performance | 高パフォーマンスのワークロードに対して最適化された仮想マシン設定。 |
Server | サーバーワークロードの実行に最適化されたプロファイル。 | |
Desktop | デスクトップで使用するための仮想マシン設定。 | |
名前 |
この名前には、小文字 ( | |
説明 | オプションの説明フィールド。 | |
Start virtual machine on creation | これを選択すると、作成時に仮想マシンが自動的に起動します。 |
7.1.1.2. Cloud-init フィールド
名前 | 説明 |
---|---|
Hostname | 仮想マシンの特定のホスト名を設定します。 |
Authenticated SSH Keys | 仮想マシンの ~/.ssh/authorized_keys にコピーされるユーザーの公開鍵。 |
カスタムスクリプト | 他のオプションを、カスタム cloud-init スクリプトを貼り付けるフィールドに置き換えます。 |
7.1.1.3. CD-ROM フィールド
ソース | 説明 |
---|---|
Container |
コンテナーのパスを指定します。例: |
URL | URL パスおよびサイズ (GiB 単位) を指定します。次に、ドロップダウンリストからこの URL のストレージクラスを選択します。 |
Attach Disk | 割り当てる仮想マシンディスクを選択します。 |
7.1.1.4. ネットワークフィールド
名前 | 説明 |
---|---|
名前 | ネットワークインターフェイスの名前。 |
Model | ネットワークインターフェイスカードのモデルを示します。サポートされる値は、e1000、 e1000e、ne2k_pci、pcnet, rtl8139、および virtIO です。 |
Network | 利用可能な NetworkAttachmentDefinition オブジェクトの一覧。 |
Type |
利用可能なバインディングメソッドの一覧。デフォルトの Pod ネットワークについては、 |
MAC Address | ネットワークインターフェイスの MAC アドレス。MAC アドレスが指定されていない場合、セッションの一時アドレスが生成されます。 |
7.1.1.5. ストレージフィールド
名前 | 説明 |
---|---|
ソース | 仮想マシンの空のディスクを選択するか、または URL、Container、Attach Cloned Disk、または Attach Disk などの選択可能なオプションから選択します。既存ディスクを選択し、これを仮想マシンに割り当てるには、利用可能な PersistentVolumeClaim (PVC) の一覧から Attach Cloned Disk または Attach Disk を選択します。 |
名前 |
ディスクの名前。この名前には、小文字 ( |
Size (GiB) | ディスクのサイズ (GiB)。 |
Interface | ディスクデバイスのタイプ。サポートされるインターフェイスは、virtIO、SATA、および SCSI です。 |
ストレージクラス |
ディスクの作成に使用される |
Advanced → Volume Mode | |
永続ボリュームがフォーマットされたファイルシステムまたは raw ブロック状態を使用するかどうかを定義します。デフォルトは Filesystem です。 | Advanced → Access Mode |
永続ボリュームのアクセスモード。サポートされるアクセスモードは、Single User (RWO)、Shared Access (RWX)、および Read Only (ROX) です。 |
ストレージの詳細設定
以下のストレージの詳細設定は、Blank、Import via URLURL、および Clone existing PVC ディスクで利用できます。これらのパラメーターはオプションです。これらのパラメーターを指定しない場合、システムは kubevirt-storage-class-defaults
設定マップのデフォルト値を使用します。
名前 | パラメーター | 説明 |
---|---|---|
ボリュームモード | Filesystem | ファイルシステムベースのボリュームで仮想ディスクを保存します。 |
Block |
ブロックボリュームで仮想ディスクを直接保存します。基礎となるストレージがサポートしている場合は、 | |
アクセスモード | Single User (RWO) | ディスクは単一ノードで読み取り/書き込みとしてマウントできます。 |
Shared Access (RWX) | ディスクは数多くのノードで読み取り/書き込みとしてマウントできます。 注記 これは、ノード間の仮想マシンのライブマイグレーションなどの、一部の機能で必要になります。 | |
Read Only (ROX) | ディスクは数多くのノードで読み取り専用としてマウントできます。 |
kubevirt-storage-class-defaults
ConfigMap についての詳細は、DataVolume のストレージのデフォルト について参照してください。
7.1.2. 仮想マシンウィザードの作成用の事前に設定された YAML ファイルの貼り付け
YAML 設定ファイルを作成し、解析して仮想マシンを作成します。YAML 編集画面を開くと、常に有効な example
仮想マシン設定がデフォルトで提供されます。
Create をクリックする際に YAML 設定が無効な場合、エラーメッセージでエラーが発生したパラメーターが示唆されます。エラーは一度に 1 つのみ表示されます。
編集中に YAML 画面から離れると、設定に対して加えた変更が取り消されます。
手順
- サイドメニューから Workloads → Virtualization をクリックします。
- Virtual Machines タブをクリックします。
- Create Virtual Machine をクリックし、New from YAML を選択します。
編集可能なウィンドウで仮想マシンの設定を作成するか、またはこれを貼り付けます。
-
または、YAML 画面にデフォルトで提供される
example
仮想マシンを使用します。
-
または、YAML 画面にデフォルトで提供される
- オプション: Download をクリックして YAML 設定ファイルをその現在の状態でダウンロードします。
- Create をクリックして仮想マシンを作成します。
仮想マシンは Virtual Machines タブに一覧表示されます。
7.1.3. CLI の使用による仮想マシンの作成
手順
VirtualMachine 設定ファイルの spec
オブジェクトは、コア数やメモリーの量、ディスクタイプおよび使用するボリュームなどの仮想マシン設定を参照します。
-
関連する PVC
claimName
をボリュームとして参照し、仮想マシンディスクを仮想マシンに割り当てます。 OpenShift Container Platform クライアントで仮想マシンを作成するには、以下のコマンドを実行します。
$ oc create -f <vm.yaml>
- 仮想マシンは Stopped 状態で作成されるため、これを起動して仮想マシンインスタンスを実行します。
ReplicaSet は、一定数の同一 Pod の可用性を保証することを目的としています。現時点で、ReplicaSet は OpenShift Virtualization ではサポートされていません。
設定 | 説明 |
---|---|
Cores | 仮想マシン内のコア数。1 以上の値である必要があります。 |
Memory | ノードによって仮想マシンに割り当てられる RAM の量。M (メガバイト) または Gi (ギガバイト) で値を指定します。 |
ディスク | 参照されるボリュームの名前。ボリュームの名前に一致する必要があります。 |
設定 | 説明 |
---|---|
名前 | ボリュームの名前。 DNS ラベルであり、仮想マシン内で一意である必要があります。 |
PersistentVolumeClaim |
仮想マシンに割り当てる PVC。PVC の |
7.1.4. 仮想マシンのストレージボリュームタイプ
ストレージボリュームタイプ | 説明 |
---|---|
ephemeral | ネットワークボリュームを読み取り専用のバッキングストアとして使用するローカルの copy-on-write (COW) イメージ。バッキングボリュームは PersistentVolumeClaim である必要があります。一時イメージは仮想マシンの起動時に作成され、すべての書き込みをローカルに保存します。一時イメージは、仮想マシンの停止、再起動または削除時に破棄されます。バッキングボリューム (PVC) はいずれの方法でも変更されません。 |
persistentVolumeClaim | 利用可能な PV を仮想マシンに割り当てます。PV の割り当てにより、仮想マシンデータのセッション間での永続化が可能になります。 CDI を使用して既存の仮想マシンディスクを PVC にインポートし、PVC を仮想マシンインスタンスに割り当てる方法は、既存の仮想マシンを OpenShift Container Platform にインポートするための推奨される方法です。ディスクを PVC 内で使用できるようにするためのいくつかの要件があります。 |
dataVolume |
DataVolume は、インポート、クローンまたはアップロード操作で仮想マシンディスクの準備プロセスを管理することによって
|
cloudInitNoCloud | 参照される cloud-init NoCloud データソースが含まれるディスクを割り当て、ユーザーデータおよびメタデータを仮想マシンに提供します。cloud-init インストールは仮想マシンディスク内で必要になります。 |
containerDisk | コンテナーイメージレジストリーに保存される、仮想マシンディスクなどのイメージを参照します。イメージはレジストリーからプルされ、仮想マシンの起動時にディスクとして仮想マシンに割り当てられます。
RAW および QCOW2 形式のみがコンテナーイメージレジストリーのサポートされるディスクタイプです。QCOW2 は、縮小されたイメージサイズの場合に推奨されます。 注記
|
emptyDisk | 仮想マシンインターフェイスのライフサイクルに関連付けられるスパースの QCOW2 ディスクを追加で作成します。データは仮想マシンのゲストによって実行される再起動後も存続しますが、仮想マシンが Web コンソールから停止または再起動する場合には破棄されます。空のディスクは、アプリケーションの依存関係および一時ディスクの一時ファイルシステムの制限を上回るデータを保存するために使用されます。 ディスク 容量 サイズも指定する必要があります。 |
7.1.5. 追加リソース
KubeVirt v0.30.5 API リファレンス の VirtualMachineSpec
定義は、仮想マシン仕様のパラメーターおよび階層のより範囲の広いコンテキストを提供します。
KubeVirt API リファレンスはアップストリームのプロジェクトリファレンスであり、OpenShift Virtualization でサポートされていないパラメーターが含まれる場合があります。
-
コンテナーディスクを準備 してから、これを
containerDisk
ボリュームとして仮想マシンに追加します。
7.2. 仮想マシンの編集
Web コンソールの YAML エディターまたはコマンドラインの OpenShift クライアントのいずれかを使用して、仮想マシン設定を更新できます。Web コンソールの Virtual Machine Overview でパラメーターのサブセットを更新することもできます。
7.2.1. Web コンソールでの仮想マシンの編集
関連するフィールドの横にある鉛筆アイコンをクリックして、Web コンソールの Virtual Machine Overview 画面で仮想マシンの選択する値 (select values) を編集します。他の値は、CLI を使用して編集できます。
手順
- サイドメニューから Workloads → Virtualization をクリックします。
- Virtual Machines タブをクリックします。
- 仮想マシンを選択して、Virtual Machine Overview 画面を開きます。
- Details タブをクリックします。
- 鉛筆アイコンをクリックして、フィールドを編集可能にします。
- 関連する変更を加え、Save をクリックします。
仮想マシンが実行中の場合、変更内容は仮想マシンが再起動されるまで反映されません。
7.2.2. Web コンソールを使用した仮想マシンの YAML 設定の編集
Web コンソールを使用して、仮想マシンの YAML 設定を編集します。
すべてのパラメーターを更新できる訳ではありません。変更不可の値を編集し、Save をクリックすると、更新できなかったパラメーターを示すエラーメッセージが出されます。
YAML 設定は、仮想マシンが Running の場合に編集できますが、変更は仮想マシンが停止され、再度起動された後にのみ有効になります。
編集中に YAML 画面から離れると、設定に対して加えた変更が取り消されます。
手順
- サイドメニューから Workloads → Virtualization をクリックします。
- Virtual Machines タブをクリックします。
- 仮想マシンを選択して、Virtual Machine Overview 画面を開きます。
- YAML タブをクリックして編集可能な設定を表示します。
- オプション: Download をクリックして YAML ファイルをその現在の状態でローカルにダウンロードできます。
- ファイルを編集し、Save をクリックします。
オブジェクトの更新されたバージョン番号を含む、変更が正常に行われたことを示す確認メッセージが表示されます。
7.2.3. CLI を使用した仮想マシン YAML 設定の編集
以下の手順を使用し、CLI を使用して仮想マシン YAML 設定を編集します。
前提条件
- YAML オブジェクト設定ファイルを使って仮想マシンを設定していること。
-
oc
CLI をインストールしていること。
手順
以下のコマンドを実行して、仮想マシン設定を更新します。
$ oc edit <object_type> <object_ID>
- オブジェクト設定を開きます。
- YAML を編集します。
実行中の仮想マシンを編集する場合は、以下のいずれかを実行する必要があります。
- 仮想マシンを再起動します。
新規の設定を有効にするために、以下のコマンドを実行します。
$ oc apply <object_type> <object_ID>
7.2.4. 仮想マシンへの仮想ディスクの追加
以下の手順を使用して仮想ディスクを仮想マシンに追加します。
手順
- Virtual Machines タブで、仮想マシンを選択します。
- Disks タブを選択します。
- Add Disks をクリックして、 Add Disk ウィンドウを開きます。
Add Disk ウィンドウで、Source、Name、 Size、Interface、および Storage Class を指定します。
-
オプション: Advanced 一覧で、仮想ディスクの Volume Mode および Access Mode を指定します。これらのパラメーターを指定しない場合、システムは
kubevirt-storage-class-defaults
ConfigMap のデフォルト値を使用します。
-
オプション: Advanced 一覧で、仮想ディスクの Volume Mode および Access Mode を指定します。これらのパラメーターを指定しない場合、システムは
- ドロップダウンリストおよびチェックボックスを使用して、ディスク設定を編集します。
- OK をクリックします。
kubevirt-storage-class-defaults
ConfigMap についての詳細は、DataVolume のストレージのデフォルト について参照してください。
7.2.4.1. ストレージフィールド
名前 | 説明 |
---|---|
ソース | 仮想マシンの空のディスクを選択するか、または URL、Container、Attach Cloned Disk、または Attach Disk などの選択可能なオプションから選択します。既存ディスクを選択し、これを仮想マシンに割り当てるには、利用可能な PersistentVolumeClaim (PVC) の一覧から Attach Cloned Disk または Attach Disk を選択します。 |
名前 |
ディスクの名前。この名前には、小文字 ( |
Size (GiB) | ディスクのサイズ (GiB)。 |
Interface | ディスクデバイスのタイプ。サポートされるインターフェイスは、virtIO、SATA、および SCSI です。 |
ストレージクラス |
ディスクの作成に使用される |
Advanced → Volume Mode | |
永続ボリュームがフォーマットされたファイルシステムまたは raw ブロック状態を使用するかどうかを定義します。デフォルトは Filesystem です。 | Advanced → Access Mode |
永続ボリュームのアクセスモード。サポートされるアクセスモードは、Single User (RWO)、Shared Access (RWX)、および Read Only (ROX) です。 |
ストレージの詳細設定
以下のストレージの詳細設定は、Blank、Import via URLURL、および Clone existing PVC ディスクで利用できます。これらのパラメーターはオプションです。これらのパラメーターを指定しない場合、システムは kubevirt-storage-class-defaults
設定マップのデフォルト値を使用します。
名前 | パラメーター | 説明 |
---|---|---|
ボリュームモード | Filesystem | ファイルシステムベースのボリュームで仮想ディスクを保存します。 |
Block |
ブロックボリュームで仮想ディスクを直接保存します。基礎となるストレージがサポートしている場合は、 | |
アクセスモード | Single User (RWO) | ディスクは単一ノードで読み取り/書き込みとしてマウントできます。 |
Shared Access (RWX) | ディスクは数多くのノードで読み取り/書き込みとしてマウントできます。 注記 これは、ノード間の仮想マシンのライブマイグレーションなどの、一部の機能で必要になります。 | |
Read Only (ROX) | ディスクは数多くのノードで読み取り専用としてマウントできます。 |
7.2.5. 仮想マシンへのネットワークインターフェイスの追加
以下の手順を使用してネットワークインターフェイスを仮想マシンに追加します。
手順
- Virtual Machines タブで、仮想マシンを選択します。
- Network Interfaces タブを選択します。
- Add Network Interface をクリックします。
- Add Network Interface ウィンドウで、ネットワークインターフェイスの Name、Model、Network、 Type、および MAC Address を指定します。
- Add をクリックしてネットワークインターフェイスを追加します。
- 仮想マシンを再起動して、アクセスを有効にします。
- ドロップダウンリストとチェックボックスを編集して、ネットワークインターフェイスを設定します。
- Save Changes をクリックします。
- OK をクリックします。
新規のネットワークインターフェイスは、ユーザーが再起動するまで Create Network Interface 一覧の上部に表示されます。
新規のネットワークインターフェイスには、仮想マシンを再起動するまで Pending VM restart
のリンク状態が表示されます。Link State (リンク状態) にカーソルを合わせて詳細情報を表示します。
ネットワークインターフェイスカードが仮想マシンで定義され、ネットワークに接続されている場合は、Link State はデフォルトで Up に設定されます。
7.2.5.1. ネットワークフィールド
名前 | 説明 |
---|---|
名前 | ネットワークインターフェイスの名前。 |
Model | ネットワークインターフェイスカードのモデルを示します。サポートされる値は、e1000、 e1000e、ne2k_pci、pcnet, rtl8139、および virtIO です。 |
Network | 利用可能な NetworkAttachmentDefinition オブジェクトの一覧。 |
Type |
利用可能なバインディングメソッドの一覧。デフォルトの Pod ネットワークについては、 |
MAC Address | ネットワークインターフェイスの MAC アドレス。MAC アドレスが指定されていない場合、セッションの一時アドレスが生成されます。 |
7.2.6. 仮想マシンの CD-ROM の編集
以下の手順を使用して、仮想マシンの CD-ROM を設定します。
手順
- Virtual Machines タブで、仮想マシンを選択します。
- Overview タブを選択します。
CD-ROM 設定を追加または編集するには、CD-ROMs ラベルの右側にある鉛筆アイコンをクリックします。Edit CD-ROM ウィンドウが開きます。
- CD-ROM が編集できない場合、以下のメッセージが表示されます: The virtual machine doesn't have any CD-ROMs attached.
- 利用可能な CD-ROM がある場合は、- をクリックして CD-ROM を削除できます。
Edit CD-ROM ウィンドウで、以下を実行します。
- Media Type のドロップダウンリストから CD-ROM 設定のタイプを選択します。CD-ROM 設定タイプは Container、URL、および Persistent Volume Claim です。
- それぞれの Type に必要な情報を入力します。
- すべての CD-ROM が追加されたら、Save をクリックします。
7.3. ブート順序の編集
Web コンソールまたは CLI を使用して、ブート順序リストの値を更新できます。
Virtual Machine Overview ページの Boot Order で、以下を実行できます。
- ディスクまたはネットワークインターフェイスカード (NIC) を選択し、これをブート順序の一覧に追加します。
- ブート順序の一覧でディスクまたは NIC の順序を編集します。
- ブート順序の一覧からディスクまたは NIC を削除して、起動可能なソースのインベントリーに戻します。
7.3.1. Web コンソールでのブート順序一覧への項目の追加
Web コンソールを使用して、ブート順序一覧に項目を追加します。
手順
- サイドメニューから Workloads → Virtualization をクリックします。
- Virtual Machines タブをクリックします。
- 仮想マシンを選択して、Virtual Machine Overview 画面を開きます。
- Details タブをクリックします。
- Boot Order の右側にある鉛筆アイコンをクリックします。YAML 設定が存在しない場合や、これがブート順序一覧の初回作成時の場合、以下のメッセージが表示されます。No resource selected.VM will attempt to boot disks from YAML by order of appearance in YAMLv file.Please select a boot source.
- Add Source をクリックして、仮想マシンのブート可能なディスクまたはネットワークインターフェイスカード (NIC) を選択します。
- 追加のディスクまたは NIC をブート順序一覧に追加します。
- Save をクリックします。
7.3.2. Web コンソールでのブート順序一覧の編集
Web コンソールで起動順序一覧を編集します。
手順
- サイドメニューから Workloads → Virtualization をクリックします。
- Virtual Machines タブをクリックします。
- 仮想マシンを選択して、Virtual Machine Overview 画面を開きます。
- Details タブをクリックします。
- Boot Order の右側にある鉛筆アイコンをクリックします。
ブート順序一覧で項目を移動するのに適した方法を選択します。
- スクリーンリーダーを使用しない場合、移動する項目の横にある矢印アイコンにカーソルを合わせ、項目を上下にドラッグし、選択した場所にドロップします。
- スクリーンリーダーを使用する場合は、上矢印キーまたは下矢印を押して、ブート順序一覧で項目を移動します。次に Tab キーを押して、選択した場所に項目をドロップします。
- Save をクリックします。
7.3.3. YAML 設定ファイルでのブート順序一覧の編集
CLI を使用して、YAML 設定ファイルのブート順序の一覧を編集します。
手順
以下のコマンドを実行して、仮想マシンの YAML 設定ファイルを開きます。
$ oc edit vm example
YAML ファイルを編集し、ディスクまたはネットワークインターフェイスカード (NIC) に関連付けられたブート順序の値を変更します。以下は例になります。
disks: - bootOrder: 1 1 disk: bus: virtio name: containerdisk - disk: bus: virtio name: cloudinitdisk - cdrom: bus: virtio name: cd-drive-1 interfaces: - boot Order: 2 2 macAddress: '02:96:c4:00:00' masquerade: {} name: default
- YAML ファイルを保存します。
- reload the content をクリックして、Web コンソールで YAML ファイルの更新されたブート順序の値をブート順序一覧に適用します。
7.3.4. Web コンソールでのブート順序一覧からの項目の削除
Web コンソールを使用して、ブート順序の一覧から項目を削除します。
手順
- サイドメニューから Workloads → Virtualization をクリックします。
- Virtual Machines タブをクリックします。
- 仮想マシンを選択して、Virtual Machine Overview 画面を開きます。
- Details タブをクリックします。
- Boot Order の右側にある鉛筆アイコンをクリックします。
- 項目の横にある Remove アイコンをクリックします。この項目はブート順序の一覧から削除され、利用可能なブートソースの一覧に保存されます。ブート順序一覧からすべての項目を削除する場合、以下のメッセージが表示されます。No resource selected.VM will attempt to boot disks from YAML by order of appearance in YAML file.Please select a boot source.
7.4. 仮想マシンの削除
Web コンソールまたは oc
コマンドラインインターフェイスを使用して、仮想マシンを削除できます。
7.4.1. Web コンソールの使用による仮想マシンの削除
仮想マシンを削除すると、仮想マシンはクラスターから永続的に削除されます。
仮想マシンを削除する際に、これが使用する DataVolume は自動的に削除されます。
手順
- OpenShift Virtualization コンソールのサイドメニューから Workloads → Virtualization をクリックします。
- Virtual Machines タブをクリックします。
削除する仮想マシンの ⋮ ボタンをクリックして Delete Virtual Machine を選択します。
- または、仮想マシン名をクリックして Virtual Machine Overview 画面を開き、Actions → Delete Virtual Machine をクリックします。
- 確認のポップアップウィンドウで、Delete をクリックし、仮想マシンを永続的に削除します。
7.4.2. CLI の使用による仮想マシンの削除
oc
コマンドラインインターフェイス (CLI) を使用して仮想マシンを削除できます。oc
クライアントを使用すると、複数の仮想マシンで各種のアクションを実行できます。
仮想マシンを削除する際に、これが使用する DataVolume は自動的に削除されます。
前提条件
- 削除する仮想マシンの名前を特定すること。
手順
以下のコマンドを実行し、仮想マシンを削除します。
$ oc delete vm <vm_name>
注記このコマンドは、現在のプロジェクトに存在するオブジェクトのみを削除します。削除する必要のあるオブジェクトが別のプロジェクトまたは namespace にある場合、
-n <project_name>
オプションを指定します。
7.5. 仮想マシンインスタンスの管理
OpenShift Virtualization 環境外に独立して作成されたスタンドアロンの仮想マシンインスタンス (VMI) がある場合、Web コンソールまたはコマンドラインインターフェイス (CLI) を使用してこれらを管理できます。
7.5.1. 仮想マシンインスタンスについて
仮想マシンインスタンス (VMI) は、実行中の仮想マシンを表します。VMI が仮想マシンまたは別のオブジェクトによって所有されている場合、Web コンソールで、または oc
コマンドラインインターフェイス (CLI) を使用し、所有者を通してこれを管理します。
スタンドアロンの VMI は、自動化または CLI で他の方法により、スクリプトを使用して独立して作成され、起動します。お使いの環境では、OpenShift Virtualization 環境外で開発され、起動されたスタンドアロンの VMI が存在する可能性があります。CLI を使用すると、引き続きそれらのスタンドアロン VMI を管理できます。スタンドアロン VMI に関連付けられた特定のタスクに Web コンソールを使用することもできます。
- スタンドアロン VMI とそれらの詳細を一覧表示します。
- スタンドアロン VMI のラベルとアノテーションを編集します。
- スタンドアロン VMI を削除します。
仮想マシンを削除する際に、関連付けられた VMI は自動的に削除されます。仮想マシンまたは他のオブジェクトによって所有されていないため、スタンドアロン VMI を直接削除します。
OpenShift Virtualization をアンインストールする前に、CLI または Web コンソールを使用してスタンドアロンの VMI の一覧を表示します。次に、未処理の VMI を削除します。
7.5.2. CLI を使用した仮想マシンインスタンスの一覧表示
oc
コマンドラインインターフェイス (CLI) を使用して、スタンドアロンおよび仮想マシンによって所有されている VMI を含むすべての仮想マシンの一覧を表示できます。
手順
以下のコマンドを実行して、すべての VMI の一覧を表示します。
$ oc get vmis
7.5.3. Web コンソールを使用したスタンドアロン仮想マシンインスタンスの一覧表示
Web コンソールを使用して、仮想マシンによって所有されていないクラスター内のスタンドアロンの仮想マシンインスタンス (VMI) の一覧を表示できます。
仮想マシンまたは他のオブジェクトが所有する VMI は、Web コンソールには表示されません。Web コンソールは、スタンドアロンの VMI のみを表示します。クラスター内のすべての VMI を一覧表示するには、CLI を使用する必要があります。
手順
- サイドメニューから Workloads → Virtualization をクリックします。仮想マシンおよびスタンドアロン VMI の一覧が表示されます。スタンドアロン VMI は、仮想マシンインスタンス名の横に表示される暗い配色のバッジで特定できます。
7.5.4. Web コンソールを使用したスタンドアロン仮想マシンインスタンスの編集
Web コンソールを使用して、スタンドアロン仮想マシンインスタンスのアノテーションおよびラベルを編集できます。スタンドアロン VMI の Details ページに表示される他の項目は編集できません。
手順
- サイドメニューから Workloads → Virtualization をクリックします。仮想マシン (VM) およびスタンドアロン VMI の一覧が表示されます。
- スタンドアロン VMI の名前をクリックして、 Virtual Machine Instance Overview 画面を開きます。
- Details タブをクリックします。
- Annotations の右側にある鉛筆アイコンをクリックします。
- 関連する変更を加え、Save をクリックします。
スタンドアロン VMI のラベルを編集するには、Actions をクリックして、Edit Labels を選択します。関連する変更を加え、Save をクリックします。
7.5.5. CLI を使用したスタンドアロン仮想マシンインスタンスの削除
oc
コマンドラインインターフェイス (CLI) を使用してスタンドアロン仮想マシンインスタンス (VMI) を削除できます。
前提条件
- 削除する必要のある VMI の名前を特定すること。
手順
以下のコマンドを実行して VMI を削除します。
$ oc delete vmi <vmi_name>
7.5.6. Web コンソールを使用したスタンドアロン仮想マシンインスタンスの削除
Web コンソールからスタンドアロン仮想マシンインスタンス (VMI) を削除します。
手順
- OpenShift Container Platform Web コンソールで、サイドメニューから Workloads → Virtualization をクリックします。
削除する必要のあるスタンドアロン仮想マシンインスタンス (VMI) の ⋮ ボタンをクリックし、 Delete Virtual Machine Instance を選択します。
- または、スタンドアロン VMI の名前をクリックします。Virtual Machine Instance Overview ページが表示されます。
- Actions → Delete Virtual Machine Instance を選択します。
- 確認のポップアップウィンドウで、Delete をクリックし、スタンドアロン VMI を永続的に削除します。
7.6. 仮想マシンの状態の制御
Web コンソールから仮想マシンを停止し、起動し、再起動し、一時停止を解除することができます。
コマンドラインインターフェイス (CLI) から仮想マシンを制御するには、virtctl
クライアント を使用します。
7.6.1. 仮想マシンの起動
Web コンソールから仮想マシンを起動できます。
手順
- サイドメニューから Workloads → Virtualization をクリックします。
- Virtual Machines タブをクリックします。
- 起動する仮想マシンが含まれる行を見つけます。
ユースケースに適したメニューに移動します。
複数の仮想マシンでのアクションの実行が可能なこのページに留まるには、以下を実行します。
-
行の右端にある Options メニュー
をクリックします。
-
行の右端にある Options メニュー
選択した仮想マシンを起動する前に、その仮想マシンの総合的な情報を表示するには、以下を実行します。
- 仮想マシンの名前をクリックして、Virtual Machine Overview ページにアクセスします。
- Actions をクリックします。
- Start Virtual Machine を選択します。
- 確認ウィンドウで Start をクリックし、仮想マシンを起動します。
URL
ソースからプロビジョニングされる仮想マシンの初回起動時に、OpenShift Virtualization が URL エンドポイントからコンテナーをインポートする間、仮想マシンの状態は Importing になります。このプロセスは、イメージのサイズによって数分の時間がかかる可能性があります。
7.6.2. 仮想マシンの再起動
Web コンソールから実行中の仮想マシンを再起動できます。
エラーを回避するには、ステータスが Importing の仮想マシンは再起動しないでください。
手順
- サイドメニューから Workloads → Virtualization をクリックします。
- Virtual Machines タブをクリックします。
- 再起動する仮想マシンが含まれる行を見つけます。
ユースケースに適したメニューに移動します。
複数の仮想マシンでのアクションの実行が可能なこのページに留まるには、以下を実行します。
-
行の右端にある Options メニュー
をクリックします。
-
行の右端にある Options メニュー
選択した仮想マシンを再起動する前に、その仮想マシンの総合的な情報を表示するには、以下を実行します。
- 仮想マシンの名前をクリックして、Virtual Machine Overview ページにアクセスします。
- Actions をクリックします。
- Restart Virtual Machine を選択します。
- 確認ウィンドウで Restart をクリックし、仮想マシンを再起動します。
7.6.3. 仮想マシンの停止
Web コンソールから仮想マシンを停止できます。
手順
- サイドメニューから Workloads → Virtualization をクリックします。
- Virtual Machines タブをクリックします。
- 停止する仮想マシンが含まれる行を見つけます。
ユースケースに適したメニューに移動します。
複数の仮想マシンでのアクションの実行が可能なこのページに留まるには、以下を実行します。
-
行の右端にある Options メニュー
をクリックします。
-
行の右端にある Options メニュー
選択した仮想マシンを停止する前に、その仮想マシンの総合的な情報を表示するには、以下を実行します。
- 仮想マシンの名前をクリックして、Virtual Machine Overview ページにアクセスします。
- Actions をクリックします。
- Stop Virtual Machine を選択します。
- 確認ウィンドウで Stop をクリックし、仮想マシンを停止します。
7.6.4. 仮想マシンの一時停止の解除
Web コンソールから仮想マシンの一時停止を解除できます。
前提条件
1 つ以上の仮想マシンのステータスが Paused である必要がある。
注記virtctl
クライアントを使用して仮想マシンを一時停止することができます。
手順
- サイドメニューから Workloads → Virtualization をクリックします。
- Virtual Machines タブをクリックします。
- 一時停止を解除する仮想マシンが含まれる行を見つけます。
ユースケースに適したメニューに移動します。
複数の仮想マシンでのアクションの実行が可能なこのページに留まるには、以下を実行します。
- Status 列で、Paused をクリックします。
選択した仮想マシンの一時停止を解除する前に、その仮想マシンの総合的な情報を表示するには、以下を実行します。
- 仮想マシンの名前をクリックして、Virtual Machine Overview ページにアクセスします。
- Status の右側にある鉛筆アイコンをクリックします。
- 確認ウィンドウで Stop をクリックし、仮想マシンの一時停止を解除します。
7.7. 仮想マシンコンソールへのアクセス
OpenShift Virtualization は、異なる製品タスクを実現するために使用できる異なる仮想マシンコンソールを提供します。Web コンソールおよび CLI コマンドを使用してこれらのコンソールにアクセスできます。
7.7.1. 仮想マシンコンソールのセッション
Web コンソールの Virtual Machine Details 画面の Consoles タブから、実行中の仮想マシンの VNC およびシリアルコンソールに接続することができます。
グラフィカルな VNC コンソール と シリアルコンソール の 2 つのコンソールを使用できます。VNC コンソール は、Consoles タブに移動する際には常にデフォルトで開きます。VNC ConsoleSerial Console リストを使用してコンソールを切り換えることができます。
コンソールのセッションは切断しない限り、バックグラウンドでアクティブな状態のままになります。Disconnect before switching チェックボックスがアクティブな場合にコンソールを切り替えると、現在のコンソールセッションは切断され、選択したコンソールの新規セッションが仮想マシンに接続されます。これにより、一度に 1 つのコンソールセッションのみが開かれます。
VNC コンソール のオプション
Send Key ボタンでは、仮想マシンに送信するキーの組み合わせを一覧表示します。
シリアルコンソール のオプション
Disconnect ボタンを使用して、仮想マシンから Serial Console セッションを手動で切断します。
Reconnect ボタンを使用して Serial Console セッションを仮想マシンに対して手動で開きます。
7.7.2. Web コンソールの使用による仮想マシンへの接続
7.7.2.1. ターミナルへの接続
Web コンソールを使用して仮想マシンに接続することができます。
手順
- 正しいプロジェクトを指定していることを確認します。そうでない場合は、Project 一覧をクリックして適切なプロジェクトを選択します。
- サイドメニューから Workloads → Virtualization をクリックします。
- Virtual Machines タブをクリックします。
- 仮想マシンを選択して、Virtual Machine Overview 画面を開きます。
-
Details タブで、
virt-launcher-<vm-name>
Pod をクリックします。 - Terminal タブをクリックします。ターミナルが空白の場合、ターミナルをクリックし、任意のキーを押して接続を開始します。
7.7.2.2. シリアルコンソールへの接続
Web コンソールの Virtual Machine Overview 画面の Consoles タブから、実行中の仮想マシンの Serial Console に接続します。
手順
- OpenShift Virtualization コンソールのサイドメニューから Workloads → Virtualization をクリックします。
- Virtual Machines タブをクリックします。
- 仮想マシンを選択して、Virtual Machine Overview 画面を開きます。
- Consoles をクリックします。VNC コンソールがデフォルトで開きます。
- VNC Console ドロップダウンリストをクリックし、Serial Console を選択します。
7.7.2.3. VNC コンソールへの接続
Web コンソールの Virtual Machine Overview 画面の Console タブから実行中の仮想マシンの VNC コンソールに接続します。
手順
- OpenShift Virtualization コンソールのサイドメニューから Workloads → Virtualization をクリックします。
- Virtual Machines タブをクリックします。
- 仮想マシンを選択して、Virtual Machine Overview 画面を開きます。
- Console タブをクリックします。VNC コンソールがデフォルトで開きます。
7.7.2.4. RDP コンソールへの接続
Remote Desktop Protocol (RDP) を使用するデスクトップビューアーコンソールは、Windows 仮想マシンに接続するためのより使いやすいコンソールを提供します。
RDP を使用して Windows 仮想マシンに接続するには、Web コンソールの Virtual Machine Details 画面の Consoles タブから仮想マシンの console.rdp
ファイルをダウンロードし、これを優先する RDP クライアントに指定します。
前提条件
-
QEMU ゲストエージェントがインストールされた実行中の Windows 仮想マシン。
qemu-guest-agent
は VirtIO ドライバーに含まれています。 - 仮想マシンに接続された layer-2 NIC。
- Windows 仮想マシンと同じネットワーク上のマシンにインストールされた RDP クライアント。
手順
- OpenShift Virtualization コンソールのサイドメニューから Workloads → Virtualization をクリックします。
- Virtual Machines タブをクリックします。
- Windows 仮想マシンを選択して、Virtual Machine Overview 画面を開きます。
- Console タブをクリックします。
- Console 一覧で、Desktop Viewer を選択します。
- Network Interface 一覧で、 layer-2 NIC を選択します。
-
Launch Remote Desktop をクリックし、
console.rdp
ファイルをダウンロードします。 RDP クライアントを開き、
console.rdp
ファイルを参照します。たとえば、remmina を使用します。$ remmina --connect /path/to/console.rdp
- Administrator ユーザー名およびパスワードを入力して、Windows 仮想マシンに接続します。
7.7.3. CLI コマンドの使用による仮想マシンコンソールへのアクセス
7.7.3.1. SSH 経由での仮想マシンインスタンスへのアクセス
仮想マシンにポート 22 を公開した後に、SSH を使用して仮想マシンにアクセスできます。
virtctl expose
コマンドは、仮想マシンインスタンスのポートをノードポートに転送し、有効にされたアクセスのサービスを作成します。以下の例では、fedora-vm-ssh
サービスを作成します。 このサービスは、<fedora-vm>
仮想マシンのポート 22 をノード上のポートに転送します。
前提条件
- 仮想マシンインスタンスと同じプロジェクトにいる必要があります。
-
アクセスする仮想マシンインスタンスは、
masquerade
バインディングメソッド方法を使用してデフォルトの Pod ネットワークに接続されている。 - アクセスする仮想マシンインスタンスが実行中であること。
-
OpenShift CLI (
oc
) をインストールします。
手順
以下のコマンドを実行して
fedora-vm-ssh
サービスを作成します。$ virtctl expose vm <fedora-vm> --port=20022 --target-port=22 --name=fedora-vm-ssh --type=NodePort 1
- 1
<fedora-vm>
は、fedora-vm-ssh
サービスを実行する仮想マシンの名前です。
サービスをチェックし、サービスが取得したポートを見つけます。
$ oc get svc
出力例
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE fedora-vm-ssh NodePort 127.0.0.1 <none> 20022:32551/TCP 6s
+ この例では、サービスは 32551
ポートを取得しています。
SSH 経由で仮想マシンインスタンスにログインします。ノードの
ipAddress
および直前の手順で確認したポートを使用します。$ ssh username@<node_IP_address> -p 32551
7.7.3.2. 仮想マシンインスタンスのシリアルコンソールへのアクセス
virtctl console
コマンドは、指定された仮想マシンインスタンスへのシリアルコンソールを開きます。
前提条件
-
virt-viewer
パッケージがインストールされていること。 - アクセスする仮想マシンインスタンスが実行中であること。
手順
virtctl
でシリアルコンソールに接続します。$ virtctl console <VMI>
7.7.3.3. VNC を使用した仮想マシンインスタンスのグラフィカルコンソールへのアクセス
virtctl
クライアントユーティリティーは remote-viewer
機能を使用し、実行中の仮想マシンインスタンスに対してグラフィカルコンソールを開くことができます。この機能は virt-viewer
パッケージに組み込まれています。
前提条件
-
virt-viewer
パッケージがインストールされていること。 - アクセスする仮想マシンインスタンスが実行中であること。
リモートマシンで SSH 経由で virtctl
を使用する場合、X セッションをマシンに転送する必要があります。
手順
virtctl
ユーティリティーを使用してグラフィカルインターフェイスに接続します。$ virtctl vnc <VMI>
コマンドが失敗した場合には、トラブルシューティング情報を収集するために
-v
フラグの使用を試行します。$ virtctl vnc <VMI> -v 4
7.7.3.4. RDP コンソールの使用による Windows 仮想マシンへの接続
Remote Desktop Protocol (RDP) は、Windows 仮想マシンに接続するためのより使いやすいコンソールを提供します。
RDP を使用して Windows 仮想マシンに接続するには、割り当てられた L2 NIC の IP アドレスを RDP クライアントに対して指定します。
前提条件
-
QEMU ゲストエージェントがインストールされた実行中の Windows 仮想マシン。
qemu-guest-agent
は VirtIO ドライバーに含まれています。 - 仮想マシンに接続された layer-2 NIC。
- Windows 仮想マシンと同じネットワーク上のマシンにインストールされた RDP クライアント。
手順
アクセストークンを持つユーザーとして、
oc
CLI ツールを使って OpenShift Virtualization クラスターにログインします。$ oc login -u <user> https://<cluster.example.com>:8443
oc describe vmi
を使用して、実行中の Windows 仮想マシンの設定を表示します。$ oc describe vmi <windows-vmi-name>
出力例
... spec: networks: - name: default pod: {} - multus: networkName: cnv-bridge name: bridge-net ... status: interfaces: - interfaceName: eth0 ipAddress: 198.51.100.0/24 ipAddresses: 198.51.100.0/24 mac: a0:36:9f:0f:b1:70 name: default - interfaceName: eth1 ipAddress: 192.0.2.0/24 ipAddresses: 192.0.2.0/24 2001:db8::/32 mac: 00:17:a4:77:77:25 name: bridge-net ...
-
レイヤー 2 ネットワークインターフェイスの IP アドレスを特定し、これをコピーします。これは直前の例では
192.0.2.0
であり、IPv6 を選択する場合は2001:db8::
になります。 - RDP クライアントを開き、接続用に直前の手順でコピーした IP アドレスを使用します。
- Administrator ユーザー名およびパスワードを入力して、Windows 仮想マシンに接続します。
7.8. 仮想マシンでの ConfigMap、シークレット、およびサービスアカウントの管理
シークレット、ConfigMap、およびサービスアカウントを使用して設定データを仮想マシンに渡すことができます。たとえば、以下を実行できます。
- シークレットを仮想マシンに追加して認証情報を必要とするサービスに仮想マシンのアクセスを付与します。
- Pod または別のオブジェクトがデータを使用できるように、機密データではない設定データを ConfigMap に保存します。
- サービスアカウントをそのコンポーネントに関連付けることにより、コンポーネントが API サーバーにアクセスできるようにします。
OpenShift Virtualization はシークレット、ConfigMap、およびサービスアカウントを仮想マシンディスクとして公開し、追加のオーバーヘッドなしにプラットフォーム全体でそれらを使用できるようにします。
7.8.1. シークレット、ConfigMap、またはサービスアカウントの仮想マシンへの追加
OpenShift Container Platform Web コンソールを使用して、シークレット、ConfigMap、またはサービスアカウントを仮想マシンに追加します。
前提条件
- 追加するシークレット、ConfigMap、またはサービスアカウントは、ターゲット仮想マシンと同じ namespace に存在する必要があります。
- 仮想マシンの電源がオフになっていること。
手順
- サイドメニューから Virtualization をクリックします。
- Virtual Machine タブをクリックします。
- 仮想マシンを選択して、Virtual Machine Overview ページを開きます。
- Environment タブをクリックします。
- Select a resource をクリックし、一覧からシークレット、ConfigMap、またはサービスアカウントを選択します。
- Save をクリックします。
- オプション。Add Config Map, Secret or Service Account をクリックして別のオブジェクトを追加します。
Reload をクリックし、最後に保存された状態にフォームをリセットできます。
検証
- Virtual Machine Overview ページから、Disks タブをクリックします。
- シークレット、ConfigMap、またはサービスアカウントがディスクの一覧に含まれていることを確認します。
- オプション。Actions → Start Virtual Machine をクリックして仮想マシンを起動します。他のディスクをマウントする際に、シークレット、ConfigMap、またはサービスアカウントをマウントできるようになりました。
7.8.2. 仮想マシンからのシークレット、ConfigMap、またはサービスアカウントの削除
OpenShift Container Platform Web コンソールを使用して、シークレット、ConfigMap、またはサービスアカウントを仮想マシンから削除します。
前提条件
- 仮想マシンに割り当てられるシークレット、ConfigMap、またはサービスアカウントが少なくとも 1 つ必要です。
- 仮想マシンの電源がオフになっていること。
手順
- サイドメニューから Virtualization をクリックします。
- Virtual Machine タブをクリックします。
- 仮想マシンを選択して、Virtual Machine Overview ページを開きます。
- Environment タブをクリックします。
-
一覧で削除する項目を見つけ、項目の右上にある Delete ボタン
をクリックします。
- Save をクリックします。
Reload をクリックし、最後に保存された状態にフォームをリセットできます。
検証
- Virtual Machine Overview ページから、Disks タブをクリックします。
- 削除したシークレット、ConfigMap、またはサービスアカウントがディスクの一覧に含まれていないことを確認します。
7.8.3. 追加リソース
7.9. VirtIO ドライバーの既存の Windows 仮想マシンへのインストール
7.9.1. VirtIO ドライバーについて
VirtIO ドライバーは、Microsoft Windows 仮想マシンが OpenShift Virtualization で実行されるために必要な準仮想化デバイスドライバーです。サポートされるドライバーは、Red Hat Ecosystem Catalog の container-native-virtualization/virtio-win
コンテナーディスクで利用できます。
container-native-virtualization/virtio-win
コンテナーディスクは、ドライバーのインストールを有効にするために SATA CD ドライブとして仮想マシンに割り当てられる必要があります。仮想マシン上での Windows のインストール時に VirtIO ドライバーをインストールすることも、既存の Windows インストールに追加することもできます。
ドライバーのインストール後に、container-native-virtualization/virtio-win
コンテナーディスクは仮想マシンから削除できます。
Installing Virtio drivers on a new Windows virtual machine も参照してください。
7.9.2. Microsoft Windows 仮想マシンのサポートされる VirtIO ドライバー
ドライバー名 | ハードウェア ID | 説明 |
---|---|---|
viostor |
VEN_1AF4&DEV_1001 | ブロックドライバー。Other devices グループの SCSI Controller として表示される場合があります。 |
viorng |
VEN_1AF4&DEV_1005 | エントロピーソースドライバー。Other devices グループの PCI Device として表示される場合があります。 |
NetKVM |
VEN_1AF4&DEV_1000 | ネットワークドライバー。Other devices グループの Ethernet Controller として表示される場合があります。VirtIO NIC が設定されている場合にのみ利用できます。 |
7.9.3. VirtIO ドライバーコンテナーディスクの仮想マシンへの追加
OpenShift Virtualization は、Red Hat Ecosystem Catalog で利用できる Microsoft Windows の VirtIO ドライバーをコンテナーディスクとして配布します。これらのドライバーを Windows 仮想マシンにインストールするには、仮想マシン設定ファイルで container-native-virtualization/virtio-win
コンテナーディスクを SATA CD ドライブとして仮想マシンに割り当てます。
前提条件
-
container-native-virtualization/virtio-win
コンテナーディスクを Red Hat Ecosystem Catalog からダウンロードすること。コンテナーディスクがクラスターにない場合は Red Hat レジストリーからダウンロードされるため、これは必須ではありません。
手順
container-native-virtualization/virtio-win
コンテナーディスクをcdrom
ディスクとして Windows 仮想マシン設定ファイルに追加します。コンテナーディスクは、クラスターにない場合はレジストリーからダウンロードされます。spec: domain: devices: disks: - name: virtiocontainerdisk bootOrder: 2 1 cdrom: bus: sata volumes: - containerDisk: image: container-native-virtualization/virtio-win name: virtiocontainerdisk
- 1
- OpenShift Virtualization は、
VirtualMachine
設定ファイルに定義される順序で仮想マシンディスクを起動します。container-native-virtualization/virtio-win
コンテナーディスクの前に仮想マシンの他のディスクを定義するか、またはオプションのbootOrder
パラメーターを使用して仮想マシンが正しいディスクから起動するようにできます。ディスクにbootOrder
を指定する場合、これは設定のすべてのディスクに指定される必要があります。
ディスクは、仮想マシンが起動すると利用可能になります。
-
コンテナーディスクを実行中の仮想マシンに追加する場合、変更を有効にするために CLI で
oc apply -f <vm.yaml>
を使用するか、または仮想マシンを再起動します。 -
仮想マシンが実行されていない場合、
virtctl start <vm>
を使用します。
-
コンテナーディスクを実行中の仮想マシンに追加する場合、変更を有効にするために CLI で
仮想マシンが起動したら、VirtIO ドライバーを割り当てられた SATA CD ドライブからインストールできます。
7.9.4. VirtIO ドライバーの既存 Windows 仮想マシンへのインストール
VirtIO ドライバーを、割り当てられた SATA CD ドライブから既存の Windows 仮想マシンにインストールします。
この手順では、ドライバーを Windows に追加するための汎用的なアプローチを使用しています。このプロセスは Windows のバージョンごとに若干異なる可能性があります。特定のインストール手順については、お使いの Windows バージョンについてのインストールドキュメントを参照してください。
手順
- 仮想マシンを起動し、グラフィカルコンソールに接続します。
- Windows ユーザーセッションにログインします。
Device Manager を開き、Other devices を拡張して、Unknown device を一覧表示します。
-
Device Properties
を開いて、不明なデバイスを特定します。デバイスを右クリックし、Properties を選択します。 - Details タブをクリックし、Property リストで Hardware Ids を選択します。
- Hardware Ids の Value をサポートされる VirtIO ドライバーと比較します。
-
- デバイスを右クリックし、Update Driver Software を選択します。
- Browse my computer for driver software をクリックし、VirtIO ドライバーが置かれている割り当て済みの SATA CD ドライブの場所に移動します。ドライバーは、ドライバーのタイプ、オペレーティングシステム、および CPU アーキテクチャー別に階層的に編成されます。
- Next をクリックしてドライバーをインストールします。
- 必要なすべての VirtIO ドライバーに対してこのプロセスを繰り返します。
- ドライバーのインストール後に、Close をクリックしてウィンドウを閉じます。
- 仮想マシンを再起動してドライバーのインストールを完了します。
7.9.5. 仮想マシンからの VirtIO コンテナーディスクの削除
必要なすべての VirtIO ドライバーを仮想マシンにインストールした後は、container-native-virtualization/virtio-win
コンテナーディスクを仮想マシンに割り当てる必要はなくなります。container-native-virtualization/virtio-win
コンテナーディスクを仮想マシン設定ファイルから削除します。
手順
設定ファイルを編集し、
disk
およびvolume
を削除します。$ oc edit vm <vm-name>
spec: domain: devices: disks: - name: virtiocontainerdisk bootOrder: 2 cdrom: bus: sata volumes: - containerDisk: image: container-native-virtualization/virtio-win name: virtiocontainerdisk
- 変更を有効にするために仮想マシンを再起動します。
7.10. VirtIO ドライバーの新規 Windows 仮想マシンへのインストール
7.10.1. 前提条件
- 仮想マシンからアクセスできる Windows インストールメディア (ISO のデータボリュームへのインポート および仮想マシンへの割り当てを実行)。
7.10.2. VirtIO ドライバーについて
VirtIO ドライバーは、Microsoft Windows 仮想マシンが OpenShift Virtualization で実行されるために必要な準仮想化デバイスドライバーです。サポートされるドライバーは、Red Hat Ecosystem Catalog の container-native-virtualization/virtio-win
コンテナーディスクで利用できます。
container-native-virtualization/virtio-win
コンテナーディスクは、ドライバーのインストールを有効にするために SATA CD ドライブとして仮想マシンに割り当てられる必要があります。仮想マシン上での Windows のインストール時に VirtIO ドライバーをインストールすることも、既存の Windows インストールに追加することもできます。
ドライバーのインストール後に、container-native-virtualization/virtio-win
コンテナーディスクは仮想マシンから削除できます。
VirtIO ドライバーの既存の Windows 仮想マシンへのインストール も参照してください。
7.10.3. Microsoft Windows 仮想マシンのサポートされる VirtIO ドライバー
ドライバー名 | ハードウェア ID | 説明 |
---|---|---|
viostor |
VEN_1AF4&DEV_1001 | ブロックドライバー。Other devices グループの SCSI Controller として表示される場合があります。 |
viorng |
VEN_1AF4&DEV_1005 | エントロピーソースドライバー。Other devices グループの PCI Device として表示される場合があります。 |
NetKVM |
VEN_1AF4&DEV_1000 | ネットワークドライバー。Other devices グループの Ethernet Controller として表示される場合があります。VirtIO NIC が設定されている場合にのみ利用できます。 |
7.10.4. VirtIO ドライバーコンテナーディスクの仮想マシンへの追加
OpenShift Virtualization は、Red Hat Ecosystem Catalog で利用できる Microsoft Windows の VirtIO ドライバーをコンテナーディスクとして配布します。これらのドライバーを Windows 仮想マシンにインストールするには、仮想マシン設定ファイルで container-native-virtualization/virtio-win
コンテナーディスクを SATA CD ドライブとして仮想マシンに割り当てます。
前提条件
-
container-native-virtualization/virtio-win
コンテナーディスクを Red Hat Ecosystem Catalog からダウンロードすること。コンテナーディスクがクラスターにない場合は Red Hat レジストリーからダウンロードされるため、これは必須ではありません。
手順
container-native-virtualization/virtio-win
コンテナーディスクをcdrom
ディスクとして Windows 仮想マシン設定ファイルに追加します。コンテナーディスクは、クラスターにない場合はレジストリーからダウンロードされます。spec: domain: devices: disks: - name: virtiocontainerdisk bootOrder: 2 1 cdrom: bus: sata volumes: - containerDisk: image: container-native-virtualization/virtio-win name: virtiocontainerdisk
- 1
- OpenShift Virtualization は、
VirtualMachine
設定ファイルに定義される順序で仮想マシンディスクを起動します。container-native-virtualization/virtio-win
コンテナーディスクの前に仮想マシンの他のディスクを定義するか、またはオプションのbootOrder
パラメーターを使用して仮想マシンが正しいディスクから起動するようにできます。ディスクにbootOrder
を指定する場合、これは設定のすべてのディスクに指定される必要があります。
ディスクは、仮想マシンが起動すると利用可能になります。
-
コンテナーディスクを実行中の仮想マシンに追加する場合、変更を有効にするために CLI で
oc apply -f <vm.yaml>
を使用するか、または仮想マシンを再起動します。 -
仮想マシンが実行されていない場合、
virtctl start <vm>
を使用します。
-
コンテナーディスクを実行中の仮想マシンに追加する場合、変更を有効にするために CLI で
仮想マシンが起動したら、VirtIO ドライバーを割り当てられた SATA CD ドライブからインストールできます。
7.10.5. Windows インストール時の VirtIO ドライバーのインストール
Windows のインストール時に割り当てられた SATA CD ドライバーから VirtIO ドライバーをインストールします。
この手順では、Windows インストールの汎用的なアプローチを使用しますが、インストール方法は Windows のバージョンごとに異なる可能性があります。インストールする Windows のバージョンについてのドキュメントを参照してください。
手順
- 仮想マシンを起動し、グラフィカルコンソールに接続します。
- Windows インストールプロセスを開始します。
- Advanced インストールを選択します。
-
ストレージの宛先は、ドライバーがロードされるまで認識されません。
Load driver
をクリックします。 - ドライバーは SATA CD ドライブとして割り当てられます。OK をクリックし、CD ドライバーでロードするストレージドライバーを参照します。ドライバーは、ドライバーのタイプ、オペレーティングシステム、および CPU アーキテクチャー別に階層的に編成されます。
- 必要なすべてのドライバーについて直前の 2 つの手順を繰り返します。
- Windows インストールを完了します。
7.10.6. 仮想マシンからの VirtIO コンテナーディスクの削除
必要なすべての VirtIO ドライバーを仮想マシンにインストールした後は、container-native-virtualization/virtio-win
コンテナーディスクを仮想マシンに割り当てる必要はなくなります。container-native-virtualization/virtio-win
コンテナーディスクを仮想マシン設定ファイルから削除します。
手順
設定ファイルを編集し、
disk
およびvolume
を削除します。$ oc edit vm <vm-name>
spec: domain: devices: disks: - name: virtiocontainerdisk bootOrder: 2 cdrom: bus: sata volumes: - containerDisk: image: container-native-virtualization/virtio-win name: virtiocontainerdisk
- 変更を有効にするために仮想マシンを再起動します。
7.11. 高度な仮想マシン管理
7.11.1. 管理タスクの自動化
Red Hat Ansible Automation Platform を使用すると、OpenShift Virtualization 管理タスクを自動化できます。Ansible Playbook を使用して新規の仮想マシンを作成する際の基本事項を確認します。
7.11.1.1. Red Hat Ansible Automation について
Ansible は、システムの設定、ソフトウェアのデプロイ、およびローリング更新の実行に使用する自動化ツールです。Ansible には OpenShift Virtualization のサポートが含まれ、Ansible モジュールを使用すると、テンプレート、永続ボリューム要求 (PVC) および仮想マシンの操作などのクラスター管理タスクを自動化できます。
Ansible は、oc
CLI ツールや API を使用しても実行できる OpenShift Virtualization の管理を自動化する方法を提供します。Ansible は、KubeVirt モジュール を他の Ansible モジュールと統合できる点でユニークであると言えます。
7.11.1.2. 仮想マシン作成の自動化
kubevirt_vm
Ansible Playbook を使用し、Red Hat Ansible Automation Platform を使用して OpenShift Container Platform クラスターに仮想マシンを作成できます。
前提条件
- Red Hat Ansible Engine バージョン 2.8 以降。
手順
kubevirt_vm
タスクを含むように Ansible Playbook YAML ファイルを編集します。kubevirt_vm: namespace: name: cpu_cores: memory: disks: - name: volume: containerDisk: image: disk: bus:
注記このスニペットには Playbook の
kubevirt_vm
部分のみが含まれます。namespace
、cpu_cores
の数、memory
、およびdisks
を含む、作成する必要のある仮想マシンを反映させるように値を編集します。以下に例を示します。kubevirt_vm: namespace: default name: vm1 cpu_cores: 1 memory: 64Mi disks: - name: containerdisk volume: containerDisk: image: kubevirt/cirros-container-disk-demo:latest disk: bus: virtio
仮想マシンを作成後すぐに起動する必要がある場合には、
state: running
を YAML ファイルに追加します。以下に例を示します。kubevirt_vm: namespace: default name: vm1 state: running 1 cpu_cores: 1
- 1
- この値を
state: absent
に変更すると、すでに存在する場合に仮想マシンは削除されます。
Playbook のファイル名を引数としてのみ使用して、
ansible-playbook
コマンドを実行します。$ ansible-playbook create-vm.yaml
出力を確認し、プレイが正常に実行されたかどうかを確認します。
出力例
(...) TASK [Create my first VM] ************************************************************************ changed: [localhost] PLAY RECAP ******************************************************************************************************** localhost : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Playbook ファイルに
state: running
を含めず、すぐに仮想マシンを起動する必要がある場合には、state: running
を含めるようにファイルを編集し、Playbook を再度実行します。$ ansible-playbook create-vm.yaml
仮想マシンが作成されたことを確認するには、仮想マシンコンソールへのアクセス を試行します。
7.11.1.3. 例: 仮想マシンを作成するための Ansible Playbook
kubevirt_vm
Ansible Playbook を使用して仮想マシン作成を自動化できます。
以下の YAML ファイルは kubevirt_vm
Playbook の例です。これには、Playbook を実行する際に独自の情報を置き換える必要のあるサンプルの値が含まれます。
--- - name: Ansible Playbook 1 hosts: localhost connection: local tasks: - name: Create my first VM kubevirt_vm: namespace: default name: vm1 cpu_cores: 1 memory: 64Mi disks: - name: containerdisk volume: containerDisk: image: kubevirt/cirros-container-disk-demo:latest disk: bus: virtio
7.11.2. 仮想マシンの PXE ブートの設定
PXE ブートまたはネットワークブートは OpenShift Virtualization で利用できます。ネットワークブートにより、ローカルに割り当てられたストレージデバイスなしにコンピューターを起動し、オペレーティングシステムまたは他のプログラムを起動し、ロードすることができます。たとえば、これにより、新規ホストのデプロイ時に PXE サーバーから必要な OS イメージを選択できます。
7.11.2.1. 前提条件
- Linux ブリッジが 接続されていること。
- PXE サーバーがブリッジとして同じ VLAN に接続されていること。
7.11.2.2. OpenShift Virtualization ネットワークの用語集
OpenShift Virtualization は、カスタムリソースおよびプラグインを使用して高度なネットワーク機能を提供します。
以下の用語は、OpenShift Virtualization ドキュメント全体で使用されています。
- Container Network Interface (CNI)
- コンテナーのネットワーク接続に重点を置く Cloud Native Computing Foundation プロジェクト。OpenShift Virtualization は CNI プラグインを使用して基本的な Kubernetes ネットワーク機能を強化します。
- Multus
- 複数の CNI の存在を可能にし、Pod または仮想マシンが必要なインターフェイスを使用できるようにするメタ CNI プラグイン。
- カスタムリソース定義 (CRD、Customer Resource Definition)
- カスタムリソースの定義を可能にする Kubernetes API リソース、または CRD API リソースを使用して定義されるオブジェクト。
- NetworkAttachmentDefinition
- Pod、仮想マシン、および仮想マシンインスタンスを 1 つ以上のネットワークに割り当てることを可能にする Multus プロジェクトによって導入される CRD。
- PXE (Preboot eXecution Environment)
- 管理者がネットワーク経由でサーバーからクライアントマシンを起動できるようにするインターフェイス。ネットワークのブートにより、オペレーティングシステムおよび他のソフトウェアをクライアントにリモートでロードできます。
7.11.2.3. MAC アドレスを指定した PXE ブート
まず、管理者は PXE ネットワークの NetworkAttachmentDefinition オブジェクトを作成し、ネットワーク経由でクライアントを起動できます。次に、仮想マシンインスタンスの設定ファイルで NetworkAttachmentDefinition を参照して仮想マシンインスタンスを起動します。また PXE サーバーで必要な場合には、仮想マシンインスタンスの設定ファイルで MAC アドレスを指定することもできます。
前提条件
- Linux ブリッジが接続されていること。
- PXE サーバーがブリッジとして同じ VLAN に接続されていること。
手順
クラスターに PXE ネットワークを設定します。
PXE ネットワーク
pxe-net-conf
の NetworkAttachmentDefinition ファイルを作成します。apiVersion: "k8s.cni.cncf.io/v1" kind: NetworkAttachmentDefinition metadata: name: pxe-net-conf spec: config: '{ "cniVersion": "0.3.1", "name": "pxe-net-conf", "plugins": [ { "type": "cnv-bridge", "bridge": "br1", "vlan": 1 1 }, { "type": "cnv-tuning" 2 } ] }'
注記仮想マシンインスタンスは、必要な VLAN のアクセスポートでブリッジ
br1
に割り当てられます。
直前の手順で作成したファイルを使用して NetworkAttachmentDefinition オブジェクトを作成します。
$ oc create -f pxe-net-conf.yaml
仮想マシンインスタンス設定ファイルを、インターフェイスおよびネットワークの詳細を含めるように編集します。
PXE サーバーで必要な場合には、ネットワークおよび MAC アドレスを指定します。MAC アドレスが指定されていない場合、値は自動的に割り当てられます。ただし、この時点で自動的に割り当てられる MAC アドレスは永続しないことに注意してください。
bootOrder
が1
に設定されており、インターフェイスが最初に起動することを確認します。この例では、インターフェイスは<pxe-net>
というネットワークに接続されています。interfaces: - masquerade: {} name: default - bridge: {} name: pxe-net macAddress: de:00:00:00:00:de bootOrder: 1
注記複数のインターフェイスおよびディスクのブートの順序はグローバル順序になります。
オペレーティングシステムのプロビジョニング後に起動が適切に実行されるよう、ブートデバイス番号をディスクに割り当てます。
ディスク
bootOrder
の値を2
に設定します。devices: disks: - disk: bus: virtio name: containerdisk bootOrder: 2
直前に作成された NetworkAttachmentDefinition に接続されるネットワークを指定します。このシナリオでは、
<pxe-net>
は<pxe-net-conf>
という NetworkAttachmentDefinition に接続されます。networks: - name: default pod: {} - name: pxe-net multus: networkName: pxe-net-conf
仮想マシンインスタンスを作成します。
$ oc create -f vmi-pxe-boot.yaml
出力例
virtualmachineinstance.kubevirt.io "vmi-pxe-boot" created
仮想マシンインスタンスの実行を待機します。
$ oc get vmi vmi-pxe-boot -o yaml | grep -i phase phase: Running
VNC を使用して仮想マシンインスタンスを表示します。
$ virtctl vnc vmi-pxe-boot
- ブート画面で、PXE ブートが正常に実行されていることを確認します。
仮想マシンインスタンスにログインします。
$ virtctl console vmi-pxe-boot
仮想マシンのインターフェイスおよび MAC アドレスを確認し、ブリッジに接続されたインターフェイスに MAC アドレスが指定されていることを確認します。この場合、PXE ブートには IP アドレスなしに
eth1
を使用しています。他のインターフェイスeth0
は OpenShift Container Platform から IP アドレスを取得しています。$ ip addr
出力例
... 3. eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000 link/ether de:00:00:00:00:de brd ff:ff:ff:ff:ff:ff
7.11.2.4. テンプレート: PXE ブートの仮想マシンインスタンス設定ファイル
apiVersion: kubevirt.io/v1alpha3 kind: VirtualMachineInstance metadata: creationTimestamp: null labels: special: vmi-pxe-boot name: vmi-pxe-boot spec: domain: devices: disks: - disk: bus: virtio name: containerdisk bootOrder: 2 - disk: bus: virtio name: cloudinitdisk interfaces: - masquerade: {} name: default - bridge: {} name: pxe-net macAddress: de:00:00:00:00:de bootOrder: 1 machine: type: "" resources: requests: memory: 1024M networks: - name: default pod: {} - multus: networkName: pxe-net-conf name: pxe-net terminationGracePeriodSeconds: 0 volumes: - name: containerdisk containerDisk: image: kubevirt/fedora-cloud-container-disk-demo - cloudInitNoCloud: userData: | #!/bin/bash echo "fedora" | passwd fedora --stdin name: cloudinitdisk status: {}
7.11.3. ゲストメモリーの管理
ゲストメモリー設定を特定のユースケースに合わせて調整する必要がある場合、ゲストの YAML 設定ファイルを編集してこれを実行できます。OpenShift Virtualization は、ゲストメモリーのオーバーコミットの設定と、ゲストメモリーのオーバーコミットアカウンティングの無効化を許可します。
以下の手順では、メモリー不足により仮想マシンのプロセスが強制終了される可能性を高めます。リスクを理解している場合にのみ続行してください。
7.11.3.1. ゲストメモリーのオーバーコミットの設定
仮想ワークロードに利用可能な量を上回るメモリーが必要な場合、メモリーのオーバーコミットを使用してホストのメモリーのすべてまたはそのほとんどを仮想マシンインスタンス (VMI) に割り当てることができます。メモリーのオーバーコミットを有効にすることは、通常ホストに予約されるリソースを最大化できることを意味します。
たとえば、ホストに 32 GB RAM がある場合、メモリーのオーバーコミットを使用してそれぞれ 4 GB RAM を持つ 8 つの仮想マシン (VM) に対応できます。これは、仮想マシンがそれらのメモリーのすべてを同時に使用しないという前提で機能します。
メモリーのオーバーコミットにより、メモリー不足 (OOM による強制終了) が原因で仮想マシンプロセスが強制終了される可能性が高くなります。
仮想マシンが OOM で強制終了される可能性は、特定の設定、ノードメモリー、利用可能な swap 領域、仮想マシンのメモリー消費、カーネルの same-page merging (KSM) の使用その他の要因によって変わります。
手順
仮想マシンインスタンスに対し、クラスターから要求された以上のメモリーが利用可能であることを明示的に示すために、仮想マシン設定ファイルを編集し、
spec.domain.memory.guest
をspec.domain.resources.requests.memory
よりも高い値に設定します。このプロセスはメモリーのオーバーコミットと呼ばれています。以下の例では、
1024M
がクラスターから要求されますが、仮想マシンインスタンスには2048M
が利用可能であると通知されます。ノードに利用可能な空のメモリーが十分にある限り、仮想マシンインスタンスは最大 2048M を消費します。kind: VirtualMachine spec: template: domain: resources: requests: memory: 1024M memory: guest: 2048M
注記ノードがメモリー不足の状態になると、Pod のエビクションルールと同じルールが仮想マシンインスタンスに適用されます。
仮想マシンを作成します。
$ oc create -f <file_name>.yaml
7.11.3.2. ゲストメモリーオーバーヘッドアカウンティングの無効化
要求する量に加えて、少量のメモリーが各仮想マシンインスタンスによって要求されます。追加のメモリーは、それぞれの VirtualMachineInstance
プロセスをラップするインフラストラクチャーに使用されます。
通常は推奨される方法ではありませんが、ゲストメモリーオーバーヘッドアカウンティングを無効にすることでノード上の仮想マシンインスタンスの密度を増やすことは可能です。
ゲストメモリーのオーバーヘッドアカウンティングを無効にすると、メモリー不足 (OOM による強制終了) による仮想マシンプロセスが強制終了の可能性が高くなります。
仮想マシンが OOM で強制終了される可能性は、特定の設定、ノードメモリー、利用可能な swap 領域、仮想マシンのメモリー消費、カーネルの same-page merging (KSM) の使用その他の要因によって変わります。
手順
ゲストメモリーオーバーヘッドアカウンティングを無効にするには、YAML 設定ファイルを編集し、
overcommitGuestOverhead
の値をtrue
に設定します。このパラメーターはデフォルトで無効にされています。kind: VirtualMachine spec: template: domain: resources: overcommitGuestOverhead: true requests: memory: 1024M
注記overcommitGuestOverhead
が有効にされている場合、これはゲストのオーバーヘッドをメモリー制限 (ある場合) に追加します。仮想マシンを作成します。
$ oc create -f <file_name>.yaml
7.11.4. 仮想マシンでの Huge Page の使用
Huge Page は、クラスター内の仮想マシンのバッキングメモリーとして使用できます。
7.11.4.1. 前提条件
- ノードには 事前に割り当てられた Huge Page が設定されている 必要があります。
7.11.4.2. Huge Page の機能
メモリーは Page と呼ばれるブロックで管理されます。多くのシステムでは、1 ページは 4Ki です。メモリー 1Mi は 256 ページに、メモリー 1Gi は 256,000 ページに相当します。CPU には、内蔵のメモリー管理ユニットがあり、ハードウェアでこのようなページリストを管理します。トランスレーションルックアサイドバッファー (TLB: Translation Lookaside Buffer) は、仮想から物理へのページマッピングの小規模なハードウェアキャッシュのことです。ハードウェアの指示で渡された仮想アドレスが TLB にあれば、マッピングをすばやく決定できます。そうでない場合には、TLB ミスが発生し、システムは速度が遅く、ソフトウェアベースのアドレス変換にフォールバックされ、パフォーマンスの問題が発生します。TLB のサイズは固定されているので、TLB ミスの発生率を減らすには Page サイズを大きくする必要があります。
Huge Page とは、4Ki より大きいメモリーページのことです。x86_64 アーキテクチャーでは、2Mi と 1Gi の 2 つが一般的な Huge Page サイズです。別のアーキテクチャーではサイズは異なります。Huge Page を使用するには、アプリケーションが認識できるようにコードを書き込む必要があります。Transparent Huge Pages (THP) は、アプリケーションによる認識なしに、Huge Page の管理を自動化しようとしますが、制約があります。特に、ページサイズは 2Mi に制限されます。THP では、THP のデフラグが原因で、メモリー使用率が高くなり、断片化が起こり、パフォーマンスの低下につながり、メモリーページがロックされてしまう可能性があります。このような理由から、アプリケーションは THP ではなく、事前割り当て済みの Huge Page を使用するように設計 (また推奨) される場合があります。
OpenShift Virtualization では、事前に割り当てられた Huge Page を使用できるように仮想マシンを設定できます。
7.11.4.3. 仮想マシンの Huge Page の設定
memory.hugepages.pageSize
および resources.requests.memory
パラメーターを仮想マシン設定に組み込み、仮想マシンを事前に割り当てられた Huge Page を使用するように設定できます。
メモリー要求はページサイズ別に分ける必要があります。たとえば、ページサイズ 1Gi
の場合に 500Mi
メモリーを要求することはできません。
ホストおよびゲスト OS のメモリーレイアウトには関連性がありません。仮想マシンマニフェストで要求される Huge Page が QEMU に適用されます。ゲスト内の Huge Page は、仮想マシンインスタンスの利用可能なメモリー量に基づいてのみ設定できます。
実行中の仮想マシンを編集する場合は、変更を有効にするために仮想マシンを再起動する必要があります。
前提条件
- ノードには、事前に割り当てられた Huge Page が設定されている必要がある。
手順
仮想マシン設定で、
resources.requests.memory
およびmemory.hugepages.pageSize
パラメーターをspec.domain
に追加します。以下の設定スニペットは、ページサイズが1Gi
の合計4Gi
メモリーを要求する仮想マシンについてのものです。kind: VirtualMachine ... spec: domain: resources: requests: memory: "4Gi" 1 memory: hugepages: pageSize: "1Gi" 2 ...
仮想マシン設定を適用します。
$ oc apply -f <virtual_machine>.yaml
7.11.5. 仮想マシン用の専用リソースの有効化
パフォーマンスを向上させるために、仮想マシンには CPU などのノードの専用リソースを持たせることができます。
7.11.5.1. 専用リソースについて
仮想マシンの専用リソースを有効にする場合、仮想マシンのワークロードは他のプロセスで使用されない CPU でスケジュールされます。専用リソースを使用することで、仮想マシンのパフォーマンスとレイテンシーの予測の精度を向上させることができます。
7.11.5.2. 前提条件
-
CPU マネージャー はノードに設定される必要があります。仮想マシンのワークロードをスケジュールする前に、ノードに
cpumanager
=true
ラベルが設定されていることを確認します。
7.11.5.3. 仮想マシンの専用リソースの有効化
Web コンソールの Virtual Machine Overview ページで仮想マシンの専用リソースを有効にすることができます。
手順
- サイドメニューから Workloads → Virtual Machines をクリックします。
- 仮想マシンを選択して、Virtual Machine Overview ページを開きます。
- Details タブをクリックします。
- Dedicated Resources フィールドの右側にある鉛筆アイコンをクリックして、Dedicated Resources ウィンドウを開きます。
- Schedule this workload with dedicated resources (guaranteed policy) を選択します。
- Save をクリックします。
7.12. 仮想マシンのインポート
7.12.1. DataVolume インポートの TLS 証明書
7.12.1.1. DataVolume インポートの認証に使用する TLS 証明書の追加
ソースからデータをインポートするには、レジストリーまたは HTTPS エンドポイントの TLS 証明書を ConfigMap に追加する必要があります。この ConfigMap は、宛先 DataVolume の namespace に存在する必要があります。
TLS 証明書の相対パスを参照して ConfigMap を作成します。
手順
正しい namespace にあることを確認します。ConfigMap は、同じ namespace にある場合に DataVolume によってのみ参照されます。
$ oc get ns
ConfigMap を作成します。
$ oc create configmap <configmap-name> --from-file=</path/to/file/ca.pem>
7.12.1.2. 例: TLS 証明書から作成される ConfigMap
以下は、ca.pem
TLS 証明書で作成される ConfigMap の例です。
apiVersion: v1 kind: ConfigMap metadata: name: tls-certs data: ca.pem: | -----BEGIN CERTIFICATE----- ... <base64 encoded cert> ... -----END CERTIFICATE-----
7.12.2. DataVolume の使用による仮想マシンイメージのインポート
DataVolume を使用し、データボリュームを使用して仮想マシンイメージを PersistentVolumeClaim (PVC) にインポートします。次に、DataVolume を永続ストレージの仮想マシンに割り当てることができます。
仮想マシンイメージは、HTTP または HTTPS エンドポイントでホストするか、またはコンテナーディスクに組み込み、コンテナーレジストリーで保存できます。
ディスクイメージを PVC にインポートする際に、ディスクイメージは PVC で要求されるストレージの全容量を使用するように拡張されます。この領域を使用するには、仮想マシンのディスクパーティションおよびファイルシステムの拡張が必要になる場合があります。
サイズ変更の手順は、仮想マシンにインストールされるオペレーティングシステムによって異なります。詳細は、該当するオペレーティングシステムのドキュメントを参照してください。
7.12.2.1. 前提条件
- エンドポイントに TLS 証明書が必要な場合、証明書は DataVolume と同じ namespace の ConfigMap に組み込む 必要があり、これは DataVolume 設定で参照されます。
コンテナーディスクをインポートするには、以下を実行します。
- 仮想マシンイメージからコンテナーディスクを準備 し、これをコンテナーレジストリーに保存してからインポートする必要がある場合があります。
-
コンテナーレジストリーに TLS がない場合、 レジストリーを
cdi-insecure-registries
ConfigMap に追加 し、ここからコンテナーディスクをインポートする必要があります。
- この操作を正常に実行するためには、StorageClass を定義するか、または CDI のスクラッチ領域を用意 する必要がある場合があります。
7.12.2.2. CDI がサポートする操作マトリックス
このマトリックスにはエンドポイントに対してコンテンツタイプのサポートされる CDI 操作が表示されます。これらの操作にはスクラッチ領域が必要です。
コンテンツタイプ | HTTP | HTTPS | HTTP Basic 認証 | レジストリー | アップロード |
---|---|---|---|---|---|
kubevirt (QCOW2) |
✓ QCOW2 |
✓ QCOW2** |
✓ QCOW2 |
✓ QCOW2* |
✓ QCOW2* |
KubeVirt (RAW) |
✓ RAW |
✓ RAW |
✓ RAW |
✓ RAW* |
✓ RAW* |
✓ サポートされる操作
□ サポートされない操作
* スクラッチ領域が必要
**カスタム認証局が必要な場合にスクラッチ領域が必要
7.12.2.3. DataVolume について
DataVolume
オブジェクトは、Containerized Data Importer (CDI) プロジェクトで提供されるカスタムリソースです。DataVolume は、基礎となる PersistentVolumeClaim (PVC) に関連付けられるインポート、クローン作成、およびアップロード操作のオーケストレーションを行います。DataVolume は KubeVirt に統合され、仮想マシンが PVC の作成前に起動することを防ぎます。
7.12.2.4. DataVolume の使用による PersistentVolumeClaim への仮想マシンイメージのインポート
データボリュームを使用して、仮想マシンイメージを PersistentVolumeClaim (PVC) にインポートすることができます。
仮想マシンイメージは、HTTP または HTTPS エンドポイントでホストするか、またはイメージをコンテナーディスクに組み込み、コンテナーレジストリーで保存できます。
インポートされたイメージから仮想マシンを作成するには、仮想マシンを作成する前にイメージまたはコンテナーディスクのエンドポイントを VirtualMachine
設定ファイルに指定します。
前提条件
-
OpenShift CLI (
oc
) がインストールされている。 - クラスターには、少なくとも 1 つの利用可能な PersistentVolume があります。
仮想マシンイメージをインポートするには、以下が必要です。
-
RAW、ISO、または QCOW2 形式の仮想マシンディスクイメージ (オプションで
xz
またはgz
を使用して圧縮される)。 -
イメージがデータソースにアクセスするために必要な認証情報と共にホストされる HTTP エンドポイント。例:
http://www.example.com/path/to/data
-
RAW、ISO、または QCOW2 形式の仮想マシンディスクイメージ (オプションで
コンテナーディスクをインポートするには、以下が必要である。
-
データソースにアクセスするために必要な認証情報と共に、コンテナーイメージレジストリーに保存されている仮想マシンイメージからビルドされたコンテナーディスク。例:
docker://registry.example.com/container-image
-
データソースにアクセスするために必要な認証情報と共に、コンテナーイメージレジストリーに保存されている仮想マシンイメージからビルドされたコンテナーディスク。例:
手順
オプション: データソースに認証情報が必要な場合、
endpoint-secret.yaml
ファイルを編集し、更新された設定をクラスターに適用します。apiVersion: v1 kind: Secret metadata: name: <endpoint-secret> labels: app: containerized-data-importer type: Opaque data: accessKeyId: "" 1 secretKey: "" 2
$ oc apply -f endpoint-secret.yaml
仮想マシン設定ファイルを編集し、インポートする必要のある仮想マシンイメージのデータソースを指定します。この例では、
http
ソースから Fedora イメージがインポートされます。apiVersion: kubevirt.io/v1alpha3 kind: VirtualMachine metadata: creationTimestamp: null labels: kubevirt.io/vm: vm-fedora-datavolume name: vm-fedora-datavolume spec: dataVolumeTemplates: - metadata: creationTimestamp: null name: fedora-dv spec: pvc: accessModes: - ReadWriteOnce resources: requests: storage: 10Gi storageClassName: local source: http: 1 url: "https://download.fedoraproject.org/pub/fedora/linux/releases/33/Cloud/x86_64/images/Fedora-Cloud-Base-33-1.2.x86_64.qcow2" 2 secretRef: "" 3 certConfigMap: "" 4 status: {} running: true template: metadata: creationTimestamp: null labels: kubevirt.io/vm: vm-fedora-datavolume spec: domain: devices: disks: - disk: bus: virtio name: datavolumedisk1 machine: type: "" 5 resources: requests: memory: 1.5Gi terminationGracePeriodSeconds: 60 volumes: - dataVolume: name: fedora-dv name: datavolumedisk1 status: {}
- 1
- イメージのインポート元となるソースタイプ。この例では、HTTP エンドポイントを使用します。レジストリーからコンテナーディスクをインポートするには、
http
をregistry
に置き換えます。 - 2
- インポートする必要のある仮想マシンイメージのソース。この例では、HTTP エンドポイントで仮想マシンイメージを参照します。コンテナーレジストリーエンドポイントのサンプルは
url: "docker://kubevirt/fedora-cloud-container-disk-demo:latest"
です。 - 3
secretRef
パラメーターはオプションです。- 4
certConfigMap
は、自己署名証明書またはシステム CA バンドルで署名されていない証明書を使用するサーバーと通信するために必要です。参照される ConfigMap は DataVolume と同じ namespace にある必要があります。- 5
type: dataVolume
またはtype: ""
を指定します。persistentVolumeClaim
などのtype
に他の値を指定すると、警告が表示され、仮想マシンは起動しません。
仮想マシンを作成します。
$ oc create -f vm-<name>-datavolume.yaml
注記oc create
コマンドは、DataVolume および仮想マシンを作成します。CDI コントローラーは適切なアノテーションを使って基礎となる PVC を作成し、インポートプロセスが開始されます。インポートが完了すると、DataVolume のステータスはSucceeded
に変更され、仮想マシンの起動が可能になります。DataVolume のプロビジョニングはバックグランドで実行されるため、これをモニターする必要はありません。仮想マシンは起動できますが、これはインポートが完了するまで実行されません。
検証
インポーター Pod は指定された URL から仮想マシンイメージまたはコンテナーディスクをダウンロードし、これをプロビジョニングされた PV に保存します。以下のコマンドを実行してインポーター Pod のステータスを確認します。
$ oc get pods
以下のコマンドを実行し、
Succeeded
が表示されるまで DataVolume のステータスをモニターします。$ oc describe dv <datavolume-name> 1
- 1
- 仮想マシン設定ファイルの
dataVolumeTemplates.metadata.name
で指定される DataVolume の名前。上記の設定例では、これはfedora-dv
です。
プロビジョニングが完了し、VMI が起動したことを検証するには、以下のコマンドを実行してそのシリアルコンソールへのアクセスを試行します。
$ virtctl console <vm-fedora-datavolume>
7.12.3. DataVolume の使用による仮想マシンイメージのブロックストレージへのインポート
既存の仮想マシンイメージは OpenShift Container Platform クラスターにインポートできます。OpenShift Virtualization は DataVolume を使用してデータのインポートおよび基礎となる PersistentVolumeClaim (PVC) の作成を自動化します。
ディスクイメージを PVC にインポートする際に、ディスクイメージは PVC で要求されるストレージの全容量を使用するように拡張されます。この領域を使用するには、仮想マシンのディスクパーティションおよびファイルシステムの拡張が必要になる場合があります。
サイズ変更の手順は、仮想マシンにインストールされるオペレーティングシステムによって異なります。詳細は、該当するオペレーティングシステムのドキュメントを参照してください。
7.12.3.1. 前提条件
- CDI でサポートされる操作マトリックス に応じてスクラッチ領域が必要な場合、まずは、この操作が正常に実行されるように StorageClass を定義するか、または CDI スクラッチ領域を用意 します。
7.12.3.2. DataVolume について
DataVolume
オブジェクトは、Containerized Data Importer (CDI) プロジェクトで提供されるカスタムリソースです。DataVolume は、基礎となる PersistentVolumeClaim (PVC) に関連付けられるインポート、クローン作成、およびアップロード操作のオーケストレーションを行います。DataVolume は KubeVirt に統合され、仮想マシンが PVC の作成前に起動することを防ぎます。
7.12.3.3. ブロック PersistentVolume について
ブロック PersistentVolume (PV) は、raw ブロックデバイスによってサポートされる PV です。これらのボリュームにはファイルシステムがなく、オーバーヘッドを削減することで、仮想マシンのパフォーマンス上の利点をもたらすことができます。
raw ブロックボリュームは、PV および PersistentVolumeClaim (PVC) 仕様で volumeMode: Block
を指定してプロビジョニングされます。
7.12.3.4. ローカルブロック PersistentVolume の作成
ファイルにデータを設定し、これをループデバイスとしてマウントすることにより、ノードでローカルブロック PersistentVolume (PV) を作成します。次に、このループデバイスを PV 設定で Block
ボリュームとして参照し、これを仮想マシンイメージのブロックデバイスとして使用できます。
手順
-
ローカル PV を作成するノードに
root
としてログインします。この手順では、node01
を例に使用します。 ファイルを作成して、これを null 文字で設定し、ブロックデバイスとして使用できるようにします。以下の例では、2Gb (20 100Mb ブロック) のサイズのファイル
loop10
を作成します。$ dd if=/dev/zero of=<loop10> bs=100M count=20
loop10
ファイルをループデバイスとしてマウントします。$ losetup </dev/loop10>d3 <loop10> 1 2
マウントされたループデバイスを参照する
PersistentVolume
設定を作成します。kind: PersistentVolume apiVersion: v1 metadata: name: <local-block-pv10> annotations: spec: local: path: </dev/loop10> 1 capacity: storage: <2Gi> volumeMode: Block 2 storageClassName: local 3 accessModes: - ReadWriteOnce persistentVolumeReclaimPolicy: Delete nodeAffinity: required: nodeSelectorTerms: - matchExpressions: - key: kubernetes.io/hostname operator: In values: - <node01> 4
ブロック PV を作成します。
# oc create -f <local-block-pv10.yaml>1
- 1
- 直前の手順で作成された PersistentVolume のファイル名。
7.12.3.5. DataVolume を使用した仮想マシンイメージのブロック PersistentVolume へのインポート
既存の仮想マシンイメージは OpenShift Container Platform クラスターにインポートできます。OpenShift Virtualization は DataVolume を使用してデータのインポートおよび基礎となる PersistentVolumeClaim (PVC) の作成を自動化します。その後、仮想マシン設定で DataVolume を参照できます。
前提条件
-
RAW、ISO、または QCOW2 形式の仮想マシンディスクイメージ (オプションで
xz
またはgz
を使用して圧縮される) -
データソースにアクセスするために必要な認証情報と共にイメージがホストされる
HTTP
またはs3
エンドポイント - 少なくとも 1 つ以上の利用可能なブロック PV。
手順
データソースに認証情報が必要な場合、
endpoint-secret.yaml
ファイルを編集し、更新された設定をクラスターに適用します。選択するテキストエディターで
endpoint-secret.yaml
ファイルを編集します。apiVersion: v1 kind: Secret metadata: name: <endpoint-secret> labels: app: containerized-data-importer type: Opaque data: accessKeyId: "" 1 secretKey: "" 2
以下のコマンドを実行してシークレットを更新します。
$ oc apply -f endpoint-secret.yaml
インポートするイメージのデータソースを指定する
DataVolume
およびvolumeMode: Block
を作成して、利用可能なブロック PV が使用されるようにします。apiVersion: cdi.kubevirt.io/v1alpha1 kind: DataVolume metadata: name: <import-pv-datavolume> 1 spec: storageClassName: local 2 source: http: url: <http://download.fedoraproject.org/pub/fedora/linux/releases/28/Cloud/x86_64/images/Fedora-Cloud-Base-28-1.1.x86_64.qcow2> 3 secretRef: <endpoint-secret> 4 pvc: volumeMode: Block 5 accessModes: - ReadWriteOnce resources: requests: storage: <2Gi>
以下のコマンドを実行して、仮想マシンイメージをインポートするために DataVolume を作成します。
$ oc create -f <import-pv-datavolume.yaml>1
- 1
- 直前の手順で作成された DataVolume のファイル名です。
7.12.3.6. CDI がサポートする操作マトリックス
このマトリックスにはエンドポイントに対してコンテンツタイプのサポートされる CDI 操作が表示されます。これらの操作にはスクラッチ領域が必要です。
コンテンツタイプ | HTTP | HTTPS | HTTP Basic 認証 | レジストリー | アップロード |
---|---|---|---|---|---|
kubevirt (QCOW2) |
✓ QCOW2 |
✓ QCOW2** |
✓ QCOW2 |
✓ QCOW2* |
✓ QCOW2* |
KubeVirt (RAW) |
✓ RAW |
✓ RAW |
✓ RAW |
✓ RAW* |
✓ RAW* |
✓ サポートされる操作
□ サポートされない操作
* スクラッチ領域が必要
**カスタム認証局が必要な場合にスクラッチ領域が必要
7.12.4. 単一の Red Hat Virtualization 仮想マシンのインポート
仮想マシンウィザードまたは CLI を使用して、単一の Red Hat Virtualization (RHV) 仮想マシンを OpenShift Container Platform クラスターにインポートできます。
7.12.4.1. OpenShift Virtualization ストレージ機能マトリクス
以下の表は、仮想マシンのインポートをサポートするローカルおよび共有の永続ストレージについて説明しています。
RHV 仮想マシンのインポート | |
---|---|
OpenShift Container Storage: RBD ブロックモードボリューム | Yes |
OpenShift Virtualization ホストパスプロビジョナー | No |
他の複数ノードの書き込み可能なストレージ | ○ [1] |
他の単一ノードの書き込み可能なストレージ | ○ [2] |
- PVC は ReadWriteMany アクセスモードを要求する必要があります。
- PVC は ReadWriteOnce アクセスモードを要求する必要があります。
7.12.4.2. 仮想マシンをインポートするための前提条件
仮想マシンを OpenShift Virtualization にインポートするには、以下の前提条件を満たす必要があります。
- 管理者ユーザー権限がある。
ストレージ:
- OpenShift Virtualization のローカルおよび共有永続ストレージクラスは、仮想マシンのインポートをサポートする必要があります。
- Ceph RBD ブロックモードのボリュームを使用している場合、ストレージは仮想ディスクに対応するのに十分な大きさである必要があります。ディスクが利用可能なストレージに対して大きすぎると、インポートプロセスが失敗し、仮想ディスクのコピーに使用される PV は解放されません。
ネットワーク:
- ソースおよびターゲットネットワークは同じ名前を持つか、または相互にマップされる必要があります。
-
ソースネットワークインターフェイスは
e1000
、rtl8139
、またはvirtio
である必要があります。
仮想マシンディスク:
-
ディスクインターフェイスは
sata
、virtio_scsi
、またはvirtio
である必要があります。 - ディスクは直接の LUN として設定することはできません。
-
ディスクのステータスは
illegal
またはlocked
にすることができません。 -
ストレージタイプは
image
である必要があります。 - SCSI 予約を無効にする必要があります。
-
ScsiGenericIO
を無効にする必要があります。
-
ディスクインターフェイスは
仮想マシンの設定:
- 仮想マシンが GPU リソースを使用する場合は、GPU を提供するノードを設定する必要があります。
- 仮想マシンを vGPU リソース用に設定することはできません。
-
仮想マシンには、
illegal
状態のスナップショットを含めることはできません。 - 仮想マシンは OpenShift Container Platform で作成されから、その後に RHV に追加することはできません。
- 仮想マシンを USB デバイス用に設定することはできません。
-
watchdog モデルは
diag288
にすることができません。
7.12.4.3. デフォルトストレージクラスのチェック
デフォルトのストレージクラスを確認してこれが NFS であることを確認します。
デフォルトのストレージクラスである Cinder は、仮想マシンのインポートをサポートしません。
7.12.4.3.1. OpenShift Container Platform コンソールでのデフォルトストレージクラスの確認
OpenShift Container Platform コンソールでデフォルトストレージクラスを確認できます。デフォルトのストレージクラスが NFS ではない場合、デフォルトのストレージクラスを変更して、NFS ストレージクラスをデフォルトになるように変更できます。
複数のデフォルトストレージクラスが定義されている場合、VirtualMachineImport CR はアルファベット順で最初に表示されるデフォルトストレージクラスを使用します。
手順
- Storage → Storage Classes に移動します。
- Storage Classes 一覧でデフォルトのストレージクラスを確認します。
デフォルトのストレージクラスが NFS ではない場合は、デフォルトのストレージクラスのデフォルト設定を解除するように編集します。
-
デフォルトストレージクラスの Options メニュー
をクリックし、Edit Storage Class を選択します。
- Details タブで、Annotations の横にある Edit ボタンをクリックします。
-
storageclass.kubernetes.io/is-default-class
アノテーションの右側にある Delete ボタンをクリックしてから Save をクリックします。
-
デフォルトストレージクラスの Options メニュー
既存の NFS ストレージクラスをデフォルトに変更します。
-
既存の NFS ストレージクラスの Options メニュー
をクリックし、Edit Storage Class を選択します。
- Details タブで、Annotations の横にある Edit ボタンをクリックします。
-
storageclass.kubernetes.io/is-default-class
を Key フィールドに入力し、Value フィールドにtrue
を入力し、Save をクリックします。
-
既存の NFS ストレージクラスの Options メニュー
- Storage → Storage Classes に移動し、NFS ストレージクラスが唯一のデフォルトストレージクラスであることを確認します。
7.12.4.3.2. CLI でのデフォルトストレージクラスの確認
CLI でデフォルトのストレージクラスを確認できます。
デフォルトのストレージクラスが NFS ではない場合、デフォルトのストレージクラスを NFS に変更し、既存のデフォルトストレージクラスをデフォルト設定を解除できるように変更する必要があります。複数のデフォルトストレージクラスが定義されている場合、VirtualMachineImport CR はアルファベット順で最初に表示されるデフォルトストレージクラスを使用します。
手順
以下のコマンドを入力して実行してストレージクラスを取得します。
$ oc get sc
default
ストレージクラスが出力に表示されます。
出力例
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANS ... standard (default) kubernetes.io/cinder Delete WaitForFirstConsumer true
デフォルトストレージクラスの変更
AWS を使用している場合は、以下のプロセスを使用してデフォルトのストレージクラスを変更します。このプロセスでは、gp2
と standard
の 2 つのストレージクラスが定義されており、デフォルトのストレージクラスを gp2
から standard
に変更する必要がある場合を想定しています。
ストレージクラスを一覧表示します。
$ oc get storageclass
出力例
NAME TYPE gp2 (default) kubernetes.io/aws-ebs 1 standard kubernetes.io/aws-ebs
- 1
(default)
はデフォルトのストレージクラスを示します。
デフォルトのストレージクラスのアノテーション
storageclass.kubernetes.io/is-default-class
の値をfalse
に変更します。$ oc patch storageclass gp2 -p '{"metadata": {"annotations": {"storageclass.kubernetes.io/is-default-class": "false"}}}'
アノテーションを追加するか、またはアノテーションを
storageclass.kubernetes.io/is-default-class=true
として変更することで、別のストレージクラスをデフォルトにします。$ oc patch storageclass standard -p '{"metadata": {"annotations": {"storageclass.kubernetes.io/is-default-class": "true"}}}'
変更内容を確認します。
$ oc get storageclass
出力例
NAME TYPE gp2 kubernetes.io/aws-ebs standard (default) kubernetes.io/aws-ebs
7.12.4.4. Red Hat Virtualization 仮想マシンのインポート用に ConfigMap を作成する
デフォルトの vm-import-controller
マッピングを上書きする場合や、追加のマッピングを追加する場合は、Red Hat Virtualization (RHV) 仮想マシンオペレーティングシステムを OpenShift Virtualization テンプレートにマップする ConfigMap を作成できます。
デフォルトの vm-import-controller
ConfigMap には、以下の RHV オペレーティングシステムおよびそれらの対応する共通の OpenShift Virtualization テンプレートが含まれます。
RHV 仮想マシンオペレーティングシステム | OpenShift Virtualization テンプレート |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
手順
Web ブラウザーで、
http://<RHV_Manager_FQDN>/ovirt-engine/api/vms/<VM_ID>
に移動して RHV 仮想マシンオペレーティングシステムの REST API 名を特定します。以下の例のように、オペレーティングシステム名が XML 出力の<os>
セクションに表示されます。... <os> ... <type>rhel_8x64</type> </os>
利用可能な OpenShift Virtualization テンプレートの一覧を表示します。
$ oc get templates -n openshift --show-labels | tr ',' '\n' | grep os.template.kubevirt.io | sed -r 's#os.template.kubevirt.io/(.*)=.*#\1#g' | sort -u
出力例
fedora31 fedora32 ... rhel8.1 rhel8.2 ...
- RHV 仮想マシンオペレーティングシステムに一致する OpenShift Virtualization テンプレートが利用可能なテンプレートの一覧に表示されない場合は、OpenShift Virtualization Web コンソールでテンプレートを作成します。
RHV 仮想マシンオペレーティングシステムを OpenShift Virtualization テンプレートにマップするために ConfigMap を作成します。
$ cat <<EOF | oc create -f - apiVersion: v1 kind: ConfigMap metadata: name: os-configmap namespace: default 1 data: guestos2common: | "Red Hat Enterprise Linux Server": "rhel" "CentOS Linux": "centos" "Fedora": "fedora" "Ubuntu": "ubuntu" "openSUSE": "opensuse" osinfo2common: | "<rhv-operating-system>": "<vm-template>" 2 EOF
ConfigMap の例
$ cat <<EOF | oc apply -f - apiVersion: v1 kind: ConfigMap metadata: name: os-configmap namespace: default data: osinfo2common: | "other_linux": "fedora31" EOF
カスタム ConfigMap が作成されていることを確認します。
$ oc get cm -n default os-configmap -o yaml
kubevirt-hyperconverged-operator.v2.4.9.yaml
ファイルを編集します。$ oc edit clusterserviceversion -n openshift-cnv kubevirt-hyperconverged-operator.v2.4.9
vm-import-operator
デプロイメントマニフェストの以下のパラメーターを更新します。... spec: containers: - env: ... - name: OS_CONFIGMAP_NAME value: os-configmap 1 - name: OS_CONFIGMAP_NAMESPACE value: default 2
kubevirt-hyperconverged-operator.v2.4.9.yaml
ファイルを保存します。vm-import-operator
デプロイメントを更新すると、vm-import-controller
ConfigMap が更新されます。テンプレートが OpenShift Virtualization Web コンソールに表示されることを確認します。
- サイドメニューから Workloads → Virtualization をクリックします。
- Virtual Machine Templates タブをクリックして、一覧でテンプレートを見つけます。
7.12.4.5. VM Import ウィザードを使用した仮想マシンのインポート
VM Import ウィザードを使用して、単一の仮想マシンをインポートできます。
手順
- Web コンソールで、Workloads → Virtual Machines をクリックします。
- Create Virtual Machine をクリックし、Import with Wizard を選択します。
- Provider 一覧で Red Hat Virtualization (RHV) を選択します。
Connect to New Instance または保存された RHV インスタンスを選択します。
Connect to New Instance を選択する場合は、以下のフィールドに入力します。
-
API URL:
https://<RHV_Manager_FQDN>/ovirt-engine/api
など。 CA certificate: Browse をクリックして RHV Manager CA 証明書をアップロードするか、またはフィールドに CA 証明書を貼り付けます。
以下のコマンドを実行して CA 証明書を表示します。
$ openssl s_client -connect <RHV_Manager_FQDN>:443 -showcerts < /dev/null
CA 証明書は、出力内の 2 番目の証明書です。
-
Username: RHV Manager ユーザー名 (例:
admin@internal
) - Password: RHV Manager パスワード
-
API URL:
- 保存された RHV インスタンスを選択する場合、ウィザードは保存された認証情報を使用して RHV インスタンスに接続します。
Check and Save をクリックし、接続が完了するまで待ちます。
注記接続の詳細はシークレットに保存されます。正しくない URL、ユーザー名またはパスワードを使用してプロバイダーを追加する場合、Workloads → Secrets をクリックし、プロバイダーのシークレットを削除します。
- クラスターおよび仮想マシンを選択します。
- Next をクリックします。
- Review 画面で、設定を確認します。
- オプション:Start virtual machine on creation を選択します。
Edit をクリックして、以下の設定を更新します。
- General → Name: 仮想マシン名は 63 文字に制限されます。
General → Description: 仮想マシンの説明 (オプション)。
Storage Class: NFS または ocs-storagecluster-ceph-rbd を選択します。
ocs-storagecluster-ceph-rbd を選択する場合、ディスクの Volume Mode を Block に設定する必要があります。
- Advanced → Volume Mode: Block を選択します。
- Advanced → Volume Mode: Block を選択します。
- Networking → Network: 利用可能なネットワーク割り当て定義オブジェクトの一覧からネットワークを選択できます。
インポート設定を編集した場合は、Import または Review and Import をクリックします。
Successfully created virtual machine というメッセージが表示され、仮想マシンに作成されたリソースの一覧が表示されます。仮想マシンが Workloads → Virtual Machines に表示されます。
仮想マシンウィザードのフィールド
名前 | パラメーター | 説明 |
---|---|---|
Template | 仮想マシンの作成に使用するテンプレート。テンプレートを選択すると、他のフィールドが自動的に入力されます。 | |
ソース | PXE | PXE メニューから仮想マシンをプロビジョニングします。クラスターに PXE 対応の NIC が必要になります。 |
URL | HTTP または S3 エンドポイントで利用できるイメージから仮想マシンをプロビジョニングします。 | |
コンテナー |
クラスターからアクセスできるレジストリーの起動可能なオペレーティングシステムコンテナーから仮想マシンをプロビジョニングします。例: | |
Disk | ディスクから仮想マシンをプロビジョニングします。 | |
Operating System | 仮想マシン用に選択される主なオペレーティングシステム。 | |
Flavor | small、medium、large、tiny、Custom | 仮想マシンに割り当てられる CPU およびメモリーの量を決定するプリセット。Flavor に設定される Preset はオペレーティングシステムによって決まります。 |
Memory | 仮想マシンに割り当てられるメモリーのサイズ (GiB 単位)。 | |
CPU | 仮想マシンに割り当てられる CPU の量。 | |
Workload Profile | High Performance | 高パフォーマンスのワークロードに対して最適化された仮想マシン設定。 |
Server | サーバーワークロードの実行に最適化されたプロファイル。 | |
Desktop | デスクトップで使用するための仮想マシン設定。 | |
名前 |
この名前には、小文字 ( | |
説明 | オプションの説明フィールド。 | |
Start virtual machine on creation | これを選択すると、作成時に仮想マシンが自動的に起動します。 |
ネットワークフィールド
名前 | 説明 |
---|---|
名前 | ネットワークインターフェイスの名前。 |
Model | ネットワークインターフェイスカードのモデルを示します。サポートされる値は、e1000、 e1000e、ne2k_pci、pcnet, rtl8139、および virtIO です。 |
Network | 利用可能な NetworkAttachmentDefinition オブジェクトの一覧。 |
Type |
利用可能なバインディングメソッドの一覧。デフォルトの Pod ネットワークについては、 |
MAC Address | ネットワークインターフェイスの MAC アドレス。MAC アドレスが指定されていない場合、セッションの一時アドレスが生成されます。 |
ストレージフィールド
名前 | 説明 |
---|---|
ソース | 仮想マシンの空のディスクを選択するか、または URL、Container、Attach Cloned Disk、または Attach Disk などの選択可能なオプションから選択します。既存ディスクを選択し、これを仮想マシンに割り当てるには、利用可能な PersistentVolumeClaim (PVC) の一覧から Attach Cloned Disk または Attach Disk を選択します。 |
名前 |
ディスクの名前。この名前には、小文字 ( |
Size (GiB) | ディスクのサイズ (GiB)。 |
Interface | ディスクデバイスのタイプ。サポートされるインターフェイスは、virtIO、SATA、および SCSI です。 |
ストレージクラス |
ディスクの作成に使用される |
Advanced → Volume Mode |
ストレージの詳細設定
名前 | パラメーター | 説明 |
---|---|---|
ボリュームモード | Filesystem | ファイルシステムベースのボリュームで仮想ディスクを保存します。 |
Block |
ブロックボリュームで仮想ディスクを直接保存します。基礎となるストレージがサポートしている場合は、 | |
アクセスモード [1] | Single User (RWO) | ディスクは単一ノードで読み取り/書き込みとしてマウントできます。 |
Shared Access (RWX) | ディスクは数多くのノードで読み取り/書き込みとしてマウントできます。 | |
Read Only (ROX) | ディスクは数多くのノードで読み取り専用としてマウントできます。 |
- コマンドラインインターフェイスを使用してアクセスモードを変更できます。
7.12.4.6. CLI を使用した Red Hat Virtualization 仮想マシンのインポート
Secret および VirtualMachineImport カスタムリソース (CR) を作成して、CLI で Red Hat Virtualization (RHV) 仮想マシンをインポートできます。Secret CR は RHV Manager の認証情報および CA 証明書を保存します。VirtualMachineImport CR は仮想マシンのインポートプロセスのパラメーターを定義します。
オプション: VirtualMachineImport CR とは別に ResourceMapping CR を作成できます。ResourceMapping CR は、追加の RHV 仮想マシンをインポートする場合などに柔軟性を提供します。
デフォルトのターゲットストレージクラスは NFS である必要があります。Cinder は RHV 仮想マシンのインポートをサポートしません。
手順
以下のコマンドを実行してシークレット CR を作成します。
$ cat <<EOF | oc create -f - apiVersion: v1 kind: Secret metadata: name: rhv-credentials namespace: default 1 type: Opaque stringData: ovirt: | apiUrl: <api_endpoint> 2 username: admin@internal password: 3 caCert: | -----BEGIN CERTIFICATE----- 4 -----END CERTIFICATE----- EOF
$ openssl s_client -connect :443 -showcerts < /dev/null
オプション: 以下のコマンドを実行して、リソースマッピングを
VirtualMachineImport
CR から分離する必要がある場合にResourceMapping
を作成します。$ cat <<EOF | kubectl create -f - apiVersion: v2v.kubevirt.io/v1alpha1 kind: ResourceMapping metadata: name: resourcemapping_example namespace: default spec: ovirt: networkMappings: - source: name: <rhv_logical_network>/<vnic_profile> 1 target: name: <target_network> 2 type: pod storageMappings: 3 - source: name: <rhv_storage_domain> 4 target: name: <target_storage_class> 5 volumeMode: <volume_mode> 6 EOF
- 1
- RHV の論理ネットワークおよび vNIC プロファイルを指定します。
- 2
- OpenShift Virtualization ネットワークを指定します。
- 3
- ストレージマッピングが
ResourceMapping
およびVirtualMachineImport
CR の両方に指定される場合、VirtualMachineImport
CR が優先されます。 - 4
- RHV ストレージドメインを指定します。
- 5
nfs
またはocs-storagecluster-ceph-rbd
を指定します。- 6
ocs-storagecluster-ceph-rbd
ストレージクラスを指定した場合、Block
をボリュームモードとして指定する必要があります。
以下のコマンドを実行して VirtualMachineImport CR を作成します。
$ cat <<EOF | oc create -f - apiVersion: v2v.kubevirt.io/v1alpha1 kind: VirtualMachineImport metadata: name: vm-import namespace: default spec: providerCredentialsSecret: name: rhv-credentials namespace: default # resourceMapping: 1 # name: resourcemapping-example # namespace: default targetVmName: vm_example 2 startVm: true source: ovirt: vm: id: <source_vm_id> 3 name: <source_vm_name> 4 cluster: name: <source_cluster_name> 5 mappings: 6 networkMappings: - source: name: <source_logical_network>/<vnic_profile> 7 target: name: <target_network> 8 type: pod storageMappings: 9 - source: name: <source_storage_domain> 10 target: name: <target_storage_class> 11 accessMode: <volume_access_mode> 12 diskMappings: - source: id: <source_vm_disk_id> 13 target: name: <target_storage_class> 14 EOF
- 1
- ResourceMapping CR を作成する場合、
resourceMapping
セクションのコメントを解除します。 - 2
- ターゲットの仮想マシン名を指定します。
- 3
- ソース仮想マシン ID を指定します (例:
80554327-0569-496b-bdeb-fcbbf52b827b
)。Manager マシンの Web ブラウザーでhttps://www.example.com/ovirt-engine/api/vms/
を入力して仮想マシン ID を取得し、すべての仮想マシンを一覧表示できます。インポートする仮想マシンとその対応する仮想マシン ID を見つけます。仮想マシン名またはクラスター名を指定する必要はありません。 - 4
- ソース仮想マシン名を指定する場合、ソースクラスターも指定する必要があります。ソース仮想マシン ID は指定しないでください。
- 5
- ソースクラスターを指定する場合、ソース仮想マシン名も指定する必要があります。ソース仮想マシン ID は指定しないでください。
- 6
- ResourceMapping CR を作成する場合は、
mappings
セクションをコメントアウトします。 - 7
- ソース仮想マシンの論理ネットワークおよび vNIC プロファイルを指定します。
- 8
- OpenShift Virtualization ネットワークを指定します。
- 9
- ストレージマッピングが
ResourceMapping
およびVirtualMachineImport
CR の両方に指定される場合、VirtualMachineImport
CR が優先されます。 - 10
- ソースストレージドメインを指定します。
- 11
- ターゲットストレージクラスを指定します。
- 12
ReadWriteOnce
、ReadWriteMany
、またはReadOnlyMany
を指定します。アクセスモードが指定されていない場合、{virt} は RHV 仮想マシンまたは仮想ディスクアクセスモード上の Host → Migration mode 設定に基づいて正しいボリュームアクセスモードを判別します。-
RHV 仮想マシン移行モードが
Allow manual and automatic migration
の場合、デフォルトのアクセスモードはReadWriteMany
になります。 -
RHV 仮想ディスクのアクセスモードが
ReadOnly
の場合、デフォルトのアクセスモードはReadOnlyMany
になります。 -
その他のすべての設定では、デフォルトのアクセスモードは
ReadWriteOnce
です。
-
RHV 仮想マシン移行モードが
- ソース仮想マシンディスク ID を指定します (例:
8181ecc1-5db8-4193-9c92-3ddab3be7b05
)。Manager マシンの Web ブラウザーでhttps://www.example.com/ovirt-engine/api/vms/vm23
を入力して仮想マシンの詳細を確認し、ディスク ID 取得できます。 - ターゲットストレージクラスを指定します。
仮想マシンインポートの進捗に従い、インポートが正常に完了したことを確認します。
$ oc get vmimports vm-import -n default
インポートが成功したことを示す出力は、以下のようになります。
出力例
... status: conditions: - lastHeartbeatTime: "2020-07-22T08:58:52Z" lastTransitionTime: "2020-07-22T08:58:52Z" message: Validation completed successfully reason: ValidationCompleted status: "True" type: Valid - lastHeartbeatTime: "2020-07-22T08:58:52Z" lastTransitionTime: "2020-07-22T08:58:52Z" message: 'VM specifies IO Threads: 1, VM has NUMA tune mode specified: interleave' reason: MappingRulesVerificationReportedWarnings status: "True" type: MappingRulesVerified - lastHeartbeatTime: "2020-07-22T08:58:56Z" lastTransitionTime: "2020-07-22T08:58:52Z" message: Copying virtual machine disks reason: CopyingDisks status: "True" type: Processing dataVolumes: - name: fedora32-b870c429-11e0-4630-b3df-21da551a48c0 targetVmName: fedora32
7.12.4.7. 仮想マシンテンプレートの削除
Web コンソールを使用して進行中の仮想マシンのインポートを中止できます。
手順
- Workloads → Virtual Machines をクリックします。
-
インポートする仮想マシンの Options メニュー
をクリックし、Delete Virtual Machine を選択します。
Delete Virtual Machine ウィンドウで Delete をクリックします。
仮想マシンは仮想マシンの一覧から削除されます。
7.12.4.8. 仮想マシンのインポートのトラブルシューティング
7.12.4.8.1. ログ
VM Import Controller Pod ログでエラーの有無を確認できます。
手順
以下のコマンドを実行して、VM Import Controller Pod 名を表示します。
$ oc get pods -n <namespace> | grep import 1
- 1
- インポートされた仮想マシンの namespace を指定します。
出力例
vm-import-controller-f66f7d-zqkz7 1/1 Running 0 4h49m
以下のコマンドを実行して、VM Import Controller Pod ログを表示します。
$ oc logs <vm-import-controller-f66f7d-zqkz7> -f -n <namespace> 1
- 1
- VM Import Controller Pod 名および namespace を指定します。
7.12.4.8.2. エラーメッセージ
以下のエラーメッセージが表示される場合があります。
以下のエラーメッセージが VM Import Controller Pod ログに表示され、OpenShift Virtualization ストレージ PV が適切でない場合は進捗バーは 10% で停止します。
Failed to bind volumes: provisioning failed for PVC
互換性のあるストレージクラスを使用する必要があります。Cinder ストレージクラスはサポートされません。
7.12.5. 単一 VMware 仮想マシンまたはテンプレートのインポート
VM Import ウィザードを使用して、VMware vSphere 6.5、6.7、または 7.0 の仮想マシンまたは仮想マシンテンプレートを OpenShift Virtualization にインポートできます。
VM テンプレートをインポートする場合、OpenShift Virtualization はテンプレートに基づいて仮想マシンを作成します。
7.12.5.1. OpenShift Virtualization ストレージ機能マトリクス
以下の表は、仮想マシンのインポートをサポートするローカルおよび共有の永続ストレージについて説明しています。
VMware VM のインポート | |
---|---|
OpenShift Container Storage: RBD ブロックモードボリューム | Yes |
OpenShift Virtualization ホストパスプロビジョナー | Yes |
他の複数ノードの書き込み可能なストレージ | ○ [1] |
他の単一ノードの書き込み可能なストレージ | ○ [2] |
- PVC は ReadWriteMany アクセスモードを要求する必要があります。
- PVC は ReadWriteOnce アクセスモードを要求する必要があります。
7.12.5.2. VDDK イメージの作成
インポートプロセスでは、VMware Virtual Disk Development Kit (VDDK) を使用して VMware 仮想ディスクをコピーします。
VDDK SDK をダウンロードし、VDDK イメージを作成し、イメージレジストリーにイメージをアップロードしてからこれを v2v-vmware
ConfigMap に追加できます。
内部 OpenShift Container Platform イメージレジストリーまたは VDDK イメージのセキュアな外部イメージレジストリーのいずれかを設定できます。レジストリーは OpenShift Virtualization 環境からアクセスできる必要があります。
VDDK イメージをパブリックリポジトリーに保存すると、VMware ライセンスの条件に違反する可能性があります。
7.12.5.2.1. 内部イメージレジストリーの設定
イメージレジストリー Operator 設定を更新して、ベアメタルに内部 OpenShift Container Platform イメージレジストリーを設定できます。
レジストリーをルートで公開して、OpenShift Container Platform クラスターから、または外部からレジストリーに直接アクセスできます。
イメージレジストリーの管理状態の変更
イメージレジストリーを起動するには、イメージレジストリー Operator 設定の managementState
を Removed
から Managed
に変更する必要があります。
手順
ManagementState
イメージレジストリー Operator 設定をRemoved
からManaged
に変更します。以下は例になります。$ oc patch configs.imageregistry.operator.openshift.io cluster --type merge --patch '{"spec":{"managementState":"Managed"}}'
ベアメタルの場合のレジストリーストレージの設定
クラスター管理者は、インストール後にレジストリーをストレージを使用できるように設定する必要があります。
前提条件
- クラスター管理者のパーミッション。
- ベアメタル上のクラスター。
Red Hat OpenShift Container Storage などのクラスターのプロビジョニングされた永続ストレージ。
重要OpenShift Container Platform は、1 つのレプリカのみが存在する場合にイメージレジストリーストレージの
ReadWriteOnce
アクセスをサポートします。2 つ以上のレプリカで高可用性をサポートするイメージレジストリーをデプロイするには、ReadWriteMany
アクセスが必要です。- 100Gi の容量が必要です。
手順
レジストリーをストレージを使用できるように設定するには、
configs.imageregistry/cluster
リソースのspec.storage.pvc
を変更します。注記共有ストレージを使用する場合は、外部からアクセスを防ぐためにセキュリティー設定を確認します。
レジストリー Pod がないことを確認します。
$ oc get pod -n openshift-image-registry
注記ストレージタイプが
emptyDIR
の場合、レプリカ数が1
を超えることはありません。レジストリー設定を確認します。
$ oc edit configs.imageregistry.operator.openshift.io
出力例
storage: pvc: claim:
claim
フィールドを空のままにし、image-registry-storage
PVC の自動作成を可能にします。clusteroperator
ステータスを確認します。$ oc get clusteroperator image-registry
クラスターからレジストリーへの直接アクセス
クラスター内からレジストリーにアクセスすることができます。
手順
内部ルートを使用して、クラスターからレジストリーにアクセスします。
ノードのアドレスを取得することにより、ノードにアクセスします。
$ oc get nodes
$ oc debug nodes/<node_address>
ノード上で
oc
やpodman
などのツールへのアクセスを有効にするには、以下のコマンドを実行します。sh-4.2# chroot /host
アクセストークンを使用してコンテナーイメージレジストリーにログインします。
sh-4.2# oc login -u kubeadmin -p <password_from_install_log> https://api-int.<cluster_name>.<base_domain>:6443
sh-4.2# podman login -u kubeadmin -p $(oc whoami -t) image-registry.openshift-image-registry.svc:5000
以下のようなログインを確認するメッセージが表示されるはずです。
Login Succeeded!
注記ユーザー名には任意の値を指定でき、トークンには必要な情報がすべて含まれます。コロンが含まれるユーザー名を指定すると、ログインに失敗します。
イメージレジストリー Operator はルートを作成するため、
default-route-openshift-image-registry.<cluster_name>
のようになります。レジストリーに対して
podman pull
およびpodman push
操作を実行します。重要任意のイメージをプルできますが、system:registry ロールを追加している場合は、各自のプロジェクトにあるレジストリーにのみイメージをプッシュすることができます。
次の例では、以下を使用します。
コンポーネント 値 <registry_ip>
172.30.124.220
<port>
5000
<project>
openshift
<image>
image
<tag>
省略 (デフォルトは
latest
)任意のイメージをプルします。
$ podman pull name.io/image
新規イメージに
<registry_ip>:<port>/<project>/<image>
形式でタグ付けします。プロジェクト名は、イメージを正しくレジストリーに配置し、これに後でアクセスできるようにするために OpenShift Container Platform のプル仕様に表示される必要があります。$ podman tag name.io/image image-registry.openshift-image-registry.svc:5000/openshift/image
注記指定されたプロジェクトについて
system:image-builder
ロールを持っている必要があります。このロールにより、ユーザーはイメージの書き出しやプッシュを実行できます。そうでない場合は、次の手順のpodman push
は失敗します。これをテストするには、新規プロジェクトを作成し、イメージをプッシュできます。新しくタグ付けされたイメージをレジストリーにプッシュします。
$ podman push image-registry.openshift-image-registry.svc:5000/openshift/image
セキュアなレジストリーの手動による公開
クラスター内から OpenShift Container Platform レジストリーにログインするのではなく、外部からレジストリーにアクセスできるように、このレジストリーをルートに公開します。この方法を使うと、ルートアドレスを使ってクラスターの外部からレジストリーにログインし、ルートのホストを使ってイメージにタグ付けしたり、イメージをプッシュしたりできます。
前提条件:
以下の前提条件は自動的に実行されます。
- レジストリー Operator のデプロイ。
- Ingress Operator のデプロイ。
手順
configs.imageregistry.operator.openshift.io
リソースで DefaultRoute
パラメーターを使用するか、またはカスタムルートを使用してルートを公開することができます。
DefaultRoute
を使用してレジストリーを公開するには、以下を実行します。
DefaultRoute
をTrue
に設定します。$ oc patch configs.imageregistry.operator.openshift.io/cluster --patch '{"spec":{"defaultRoute":true}}' --type=merge
podman
でログインします。$ HOST=$(oc get route default-route -n openshift-image-registry --template='{{ .spec.host }}')
$ podman login -u kubeadmin -p $(oc whoami -t) --tls-verify=false $HOST 1
- 1
--tls-verify=false
は、ルートのクラスターのデフォルト証明書が信頼されない場合に必要になります。Ingress Operator で、信頼されるカスタム証明書をデフォルト証明書として設定できます。
カスタムルートを使用してレジストリーを公開するには、以下を実行します。
ルートの TLS キーでシークレットを作成します。
$ oc create secret tls public-route-tls \ -n openshift-image-registry \ --cert=</path/to/tls.crt> \ --key=</path/to/tls.key>
この手順はオプションです。シークレットを作成しない場合、ルートは Ingress Operator からデフォルトの TLS 設定を使用します。
レジストリー Operator では、以下のようになります。
spec: routes: - name: public-routes hostname: myregistry.mycorp.organization secretName: public-route-tls ...
注記レジストリーのルートのカスタム TLS 設定を指定している場合は
secretName
のみを設定します。
7.12.5.2.2. 外部イメージレジストリーの設定
VDDK イメージの外部イメージレジストリーを使用する場合、外部イメージレジストリーの認証局を OpenShift Container Platform クラスターに追加できます。
オプションで、Docker 認証情報からプルシークレットを作成し、これをサービスアカウントに追加できます。
クラスターへの認証局の追加
以下の手順でイメージのプッシュおよびプル時に使用する認証局 (CA) をクラスターに追加することができます。
前提条件
- クラスター管理者の権限があること。
-
レジストリーの公開証明書 (通常は、
/etc/docker/certs.d/
ディレクトリーにあるhostname/ca.crt
ファイル)。
手順
自己署名証明書を使用するレジストリーの信頼される証明書が含まれる
ConfigMap
をopenshift-config
namespace に作成します。それぞれの CA ファイルについて、ConfigMap
のキーがhostname[..port]
形式のレジストリーのホスト名であることを確認します。$ oc create configmap registry-cas -n openshift-config \ --from-file=myregistry.corp.com..5000=/etc/docker/certs.d/myregistry.corp.com:5000/ca.crt \ --from-file=otherregistry.com=/etc/docker/certs.d/otherregistry.com/ca.crt
クラスターイメージの設定を更新します。
$ oc patch image.config.openshift.io/cluster --patch '{"spec":{"additionalTrustedCA":{"name":"registry-cas"}}}' --type=merge
Pod が他のセキュリティー保護されたレジストリーからイメージを参照できるようにする設定
Docker クライアントの .dockercfg
$HOME/.docker/config.json
ファイルは、セキュア/非セキュアなレジストリーに事前にログインしている場合に認証情報を保存する Docker 認証情報ファイルです。
OpenShift Container Platform の内部レジストリーにないセキュリティー保護されたコンテナーイメージをプルするには、Docker 認証情報でプルシークレットを作成し、これをサービスアカウントに追加する必要があります。
手順
セキュリティー保護されたレジストリーの
.dockercfg
ファイルがすでにある場合は、以下を実行してそのファイルからシークレットを作成できます。$ oc create secret generic <pull_secret_name> \ --from-file=.dockercfg=<path/to/.dockercfg> \ --type=kubernetes.io/dockercfg
または、
$HOME/.docker/config.json
ファイルがある場合は以下を実行します。$ oc create secret generic <pull_secret_name> \ --from-file=.dockerconfigjson=<path/to/.docker/config.json> \ --type=kubernetes.io/dockerconfigjson
セキュアなレジストリーについての Docker 認証情報ファイルがまだない場合には、以下のコマンドを実行してシークレットを作成することができます。
$ oc create secret docker-registry <pull_secret_name> \ --docker-server=<registry_server> \ --docker-username=<user_name> \ --docker-password=<password> \ --docker-email=<email>
Pod のイメージをプルするためのシークレットを使用するには、そのシークレットをサービスアカウントに追加する必要があります。この例では、サービスアカウントの名前は、Pod が使用するサービスアカウントの名前に一致している必要があります。デフォルトのサービスアカウントは
default
です。$ oc secrets link default <pull_secret_name> --for=pull
7.12.5.2.3. VDDK イメージの作成および使用
VMware Virtual Disk Development Kit (VDDK) をダウンロードして、VDDK イメージをビルドし、VDDK イメージをイメージレジストリーにプッシュできます。次に、VDDK イメージを v2v-vmware
ConfigMap に追加します。
前提条件
- OpenShift Container Platform 内部イメージレジストリーまたはセキュアな外部レジストリーにアクセスできる必要がある。
手順
一時ディレクトリーを作成し、これに移動します。
$ mkdir /tmp/<dir_name> && cd /tmp/<dir_name>
- ブラウザーで VMware code に移動し、SDKs をクリックします。
- Compute Virtualization で Virtual Disk Development Kit(VDDK) をクリックします。
- VMware vSphere のバージョンに対応する VDDK バージョンを選択します。たとえば、vSphere 7.0 の場合は VDDK 7.0 を選択し、Download をクリックしてから、VDDK アーカイブを一時ディレクトリーに保存します。
VDDK アーカイブを展開します。
$ tar -xzf VMware-vix-disklib-<version>.x86_64.tar.gz
Dockerfile
を作成します。$ cat > Dockerfile <<EOF FROM busybox:latest COPY vmware-vix-disklib-distrib /vmware-vix-disklib-distrib RUN mkdir -p /opt ENTRYPOINT ["cp", "-r", "/vmware-vix-disklib-distrib", "/opt"] EOF
イメージをビルドします。
$ podman build . -t <registry_route_or_server_path>/vddk:<tag> 1
- 1
- イメージレジストリーを指定します。
-
内部 OpenShift Container Platform レジストリーの場合は、内部レジストリールート (例:
image-registry.openshift-image-registry.svc:5000/openshift/vddk:<tag>
) を使用します。 -
外部レジストリーの場合は、サーバー名、パスおよびタグを指定します (例:
server.example.com:5000/vddk:<tag>
)。
-
内部 OpenShift Container Platform レジストリーの場合は、内部レジストリールート (例:
イメージをレジストリーにプッシュします。
$ podman push <registry_route_or_server_path>/vddk:<tag>
- イメージが OpenShift virtualization 環境からアクセスできることを確認します。
openshift-cnv プロジェクトで
v2v-vmware
ConfigMap を編集します。$ oc edit configmap v2v-vmware -n openshift-cnv
vddk-init-image
パラメーターをdata
スタンザに追加します。... data: vddk-init-image: <registry_route_or_server_path>/vddk:<tag>
7.12.5.3. VM Import ウィザードを使用した仮想マシンのインポート
VM Import ウィザードを使用して、単一の仮想マシンをインポートできます。
仮想マシンテンプレートをインポートすることもできます。VM テンプレートをインポートする場合、OpenShift Virtualization はテンプレートに基づいて仮想マシンを作成します。
前提条件
- 管理者ユーザー権限があること。
- VMware Virtual Disk Development Kit (VDDK) イメージは、OpenShift Virtualization 環境からアクセスできるイメージレジストリーにある。
-
VDDK イメージは
v2v-vmware
ConfigMap に追加されている。 - 仮想マシンの電源がオフになっている。
- 仮想ディスクが IDE または SCSI コントローラーに接続されている。仮想ディスクが SATA コントローラーに接続されている場合は、それらを IDE コントローラーに変更してから、仮想マシンを移行できます。
- OpenShift Virtualization のローカルおよび共有永続ストレージクラスは、仮想マシンのインポートをサポートする必要があります。
OpenShift Virtualization ストレージは、仮想ディスクに対応するのに十分な大きさである。
警告ディスクサイズが利用可能なストレージ領域よりも大きい仮想マシンをインポートしようとすると、この操作は完了しません。オブジェクトの削除をサポートするためのリソースが十分にないため、別の仮想マシンをインポートしたり、ストレージをクリーンアップしたりすることはできません。この状況を解決するには、ストレージバックエンドにオブジェクトストレージデバイスをさらに追加する必要があります。
OpenShift Virtualization egress ネットワークポリシーは以下のトラフィックを許可する必要がある。
宛先 プロトコル ポート VMware ESXi ホスト
TCP
443
VMware ESXi ホスト
TCP
902
VMware vCenter
TCP
5840
手順
- Web コンソールで、Workloads → Virtual Machines をクリックします。
- Create Virtual Machine をクリックし、Import with Wizard を選択します。
- Provider 一覧から、VMware を選択します。
Connect to New Instance または保存された vCenter インスタンスを選択します。
- Connect to New Instance を選択する場合、vCenter hostname、Username、Password を入力します。
- 保存された vCenter インスタンスを選択する場合、ウィザードは保存された認証情報を使用して vCenter に接続します。
Check and Save をクリックし、接続が完了するまで待ちます。
注記接続の詳細はシークレットに保存されます。ホスト名、ユーザー名、またはパスワードが正しくないプロバイダーを追加した場合は、Workloads → Secrets をクリックし、プロバイダーのシークレットを削除します。
- 仮想マシンまたはテンプレートを選択します。
- Next をクリックします。
- Review 画面で、設定を確認します。
Edit をクリックして、以下の設定を更新します。
General:
- 説明
- オペレーティングシステム
- Flavor
- Memory
- CPU
- Workload Profile
Networking:
- 名前
- Model
- Network
-
Type:
masquerade
バインディングメソッドを選択する必要があります。 - MAC Address
ストレージ: 仮想マシンディスクの Options メニュー
をクリックし、Edit を選択して以下のフィールドを更新します。
- 名前
- Source: Import Disk など。
- Size
- Interface
Storage Class: NFS または ocs-storagecluster-ceph-rbd (ceph-rbd) を選択します。
ocs-storagecluster-ceph-rbd を選択する場合、ディスクの Volume Mode を Block に設定する必要があります。
他のストレージクラスは機能する可能性がありますが、正式にサポートされていません。
- Advanced → Volume Mode: Block を選択します。
- Advanced → Access Mode
Advanced → Cloud-init:
- Form: Hostname および Authenticated SSH Keys を入力します。
-
Custom script: テキストフィールドに
cloud-init
スクリプトを入力します。
- Advanced → Virtual Hardware: 仮想 CD-ROM をインポートされた仮想マシンに割り当てることができます。
インポート設定を編集した場合は、Import または Review and Import をクリックします。
Successfully created virtual machine というメッセージが表示され、仮想マシンに作成されたリソースの一覧が表示されます。仮想マシンが Workloads → Virtual Machines に表示されます。
仮想マシンウィザードのフィールド
名前 | パラメーター | 説明 |
---|---|---|
Template | 仮想マシンの作成に使用するテンプレート。テンプレートを選択すると、他のフィールドが自動的に入力されます。 | |
ソース | PXE | PXE メニューから仮想マシンをプロビジョニングします。クラスターに PXE 対応の NIC が必要になります。 |
URL | HTTP または S3 エンドポイントで利用できるイメージから仮想マシンをプロビジョニングします。 | |
コンテナー |
クラスターからアクセスできるレジストリーの起動可能なオペレーティングシステムコンテナーから仮想マシンをプロビジョニングします。例: | |
Disk | ディスクから仮想マシンをプロビジョニングします。 | |
Operating System | 仮想マシン用に選択される主なオペレーティングシステム。 | |
Flavor | small、medium、large、tiny、Custom | 仮想マシンに割り当てられる CPU およびメモリーの量を決定するプリセット。Flavor に設定される Preset はオペレーティングシステムによって決まります。 |
Memory | 仮想マシンに割り当てられるメモリーのサイズ (GiB 単位)。 | |
CPU | 仮想マシンに割り当てられる CPU の量。 | |
Workload Profile | High Performance | 高パフォーマンスのワークロードに対して最適化された仮想マシン設定。 |
Server | サーバーワークロードの実行に最適化されたプロファイル。 | |
Desktop | デスクトップで使用するための仮想マシン設定。 | |
名前 |
この名前には、小文字 ( | |
説明 | オプションの説明フィールド。 | |
Start virtual machine on creation | これを選択すると、作成時に仮想マシンが自動的に起動します。 |
Cloud-init フィールド
名前 | 説明 |
---|---|
Hostname | 仮想マシンの特定のホスト名を設定します。 |
Authenticated SSH Keys | 仮想マシンの ~/.ssh/authorized_keys にコピーされるユーザーの公開鍵。 |
カスタムスクリプト | 他のオプションを、カスタム cloud-init スクリプトを貼り付けるフィールドに置き換えます。 |
ネットワークフィールド
名前 | 説明 |
---|---|
名前 | ネットワークインターフェイスの名前。 |
Model | ネットワークインターフェイスカードのモデルを示します。サポートされる値は、e1000、 e1000e、ne2k_pci、pcnet, rtl8139、および virtIO です。 |
Network | 利用可能な NetworkAttachmentDefinition オブジェクトの一覧。 |
Type |
利用可能なバインディングメソッドの一覧。デフォルトの Pod ネットワークについては、 |
MAC Address | ネットワークインターフェイスの MAC アドレス。MAC アドレスが指定されていない場合、セッションの一時アドレスが生成されます。 |
ストレージフィールド
名前 | 説明 |
---|---|
ソース | 仮想マシンの空のディスクを選択するか、または URL、Container、Attach Cloned Disk、または Attach Disk などの選択可能なオプションから選択します。既存ディスクを選択し、これを仮想マシンに割り当てるには、利用可能な PersistentVolumeClaim (PVC) の一覧から Attach Cloned Disk または Attach Disk を選択します。 |
名前 |
ディスクの名前。この名前には、小文字 ( |
Size (GiB) | ディスクのサイズ (GiB)。 |
Interface | ディスクデバイスのタイプ。サポートされるインターフェイスは、virtIO、SATA、および SCSI です。 |
ストレージクラス |
ディスクの作成に使用される |
Advanced → Volume Mode | |
永続ボリュームがフォーマットされたファイルシステムまたは raw ブロック状態を使用するかどうかを定義します。デフォルトは Filesystem です。 | Advanced → Access Mode |
永続ボリュームのアクセスモード。サポートされるアクセスモードは、Single User (RWO)、Shared Access (RWX)、および Read Only (ROX) です。 |
ストレージの詳細設定
以下のストレージの詳細設定は、Blank、Import via URLURL、および Clone existing PVC ディスクで利用できます。これらのパラメーターはオプションです。これらのパラメーターを指定しない場合、システムは kubevirt-storage-class-defaults
設定マップのデフォルト値を使用します。
名前 | パラメーター | 説明 |
---|---|---|
ボリュームモード | Filesystem | ファイルシステムベースのボリュームで仮想ディスクを保存します。 |
Block |
ブロックボリュームで仮想ディスクを直接保存します。基礎となるストレージがサポートしている場合は、 | |
アクセスモード | Single User (RWO) | ディスクは単一ノードで読み取り/書き込みとしてマウントできます。 |
Shared Access (RWX) | ディスクは数多くのノードで読み取り/書き込みとしてマウントできます。 注記 これは、ノード間の仮想マシンのライブマイグレーションなどの、一部の機能で必要になります。 | |
Read Only (ROX) | ディスクは数多くのノードで読み取り専用としてマウントできます。 |
7.12.5.3.1. インポートされた仮想マシンの NIC 名の更新
VMware からインポートされた仮想マシンの NIC 名を、 OpenShift Virtualization の命名規則に適合するように更新する必要があります。
手順
- 仮想マシンにログインします。
-
/etc/sysconfig/network-scripts
ディレクトリーに移動します。 ネットワーク設定ファイルの名前を変更します。
$ mv vmnic0 ifcfg-eth0 1
- 1
- ネットワーク設定ファイルの名前を
ifcfg-eth0
に変更します。追加のネットワーク設定ファイルには、ifcfg-eth1
、ifcfg-eth2
などの番号が順番に付けられます。
ネットワーク設定ファイルで
NAME
およびDEVICE
パラメーターを更新します。NAME=eth0 DEVICE=eth0
ネットワークを再起動します。
$ systemctl restart network
7.12.5.4. 仮想マシンのインポートのトラブルシューティング
7.12.5.4.1. ログ
V2V Conversion Pod ログでエラーの有無を確認できます。
手順
以下のコマンドを実行して、V2V Conversion Pod 名を表示します。
$ oc get pods -n <namespace> | grep v2v 1
- 1
- インポートされた仮想マシンの namespace を指定します。
出力例
kubevirt-v2v-conversion-f66f7d-zqkz7 1/1 Running 0 4h49m
以下のコマンドを実行して V2V Conversion Pod ログを表示します。
$ oc logs <kubevirt-v2v-conversion-f66f7d-zqkz7> -f -n <namespace> 1
- 1
- VM Conversion Pod 名および namespace を指定します。
7.12.5.4.2. エラーメッセージ
以下のエラーメッセージが表示される場合があります。
インポート前に VMware 仮想マシンがシャットダウンされない場合、OpenShift Container Platform コンソールのインポートされた仮想マシンにはエラーメッセージ
Readiness probe failed
が表示され、V2V Conversion Pod ログには以下のエラーメッセージが表示されます。INFO - have error: ('virt-v2v error: internal error: invalid argument: libvirt domain ‘v2v_migration_vm_1’ is running or paused. It must be shut down in order to perform virt-v2v conversion',)"
管理者以外のユーザーが仮想マシンのインポートを試みると、以下のエラーメッセージが OpenShift Container Platform コンソールに表示されます。
Could not load ConfigMap vmware-to-kubevirt-os in kube-public namespace Restricted Access: configmaps "vmware-to-kubevirt-os" is forbidden: User cannot get resource "configmaps" in API group "" in the namespace "kube-public"
仮想マシンをインポートできるのは、管理者ユーザーのみです。
7.13. 仮想マシンのクローン作成
7.13.1. 複数の namespace 間で DataVolume をクローン作成するためのユーザーパーミッションの有効化
namespace には相互に分離する性質があるため、ユーザーはデフォルトでは namespace をまたがってリソースのクローンを作成することができません。
ユーザーが仮想マシンのクローンを別の namespace に作成できるようにするには、cluster-admin
ロールを持つユーザーが新規の ClusterRole を作成する必要があります。この ClusterRole をユーザーにバインドし、それらのユーザーが仮想マシンのクローンを宛先 namespace に対して作成できるようにします。
7.13.1.1. 前提条件
-
cluster-admin
ロールを持つユーザーのみが ClusterRole を作成できます。
7.13.1.2. DataVolume について
DataVolume
オブジェクトは、Containerized Data Importer (CDI) プロジェクトで提供されるカスタムリソースです。DataVolume は、基礎となる PersistentVolumeClaim (PVC) に関連付けられるインポート、クローン作成、およびアップロード操作のオーケストレーションを行います。DataVolume は KubeVirt に統合され、仮想マシンが PVC の作成前に起動することを防ぎます。
7.13.1.3. DataVolume のクローン作成のための RBAC リソースの作成
datavolumes
リソースのすべてのアクションのパーミッションを有効にする新規の ClusterRole を作成します。
手順
ClusterRole マニフェストを作成します。
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: <datavolume-cloner> 1 rules: - apiGroups: ["cdi.kubevirt.io"] resources: ["datavolumes/source"] verbs: ["*"]
- 1
- ClusterRole の一意の名前。
クラスターに ClusterRole を作成します。
$ oc create -f <datavolume-cloner.yaml> 1
- 1
- 直前の手順で作成された ClusterRole マニフェストのファイル名です。
移行元および宛先 namespace の両方に適用される RoleBinding マニフェストを作成し、直前の手順で作成した ClusterRole を参照します。
apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: <allow-clone-to-user> 1 namespace: <Source namespace> 2 subjects: - kind: ServiceAccount name: default namespace: <Destination namespace> 3 roleRef: kind: ClusterRole name: datavolume-cloner 4 apiGroup: rbac.authorization.k8s.io
クラスターに RoleBinding を作成します。
$ oc create -f <datavolume-cloner.yaml> 1
- 1
- 直前の手順で作成された RoleBinding マニフェストのファイル名です。
7.13.2. 新規 DataVolume への仮想マシンディスクのクローン作成
DataVolume 設定ファイルでソース PVC を参照し、新規 DataVolume に仮想マシンディスクの PersistentVolumeClaim (PVC) のクローンを作成できます。
異なるボリュームモード間でのクローン作成操作はサポートされていません。volumeMode
の値は、ソースとターゲットの両方の仕様で一致している必要があります。
たとえば、volumeMode: Block
の PersistentVolume (PV) から volumeMode: Filesystem
の PV へのクローン作成を試行する場合、操作はエラーメッセージを出して失敗します。
7.13.2.1. 前提条件
- ユーザーは、仮想マシンディスクの PVC のクローンを別の namespace に作成するために 追加のパーミッション が必要です。
7.13.2.2. DataVolume について
DataVolume
オブジェクトは、Containerized Data Importer (CDI) プロジェクトで提供されるカスタムリソースです。DataVolume は、基礎となる PersistentVolumeClaim (PVC) に関連付けられるインポート、クローン作成、およびアップロード操作のオーケストレーションを行います。DataVolume は KubeVirt に統合され、仮想マシンが PVC の作成前に起動することを防ぎます。
7.13.2.3. 新規 DataVolume への仮想マシンディスクの PersistentVolumeClaim のクローン作成
既存の仮想マシンディスクの PersistentVolumeClaim (PVC) のクローンを新規 DataVolume に作成できます。その後、新規 DataVolume は新規の仮想マシンに使用できます。
Volume が仮想マシンとは別に作成される場合、DataVolume のライフサイクルは仮想マシンから切り離されます。仮想マシンが削除されても、DataVolume もその関連付けられた PVC も削除されません。
前提条件
- 使用する既存の仮想マシンディスクの PVC を判別すること。クローン作成の前に、PVC に関連付けられた仮想マシンの電源を切る必要があります。
-
OpenShift CLI (
oc
) をインストールしている。
手順
- 関連付けられた PVC の名前および namespace を特定するために、クローン作成に必要な仮想マシンディスクを確認します。
新規 DataVolume の名前、ソース PVC の名前および namespace、および新規 DataVolume のサイズを指定する DataVolume オブジェクトの YAML ファイルを作成します。
以下は例になります。
apiVersion: cdi.kubevirt.io/v1alpha1 kind: DataVolume metadata: name: <cloner-datavolume> 1 spec: source: pvc: namespace: "<source-namespace>" 2 name: "<my-favorite-vm-disk>" 3 pvc: accessModes: - ReadWriteOnce resources: requests: storage: <2Gi> 4
DataVolume を作成して PVC のクローン作成を開始します。
$ oc create -f <cloner-datavolume>.yaml
注記DataVolume は仮想マシンが PVC の作成前に起動することを防ぐため、PVC のクローン作成中に新規 DataVolume を参照する仮想マシンを作成できます。
7.13.2.4. テンプレート: DataVolume クローン設定ファイル
example-clone-dv.yaml
apiVersion: cdi.kubevirt.io/v1alpha1 kind: DataVolume metadata: name: "example-clone-dv" spec: source: pvc: name: source-pvc namespace: example-ns pvc: accessModes: - ReadWriteOnce resources: requests: storage: "1G"
7.13.2.5. CDI がサポートする操作マトリックス
このマトリックスにはエンドポイントに対してコンテンツタイプのサポートされる CDI 操作が表示されます。これらの操作にはスクラッチ領域が必要です。
コンテンツタイプ | HTTP | HTTPS | HTTP Basic 認証 | レジストリー | アップロード |
---|---|---|---|---|---|
kubevirt (QCOW2) |
✓ QCOW2 |
✓ QCOW2** |
✓ QCOW2 |
✓ QCOW2* |
✓ QCOW2* |
KubeVirt (RAW) |
✓ RAW |
✓ RAW |
✓ RAW |
✓ RAW* |
✓ RAW* |
✓ サポートされる操作
□ サポートされない操作
* スクラッチ領域が必要
**カスタム認証局が必要な場合にスクラッチ領域が必要
7.13.3. DataVolumeTemplate の使用による仮想マシンのクローン作成
既存の仮想マシンの PersistentVolumeClaim (PVC) のクローン作成により、新規の仮想マシンを作成できます。dataVolumeTemplate
を仮想マシン設定ファイルに含めることにより、元の PVC から新規の DataVolume を作成します。
異なるボリュームモード間でのクローン作成操作はサポートされていません。volumeMode
の値は、ソースとターゲットの両方の仕様で一致している必要があります。
たとえば、volumeMode: Block
の PersistentVolume (PV) から volumeMode: Filesystem
の PV へのクローン作成を試行する場合、操作はエラーメッセージを出して失敗します。
7.13.3.1. 前提条件
- ユーザーは、仮想マシンディスクの PVC のクローンを別の namespace に作成するために 追加のパーミッション が必要です。
7.13.3.2. DataVolume について
DataVolume
オブジェクトは、Containerized Data Importer (CDI) プロジェクトで提供されるカスタムリソースです。DataVolume は、基礎となる PersistentVolumeClaim (PVC) に関連付けられるインポート、クローン作成、およびアップロード操作のオーケストレーションを行います。DataVolume は KubeVirt に統合され、仮想マシンが PVC の作成前に起動することを防ぎます。
7.13.3.3. DataVolumeTemplate の使用による、クローン作成された PersistentVolumeClaim からの仮想マシンの新規作成
既存の仮想マシンの PersistentVolumeClaim (PVC) のクローンを DataVolume に作成する仮想マシンを作成できます。仮想マシン spec
の dataVolumeTemplate
を参照することにより、source
PVC のクローンが DataVolume に作成され、これは次に仮想マシンを作成するために自動的に使用されます。
DataVolume が仮想マシンの DataVolumeTemplate の一部として作成されると、DataVolume のライフサイクルは仮想マシンに依存します。つまり、仮想マシンが削除されると、DataVolume および関連付けられた PVC も削除されます。
前提条件
- 使用する既存の仮想マシンディスクの PVC を判別すること。クローン作成の前に、PVC に関連付けられた仮想マシンの電源を切る必要があります。
-
OpenShift CLI (
oc
) をインストールしている。
手順
- 関連付けられた PVC の名前および namespace を特定するために、クローン作成に必要な仮想マシンを確認します。
VirtualMachine
オブジェクトの YAML ファイルを作成します。以下の仮想マシンのサンプルでは、source-namespace
namespace にあるmy-favorite-vm-disk
のクローンを作成します。favorite-clone
という2Gi
DataVolume がmy-favorite-vm-disk
から作成されます。以下は例になります。
apiVersion: kubevirt.io/v1alpha3 kind: VirtualMachine metadata: labels: kubevirt.io/vm: vm-dv-clone name: vm-dv-clone 1 spec: running: false template: metadata: labels: kubevirt.io/vm: vm-dv-clone spec: domain: devices: disks: - disk: bus: virtio name: root-disk resources: requests: memory: 64M volumes: - dataVolume: name: favorite-clone name: root-disk dataVolumeTemplates: - metadata: name: favorite-clone spec: pvc: accessModes: - ReadWriteOnce resources: requests: storage: 2Gi source: pvc: namespace: "source-namespace" name: "my-favorite-vm-disk"
- 1
- 作成する仮想マシン。
PVC のクローンが作成された DataVolume で仮想マシンを作成します。
$ oc create -f <vm-clone-datavolumetemplate>.yaml
7.13.3.4. テンプレート: DataVolume 仮想マシン設定ファイル
example-dv-vm.yaml
apiVersion: kubevirt.io/v1alpha3
kind: VirtualMachine
metadata:
labels:
kubevirt.io/vm: example-vm
name: example-vm
spec:
dataVolumeTemplates:
- metadata:
name: example-dv
spec:
pvc:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1G
source:
http:
url: "" 1
running: false
template:
metadata:
labels:
kubevirt.io/vm: example-vm
spec:
domain:
cpu:
cores: 1
devices:
disks:
- disk:
bus: virtio
name: example-dv-disk
machine:
type: q35
resources:
requests:
memory: 1G
terminationGracePeriodSeconds: 0
volumes:
- dataVolume:
name: example-dv
name: example-dv-disk
- 1
- インポートする必要のあるイメージの
HTTP
ソース (該当する場合)。
7.13.3.5. CDI がサポートする操作マトリックス
このマトリックスにはエンドポイントに対してコンテンツタイプのサポートされる CDI 操作が表示されます。これらの操作にはスクラッチ領域が必要です。
コンテンツタイプ | HTTP | HTTPS | HTTP Basic 認証 | レジストリー | アップロード |
---|---|---|---|---|---|
kubevirt (QCOW2) |
✓ QCOW2 |
✓ QCOW2** |
✓ QCOW2 |
✓ QCOW2* |
✓ QCOW2* |
KubeVirt (RAW) |
✓ RAW |
✓ RAW |
✓ RAW |
✓ RAW* |
✓ RAW* |
✓ サポートされる操作
□ サポートされない操作
* スクラッチ領域が必要
**カスタム認証局が必要な場合にスクラッチ領域が必要
7.13.4. 新規ブロックストレージ DataVolume への仮想マシンディスクのクローン作成
DataVolume 設定ファイルでソース PVC を参照し、新規ブロック DataVolume に仮想マシンディスクの PersistentVolumeClaim (PVC) のクローンを作成できます。
異なるボリュームモード間でのクローン作成操作はサポートされていません。volumeMode
の値は、ソースとターゲットの両方の仕様で一致している必要があります。
たとえば、volumeMode: Block
の PersistentVolume (PV) から volumeMode: Filesystem
の PV へのクローン作成を試行する場合、操作はエラーメッセージを出して失敗します。
7.13.4.1. 前提条件
- ユーザーは、仮想マシンディスクの PVC のクローンを別の namespace に作成するために 追加のパーミッション が必要です。
7.13.4.2. DataVolume について
DataVolume
オブジェクトは、Containerized Data Importer (CDI) プロジェクトで提供されるカスタムリソースです。DataVolume は、基礎となる PersistentVolumeClaim (PVC) に関連付けられるインポート、クローン作成、およびアップロード操作のオーケストレーションを行います。DataVolume は KubeVirt に統合され、仮想マシンが PVC の作成前に起動することを防ぎます。
7.13.4.3. ブロック PersistentVolume について
ブロック PersistentVolume (PV) は、raw ブロックデバイスによってサポートされる PV です。これらのボリュームにはファイルシステムがなく、オーバーヘッドを削減することで、仮想マシンのパフォーマンス上の利点をもたらすことができます。
raw ブロックボリュームは、PV および PersistentVolumeClaim (PVC) 仕様で volumeMode: Block
を指定してプロビジョニングされます。
7.13.4.4. ローカルブロック PersistentVolume の作成
ファイルにデータを設定し、これをループデバイスとしてマウントすることにより、ノードでローカルブロック PersistentVolume (PV) を作成します。次に、このループデバイスを PV 設定で Block
ボリュームとして参照し、これを仮想マシンイメージのブロックデバイスとして使用できます。
手順
-
ローカル PV を作成するノードに
root
としてログインします。この手順では、node01
を例に使用します。 ファイルを作成して、これを null 文字で設定し、ブロックデバイスとして使用できるようにします。以下の例では、2Gb (20 100Mb ブロック) のサイズのファイル
loop10
を作成します。$ dd if=/dev/zero of=<loop10> bs=100M count=20
loop10
ファイルをループデバイスとしてマウントします。$ losetup </dev/loop10>d3 <loop10> 1 2
マウントされたループデバイスを参照する
PersistentVolume
設定を作成します。kind: PersistentVolume apiVersion: v1 metadata: name: <local-block-pv10> annotations: spec: local: path: </dev/loop10> 1 capacity: storage: <2Gi> volumeMode: Block 2 storageClassName: local 3 accessModes: - ReadWriteOnce persistentVolumeReclaimPolicy: Delete nodeAffinity: required: nodeSelectorTerms: - matchExpressions: - key: kubernetes.io/hostname operator: In values: - <node01> 4
ブロック PV を作成します。
# oc create -f <local-block-pv10.yaml>1
- 1
- 直前の手順で作成された PersistentVolume のファイル名。
7.13.4.5. 新規 DataVolume への仮想マシンディスクの PersistentVolumeClaim のクローン作成
既存の仮想マシンディスクの PersistentVolumeClaim (PVC) のクローンを新規 DataVolume に作成できます。その後、新規 DataVolume は新規の仮想マシンに使用できます。
Volume が仮想マシンとは別に作成される場合、DataVolume のライフサイクルは仮想マシンから切り離されます。仮想マシンが削除されても、DataVolume もその関連付けられた PVC も削除されません。
前提条件
- 使用する既存の仮想マシンディスクの PVC を判別すること。クローン作成の前に、PVC に関連付けられた仮想マシンの電源を切る必要があります。
-
OpenShift CLI (
oc
) のインストール。 - ソース PVC と同じか、またはこれよりも大きい 1 つ以上の利用可能なブロック PersistentVolume (PV)。
手順
- 関連付けられた PVC の名前および namespace を特定するために、クローン作成に必要な仮想マシンディスクを確認します。
新規 DataVolume の名前、ソース PVC の名前および namespace、利用可能なブロック PV を使用できるようにするために
volumeMode: Block
、および新規 DataVolume のサイズを指定する DataVolume オブジェクトの YAML ファイルを作成します。以下は例になります。
apiVersion: cdi.kubevirt.io/v1alpha1 kind: DataVolume metadata: name: <cloner-datavolume> 1 spec: source: pvc: namespace: "<source-namespace>" 2 name: "<my-favorite-vm-disk>" 3 pvc: accessModes: - ReadWriteOnce resources: requests: storage: <2Gi> 4 volumeMode: Block 5
DataVolume を作成して PVC のクローン作成を開始します。
$ oc create -f <cloner-datavolume>.yaml
注記DataVolume は仮想マシンが PVC の作成前に起動することを防ぐため、PVC のクローン作成中に新規 DataVolume を参照する仮想マシンを作成できます。
7.13.4.6. CDI がサポートする操作マトリックス
このマトリックスにはエンドポイントに対してコンテンツタイプのサポートされる CDI 操作が表示されます。これらの操作にはスクラッチ領域が必要です。
コンテンツタイプ | HTTP | HTTPS | HTTP Basic 認証 | レジストリー | アップロード |
---|---|---|---|---|---|
kubevirt (QCOW2) |
✓ QCOW2 |
✓ QCOW2** |
✓ QCOW2 |
✓ QCOW2* |
✓ QCOW2* |
KubeVirt (RAW) |
✓ RAW |
✓ RAW |
✓ RAW |
✓ RAW* |
✓ RAW* |
✓ サポートされる操作
□ サポートされない操作
* スクラッチ領域が必要
**カスタム認証局が必要な場合にスクラッチ領域が必要
7.14. 仮想マシンのネットワーク
7.14.1. 仮想マシンのデフォルト Pod ネットワークの使用
OpenShift Virtualization でデフォルトの Pod ネットワークを使用できます。これを実行するには、masquerade
バインディングメソッドを使用する必要があります。これは、デフォルトの Pod ネットワークを使用する場合にのみ推奨されるバインディングメソッドです。デフォルト以外のネットワークには、masquerade
モードを使用しないでください。
セカンダリーネットワーク の場合は、bridge
バインディングメソッドを使用します。
KubeMacPool コンポーネントは、指定の namespace に仮想マシン NIC の MAC アドレスプールサービスを提供します。これはデフォルトで有効にされません。KubeMacPool ラベルを namespace に適用して、namespace で MAC アドレスプールを有効にします。
7.14.1.1. コマンドラインでのマスカレードモードの設定
マスカレードモードを使用し、仮想マシンの送信トラフィックを Pod IP アドレスの背後で非表示にすることができます。マスカレードモードは、ネットワークアドレス変換 (NAT) を使用して仮想マシンを Linux ブリッジ経由で Pod ネットワークバックエンドに接続します。
仮想マシンの設定ファイルを編集して、マスカレードモードを有効にし、トラフィックが仮想マシンに到達できるようにします。
前提条件
- 仮想マシンは、IPv4 アドレスを取得するために DHCP を使用できるように設定される必要がある。以下の例では、DHCP を使用するように設定されます。
7.14.1.2. バインディング方法の選択
OpenShift Virtualization Web コンソールウィザード から仮想マシンを作成する場合、Networking 画面で必要なバインディングメソッドを選択します。
7.14.1.2.1. ネットワークフィールド
名前 | 説明 |
---|---|
名前 | ネットワークインターフェイスの名前。 |
Model | ネットワークインターフェイスカードのモデルを示します。サポートされる値は、e1000、 e1000e、ne2k_pci、pcnet, rtl8139、および virtIO です。 |
Network | 利用可能な NetworkAttachmentDefinition オブジェクトの一覧。 |
Type |
利用可能なバインディングメソッドの一覧。デフォルトの Pod ネットワークについては、 |
MAC Address | ネットワークインターフェイスの MAC アドレス。MAC アドレスが指定されていない場合、セッションの一時アドレスが生成されます。 |
7.14.1.3. デフォルトネットワーク用の仮想マシン設定の例
7.14.1.3.1. テンプレート: 仮想マシンの設定ファイル
apiVersion: kubevirt.io/v1alpha3 kind: VirtualMachine metadata: name: example-vm namespace: default spec: running: false template: spec: domain: devices: disks: - name: containerdisk disk: bus: virtio - name: cloudinitdisk disk: bus: virtio interfaces: - masquerade: {} name: default resources: requests: memory: 1024M networks: - name: default pod: {} volumes: - name: containerdisk containerDisk: image: kubevirt/fedora-cloud-container-disk-demo - name: cloudinitdisk cloudInitNoCloud: userData: | #!/bin/bash echo "fedora" | passwd fedora --stdin
7.14.1.3.2. テンプレート: Windows 仮想マシンインスタンスの設定ファイル
apiVersion: kubevirt.io/v1alpha3 kind: VirtualMachineInstance metadata: labels: special: vmi-windows name: vmi-windows spec: domain: clock: timer: hpet: present: false hyperv: {} pit: tickPolicy: delay rtc: tickPolicy: catchup utc: {} cpu: cores: 2 devices: disks: - disk: bus: sata name: pvcdisk interfaces: - masquerade: {} model: e1000 name: default features: acpi: {} apic: {} hyperv: relaxed: {} spinlocks: spinlocks: 8191 vapic: {} firmware: uuid: 5d307ca9-b3ef-428c-8861-06e72d69f223 machine: type: q35 resources: requests: memory: 2Gi networks: - name: default pod: {} terminationGracePeriodSeconds: 0 volumes: - name: pvcdisk persistentVolumeClaim: claimName: disk-windows
7.14.1.4. 仮想マシンからのサービスの作成
仮想マシンを公開するために Service
オブジェクトを最初に作成し、実行中の仮想マシンからサービスを作成します。
ClusterIP
サービスタイプは、クラスター内で仮想マシンを内部に公開します。NodePort
または LoadBalancer
サービスタイプは、クラスター外から仮想マシンを外部に公開します。
この手順では、type: ClusterIP
の Service
オブジェクトを仮想マシンバックエンドサービスとして作成し、これに接続し、公開する方法についての例を示します。
ClusterIP
は、サービスの type
が指定されていない場合のデフォルトサービスの type
です。
手順
以下のように仮想マシンの YAML を編集します。
apiVersion: kubevirt.io/v1alpha3 kind: VirtualMachine metadata: name: vm-ephemeral namespace: example-namespace spec: running: false template: metadata: labels: special: key 1 spec: domain: devices: disks: - name: containerdisk disk: bus: virtio - name: cloudinitdisk disk: bus: virtio interfaces: - masquerade: {} name: default resources: requests: memory: 1024M networks: - name: default pod: {} volumes: - name: containerdisk containerDisk: image: kubevirt/fedora-cloud-container-disk-demo - name: cloudinitdisk cloudInitNoCloud: userData: | #!/bin/bash echo "fedora" | passwd fedora --stdin
- 1
- ラベル
special: key
をspec.template.metadata.labels
セクションに追加します。
注記仮想マシンのラベルは Pod に渡されます。
VirtualMachine
のラベル (例:special: key
) は、この手順の後で作成するService
YAMLselector
属性のラベルに一致する必要があります。- 仮想マシン YAML を保存して変更を適用します。
Service
YAML を編集し、Service
オブジェクトを作成し、公開するために必要な設定を行います。apiVersion: v1 kind: Service metadata: name: vmservice 1 namespace: example-namespace 2 spec: ports: - port: 27017 protocol: TCP targetPort: 22 3 selector: special: key 4 type: ClusterIP 5
- 1
- 作成および公開するサービスの
name
を指定します。 - 2
- 仮想マシン YAML に指定する
namespace
に対応するService
YAML のmetadata
セクションのnamespace
を指定します。 - 3
targetPort: 22
を追加し、SSH ポート22
にサービスを公開します。- 4
Service
YAML のspec
セクションで、special: key
をselector
属性に追加します。これは、仮想マシン YAML 設定ファイルに追加したlabels
に対応します。- 5
Service
YAML のspec
セクションで、ClusterIP サービスのtype: ClusterIP
を追加します。NodePort
やLoadBalancer
などのクラスター外にある他のタイプのサービスを作成し、公開するには、type: ClusterIP
をtype: NodePort
またはtype: LoadBalancer
に随時置き換えます。
-
Service
YAML を保存し、サービス設定を保管します。 ClusterIP
サービスを作成します。$ oc create -f <service_name>.yaml
- 仮想マシンを起動します。仮想マシンがすでに実行中の場合は、これを再起動します。
Service
オブジェクトをクエリーし、これが利用可能であり、ClusterIP
タイプで設定されていることを確認します。検証
oc get service
コマンドを実行し、仮想マシンで参照するnamespace
およびService
YAML ファイルを指定します。$ oc get service -n example-namespace
出力例
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE vmservice ClusterIP 172.30.3.149 <none> 27017/TCP 2m
-
出力で示されているように、
vmservice
が実行されています。 -
TYPE
は、Service
YAML で指定したようにClusterIP
として表示されます。
-
出力で示されているように、
サービスをサポートするために使用する仮想マシンへの接続を確立します。別の仮想マシンなど、クラスター内のオブジェクトから接続します。
以下のように仮想マシンの YAML を編集します。
apiVersion: kubevirt.io/v1alpha3 kind: VirtualMachine metadata: name: vm-connect namespace: example-namespace spec: running: false template: spec: domain: devices: disks: - name: containerdisk disk: bus: virtio - name: cloudinitdisk disk: bus: virtio interfaces: - masquerade: {} name: default resources: requests: memory: 1024M networks: - name: default pod: {} volumes: - name: containerdisk containerDisk: image: kubevirt/fedora-cloud-container-disk-demo - name: cloudinitdisk cloudInitNoCloud: userData: | #!/bin/bash echo "fedora" | passwd fedora --stdin
oc create
コマンドを実行して 2 番目の仮想マシンを作成します。ここで、file.yaml
は仮想マシン YAML の名前になります。$ oc create -f <file.yaml>
- 仮想マシンを起動します。
以下の
virtctl
コマンドを実行して仮想マシンに接続します。$ virtctl -n example-namespace console <new-vm-name>
注記サービスタイプ
LoadBalancer
の場合、vinagre
クライアントを使用し、パブリック IP およびポートを使用して仮想マシンに接続します。外部ポートは、サービスタイプLoadBalancer
を使用する場合に動的に割り当てられます。ssh
コマンドを実行して接続を認証します。ここで、172.30.3.149
はサービスの ClusterIP であり、fedora
は仮想マシンのユーザー名です。$ ssh fedora@172.30.3.149 -p 27017
検証
- 公開するサービスをサポートする仮想マシンのコマンドプロンプトが表示されます。実行中の仮想マシンがサポートするサービスの準備ができました。
関連情報
7.14.2. 仮想マシンの複数ネットワークへの割り当て
OpenShift Virtualization は、仮想マシンの複数ネットワークへの接続を可能にする layer-2 vNIC ネットワーク機能を提供します。複数インターフェイスへのアクセスによって異なる既存のワークロードを持つ仮想マシンをインポートできます。また、仮想マシンをネットワーク経由で起動できるように PXE ネットワークを設定することもできます。
まず、ネットワーク管理者は Web コンソールまたは CLI で namespace のブリッジ NetworkAttachmentDefinition を設定します。次に、ユーザーは NIC を作成し、その namespace 内の Pod および仮想マシンをブリッジネットワークに割り当てることができます。
KubeMacPool コンポーネントは、指定の namespace に仮想マシン NIC の MAC アドレスプールサービスを提供します。これはデフォルトで有効にされません。KubeMacPool ラベルを namespace に適用して、namespace で MAC アドレスプールを有効にします。
7.14.2.1. OpenShift Virtualization ネットワークの用語集
OpenShift Virtualization は、カスタムリソースおよびプラグインを使用して高度なネットワーク機能を提供します。
以下の用語は、OpenShift Virtualization ドキュメント全体で使用されています。
- Container Network Interface (CNI)
- コンテナーのネットワーク接続に重点を置く Cloud Native Computing Foundation プロジェクト。OpenShift Virtualization は CNI プラグインを使用して基本的な Kubernetes ネットワーク機能を強化します。
- Multus
- 複数の CNI の存在を可能にし、Pod または仮想マシンが必要なインターフェイスを使用できるようにするメタ CNI プラグイン。
- カスタムリソース定義 (CRD、Customer Resource Definition)
- カスタムリソースの定義を可能にする Kubernetes API リソース、または CRD API リソースを使用して定義されるオブジェクト。
- NetworkAttachmentDefinition
- Pod、仮想マシン、および仮想マシンインスタンスを 1 つ以上のネットワークに割り当てることを可能にする Multus プロジェクトによって導入される CRD。
- PXE (Preboot eXecution Environment)
- 管理者がネットワーク経由でサーバーからクライアントマシンを起動できるようにするインターフェイス。ネットワークのブートにより、オペレーティングシステムおよび他のソフトウェアをクライアントにリモートでロードできます。
7.14.2.2. NetworkAttachmentDefinition の作成
7.14.2.3. 前提条件
- Linux ブリッジは、すべてのノードに設定して割り当てる必要がある。詳細は、ノードのネットワーク セクションを参照してください。
仮想マシンの NetworkAttachmentDefinition での IPAM の設定はサポートされていません。
7.14.2.3.1. Web コンソールでの Linux ブリッジ NetworkAttachmentDefinition の作成
NetworkAttachmentDefinition は、layer-2 デバイスを OpenShift Virtualization クラスターの特定の namespace に公開するカスタムリソースです。
ネットワーク管理者は、NetworkAttachmentDefinition を作成して既存の layer-2 ネットワークを Pod および仮想マシンに提供できます。
手順
- Web コンソールで、Networking → Network Attachment Definitions をクリックします。
- Create Network Attachment Definition をクリックします。
- 一意の Name およびオプションの Description を入力します。
- Network Type 一覧をクリックし、CNV Linux bridge を選択します。
- Bridge Name フィールドにブリッジの名前を入力します。
- オプション: リソースに VLAN ID が設定されている場合、 VLAN Tag Number フィールドに ID 番号を入力します。
- Create をクリックします。
7.14.2.3.2. CLI での Linux ブリッジ NetworkAttachmentDefinition の作成
ネットワーク管理者は、タイプ cnv-bridge
の NetworkAttachmentDefinition を、レイヤー 2 ネットワークを Pod および仮想マシンに提供するように設定できます。
NetworkAttachmentDefinition は Pod または仮想マシンと同じ namespace にある必要があります。
手順
任意のローカルディレクトリーで NetworkAttachmentDefinition の新規ファイルを作成します。このファイルには、お使いの設定に合わせて変更された以下の内容が含まれる必要があります。
apiVersion: "k8s.cni.cncf.io/v1" kind: NetworkAttachmentDefinition metadata: name: a-bridge-network annotations: k8s.v1.cni.cncf.io/resourceName: bridge.network.kubevirt.io/br0 1 spec: config: '{ "cniVersion": "0.3.1", "name": "a-bridge-network", 2 "plugins": [ { "type": "cnv-bridge", 3 "bridge": "br0", 4 "vlan": 1 5 }, { "type": "cnv-tuning" 6 } ] }'
- 1
- このアノテーションを NetworkAttachmentDefinition に追加する場合、仮想マシンインスタンスは
br0
ブリッジが接続されているノードでのみ実行されます。 - 2
- 必須。ConfigMap の名前を入力します。設定名を NetworkAttachmentDefinition の
name
値に一致させることが推奨されます。 - 3
- この NetworkAttachmentDefinition のネットワークを提供する Container Network Interface (CNI) プラグインの実際の名前。異なる CNI を使用するのでない限り、このフィールドは変更しないでください。
- 4
- ブリッジの名前が
br0
でない場合、ブリッジの実際の名前に置き換える必要があります。 - 5
- オプション: VLAN タグ。
- 6
- 必須。これにより、MAC プールマネージャーが接続に固有の MAC アドレスを割り当てます。
$ oc create -f <resource_spec.yaml>
ブリッジネットワークに接続する必要のある仮想マシンまたは仮想マシンインスタンスの設定を編集します。
apiVersion: v1 kind: VirtualMachine metadata: name: example-vm spec: domain: devices: interfaces: - masquerade: {} name: default - bridge: {} name: bridge-net 1 ... networks: - name: default pod: {} - name: bridge-net 2 multus: networkName: a-bridge-network 3 ...
注記仮想マシンインスタンスは、
default
Pod ネットワーク、およびa-bridge-network
という名前の NetworkAttachmentDefinition によって定義されるbridge-net
の両方に接続されます。設定ファイルをリソースに適用します。
$ oc create -f <local/path/to/network-attachment-definition.yaml>
次のセクションで vNIC を定義する際に、NETWORK の値が直前のセクションで作成した NetworkAttachmentDefinition のブリッジネットワーク名であることを確認します。
7.14.2.4. 仮想マシンの NIC の作成
Web コンソールから追加の NIC を作成し、これを仮想マシンに割り当てます。
手順
- OpenShift Virtualization コンソールの適切なプロジェクトで、サイドメニューから Workloads → Virtualization をクリックします。
- Virtual Machines タブをクリックします。
- 仮想マシンを選択して、Virtual Machine Overview 画面を開きます。
- Network Interfaces をクリックし、仮想マシンにすでに割り当てられている NIC を表示します。
- Add Network Interface をクリックし、一覧に新規スロットを作成します。
- 新規 NIC の Name、Model、Network、 Type、および MAC Address を入力します。
- Add ボタンをクリックして NIC を保存し、これを仮想マシンに割り当てます。
7.14.2.5. ネットワークフィールド
名前 | 説明 |
---|---|
名前 | ネットワークインターフェイスの名前。 |
Model | ネットワークインターフェイスカードのモデルを示します。サポートされる値は、e1000、 e1000e、ne2k_pci、pcnet, rtl8139、および virtIO です。 |
Network | 利用可能な NetworkAttachmentDefinition オブジェクトの一覧。 |
Type |
利用可能なバインディングメソッドの一覧。デフォルトの Pod ネットワークについては、 |
MAC Address | ネットワークインターフェイスの MAC アドレス。MAC アドレスが指定されていない場合、セッションの一時アドレスが生成されます。 |
仮想マシンにオプションの QEMU ゲストエージェント をインストールし、ホストが追加のネットワークについての関連情報を表示できるようにします。
7.14.3. 仮想マシンの SR-IOV ネットワークデバイスの設定
クラスターで Single Root I/O Virtualization (SR-IOV) デバイスを設定できます。このプロセスは、OpenShift Container Platform の SR-IOV デバイスの設定と似ていますが、同じではありません。
7.14.3.1. 前提条件
7.14.3.2. SR-IOV ネットワークデバイスの自動検出
SR-IOV Network Operator は、クラスターでワーカーノード上の SR-IOV 対応ネットワークデバイスを検索します。Operator は、互換性のある SR-IOV ネットワークデバイスを提供する各ワーカーノードの SriovNetworkNodeState カスタムリソース (CR) を作成し、更新します。
CR にはワーカーノードと同じ名前が割り当てられます。status.interfaces
一覧は、ノード上のネットワークデバイスについての情報を提供します。
SriovNetworkNodeState
オブジェクトは変更しないでください。Operator はこれらのリソースを自動的に作成し、管理します。
7.14.3.2.1. SriovNetworkNodeState オブジェクトの例
以下の YAML は、SR-IOV Network Operator によって作成される SriovNetworkNodeState
オブジェクトの例です。
SriovNetworkNodeState オブジェクト
apiVersion: sriovnetwork.openshift.io/v1 kind: SriovNetworkNodeState metadata: name: node-25 1 namespace: openshift-sriov-network-operator ownerReferences: - apiVersion: sriovnetwork.openshift.io/v1 blockOwnerDeletion: true controller: true kind: SriovNetworkNodePolicy name: default spec: dpConfigVersion: "39824" status: interfaces: 2 - deviceID: "1017" driver: mlx5_core mtu: 1500 name: ens785f0 pciAddress: "0000:18:00.0" totalvfs: 8 vendor: 15b3 - deviceID: "1017" driver: mlx5_core mtu: 1500 name: ens785f1 pciAddress: "0000:18:00.1" totalvfs: 8 vendor: 15b3 - deviceID: 158b driver: i40e mtu: 1500 name: ens817f0 pciAddress: 0000:81:00.0 totalvfs: 64 vendor: "8086" - deviceID: 158b driver: i40e mtu: 1500 name: ens817f1 pciAddress: 0000:81:00.1 totalvfs: 64 vendor: "8086" - deviceID: 158b driver: i40e mtu: 1500 name: ens803f0 pciAddress: 0000:86:00.0 totalvfs: 64 vendor: "8086" syncStatus: Succeeded
7.14.3.3. SR-IOV ネットワークデバイスの設定
SR-IOV Network Operator は SriovNetworkNodePolicy.sriovnetwork.openshift.io
CustomResourceDefinition を OpenShift Container Platform に追加します。SR-IOV ネットワークデバイスは、SriovNetworkNodePolicy カスタムリソース (CR) を作成して設定できます。
SriovNetworkNodePolicy
オブジェクトで指定された設定を適用する際に、SR-IOV Operator はノードをドレイン (解放) する可能性があり、場合によってはノードの再起動を行う場合があります。
設定の変更が適用されるまでに数分かかる場合があります。
前提条件
-
OpenShift CLI (
oc
) がインストールされている。 -
cluster-admin
ロールを持つユーザーとしてクラスターにアクセスできる。 - SR-IOV Network Operator がインストールされている。
- ドレイン (解放) されたノードからエビクトされたワークロードを処理するために、クラスター内に利用可能な十分なノードがあること。
- SR-IOV ネットワークデバイス設定についてコントロールプレーンノードを選択していないこと。
手順
-
SriovNetworkNodePolicy
オブジェクトを作成してから、YAML を<name>-sriov-node-network.yaml
ファイルに保存します。<name>
をこの設定の名前に置き換えます。
apiVersion: sriovnetwork.openshift.io/v1 kind: SriovNetworkNodePolicy metadata: name: <name> 1 namespace: openshift-sriov-network-operator 2 spec: resourceName: <sriov_resource_name> 3 nodeSelector: feature.node.kubernetes.io/network-sriov.capable: "true" 4 priority: <priority> 5 mtu: <mtu> 6 numVfs: <num> 7 nicSelector: 8 vendor: "<vendor_code>" 9 deviceID: "<device_id>" 10 pfNames: ["<pf_name>", ...] 11 rootDevices: ["<pci_bus_id>", "..."] 12 deviceType: vfio-pci 13 isRdma: false 14
- 1
- CR オブジェクトの名前を指定します。
- 2
- SR-IOV Operator がインストールされている namespace を指定します。
- 3
- SR-IOV デバイスプラグインのリソース名を指定します。1 つのリソース名に複数の
SriovNetworkNodePolicy
オブジェクトを作成できます。 - 4
- 設定するノードを選択するノードセレクターを指定します。選択したノード上の SR-IOV ネットワークデバイスのみが設定されます。SR-IOV Container Network Interface (CNI) プラグインおよびデバイスプラグインは、選択したノードにのみデプロイされます。
- 5
- オプション:
0
から99
までの整数値を指定します。数値が小さいほど優先度が高くなります。したがって、10
は99
よりも優先度が高くなります。デフォルト値は99
です。 - 6
- オプション: 仮想機能 (VF) の最大転送単位 (MTU) の値を指定します。MTU の最大値は NIC モデルによって異なります。
- 7
- SR-IOV 物理ネットワークデバイス用に作成する仮想機能 (VF) の数を指定します。Intel Network Interface Card (NIC) の場合、VF の数はデバイスがサポートする VF の合計よりも大きくすることはできません。Mellanox NIC の場合、VF の数は
128
よりも大きくすることはできません。 - 8
nicSelector
マッピングは、Operator が設定するイーサネットデバイスを選択します。すべてのパラメーターの値を指定する必要はありません。意図せずにイーサネットデバイスを選択する可能性を最低限に抑えるために、イーサネットアダプターを正確に特定できるようにすることが推奨されます。rootDevices
を指定する場合、vendor
、deviceID
、またはpfName
の値も指定する必要があります。pfNames
とrootDevices
の両方を同時に指定する場合、それらが同一のデバイスをポイントすることを確認します。- 9
- オプション: SR-IOV ネットワークデバイスのベンダー 16 進コードを指定します。許可される値は
8086
または15b3
のいずれかのみになります。 - 10
- オプション: SR-IOV ネットワークデバイスのデバイス 16 進コードを指定します。許可される値は
158b
、1015
、1017
のみになります。 - 11
- オプション: このパラメーターは、1 つ以上のイーサネットデバイスの物理機能 (PF) 名の配列を受け入れます。
- 12
- このパラメーターは、イーサネットデバイスの物理機能についての 1 つ以上の PCI バスアドレスの配列を受け入れます。以下の形式でアドレスを指定します:
0000:02:00.1
- 13
- OpenShift Virtualization の仮想機能には、
vfio-pci
ドライバータイプが必要です。 - 14
- オプション: Remote Direct Memory Access (RDMA) モードを有効にするかどうかを指定します。Mellanox カードの場合、
isRdma
をfalse
に設定します。デフォルト値はfalse
です。注記isRDMA
フラグがtrue
に設定される場合、引き続き RDMA 対応の VF を通常のネットワークデバイスとして使用できます。デバイスはどちらのモードでも使用できます。
SriovNetworkNodePolicy
オブジェクトを作成します。$ oc create -f <name>-sriov-node-network.yaml
ここで、
<name>
はこの設定の名前を指定します。設定の更新が適用された後に、
sriov-network-operator
namespace のすべての Pod がRunning
ステータスに移行します。SR-IOV ネットワークデバイスが設定されていることを確認するには、以下のコマンドを実行します。
<node_name>
を、設定したばかりの SR-IOV ネットワークデバイスを持つノードの名前に置き換えます。$ oc get sriovnetworknodestates -n openshift-sriov-network-operator <node_name> -o jsonpath='{.status.syncStatus}'
7.14.3.4. 次のステップ
7.14.4. SR-IOV ネットワークの定義
仮想マシンの Single Root I/O Virtualization (SR-IOV) デバイスのネットワーク割り当てを作成できます。
ネットワークが定義された後に、仮想マシンを SR-IOV ネットワークに割り当てることができます。
7.14.4.1. 前提条件
7.14.4.2. SR-IOV の追加ネットワークの設定
SriovNetwork
オブジェクト を作成して、SR-IOV ハードウェアを使用する追加のネットワークを設定できます。SriovNetwork
オブジェクトの作成時に、SR-IOV Operator は NetworkAttachmentDefinition
オブジェクトを自動的に作成します。
次に、ユーザーはネットワークを仮想マシン設定で指定することで、仮想マシンを SR-IOV ネットワークに割り当てることができます。
SriovNetwork
オブジェクトが running
状態の Pod または仮想マシンに割り当てられている場合、これを変更したり、削除したりしないでください。
前提条件
-
OpenShift CLI (
oc
) をインストールしている。 -
cluster-admin
権限を持つユーザーとしてログインしている。
手順
-
以下の
SriovNetwork
オブジェクトを作成してから、YAML を<name>-sriov-network.yaml
ファイルに保存します。<name>
を、この追加ネットワークの名前に置き換えます。
apiVersion: sriovnetwork.openshift.io/v1 kind: SriovNetwork metadata: name: <name> 1 namespace: openshift-sriov-network-operator 2 spec: resourceName: <sriov_resource_name> 3 networkNamespace: <target_namespace> 4 vlan: <vlan> 5 spoofChk: "<spoof_check>" 6 linkState: <link_state> 7 maxTxRate: <max_tx_rate> 8 minTxRate: <min_rx_rate> 9 vlanQoS: <vlan_qos> 10 trust: "<trust_vf>" 11 capabilities: <capabilities> 12
- 1
<name>
をオブジェクトの名前に置き換えます。SR-IOV Network Operator は、同じ名前を持つNetworkAttachmentDefinition
オブジェクトを作成します。- 2
- SR-IOV ネットワーク Operator がインストールされている namespace を指定します。
- 3
<sriov_resource_name>
を、この追加ネットワークの SR-IOV ハードウェアを定義するSriovNetworkNodePolicy
オブジェクトの.spec.resourceName
パラメーターの値に置き換えます。- 4
<target_namespace>
を SriovNetwork のターゲット namespace に置き換えます。ターゲット namespace の Pod または仮想マシンのみを SriovNetwork に割り当てることができます。- 5
- オプション:
<vlan>
を、追加ネットワークの仮想 LAN (VLAN) ID に置き換えます。整数値は0
から4095
である必要があります。デフォルト値は0
です。 - 6
- オプション:
<spoof_check>
を VF の spoof check モードに置き換えます。許可される値は、文字列の"on"
および"off"
です。重要指定する値を引用符で囲む必要があります。そうしないと、CR は SR-IOV ネットワーク Operator によって拒否されます。
- 7
- オプション:
<link_state>
を仮想機能 (VF) のリンクの状態に置き換えます。許可される値は、enable
、disable
、およびauto
です。 - 8
- オプション:
<max_tx_rate>
を VF の最大伝送レート (Mbps) に置き換えます。 - 9
- オプション:
<min_tx_rate>
を VF の最小伝送レート (Mbps) に置き換えます。この値は、常に最大伝送レート以下である必要があります。注記Intel NIC は
minTxRate
パラメーターをサポートしません。詳細は、BZ#1772847 を参照してください。 - 10
- オプション:
<vlan_qos>
を VF の IEEE 802.1p 優先レベルに置き換えます。デフォルト値は0
です。 - 11
- オプション:
<trust_vf>
を VF の信頼モードに置き換えます。許可される値は、文字列の"on"
および"off"
です。重要指定する値を引用符で囲む必要があります。そうしないと、CR は SR-IOV ネットワーク Operator によって拒否されます。
- 12
- オプション:
<capabilities>
を、このネットワークに設定する機能に置き換えます。
オブジェクトを作成するには、以下のコマンドを入力します。
<name>
を、この追加ネットワークの名前に置き換えます。$ oc create -f <name>-sriov-network.yaml
オプション: 以下のコマンドを実行して、直前の手順で作成した
SriovNetwork
オブジェクトに関連付けられたNetworkAttachmentDefinition
オブジェクトが存在することを確認するには、以下のコマンドを入力します。<namespace>
を、SriovNetwork
オブジェクト で指定した namespace に置き換えます。$ oc get net-attach-def -n <namespace>
7.14.4.3. 次のステップ
7.14.5. 仮想マシンの SR-IOV ネットワークへの割り当て
SR-IOV (Single Root I/O Virtualization) ネットワークをセカンダリーネットワークとして使用するために仮想マシンを割り当てることができます。
7.14.5.1. 前提条件
7.14.5.2. 仮想マシンの SR-IOV ネットワークへの割り当て
仮想マシンの設定にネットワークの詳細を含めることで、仮想マシンを SR-IOV ネットワークに割り当てることができます。
手順
SR-IOV ネットワークの詳細を仮想マシン設定の
spec.domain.devices.interfaces
およびspec.networks
に追加します。kind: VirtualMachine ... spec: domain: devices: interfaces: - name: <default> 1 masquerade: {} 2 - name: <nic1> 3 sriov: {} networks: - name: <default> 4 pod: {} - name: <nic1> 5 multus: networkName: <sriov-network> 6 ...
仮想マシン設定を適用します。
$ oc apply -f <vm-sriov.yaml> 1
- 1
- 仮想マシン YAML ファイルの名前。
7.14.6. QEMU ゲストエージェントの仮想マシンへのインストール
QEMU ゲストエージェントは仮想マシンで実行されるデーモンです。エージェントは仮想マシン上で、追加ネットワークの IP アドレスなどのネットワーク情報をホストに渡します。
7.14.6.1. QEMU ゲストエージェントの Linux 仮想マシンへのインストール
qemu-guest-agent
は広く利用されており、Red Hat 仮想マシンでデフォルトで利用できます。このエージェントをインストールし、サービスを起動します。
手順
- コンソールのいずれか、または SSH を使用して仮想マシンのコマンドラインにアクセスします。
QEMU ゲストエージェントを仮想マシンにインストールします。
$ yum install -y qemu-guest-agent
QEMU ゲストエージェントサービスを起動します。
$ systemctl start qemu-guest-agent
サービスに永続性があることを確認します。
$ systemctl enable qemu-guest-agent
Web コンソールで仮想マシンまたは仮想マシンテンプレートのいずれかを作成する際に、ウィザードの cloud-init セクションの custom script フィールドを使用して QEMU ゲストエージェントをインストールし、起動することもできます。
7.14.6.2. QEMU ゲストエージェントの Windows 仮想マシンへのインストール
Windows 仮想マシンの場合、QEMU ゲストエージェントは、以下の手順のいずれかを使用してインストールできる VirtIO ドライバーに含まれています。
7.14.6.2.1. VirtIO ドライバーの既存 Windows 仮想マシンへのインストール
VirtIO ドライバーを、割り当てられた SATA CD ドライブから既存の Windows 仮想マシンにインストールします。
この手順では、ドライバーを Windows に追加するための汎用的なアプローチを使用しています。このプロセスは Windows のバージョンごとに若干異なる可能性があります。特定のインストール手順については、お使いの Windows バージョンについてのインストールドキュメントを参照してください。
手順
- 仮想マシンを起動し、グラフィカルコンソールに接続します。
- Windows ユーザーセッションにログインします。
Device Manager を開き、Other devices を拡張して、Unknown device を一覧表示します。
-
Device Properties
を開いて、不明なデバイスを特定します。デバイスを右クリックし、Properties を選択します。 - Details タブをクリックし、Property リストで Hardware Ids を選択します。
- Hardware Ids の Value をサポートされる VirtIO ドライバーと比較します。
-
- デバイスを右クリックし、Update Driver Software を選択します。
- Browse my computer for driver software をクリックし、VirtIO ドライバーが置かれている割り当て済みの SATA CD ドライブの場所に移動します。ドライバーは、ドライバーのタイプ、オペレーティングシステム、および CPU アーキテクチャー別に階層的に編成されます。
- Next をクリックしてドライバーをインストールします。
- 必要なすべての VirtIO ドライバーに対してこのプロセスを繰り返します。
- ドライバーのインストール後に、Close をクリックしてウィンドウを閉じます。
- 仮想マシンを再起動してドライバーのインストールを完了します。
7.14.6.2.2. Windows インストール時の VirtIO ドライバーのインストール
Windows のインストール時に割り当てられた SATA CD ドライバーから VirtIO ドライバーをインストールします。
この手順では、Windows インストールの汎用的なアプローチを使用しますが、インストール方法は Windows のバージョンごとに異なる可能性があります。インストールする Windows のバージョンについてのドキュメントを参照してください。
手順
- 仮想マシンを起動し、グラフィカルコンソールに接続します。
- Windows インストールプロセスを開始します。
- Advanced インストールを選択します。
-
ストレージの宛先は、ドライバーがロードされるまで認識されません。
Load driver
をクリックします。 - ドライバーは SATA CD ドライブとして割り当てられます。OK をクリックし、CD ドライバーでロードするストレージドライバーを参照します。ドライバーは、ドライバーのタイプ、オペレーティングシステム、および CPU アーキテクチャー別に階層的に編成されます。
- 必要なすべてのドライバーについて直前の 2 つの手順を繰り返します。
- Windows インストールを完了します。
7.14.7. vNIC の IP アドレスの仮想マシンへの表示
QEMU ゲストエージェントは仮想マシンで実行され、割り当てられた NIC の IP アドレスをホストに渡します。 これにより、Web コンソールおよび oc
クライアントの両方から IP アドレスを表示できます。
7.14.7.1. 前提条件
以下のコマンドを実行して、ゲストエージェントがインストールされており、実行中であることを確認します。
$ systemctl status qemu-guest-agent
- ゲストエージェントがインストールされておらず、実行されていない場合は、仮想マシン上でゲストエージェントをインストールし、実行します。
7.14.7.2. CLI での仮想マシンインターフェイスの IP アドレスの表示
ネットワークインターフェイス設定は oc describe vmi <vmi_name>
コマンドに含まれます。
IP アドレス情報は、仮想マシン上で ip addr
を実行するか、または oc get vmi <vmi_name> -o yaml
を実行して表示することもできます。
手順
oc describe
コマンドを使用して、仮想マシンインターフェイス設定を表示します。$ oc describe vmi <vmi_name>
出力例
... Interfaces: Interface Name: eth0 Ip Address: 10.244.0.37/24 Ip Addresses: 10.244.0.37/24 fe80::858:aff:fef4:25/64 Mac: 0a:58:0a:f4:00:25 Name: default Interface Name: v2 Ip Address: 1.1.1.7/24 Ip Addresses: 1.1.1.7/24 fe80::f4d9:70ff:fe13:9089/64 Mac: f6:d9:70:13:90:89 Interface Name: v1 Ip Address: 1.1.1.1/24 Ip Addresses: 1.1.1.1/24 1.1.1.2/24 1.1.1.4/24 2001:de7:0:f101::1/64 2001:db8:0:f101::1/64 fe80::1420:84ff:fe10:17aa/64 Mac: 16:20:84:10:17:aa
7.14.7.3. Web コンソールでの仮想マシンインターフェイスの IP アドレスの表示
IP 情報は、仮想マシンの Virtual Machine Overview 画面に表示されます。
手順
- OpenShift Virtualization コンソールのサイドメニューから Workloads → Virtualization をクリックします。
- Virtual Machines タブをクリックします。
- 仮想マシン名を選択して、Virtual Machine Overview 画面を開きます。
それぞれの割り当てられた NIC の情報は IP Address の下に表示されます。
7.14.8. 仮想マシンの MAC アドレスプールの使用
KubeMacPool コンポーネントは、指定の namespace に仮想マシン NIC の MAC アドレスプールサービスを提供します。KubeMacPool ラベルをその namespace に適用して、namespace の MAC アドレスプールを有効にします。
7.14.8.1. KubeMacPool について
namespace の KubeMacPool コンポーネントを有効にする場合、その namespace の仮想マシン NIC には MAC アドレスプールから MAC アドレスが割り当てられます。これにより、NIC には別の仮想マシンの MAC アドレスと競合しない一意の MAC アドレスが割り当てられます。
仮想マシンから作成される仮想マシンインスタンスは、再起動時に割り当てられる MAC アドレスを保持します。
KubeMacPool は、仮想マシンから独立して作成される仮想マシンインスタンスを処理しません。
KubeMacPool はデフォルトで無効にされます。KubeMacPool ラベルを namespace に適用して、namespace の MAC アドレスプールを有効にします。
7.14.8.2. CLI での namespace の MAC アドレスプールの有効化
mutatevirtualmachines.kubemacpool.io=allocate
ラベルを namespace に適用して namespace の仮想マシンの MAC アドレスプールを有効にします。
手順
KubeMacPool ラベルを namespace に追加します。以下の例では、KubeMacPool ラベルを 2 つの namespace (
<namespace1>
および<namespace2>
) に追加します。$ oc label namespace <namespace1> <namespace2> mutatevirtualmachines.kubemacpool.io=allocate
7.14.8.3. CLI での namespace の MAC アドレスプールの無効化
mutatevirtualmachines.kubemacpool.io
ラベルを削除して、namespace の仮想マシンの MAC アドレスプールを無効にします。
手順
KubeMacPool ラベルを namespace から削除します。以下の例では、KubeMacPool ラベルを 2 つの namespace (
<namespace1>
および<namespace2>
) から削除します。$ oc label namespace <namespace1> <namespace2> mutatevirtualmachines.kubemacpool.io-
7.15. 仮想マシンディスク
7.15.1. ストレージ機能
以下の表を使用して、OpenShift Virtualization のローカルおよび共有の永続ストレージ機能の可用性を確認できます。
7.15.1.1. OpenShift Virtualization ストレージ機能マトリクス
仮想マシンのライブマイグレーション | ホスト支援型仮想マシンディスクのクローン作成 | ストレージ支援型仮想マシンディスクのクローン作成 | 仮想マシンのスナップショット | |
---|---|---|---|---|
OpenShift Container Storage: RBD ブロックモードボリューム | Yes | はい | はい | はい |
OpenShift Virtualization ホストパスプロビジョナー | いいえ | はい | いいえ | いいえ |
他の複数ノードの書き込み可能なストレージ | はい [1] | はい | はい [2] | はい [2] |
他の単一ノードの書き込み可能なストレージ | いいえ | はい | はい [2] | はい [2] |
- PVC は ReadWriteMany アクセスモードを要求する必要があります。
- ストレージプロバイダーが Kubernetes および CSI スナップショット API の両方をサポートする必要があります。
以下を使用する仮想マシンのライブマイグレーションを行うことはできません。
- ReadWriteOnce (RWO) アクセスモードのストレージクラス
- SRI-OV や GPU などのパススルー機能
それらの仮想マシンの evictionStrategy
フィールドを LiveMigrate
に設定しないでください。
7.15.2. 仮想マシンのローカルストレージの設定
ホストパスプロビジョナー機能を使用して、仮想マシンのローカルストレージを設定できます。
7.15.2.1. ホストパスプロビジョナーについて
ホストパスプロビジョナーは、OpenShift Virtualization 用に設計されたローカルストレージプロビジョナーです。仮想マシンのローカルストレージを設定する必要がある場合、まずホストパスプロビジョナーを有効にする必要があります。
OpenShift Virtualization Operator のインストール時に、ホストパスプロビジョナー Operator は自動的にインストールされます。これを使用するには、以下を実行する必要があります。
SELinux を設定します。
- Red Hat Enterprise Linux CoreOS 8 ワーカーを使用する場合は、各ノードに MachineConfig オブジェクトを作成する必要があります。
-
それ以外の場合には、SELinux ラベル
container_file_t
を各ノードの PersistentVolume (PV) バッキングディレクトリーに適用します。
- HostPathProvisioner カスタムリソースを作成します。
-
ホストパスプロビジョナーの
StorageClass
オブジェクトを作成します。
ホストパスプロビジョナー Operator は、カスタムリソースの作成時にプロビジョナーを各ノードに DaemonSet としてデプロイします。カスタムリソースファイルでは、ホストパスプロビジョナーが作成する PersistentVolume のバッキングディレクトリーを指定します。
7.15.2.2. Red Hat Enterprise Linux CoreOS 8 でのホストパスプロビジョナー用の SELinux の設定
HostPathProvisioner カスタムリソースを作成する前に、SELinux を設定する必要があります。Red Hat Enterprise Linux CoreOS 8 ワーカーで SELinux を設定するには、各ノードに MachineConfig
オブジェクトを作成する必要があります。
Red Hat Enterprise Linux CoreOS ワーカーを使用しない場合は、この手順を省略します。
前提条件
- ホストパスプロビジョナーが作成する PersistentVolume (PV) 用に、各ノードにバッキングディレクトリーを作成します。
手順
MachineConfig ファイルを作成します。以下は例になります。
$ touch machineconfig.yaml
ファイルを編集し、ホストパスプロビジョナーが PV を作成するディレクトリーを組み込みます。以下に例を示します。
apiVersion: machineconfiguration.openshift.io/v1 kind: MachineConfig metadata: name: 50-set-selinux-for-hostpath-provisioner labels: machineconfiguration.openshift.io/role: worker spec: config: ignition: version: 2.2.0 systemd: units: - contents: | [Unit] Description=Set SELinux chcon for hostpath provisioner Before=kubelet.service [Service] ExecStart=/usr/bin/chcon -Rt container_file_t <path/to/backing/directory> 1 [Install] WantedBy=multi-user.target enabled: true name: hostpath-provisioner.service
- 1
- プロビジョナーが PV を作成するバッキングディレクトリーを指定します。
MachineConfig
オブジェクトを作成します。$ oc create -f machineconfig.yaml -n <namespace>
7.15.2.3. ホストパスプロビジョナーを使用したローカルストレージの有効化
ホストパスプロビジョナーをデプロイし、仮想マシンがローカルストレージを使用できるようにするには、最初に HostPathProvisioner カスタムリソースを作成します。
前提条件
- ホストパスプロビジョナーが作成する PersistentVolume (PV) 用に、各ノードにバッキングディレクトリーを作成します。
SELinux コンテキスト
container_file_t
を各ノードの PV バッキングディレクトリーに適用します。以下は例になります。$ sudo chcon -t container_file_t -R </path/to/backing/directory>
注記Red Hat Enterprise Linux CoreOS 8 ワーカーを使用する場合は、代わりに MachineConfig マニフェストを使用して SELinux を設定する必要があります。
手順
HostPathProvisioner カスタムリソースファイルを作成します。以下は例になります。
$ touch hostpathprovisioner_cr.yaml
ファイルを編集し、
spec.pathConfig.path
の値がホストパスプロビジョナーが PV を作成するディレクトリーであることを確認します。以下に例を示します。apiVersion: hostpathprovisioner.kubevirt.io/v1alpha1 kind: HostPathProvisioner metadata: name: hostpath-provisioner spec: imagePullPolicy: IfNotPresent pathConfig: path: "</path/to/backing/directory>" 1 useNamingPrefix: "false" 2
注記バッキングディレクトリーを作成していない場合、プロビジョナーはこの作成を試行します。
container_file_t
SELinux コンテキストを適用していない場合、これによりPermission denied
エラーが生じる可能性があります。openshift-cnv
namespace にカスタムリソースを作成します。$ oc create -f hostpathprovisioner_cr.yaml -n openshift-cnv
7.15.2.4. StorageClass
オブジェクトの作成
StorageClass
オブジェクトの作成時に、ストレージクラスに属する PersistentVolume (PV) の動的プロビジョニングに影響するパラメーターを設定します。
StorageClass
オブジェクトの作成後には、このオブジェクトのパラメーターを更新できません。
手順
ストレージクラスを定義する YAML ファイルを作成します。以下に例を示します。
$ touch storageclass.yaml
ファイルを編集します。以下に例を示します。
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: hostpath-provisioner 1 provisioner: kubevirt.io/hostpath-provisioner reclaimPolicy: Delete 2 volumeBindingMode: WaitForFirstConsumer 3
- 1
- この値を変更することで、オプションでストレージクラスの名前を変更できます。
- 2
reclaimPolicy
には、Delete
およびRetain
の 2 つの値があります。値を指定しない場合、ストレージクラスはデフォルトでDelete
に設定されます。- 3
volumeBindingMode
値は、動的プロビジョニングおよびボリュームバインディングが実行されるタイミングを決定します。WaitForFirstConsumer
を指定して、PersistentVolumeClaim (PVC) を使用する Pod が作成されるまで PV のバインディングおよびプロビジョニングを遅延させます。これにより、PV が Pod のスケジュール要件を満たすようになります。
仮想マシンは、ローカル PV に基づくデータボリュームを使用します。ローカル PV は特定のノードにバインドされます。ディスクイメージは仮想マシンで使用するために準備されますが、ローカルストレージ PV がすでに固定されたノードに仮想マシンをスケジュールすることができない可能性があります。
この問題を解決するには、Kubernetes Pod スケジューラーを使用して PVC を正しいノード上の PV にバインドします。volumeBindingMode
が WaitForFirstConsumer
に設定された StorageClass
を使用すると、PV のバインディングおよびプロビジョニングは、Pod
が PVC を使用して作成されるまで遅延します。
StorageClass
オブジェクトを作成します。$ oc create -f storageclass.yaml
追加情報
7.15.3. コンピュートリソースクォータを持つ namespace で機能する CDI の設定
Containerized Data Importer (CDI) を使用して、CPU およびメモリーリソースの制限が適用される namespace に仮想マシンディスクをインポートし、アップロードし、そのクローンを作成できるようになりました。
7.15.3.1. namespace の CPU およびメモリークォータについて
ResourceQuota
オブジェクトで定義される リソースクォータ は、その namespace 内のリソースが消費できるコンピュートリソースの全体量を制限する制限を namespace に課します。
CDIConfig
オブジェクトは Containerized Data Importer (CDI) のユーザー設定を定義します。CDIConfig
オブジェクトの CPU およびメモリーの要求および制限の値はデフォルト値の 0 に設定されます。これにより、コンピュートリソース要件を作成する CDI によって作成される Pod にデフォルト値が付与され、クォータで制限される namespace での実行が許可されます。
7.15.3.2. CPU およびメモリーのデフォルトを上書きするための CDIConfig
オブジェクトの編集
CDIConfig
オブジェクトの spec
属性を編集して、ユースケースに応じて CPU およびメモリーの要求および制限のデフォルト設定を変更します。
前提条件
-
OpenShift CLI (
oc
) をインストールしている。
手順
以下のコマンドを実行して
cdiconfig/config
を編集します。$ oc edit cdiconfig/config
CDIConfig
オブジェクトのspec: podResourceRequirements
プロパティーを編集して、デフォルトの CPU およびメモリーの要求および制限を変更します。apiVersion: cdi.kubevirt.io/v1alpha1 kind: CDIConfig metadata: labels: app: containerized-data-importer cdi.kubevirt.io: "" name: config spec: podResourceRequirements: limits: cpu: "4" memory: "1Gi" requests: cpu: "1" memory: "250Mi" ...
-
エディターを保存し、終了して
CDIConfig
オブジェクトを更新します。
検証
以下のコマンドを実行して
CDIConfig
ステータスを表示し、変更を確認します。$ oc get cdiconfig config -o yaml
7.15.3.3. 関連情報
7.15.4. virtctl ツールの使用によるローカルディスクイメージのアップロード
virtctl
コマンドラインユーティリティーを使用して、ローカルに保存されたディスクイメージを新規の DataVolume にアップロードできます。
7.15.4.1. 前提条件
-
kubevirt-virtctl
パッケージの インストール - CDI でサポートされる操作マトリックス に応じてスクラッチ領域が必要な場合、まずは、この操作が正常に実行されるように StorageClass を定義するか、または CDI スクラッチ領域を用意 します。
7.15.4.2. DataVolume について
DataVolume
オブジェクトは、Containerized Data Importer (CDI) プロジェクトで提供されるカスタムリソースです。DataVolume は、基礎となる PersistentVolumeClaim (PVC) に関連付けられるインポート、クローン作成、およびアップロード操作のオーケストレーションを行います。DataVolume は KubeVirt に統合され、仮想マシンが PVC の作成前に起動することを防ぎます。
7.15.4.3. アップロード DataVolume の作成
ローカルディスクイメージのアップロードに使用する upload
データソースで DataVolume を手動で作成できます。
手順
spec: source: upload{}
を指定する DataVolume 設定を作成します。apiVersion: cdi.kubevirt.io/v1alpha1 kind: DataVolume metadata: name: <upload-datavolume> 1 spec: source: upload: {} pvc: accessModes: - ReadWriteOnce resources: requests: storage: <2Gi> 2
以下のコマンドを実行して DataVolume を作成します。
$ oc create -f <upload-datavolume>.yaml
7.15.4.4. ローカルディスクイメージの DataVolume へのアップロード
virtctl
CLI ユーティリティーを使用して、ローカルディスクイメージをクライアントマシンからクラスター内の DataVolume (DV) にアップロードできます。この手順の実行時に、すでにクラスターに存在する DV を使用するか、または新規の DV を作成することができます。
ローカルディスクイメージのアップロード後に、これを仮想マシンに追加できます。
前提条件
-
RAW、ISO、または QCOW2 形式の仮想マシンディスクイメージ (オプションで
xz
またはgz
を使用して圧縮される) -
kubevirt-virtctl
パッケージがクライアントマシンにインストールされていること。 - クライアントマシンが OpenShift Container Platform ルーターの証明書を信頼するように設定されていること。
手順
以下を特定します。
- 使用するアップロード DataVolume の名前。この DataVolume が存在しない場合、これは自動的に作成されます。
- DataVolume のサイズ (アップロード手順の実行時に作成する必要がある場合)。サイズはディスクイメージのサイズ以上である必要があります。
- アップロードする必要のある仮想マシンディスクイメージのファイルの場所。
virtctl image-upload
コマンドを実行してディスクイメージをアップロードします。直前の手順で特定したパラメーターを指定します。以下は例になります。$ virtctl image-upload dv <datavolume_name> \ 1 --size=<datavolume_size> \ 2 --image-path=</path/to/image> \ 3
注記-
新規 DataVolume を作成する必要がない場合は、
--size
パラメーターを省略し、--no-create
フラグを含めます。 - ディスクイメージを PVC にアップロードする場合、PVC サイズは圧縮されていない仮想ディスクのサイズよりも大きくなければなりません。
-
HTTPS を使用したセキュアでないサーバー接続を許可するには、
--insecure
パラメーターを使用します。--insecure
フラグを使用する際に、アップロードエンドポイントの信頼性は検証 されない 点に注意してください。
-
新規 DataVolume を作成する必要がない場合は、
オプション。DataVolume が作成されたことを確認するには、以下のコマンドを実行してすべての DataVolume オブジェクトを表示します。
$ oc get dvs
7.15.4.5. CDI がサポートする操作マトリックス
このマトリックスにはエンドポイントに対してコンテンツタイプのサポートされる CDI 操作が表示されます。これらの操作にはスクラッチ領域が必要です。
コンテンツタイプ | HTTP | HTTPS | HTTP Basic 認証 | レジストリー | アップロード |
---|---|---|---|---|---|
kubevirt (QCOW2) |
✓ QCOW2 |
✓ QCOW2** |
✓ QCOW2 |
✓ QCOW2* |
✓ QCOW2* |
KubeVirt (RAW) |
✓ RAW |
✓ RAW |
✓ RAW |
✓ RAW* |
✓ RAW* |
✓ サポートされる操作
□ サポートされない操作
* スクラッチ領域が必要
**カスタム認証局が必要な場合にスクラッチ領域が必要
7.15.5. ブロックストレージ DataVolume へのローカルディスクイメージのアップロード
virtctl
コマンドラインユーティリティーを使用して、ローカルのディスクイメージをブロック DataVolume にアップロードできます。
このワークフローでは、ローカルブロックデバイスを使用して PersistentVolume を使用し、このブロックボリュームを upload
DataVolume に関連付け、 virtctl
を使用してローカルディスクイメージを DataVolume にアップロードできます。
7.15.5.1. 前提条件
-
kubevirt-virtctl
パッケージの インストール - CDI でサポートされる操作マトリックス に応じてスクラッチ領域が必要な場合、まずは、この操作が正常に実行されるように StorageClass を定義するか、または CDI スクラッチ領域を用意 します。
7.15.5.2. DataVolume について
DataVolume
オブジェクトは、Containerized Data Importer (CDI) プロジェクトで提供されるカスタムリソースです。DataVolume は、基礎となる PersistentVolumeClaim (PVC) に関連付けられるインポート、クローン作成、およびアップロード操作のオーケストレーションを行います。DataVolume は KubeVirt に統合され、仮想マシンが PVC の作成前に起動することを防ぎます。
7.15.5.3. ブロック PersistentVolume について
ブロック PersistentVolume (PV) は、raw ブロックデバイスによってサポートされる PV です。これらのボリュームにはファイルシステムがなく、オーバーヘッドを削減することで、仮想マシンのパフォーマンス上の利点をもたらすことができます。
raw ブロックボリュームは、PV および PersistentVolumeClaim (PVC) 仕様で volumeMode: Block
を指定してプロビジョニングされます。
7.15.5.4. ローカルブロック PersistentVolume の作成
ファイルにデータを設定し、これをループデバイスとしてマウントすることにより、ノードでローカルブロック PersistentVolume (PV) を作成します。次に、このループデバイスを PV 設定で Block
ボリュームとして参照し、これを仮想マシンイメージのブロックデバイスとして使用できます。
手順
-
ローカル PV を作成するノードに
root
としてログインします。この手順では、node01
を例に使用します。 ファイルを作成して、これを null 文字で設定し、ブロックデバイスとして使用できるようにします。以下の例では、2Gb (20 100Mb ブロック) のサイズのファイル
loop10
を作成します。$ dd if=/dev/zero of=<loop10> bs=100M count=20
loop10
ファイルをループデバイスとしてマウントします。$ losetup </dev/loop10>d3 <loop10> 1 2
マウントされたループデバイスを参照する
PersistentVolume
設定を作成します。kind: PersistentVolume apiVersion: v1 metadata: name: <local-block-pv10> annotations: spec: local: path: </dev/loop10> 1 capacity: storage: <2Gi> volumeMode: Block 2 storageClassName: local 3 accessModes: - ReadWriteOnce persistentVolumeReclaimPolicy: Delete nodeAffinity: required: nodeSelectorTerms: - matchExpressions: - key: kubernetes.io/hostname operator: In values: - <node01> 4
ブロック PV を作成します。
# oc create -f <local-block-pv10.yaml>1
- 1
- 直前の手順で作成された PersistentVolume のファイル名。
7.15.5.5. アップロード DataVolume の作成
ローカルディスクイメージのアップロードに使用する upload
データソースで DataVolume を手動で作成できます。
手順
spec: source: upload{}
を指定する DataVolume 設定を作成します。apiVersion: cdi.kubevirt.io/v1alpha1 kind: DataVolume metadata: name: <upload-datavolume> 1 spec: source: upload: {} pvc: accessModes: - ReadWriteOnce resources: requests: storage: <2Gi> 2
以下のコマンドを実行して DataVolume を作成します。
$ oc create -f <upload-datavolume>.yaml
7.15.5.6. ローカルディスクイメージの DataVolume へのアップロード
virtctl
CLI ユーティリティーを使用して、ローカルディスクイメージをクライアントマシンからクラスター内の DataVolume (DV) にアップロードできます。この手順の実行時に、すでにクラスターに存在する DV を使用するか、または新規の DV を作成することができます。
ローカルディスクイメージのアップロード後に、これを仮想マシンに追加できます。
前提条件
-
RAW、ISO、または QCOW2 形式の仮想マシンディスクイメージ (オプションで
xz
またはgz
を使用して圧縮される) -
kubevirt-virtctl
パッケージがクライアントマシンにインストールされていること。 - クライアントマシンが OpenShift Container Platform ルーターの証明書を信頼するように設定されていること。
手順
以下を特定します。
- 使用するアップロード DataVolume の名前。この DataVolume が存在しない場合、これは自動的に作成されます。
- DataVolume のサイズ (アップロード手順の実行時に作成する必要がある場合)。サイズはディスクイメージのサイズ以上である必要があります。
- アップロードする必要のある仮想マシンディスクイメージのファイルの場所。
virtctl image-upload
コマンドを実行してディスクイメージをアップロードします。直前の手順で特定したパラメーターを指定します。以下は例になります。$ virtctl image-upload dv <datavolume_name> \ 1 --size=<datavolume_size> \ 2 --image-path=</path/to/image> \ 3
注記-
新規 DataVolume を作成する必要がない場合は、
--size
パラメーターを省略し、--no-create
フラグを含めます。 - ディスクイメージを PVC にアップロードする場合、PVC サイズは圧縮されていない仮想ディスクのサイズよりも大きくなければなりません。
-
HTTPS を使用したセキュアでないサーバー接続を許可するには、
--insecure
パラメーターを使用します。--insecure
フラグを使用する際に、アップロードエンドポイントの信頼性は検証 されない 点に注意してください。
-
新規 DataVolume を作成する必要がない場合は、
オプション。DataVolume が作成されたことを確認するには、以下のコマンドを実行してすべての DataVolume オブジェクトを表示します。
$ oc get dvs
7.15.5.7. CDI がサポートする操作マトリックス
このマトリックスにはエンドポイントに対してコンテンツタイプのサポートされる CDI 操作が表示されます。これらの操作にはスクラッチ領域が必要です。
コンテンツタイプ | HTTP | HTTPS | HTTP Basic 認証 | レジストリー | アップロード |
---|---|---|---|---|---|
kubevirt (QCOW2) |
✓ QCOW2 |
✓ QCOW2** |
✓ QCOW2 |
✓ QCOW2* |
✓ QCOW2* |
KubeVirt (RAW) |
✓ RAW |
✓ RAW |
✓ RAW |
✓ RAW* |
✓ RAW* |
✓ サポートされる操作
□ サポートされない操作
* スクラッチ領域が必要
**カスタム認証局が必要な場合にスクラッチ領域が必要
7.15.6. ローカル仮想マシンディスクの別のノードへの移動
ローカルボリュームストレージを使用する仮想マシンは、特定のノードで実行されるように移動することができます。
以下の理由により、仮想マシンを特定のノードに移動する場合があります。
- 現在のノードにローカルストレージ設定に関する制限がある。
- 新規ノードがその仮想マシンのワークロードに対して最適化されている。
ローカルストレージを使用する仮想マシンを移行するには、DataVolume を使用して基礎となるボリュームのクローンを作成する必要があります。クローン操作が完了したら、新規 DataVolume を使用できるように 仮想マシン設定を編集 するか、または 新規 DataVolume を別の仮想マシンに追加 できます。
cluster-admin
ロールのないユーザーには、複数の namespace 間でボリュームのクローンを作成できるように 追加のユーザーパーミッション が必要になります。
7.15.6.1. ローカルボリュームの別のノードへのクローン作成
基礎となる PersistentVolumeClaim (PVC) のクローンを作成して、仮想マシンディスクを特定のノードで実行するように移行することができます。
仮想マシンディスクのノードが適切なノードに作成されることを確認するには、新規の PersistentVolume (PV) を作成するか、または該当するノードでそれを特定します。一意のラベルを PV に適用し、これが DataVolume で参照できるようにします。
宛先 PV のサイズはソース PVC と同じか、またはそれよりも大きくなければなりません。宛先 PV がソース PVC よりも小さい場合、クローン作成操作は失敗します。
前提条件
- 仮想マシンが実行されていないこと。仮想マシンディスクのクローンを作成する前に、仮想マシンの電源を切ります。
手順
ノードに新規のローカル PV を作成するか、またはノードにすでに存在しているローカル PV を特定します。
nodeAffinity.nodeSelectorTerms
パラメーターを含むローカル PV を作成します。以下のマニフェストは、node01
に10Gi
のローカル PV を作成します。kind: PersistentVolume apiVersion: v1 metadata: name: <destination-pv> 1 annotations: spec: accessModes: - ReadWriteOnce capacity: storage: 10Gi 2 local: path: /mnt/local-storage/local/disk1 3 nodeAffinity: required: nodeSelectorTerms: - matchExpressions: - key: kubernetes.io/hostname operator: In values: - node01 4 persistentVolumeReclaimPolicy: Delete storageClassName: local volumeMode: Filesystem
ターゲットノードに存在する PV を特定します。設定の
nodeAffinity
フィールドを確認して、PV がプロビジョニングされるノードを特定することができます。$ oc get pv <destination-pv> -o yaml
以下のスニペットは、PV が
node01
にあることを示しています。出力例
... spec: nodeAffinity: required: nodeSelectorTerms: - matchExpressions: - key: kubernetes.io/hostname 1 operator: In values: - node01 2 ...
PV に一意のラベルを追加します。
$ oc label pv <destination-pv> node=node01
以下を参照する DataVolume マニフェストを作成します。
- 仮想マシンの PVC 名と namespace。
- 直前の手順で PV に適用されたラベル。
宛先 PV のサイズ。
apiVersion: cdi.kubevirt.io/v1alpha1 kind: DataVolume metadata: name: <clone-datavolume> 1 spec: source: pvc: name: "<source-vm-disk>" 2 namespace: "<source-namespace>" 3 pvc: accessModes: - ReadWriteOnce selector: matchLabels: node: node01 4 resources: requests: storage: <10Gi> 5
DataVolume マニフェストをクラスターに適用してクローン作成の操作を開始します。
$ oc apply -f <clone-datavolume.yaml>
DataVolume は、仮想マシンの PVC のクローンを特定のノード上の PV に作成します。
7.15.7. 空のディスクイメージを追加して仮想ストレージを拡張する
空のディスクイメージを OpenShift Virtualization に追加することによって、ストレージ容量を拡張したり、新規のデータパーティションを作成したりできます。
7.15.7.1. DataVolume について
DataVolume
オブジェクトは、Containerized Data Importer (CDI) プロジェクトで提供されるカスタムリソースです。DataVolume は、基礎となる PersistentVolumeClaim (PVC) に関連付けられるインポート、クローン作成、およびアップロード操作のオーケストレーションを行います。DataVolume は KubeVirt に統合され、仮想マシンが PVC の作成前に起動することを防ぎます。
7.15.7.2. DataVolume を使用した空のディスクイメージの作成
DataVolume 設定ファイルをカスタマイズし、デプロイすることにより、新規の空のディスクイメージを PersistentVolumeClaim に作成することができます。
前提条件
- 1 つ以上の利用可能な PersistentVolume
-
OpenShift CLI (
oc
) のインストール。
手順
DataVolume 設定ファイルを編集します。
apiVersion: cdi.kubevirt.io/v1alpha1 kind: DataVolume metadata: name: blank-image-datavolume spec: source: blank: {} pvc: # Optional: Set the storage class or omit to accept the default # storageClassName: "hostpath" accessModes: - ReadWriteOnce resources: requests: storage: 500Mi
以下のコマンドを実行して、空のディスクイメージを作成します。
$ oc create -f <blank-image-datavolume>.yaml
7.15.7.3. テンプレート: 空のディスクイメージの DataVolume 設定ファイル
blank-image-datavolume.yaml
apiVersion: cdi.kubevirt.io/v1alpha1 kind: DataVolume metadata: name: blank-image-datavolume spec: source: blank: {} pvc: # Optional: Set the storage class or omit to accept the default # storageClassName: "hostpath" accessModes: - ReadWriteOnce resources: requests: storage: 500Mi
7.15.8. DataVolume のストレージのデフォルト
kubevirt-storage-class-defaults
ConfigMap は DataVolume の アクセスモード および ボリュームモード のデフォルト設定を提供します。Web コンソールで、基礎となるストレージにより適した DataVolume を作成するために、ConfigMap に対してストレージクラスのデフォルトを編集したり、追加したりできます。
7.15.8.1. DataVolume のストレージ設定について
DataVolume では、定義された アクセスモード と ボリュームモード を Web コンソールで作成する必要があります。これらのストレージ設定は、デフォルトで ReadWriteOnce
アクセスモードおよび Filesystem
ボリュームモードで設定されます。
これらの設定は、openshift-cnv
namespace で kubevirt-storage-class-defaults
ConfigMap を編集して変更できます。また、異なるストレージタイプについて Web コンソールで DataVolume を作成するために、他のストレージクラスの設定を追加することもできます。
基礎となるストレージでサポートされるストレージ設定を設定する必要があります。
Web コンソールで作成するすべての DataVolume は、ConfigMap にも定義されるストレージクラスを指定しない限り、デフォルトのストレージ設定を使用します。
7.15.8.1.1. アクセスモード
DataVolume は以下のアクセスモードをサポートします。
-
ReadWriteOnce
: ボリュームは単一ノードで、read-write としてマウントできます。ReadWriteOnce
にはより多様性があり、これはデフォルトの設定です。 -
ReadWriteMany
: ボリュームは数多くのノードで、read-write としてマウントできます。ReadWriteMany
は、ノード間の仮想マシンのライブマイグレーションなどの、一部の機能で必要になります。
ReadWriteMany
は、基礎となるストレージがこれをサポートしている場合に推奨されます。
7.15.8.1.2. ボリュームモード
ボリュームモードは、ボリュームをフォーマットされたファイルシステムで使用するか、または raw ブロック状態のままにするかを定義します。DataVolume は以下のボリュームモードをサポートします。
-
Filesystem
: DataVolume にファイルシステムを作成します。これはデフォルトの設定です。 -
Block
: ブロック DataVolume を作成します。基礎となるストレージがサポートしている場合は、Block
を使用します。
7.15.8.2. Web コンソールでの kubevirt-storage-class-defaults 設定マップの編集
DataVolume のストレージ設定を、openshift-cnv
namespace の kubevirt-storage-class-defaults
ConfigMap を編集して変更します。また、異なるストレージタイプについて Web コンソールで DataVolume を作成するために、他のストレージクラスの設定を追加することもできます。
基礎となるストレージでサポートされるストレージ設定を設定する必要があります。
手順
- サイドメニューから、Workloads → Config Maps をクリックします。
- Project 一覧で、openshift-cnv を選択します。
- kubevirt-storage-class-defaults をクリックして Config Map Overview を開きます。
- YAML タブをクリックして編集可能な設定を表示します。
基礎となるストレージに適したストレージ設定で
data
の値を更新します。... data: accessMode: ReadWriteOnce 1 volumeMode: Filesystem 2 <new>.accessMode: ReadWriteMany 3 <new>.volumeMode: Block 4
- Save をクリックして設定マップを更新します。
7.15.8.3. CLI での kubevirt-storage-class-defaults 設定マップの編集
DataVolume のストレージ設定を、openshift-cnv
namespace の kubevirt-storage-class-defaults
ConfigMap を編集して変更します。また、異なるストレージタイプについて Web コンソールで DataVolume を作成するために、他のストレージクラスの設定を追加することもできます。
基礎となるストレージでサポートされるストレージ設定を設定する必要があります。
手順
以下のコマンドを実行して ConfigMap を編集します。
$ oc edit configmap kubevirt-storage-class-defaults -n openshift-cnv
ConfigMap の
data
値を更新します。... data: accessMode: ReadWriteOnce 1 volumeMode: Filesystem 2 <new>.accessMode: ReadWriteMany 3 <new>.volumeMode: Block 4
- エディターを保存し、終了して設定マップを更新します。
7.15.8.4. 複数のストレージクラスのデフォルト例
以下の YAML ファイルは、kubevirt-storage-class-defaults
ConfigMap の例です。これには、migration
および block
の 2 つのストレージクラスについてストレージが設定されます。
ConfigMap を更新する前に、すべての設定が基礎となるストレージでサポートされていることを確認してください。
kind: ConfigMap apiVersion: v1 metadata: name: kubevirt-storage-class-defaults namespace: openshift-cnv ... data: accessMode: ReadWriteOnce volumeMode: Filesystem nfs-sc.accessMode: ReadWriteMany nfs-sc.volumeMode: Filesystem block-sc.accessMode: ReadWriteMany block-sc.volumeMode: Block
7.15.9. 仮想マシンでのコンテナーディスクの使用
仮想マシンイメージをコンテナーディスクにビルドし、これをコンテナーレジストリーに保存することができます。次に、コンテナーディスクを仮想マシンの永続ストレージにインポートしたり、一時ストレージの仮想マシンに直接割り当てたりすることができます。
7.15.9.1. コンテナーディスクについて
コンテナーディスクは、コンテナーイメージレジストリーにコンテナーイメージとして保存される仮想マシンのイメージです。コンテナーディスクを使用して、同じディスクイメージを複数の仮想マシンに配信し、多数の仮想マシンのクローンを作成することができます。
コンテナーディスクは、仮想マシンに割り当てられる DataVolume を使用して永続ボリューム要求 (PVC) にインポートするか、または一時 containerDisk
ボリュームとして仮想マシンに直接割り当てることができます。
7.15.9.1.1. DataVolume の使用によるコンテナーディスクの PVC へのインポート
Containerized Data Importer (CDI) を使用し、DataVolume を使用してコンテナーディスクを PVC にインポートします。次に、DataVolume を永続ストレージの仮想マシンに割り当てることができます。
7.15.9.1.2. コンテナーディスクの containerDisk
ボリュームとしての仮想マシンへの割り当て
containerDisk
ボリュームは一時的なボリュームです。これは、仮想マシンが停止されるか、再起動するか、または削除される際に破棄されます。containerDisk
ボリュームを持つ仮想マシンが起動すると、コンテナーイメージはレジストリーからプルされ、仮想マシンをホストするノードでホストされます。
containerDisk
ボリュームは、CD-ROM などの読み取り専用ファイルシステム用に、または破棄可能な仮想マシン用に使用します。
データはホストノードのローカルストレージに一時的に書き込まれるため、読み取り/書き込みファイルシステムに containerDisk
ボリュームを使用することは推奨されません。これにより、データを移行先ノードに移行する必要があるため、ノードのメンテナーンス時など、仮想マシンのライブマイグレーションが遅くなります。さらに、ノードの電源が切れた場合や、予期せずにシャットダウンする場合にすべてのデータが失われます。
7.15.9.2. 仮想マシン用のコンテナーディスクの準備
仮想マシンイメージでコンテナーディスクをビルドし、これを仮想マシンで使用する前にこれをコンテナーレジストリーにプッシュする必要があります。次に、DataVolume を使用してコンテナーディスクを PVC にインポートし、これを仮想マシンに割り当てるか、またはコンテナーディスクを一時的な containerDisk
ボリュームとして仮想マシンに直接割り当てることができます。
前提条件
-
podman
がインストールされていない場合はインストールすること。 - 仮想マシンイメージは QCOW2 または RAW 形式のいずれかであること。
手順
Dockerfile を作成して、仮想マシンイメージをコンテナーイメージにビルドします。仮想マシンイメージは、UID が
107
の QEMU で所有され、コンテナー内の/disk/
ディレクトリーに置かれる必要があります。次に、/disk/
ディレクトリーのパーミッションは0440
に設定する必要があります。以下の例では、Red Hat Universal Base Image (UBI) を使用して最初の段階でこれらの設定変更を処理し、2 番目の段階で最小の
scratch
イメージを使用して結果を保存します。$ cat > Dockerfile << EOF FROM registry.access.redhat.com/ubi8/ubi:latest AS builder ADD --chown=107:107 <vm_image>.qcow2 /disk/ 1 RUN chmod 0440 /disk/* FROM scratch COPY --from=builder /disk/* /disk/ EOF
- 1
- ここで、<vm_image> は QCOW2 または RAW 形式の仮想マシンイメージです。
リモートの仮想マシンイメージを使用するには、<vm_image>.qcow2
をリモートイメージの完全な URL に置き換えます。
コンテナーをビルドし、これにタグ付けします。
$ podman build -t <registry>/<container_disk_name>:latest .
コンテナーイメージをレジストリーにプッシュします。
$ podman push <registry>/<container_disk_name>:latest
コンテナーレジストリーに TLS がない場合は、コンテナーディスクを永続ストレージにインポートする前に非セキュアなレジストリーとしてこれを追加する必要があります。
7.15.9.3. 非セキュアなレジストリーとして使用するコンテナーレジストリーの TLS の無効化
レジストリーを cdi-insecure-registries
ConfigMap に追加することで、コンテナーレジストリーの TLS(トランスポート層セキュリティー) を無効にできます。
前提条件
-
cluster-admin
ロールを持つユーザーとしてクラスターにログインすること。
手順
レジストリーを
cdi
namespace のcdi-insecure-registries
ConfigMap に追加します。$ oc patch configmap cdi-insecure-registries -n cdi \ --type merge -p '{"data":{"mykey": "<insecure-registry-host>:5000"}}' 1
- 1
<insecure-registry-host>
をレジストリーのホスト名に置き換えます。
7.15.9.4. 次のステップ
- コンテナーディスクを仮想マシンの永続ストレージにインポート します。
- 一時ストレージの containerDisk ボリュームを使用する 仮想マシンを作成 します。
7.15.10. CDI のスクラッチ領域の用意
7.15.10.1. DataVolume について
DataVolume
オブジェクトは、Containerized Data Importer (CDI) プロジェクトで提供されるカスタムリソースです。DataVolume は、基礎となる PersistentVolumeClaim (PVC) に関連付けられるインポート、クローン作成、およびアップロード操作のオーケストレーションを行います。DataVolume は KubeVirt に統合され、仮想マシンが PVC の作成前に起動することを防ぎます。
7.15.10.2. スクラッチ領域について
Containerized Data Importer (CDI) では、仮想マシンイメージのインポートやアップロードなどの、一部の操作を実行するためにスクラッチ領域 (一時ストレージ) が必要になります。このプロセスで、CDI は、宛先 DataVolume (DV) をサポートする PVC のサイズと同じサイズのスクラッチ領域 PVC をプロビジョニングします。スクラッチ領域 PVC は操作の完了または中止後に削除されます。
CDIConfig オブジェクトにより、 scratchSpaceStorageClass
を CDIConfig オブジェクトの spec:
セクションに指定して、スクラッチ領域 PVC をバインドするために使用する StorageClass を定義することができます。
定義された StorageClass がクラスターの StorageClass に一致しない場合、クラスターに定義されたデフォルト StorageClass が使用されます。クラスターで定義されたデフォルトの StorageClass がない場合、元の DV または PVC のプロビジョニングに使用される StorageClass が使用されます。
CDI では、元の DataVolume をサポートする PVC の種類を問わず、file
ボリュームモードが設定されているスクラッチ領域が必要です。元の PVC が block
ボリュームモードでサポートされる場合、file
ボリュームモード PVC をプロビジョニングできる StorageClass を定義する必要があります。
手動プロビジョニング
ストレージクラスがない場合、CDI はイメージのサイズ要件に一致するプロジェクトの PVC を使用します。これらの要件に一致する PVC がない場合、CDI インポート Pod は適切な PVC が利用可能になるまで、またはタイムアウト機能が Pod を強制終了するまで Pending 状態になります。
7.15.10.3. スクラッチ領域を必要とする CDI 操作
Type | 理由 |
---|---|
レジストリーのインポート | CDI はイメージをスクラッチ領域にダウンロードし、イメージファイルを見つけるためにレイヤーを抽出する必要があります。その後、raw ディスクに変換するためにイメージファイルが QEMU-img に渡されます。 |
イメージのアップロード | QEMU-IMG は STDIN の入力を受け入れません。代わりに、アップロードするイメージは、変換のために QEMU-IMG に渡される前にスクラッチ領域に保存されます。 |
アーカイブされたイメージの HTTP インポート | QEMU-IMG は、CDI がサポートするアーカイブ形式の処理方法を認識しません。イメージが QEMU-IMG に渡される前にアーカイブは解除され、スクラッチ領域に保存されます。 |
認証されたイメージの HTTP インポート | QEMU-IMG が認証を適切に処理しません。イメージが QEMU-IMG に渡される前にスクラッチ領域に保存され、認証されます。 |
カスタム証明書の HTTP インポート | QEMU-IMG は HTTPS エンドポイントのカスタム証明書を適切に処理しません。代わりに CDI は、ファイルを QEMU-IMG に渡す前にイメージをスクラッチ領域にダウンロードします。 |
7.15.10.4. CDI 設定での StorageClass の定義
CDI 設定で StorageClass を定義し、CDI 操作のスクラッチ領域を動的にプロビジョニングします。
手順
oc
クライアントを使用してcdiconfig/config
を編集し、spec: scratchSpaceStorageClass
を追加または編集してクラスターの StorageClass に一致させます。$ oc edit cdiconfig/config
API Version: cdi.kubevirt.io/v1alpha1 kind: CDIConfig metadata: name: config ... spec: scratchSpaceStorageClass: "<storage_class>" ...
7.15.10.5. CDI がサポートする操作マトリックス
このマトリックスにはエンドポイントに対してコンテンツタイプのサポートされる CDI 操作が表示されます。これらの操作にはスクラッチ領域が必要です。
コンテンツタイプ | HTTP | HTTPS | HTTP Basic 認証 | レジストリー | アップロード |
---|---|---|---|---|---|
kubevirt (QCOW2) |
✓ QCOW2 |
✓ QCOW2** |
✓ QCOW2 |
✓ QCOW2* |
✓ QCOW2* |
KubeVirt (RAW) |
✓ RAW |
✓ RAW |
✓ RAW |
✓ RAW* |
✓ RAW* |
✓ サポートされる操作
□ サポートされない操作
* スクラッチ領域が必要
**カスタム認証局が必要な場合にスクラッチ領域が必要
追加リソース
- StorageClass およびこれらがクラスターで定義される方法についての詳細は、Dynamic provisioning セクションを参照してください。
7.15.11. 永続ボリュームの再利用
静的にプロビジョニングされた永続ボリューム (PV) を再利用するには、まずボリュームを回収する必要があります。これには、ストレージ設定を再利用できるように PV を削除する必要があります。
7.15.11.1. 静的にプロビジョニングされた永続ボリュームの回収について
永続ボリューム (PV) を回収する場合、PV のバインドを永続ボリューム要求 (PVC) から解除し、PV を削除します。基礎となるストレージによっては、共有ストレージを手動で削除する必要がある場合があります。
次に、PV 設定を再利用し、異なる名前の PV を作成できます。
静的にプロビジョニングされる PV には、回収に Retain
の回収 (reclaim) ポリシーが必要です。これがない場合、PV は PVC が PV からのバインド解除時に failed 状態になります。
Recycle
回収ポリシーは OpenShift Container Platform 4 では非推奨となっています。
7.15.11.2. 静的にプロビジョニングされた永続ボリュームの回収
永続ボリューム要求 (PVC) のバインドを解除し、PV を削除して静的にプロビジョニングされた永続ボリューム (PV) を回収します。共有ストレージを手動で削除する必要がある場合もあります。
静的にプロビジョニングされる PV の回収方法は、基礎となるストレージによって異なります。この手順では、ストレージに応じてカスタマイズする必要がある可能性のある一般的な方法を示します。
手順
PV の回収ポリシーが
Retain
に設定されていることを確認します。PV の回収ポリシーを確認します。
$ oc get pv <pv_name> -o yaml | grep 'persistentVolumeReclaimPolicy'
persistentVolumeReclaimPolicy
がRetain
に設定されていない場合、以下のコマンドで回収ポリシーを編集します。$ oc patch pv <pv_name> -p '{"spec":{"persistentVolumeReclaimPolicy":"Retain"}}'
PV を使用しているリソースがないことを確認します。
$ oc describe pvc <pvc_name> | grep 'Mounted By:'
PVC を使用するリソースをすべて削除してから継続します。
PVC を削除して PV を解放します。
$ oc delete pvc <pvc_name>
オプション: PV 設定を YAML ファイルにエクスポートします。この手順の後半で共有ストレージを手動で削除する場合は、この設定を参照してください。このファイルで
spec
パラメーターをベースとして使用し、PV の回収後に同じストレージ設定で新規 PV を作成することもできます。$ oc get pv <pv_name> -o yaml > <file_name>.yaml
PV を削除します。
$ oc delete pv <pv_name>
オプション: ストレージタイプによっては、共有ストレージフォルダーの内容を削除する必要がある場合があります。
$ rm -rf <path_to_share_storage>
オプション: 削除された PV と同じストレージ設定を使用する PV を作成します。回収された PV 設定をすでにエクスポートしている場合、そのファイルの
spec
パラメーターを新規 PV マニフェストのベースとして使用することができます。注記競合の可能性を回避するには、新規 PV オブジェクトに削除されたものとは異なる名前を割り当てることが推奨されます。
$ oc create -f <new_pv_name>.yaml
追加リソース
- 仮想マシンのローカルストレージの設定
- OpenShift Container Platform Storage ドキュメントには、永続ストレージ についての詳細情報が記載されています。
7.15.12. DataVolume の削除
oc
コマンドラインインターフェイスを使用して、DataVolume を手動で削除できます。
仮想マシンを削除する際に、これが使用する DataVolume は自動的に削除されます。
7.15.12.1. DataVolume について
DataVolume
オブジェクトは、Containerized Data Importer (CDI) プロジェクトで提供されるカスタムリソースです。DataVolume は、基礎となる PersistentVolumeClaim (PVC) に関連付けられるインポート、クローン作成、およびアップロード操作のオーケストレーションを行います。DataVolume は KubeVirt に統合され、仮想マシンが PVC の作成前に起動することを防ぎます。
7.15.12.2. すべての DataVolume の一覧表示
oc
コマンドラインインターフェイスを使用して、クラスターの DataVolume を一覧表示できます。
手順
以下のコマンドを実行して、DataVolume を一覧表示します。
$ oc get dvs
7.15.12.3. DataVolume の削除
oc
コマンドラインインターフェイス (CLI) を使用して DataVolume を削除できます。
前提条件
- 削除する必要のある DataVolume の名前を特定します。
手順
以下のコマンドを実行し、DataVolume を削除します。
$ oc delete dv <datavolume_name>
注記このコマンドは、現在のプロジェクトに存在するオブジェクトのみを削除します。削除する必要のあるオブジェクトが別のプロジェクトまたは namespace にある場合、
-n <project_name>
オプションを指定します。
第8章 仮想マシンテンプレート
8.1. 仮想マシンテンプレートの作成
仮想マシンテンプレートを使用して、同様の設定を持つ複数の仮想マシンを作成することができます。テンプレートの作成後、仮想マシンの作成時にテンプレートを参照します。
8.1.1. Web コンソールでのインタラクティブなウィザードを使用した仮想マシンテンプレートの作成
Web コンソールは、General、 Networking、Storage、Advanced、および Review ステップに移動し、仮想マシンテンプレートの作成プロセスを単純化するインタラクティブなウィザードを特長としています。すべての必須フィールドには *
のマークが付けられます。ウィザードは必須フィールドへの値の入力が完了するまで次のステップに移動することを防ぎます。
手順
- OpenShift Virtualization コンソールのサイドメニューから Workloads → Virtualization をクリックします。
- Virtual Machine Templates タブをクリックします。
- Create Template をクリックし、New with Wizard を選択します。
- General ステップで必要なすべてのフィールドに入力します。
Next をクリックして Networking 画面に進みます。デフォルトで
nic0
という名前の NIC が割り当てられます。- オプション: Add Network Interface をクリックし、追加の NIC を作成します。
-
オプション: すべての NIC の削除は、Options メニュー
をクリックし、Delete を選択して実行できます。テンプレートから作成される仮想マシンには、割り当てられている NIC は不要です。NIC は仮想マシンの作成後に作成できます。
Next をクリックして Storage 画面に進みます。
- オプション: Add Disk をクリックして追加のディスクを作成します。
- オプション: ディスクをクリックして選択可能なフィールドを変更します。✓ ボタンをクリックして変更を保存します。
オプション: Disk をクリックし、Select Storage の一覧から利用可能なディスクを選択します。
注記URL または Container のいずれかが General ステップで Source として選択される場合、
rootdisk
ディスクが作成され、Bootable Disk として仮想マシンに割り当てられます。rootdisk
を変更できますが、これを削除することはできません。Bootable Disk は、仮想マシンにディスクが割り当てられていない場合、PXE ソースからプロビジョニングされる仮想マシンには不要です。1 つ以上のディスクが仮想マシンに割り当てられている場合、Bootable Disk を 1 つを選択する必要があります。
Create Virtual Machine Template > をクリックします。Results 画面には、仮想マシンテンプレートの JSON 設定ファイルが表示されます。
テンプレートは Virtual Machine Templates タブに一覧表示されます。
8.1.2. 仮想マシンテンプレートのインタラクティブなウィザードのフィールド
以下の表は、Create Virtual Machine Template のインタラクティブなウィザードの Basic Settings、Networking、および Storage ペインのフィールドを説明しています。
8.1.2.1. 仮想マシンテンプレートウィザードのフィールド
名前 | パラメーター | 説明 |
---|---|---|
ソース | PXE | PXE メニューから仮想マシンをプロビジョニングします。クラスターに PXE 対応の NIC が必要になります。 |
URL | HTTP または S3 エンドポイントで利用できるイメージから仮想マシンをプロビジョニングします。 | |
コンテナー |
クラスターからアクセスできるレジストリーの起動可能なオペレーティングシステムコンテナーから仮想マシンをプロビジョニングします。例: | |
Disk | ディスクから仮想マシンをプロビジョニングします。 | |
Operating System | 仮想マシン用に選択される主なオペレーティングシステム。 | |
Flavor | small、medium、large、tiny、Custom | 仮想マシンに割り当てられる CPU およびメモリーの量を決定するプリセット。Flavor に設定される Preset はオペレーティングシステムによって決まります。 |
Memory | 仮想マシンに割り当てられるメモリーのサイズ (GiB 単位)。 | |
CPU | 仮想マシンに割り当てられる CPU の量。 | |
Workload Profile | High Performance | 高パフォーマンスのワークロードに対して最適化された仮想マシン設定。 |
Server | サーバーワークロードの実行に最適化されたプロファイル。 | |
Desktop | デスクトップで使用するための仮想マシン設定。 | |
名前 |
この名前には、小文字 ( | |
説明 | オプションの説明フィールド。 |
8.1.2.2. Cloud-init フィールド
名前 | 説明 |
---|---|
Hostname | 仮想マシンの特定のホスト名を設定します。 |
Authenticated SSH Keys | 仮想マシンの ~/.ssh/authorized_keys にコピーされるユーザーの公開鍵。 |
カスタムスクリプト | 他のオプションを、カスタム cloud-init スクリプトを貼り付けるフィールドに置き換えます。 |
8.1.2.3. ネットワークフィールド
名前 | 説明 |
---|---|
名前 | ネットワークインターフェイスの名前。 |
Model | ネットワークインターフェイスカードのモデルを示します。サポートされる値は、e1000、 e1000e、ne2k_pci、pcnet, rtl8139、および virtIO です。 |
Network | 利用可能な NetworkAttachmentDefinition オブジェクトの一覧。 |
Type |
利用可能なバインディングメソッドの一覧。デフォルトの Pod ネットワークについては、 |
MAC Address | ネットワークインターフェイスの MAC アドレス。MAC アドレスが指定されていない場合、セッションの一時アドレスが生成されます。 |
8.1.2.4. ストレージフィールド
名前 | 説明 |
---|---|
ソース | 仮想マシンの空のディスクを選択するか、または URL、Container、Attach Cloned Disk、または Attach Disk などの選択可能なオプションから選択します。既存ディスクを選択し、これを仮想マシンに割り当てるには、利用可能な PersistentVolumeClaim (PVC) の一覧から Attach Cloned Disk または Attach Disk を選択します。 |
名前 |
ディスクの名前。この名前には、小文字 ( |
Size (GiB) | ディスクのサイズ (GiB)。 |
Interface | ディスクデバイスのタイプ。サポートされるインターフェイスは、virtIO、SATA、および SCSI です。 |
ストレージクラス |
ディスクの作成に使用される |
Advanced → Volume Mode | |
永続ボリュームがフォーマットされたファイルシステムまたは raw ブロック状態を使用するかどうかを定義します。デフォルトは Filesystem です。 | Advanced → Access Mode |
永続ボリュームのアクセスモード。サポートされるアクセスモードは、Single User (RWO)、Shared Access (RWX)、および Read Only (ROX) です。 |
ストレージの詳細設定
以下のストレージの詳細設定は、Blank、Import via URLURL、および Clone existing PVC ディスクで利用できます。これらのパラメーターはオプションです。これらのパラメーターを指定しない場合、システムは kubevirt-storage-class-defaults
設定マップのデフォルト値を使用します。
名前 | パラメーター | 説明 |
---|---|---|
ボリュームモード | Filesystem | ファイルシステムベースのボリュームで仮想ディスクを保存します。 |
Block |
ブロックボリュームで仮想ディスクを直接保存します。基礎となるストレージがサポートしている場合は、 | |
アクセスモード | Single User (RWO) | ディスクは単一ノードで読み取り/書き込みとしてマウントできます。 |
Shared Access (RWX) | ディスクは数多くのノードで読み取り/書き込みとしてマウントできます。 注記 これは、ノード間の仮想マシンのライブマイグレーションなどの、一部の機能で必要になります。 | |
Read Only (ROX) | ディスクは数多くのノードで読み取り専用としてマウントできます。 |
8.2. 仮想マシンテンプレートの編集
仮想マシンテンプレートは、Web コンソールで YAML エディターの詳細設定を編集するか、または Virtual Machine Template Overview 画面のパラメーターのサブセットを編集して更新することができます。
8.2.1. Web コンソールでの仮想マシンテンプレートの編集
Web コンソールの Virtual Machine Template Overview 画面の仮想マシンテンプレートの選択する値 (select values) は、関連するフィールドの横にある鉛筆アイコンをクリックして編集します。他の値は、CLI を使用して編集できます。
手順
- サイドメニューから Workloads → Virtualization をクリックします。
- Virtual Machine Templates タブをクリックします。
- 仮想マシンテンプレートを選択して、Virtual Machine Template Overview 画面を開きます。
- Details タブをクリックします。
- 鉛筆アイコンをクリックして、フィールドを編集可能にします。
- 関連する変更を加え、Save をクリックします。
仮想マシンテンプレートの編集は、そのテンプレートですでに作成された仮想マシンには影響を与えません。
8.2.2. Web コンソールでの仮想マシンテンプレート YAML 設定の編集
Web コンソールで仮想マシンテンプレートの YAML 設定を編集できます。
すべてのパラメーターが変更可能である訳ではありません。無効な設定で Save をクリックすると、エラーメッセージで変更できないパラメーターが示唆されます。
編集中に YAML 画面から離れると、設定に対して加えた変更が取り消されます。
手順
- OpenShift Virtualization コンソールのサイドメニューから Workloads → Virtualization をクリックします。
- Virtual Machine Templates タブをクリックします。
- テンプレートを選択します。
- YAML タブをクリックして編集可能な設定を表示します。
- ファイルを編集し、Save をクリックします。
オブジェクトの更新されたバージョン番号を含む、変更が正常に行われたことを示す確認メッセージが表示されます。
8.2.3. 仮想マシンテンプレートへの仮想ディスクの追加
以下の手順を使用して、仮想ディスクを仮想マシンテンプレートに追加します。
手順
- Virtual Machine Templates タブで、仮想マシンテンプレートを選択します。
- Disks タブを選択します。
- Add Disks をクリックして、 Add Disk ウィンドウを開きます。
Add Disk ウィンドウで、Source、Name、 Size、Interface、および Storage Class を指定します。
-
オプション: Advanced 一覧で、仮想ディスクの Volume Mode および Access Mode を指定します。これらのパラメーターを指定しない場合、システムは
kubevirt-storage-class-defaults
ConfigMap のデフォルト値を使用します。
-
オプション: Advanced 一覧で、仮想ディスクの Volume Mode および Access Mode を指定します。これらのパラメーターを指定しない場合、システムは
- ドロップダウンリストおよびチェックボックスを使用して、ディスク設定を編集します。
- OK をクリックします。
8.2.4. ネットワークインターフェイスの仮想マシンテンプレートへの追加
以下の手順を使用して、ネットワークインターフェイスを仮想マシンテンプレートに追加します。
手順
- Virtual Machine Templates タブで、仮想マシンテンプレートを選択します。
- Network Interfaces タブを選択します。
- Add Network Interface をクリックします。
- Add Network Interface ウィンドウで、ネットワークインターフェイスの Name、Model、Network、 Type、および MAC Address を指定します。
- Add をクリックしてネットワークインターフェイスを追加します。
- 仮想マシンを再起動して、アクセスを有効にします。
- ドロップダウンリストとチェックボックスを編集して、ネットワークインターフェイスを設定します。
- Save Changes をクリックします。
- OK をクリックします。
新規のネットワークインターフェイスは、ユーザーが再起動するまで Create Network Interface 一覧の上部に表示されます。
新規のネットワークインターフェイスには、仮想マシンを再起動するまで Pending VM restart
のリンク状態が表示されます。Link State (リンク状態) にカーソルを合わせて詳細情報を表示します。
ネットワークインターフェイスカードが仮想マシンで定義され、ネットワークに接続されている場合は、Link State はデフォルトで Up に設定されます。
8.2.5. 仮想マシンテンプレートの CD-ROM の編集
以下の手順を使用して、仮想マシンの CD-ROM を設定します。
手順
- Virtual Machine Templates タブで、仮想マシンテンプレートを選択します。
- Overview タブを選択します。
CD-ROM 設定を追加または編集するには、CD-ROMs ラベルの右側にある鉛筆アイコンをクリックします。Edit CD-ROM ウィンドウが開きます。
- CD-ROM が編集できない場合、以下のメッセージが表示されます: The virtual machine doesn't have any CD-ROMs attached.
- 利用可能な CD-ROM がある場合は、- をクリックして CD-ROM を削除できます。
Edit CD-ROM ウィンドウで、以下を実行します。
- Media Type のドロップダウンリストから CD-ROM 設定のタイプを選択します。CD-ROM 設定タイプは Container、URL、および Persistent Volume Claim です。
- それぞれの Type に必要な情報を入力します。
- すべての CD-ROM が追加されたら、Save をクリックします。
8.3. 仮想マシンテンプレートの専用リソースの有効化
パフォーマンスを向上させるために、仮想マシンには CPU などのノードの専用リソースを持たせることができます。
8.3.1. 専用リソースについて
仮想マシンの専用リソースを有効にする場合、仮想マシンのワークロードは他のプロセスで使用されない CPU でスケジュールされます。専用リソースを使用することで、仮想マシンのパフォーマンスとレイテンシーの予測の精度を向上させることができます。
8.3.2. 前提条件
-
CPU マネージャー はノードに設定される必要があります。仮想マシンのワークロードをスケジュールする前に、ノードに
cpumanager
=true
ラベルが設定されていることを確認します。
8.3.3. 仮想マシンテンプレートの専用リソースの有効化
Web コンソールの Virtual Machine Template Overview ページで仮想マシンテンプレートの専用リソースを有効にすることができます。
手順
- サイドメニューから Workloads → Virtual Machine Templates をクリックします。
- 仮想マシンテンプレートを選択して、Virtual Machine Template Overview ページを開きます。
- Details タブをクリックします。
- Dedicated Resources フィールドの右側にある鉛筆アイコンをクリックして、Dedicated Resources ウィンドウを開きます。
- Schedule this workload with dedicated resources (guaranteed policy) を選択します。
- Save をクリックします。
8.4. 仮想マシンテンプレートの削除
Web コンソールで仮想マシンテンプレートを削除できます。
8.4.1. Web コンソールでの仮想マシンテンプレートの削除
仮想マシンテンプレートを削除すると、仮想マシンはクラスターから永続的に削除されます。
手順
- OpenShift Virtualization コンソールのサイドメニューから Workloads → Virtualization をクリックします。
- Virtual Machine Templates タブをクリックします。
このペインから仮想マシンテンプレートを削除できます。 これにより、1 つのペインで複数のマシンに対してアクションを実行することがより容易になります。 または、Virtual Machine Template Details ペインから仮想マシンテンプレートを削除することもできます。 この場合、選択されたテンプレートの総合的な詳細情報を確認できます。
-
削除するテンプレートの Options メニュー
をクリックし、Delete Template を選択します。
- テンプレート名をクリックして Virtual Machine Template Details ペインを開き、Actions → Delete Template をクリックします。
-
削除するテンプレートの Options メニュー
- 確認のポップアップウィンドウで、Delete をクリックし、テンプレートを永続的に削除します。
第9章 ライブマイグレーション
9.1. 仮想マシンのライブマイグレーション
9.1.1. 前提条件
- LiveMigration を使用する前に、仮想マシンで使用されるストレージクラスに、共有 ReadWriteMany (RWX) アクセスモードを持つ PersistentVolumeClaim (PVC) があることを確認します。DataVolume のストレージのデフォルト について参照し、ストレージ設定が正しいことを確認します。
9.1.2. ライブマイグレーションについて
ライブマイグレーションは、仮想ワークロードまたはアクセスに支障を与えることなく、実行中の仮想マシンインスタンスをクラスター内の別のノードに移行するプロセスです。これは、他のノードに移行する仮想マシンインスタンスを選択する場合は手動プロセスで実行でき、仮想マシンインスタンスに LiveMigrate
エビクションストラテジーがあり、これが実行されるノードがメンテナーンス状態の場合には自動プロセスで実行できます。
仮想マシンでは、共有 ReadWriteMany (RWX) アクセスモードを持つ PersistentVolumeClaim (PVC) のライブマイグレーションが必要です。
9.1.3. LiveMigration のアクセスモードの更新
LiveMigration が適切に機能するには、ReadWriteMany (RWX) アクセスモードを使用する必要があります。必要に応じて、以下の手順でアクセスモードを更新します。
手順
RWX アクセスモードを設定するには、以下の
oc patch
コマンドを実行します。$ oc patch -n openshift-cnv \ cm kubevirt-storage-class-defaults \ -p '{"data":{"'$<STORAGE_CLASS>'.accessMode":"ReadWriteMany"}}'
9.2. ライブマイグレーションの制限およびタイムアウト
ライブマイグレーションの制限およびタイムアウトは、移行プロセスがクラスターに負担をかけないようにするために適用されます。kubevirt-config
設定ファイルを編集してこれらの設定を行います。
9.2.1. ライブマイグレーションの制限およびタイムアウトの設定
更新された key:value フィールドを openshift-cnv
namespace にある kubevirt-config
設定ファイルに追加することによってライブマイグレーションの制限およびタイムアウトを設定します。
手順
kubevirt-config
設定ファイルを編集し、必要なライブマイグレーションパラメーターを追加します。以下の例は、デフォルト値を示しています。$ oc edit configmap kubevirt-config -n openshift-cnv
apiVersion: v1 kind: ConfigMap metadata: name: kubevirt-config namespace: kubevirt labels: kubevirt.io: "" data: feature-gates: "LiveMigration" migrations: |- parallelMigrationsPerCluster: 5 parallelOutboundMigrationsPerNode: 2 bandwidthPerMigration: 64Mi completionTimeoutPerGiB: 800 progressTimeout: 150
9.2.2. クラスター全体のライブマイグレーションの制限およびタイムアウト
パラメーター | 説明 | デフォルト |
---|---|---|
| クラスターで並行して実行される移行の数。 | 5 |
| ノードごとのアウトバウンドの移行の最大数。 | 2 |
| それぞれの移行の帯域幅 (MiB/s)。 | 64Mi |
|
マイグレーションが (メモリー GiB あたりの秒単位の) この時間内に終了しなかった場合、マイグレーションは取り消されます。たとえば、6GiB メモリーを持つ仮想マシンインスタンスは、4800 秒内にマイグレーションを完了しない場合にタイムアウトします。 | 800 |
| マイグレーションは、メモリーコピーの進展が (秒単位の) この時間内に見られない場合に取り消されます。 | 150 |
9.3. 仮想マシンインスタンスの別のノードへの移行
Web コンソールまたは CLI のいずれかで仮想マシンインスタンスのライブマイグレーションを手動で開始します。
9.3.1. Web コンソールでの仮想マシンインスタンスのライブマイグレーションの開始
実行中の仮想マシンインスタンスをクラスター内の別のノードに移行します。
Migrate Virtual Machine アクションはすべてのユーザーに対して表示されますが、仮想マシンの移行を開始できるのは管理者ユーザーのみとなります。
手順
- OpenShift Virtualization コンソールのサイドメニューから Workloads → Virtualization をクリックします。
- Virtual Machines タブをクリックします。
この画面から移行を開始できます。 これにより、1 つの画面で複数のマシンに対してアクションを実行することがより容易になります。 または、Virtual Machine Overview 画面から仮想マシンを停止することもできます。 この場合、選択された仮想マシンの総合的な詳細情報を確認できます。
-
仮想マシンの末尾の Options メニュー
をクリックし、Migrate Virtual Machine を選択します。
- 仮想マシン名をクリックし、Virtual Machine Overview 画面を開き、Actions → Migrate Virtual Machine をクリックします。
-
仮想マシンの末尾の Options メニュー
- Migrate をクリックして、仮想マシンを別のノードに移行します。
9.3.2. CLI での仮想マシンインスタンスのライブマイグレーションの開始
クラスターに VirtualMachineInstanceMigration
オブジェクトを作成し、仮想マシンインスタンスの名前を参照して、実行中の仮想マシンインスタンスのライブマイグレーションを開始します。
手順
移行する仮想マシンインスタンスの
VirtualMachineInstanceMigration
設定ファイルを作成します。vmi-migrate.yaml
はこの例になります。apiVersion: kubevirt.io/v1alpha3 kind: VirtualMachineInstanceMigration metadata: name: migration-job spec: vmiName: vmi-fedora
以下のコマンドを実行して、クラスター内にオブジェクトを作成します。
$ oc create -f vmi-migrate.yaml
VirtualMachineInstanceMigration
オブジェクトは、仮想マシンインスタンスのライブマイグレーションをトリガーします。このオブジェクトは、手動で削除されない場合、仮想マシンインスタンスが実行中である限りクラスターに存在します。
9.4. 仮想マシンインスタンスのライブマイグレーションのモニター
Web コンソールまたは CLI のいずれかで仮想マシンインスタンスのライブマイグレーションの進捗をモニターできます。
9.4.1. Web コンソールでの仮想マシンインスタンスのライブマイグレーションのモニター
移行期間中、仮想マシンのステータスは Migrating になります。このステータスは Virtual Machines タブに表示されるか、または移行中の仮想マシンの Virtual Machine Overview 画面に表示されます。
手順
- OpenShift Virtualization コンソールのサイドメニューから Workloads → Virtualization をクリックします。
- Virtual Machines タブをクリックします。
- 仮想マシンを選択して、Virtual Machine Overview 画面を開きます。
9.4.2. CLI での仮想マシンインスタンスのライブマイグレーションのモニター
仮想マシンの移行のステータスは、VirtualMachineInstance
設定の Status
コンポーネントに保存されます。
手順
移行中の仮想マシンインスタンスで
oc describe
コマンドを使用します。$ oc describe vmi vmi-fedora
出力例
... Status: Conditions: Last Probe Time: <nil> Last Transition Time: <nil> Status: True Type: LiveMigratable Migration Method: LiveMigration Migration State: Completed: true End Timestamp: 2018-12-24T06:19:42Z Migration UID: d78c8962-0743-11e9-a540-fa163e0c69f1 Source Node: node2.example.com Start Timestamp: 2018-12-24T06:19:35Z Target Node: node1.example.com Target Node Address: 10.9.0.18:43891 Target Node Domain Detected: true
9.5. 仮想マシンインスタンスのライブマイグレーションの取り消し
仮想マシンインスタンスを元のノードに残すためにライブマイグレーションを取り消すことができます。
Web コンソールまたは CLI のいずれかでライブマイグレーションを取り消します。
9.5.1. Web コンソールでの仮想マシンインスタンスのライブマイグレーションの取り消し
Virtualization → Virtual Machines タブの各仮想マシンにある Options メニュー
を使用して仮想マシンインスタンスのライブマイグレーションを取り消すか、または Virtual Machine Overview 画面のすべてのタブで利用可能な Actions メニューからこれを取り消すことができます。
手順
- OpenShift Virtualization コンソールのサイドメニューから Workloads → Virtualization をクリックします。
- Virtual Machines タブをクリックします。
この画面から移行を取り消すことができます。 これにより、複数のマシンに対してアクションを実行することがより容易になります。 または、Virtual Machine Overview 画面からこれを実行できます。この場合、選択された仮想マシンの総合的な詳細情報を確認できます。
-
仮想マシンの末尾の Options メニュー
をクリックし、Cancel Virtual Machine Migration を選択します。
- 仮想マシン名を選択して Virtual Machine Overview 画面を開き、Actions → Cancel Virtual Machine Migration をクリックします。
-
仮想マシンの末尾の Options メニュー
- Cancel Migration をクリックして仮想マシンのライブマイグレーションを取り消します。
9.5.2. CLI での仮想マシンインスタンスのライブマイグレーションの取り消し
移行に関連付けられた VirtualMachineInstanceMigration
オブジェクトを削除して、仮想マシンインスタンスのライブマイグレーションを取り消します。
手順
ライブマイグレーションをトリガーした
VirtualMachineInstanceMigration
オブジェクトを削除します。 この例では、migration-job
が使用されています。$ oc delete vmim migration-job
9.6. 仮想マシンのエビクションストラテジーの設定
LiveMigrate
エビクションストラテジーは、ノードがメンテナーンス状態になるか、ドレイン (解放) される場合に仮想マシンインスタンスが中断されないようにします。このエビクションストラテジーを持つ仮想マシンインスタンスのライブマイグレーションが別のノードに対して行われます。
9.6.1. LiveMigration エビクションストラテジーでのカスタム仮想マシンの設定
LiveMigration
エビクションストラテジーはカスタム仮想マシンでのみ設定する必要があります。共通テンプレートには、デフォルトでこのエビクションストラテジーが設定されています。
手順
evictionStrategy: LiveMigrate
オプションを、仮想マシン設定ファイルのspec
セクションに追加します。この例では、oc edit
を使用してVirtualMachine
設定ファイルの関連するスニペットを更新します。$ oc edit vm <custom-vm> -n <my-namespace>
apiVersion: kubevirt.io/v1alpha3 kind: VirtualMachine metadata: name: custom-vm spec: terminationGracePeriodSeconds: 30 evictionStrategy: LiveMigrate domain: resources: requests: ...
更新を有効にするために仮想マシンを再起動します。
$ virtctl restart <custom-vm> -n <my-namespace>
第10章 ノードのメンテナーンス
10.1. TLS 証明書の自動更新
OpenShift Virtualization コンポーネントの TLS 証明書はすべて更新され、自動的にローテーションされます。手動で更新する必要はありません。
10.1.1. TLS 証明書の自動更新
TLS 証明書は自動的に削除され、以下のスケジュールに従って置き換えられます。
- KubeVirt 証明書は毎日更新されます。
- Containerized Data Importer controller (CDI) 証明書は、15 日ごとに更新されます。
- MAC プール証明書は毎年更新されます。
TLS 証明書の自動ローテーションはいずれの操作も中断しません。たとえば、以下の操作は中断せずに引き続き機能します。
- 移行
- イメージのアップロード
- VNC およびコンソールの接続
10.2. ノードのメンテナーンスモード
10.2.1. ノードのメンテナーンスモードについて
ノードがメンテナーンス状態になると、ノードにはスケジュール対象外のマークが付けられ、ノードからすべての仮想マシンおよび Pod がドレイン (解放) されます。LiveMigrate
エビクションストラテジーを持つ仮想マシンインスタンスのライブマイグレーションは、サービスが失われることなく実行されます。このエビクションストラテジーはデフォルトで共通テンプレートから作成される仮想マシンで設定されますが、カスタム仮想マシンの場合には手動で設定される必要があります。
エビクションストラテジーのない仮想マシンインスタンスは、ノードで削除され、別のノードで再作成されます。
仮想マシンでは、共有 ReadWriteMany (RWX) アクセスモードを持つ PersistentVolumeClaim (PVC) のライブマイグレーションが必要です。
10.3. ノードのメンテナーンスモードへの設定
10.3.1. ノードのメンテナーンスモードについて
ノードがメンテナーンス状態になると、ノードにはスケジュール対象外のマークが付けられ、ノードからすべての仮想マシンおよび Pod がドレイン (解放) されます。LiveMigrate
エビクションストラテジーを持つ仮想マシンインスタンスのライブマイグレーションは、サービスが失われることなく実行されます。このエビクションストラテジーはデフォルトで共通テンプレートから作成される仮想マシンで設定されますが、カスタム仮想マシンの場合には手動で設定される必要があります。
エビクションストラテジーのない仮想マシンインスタンスは、ノードで削除され、別のノードで再作成されます。
仮想マシンでは、共有 ReadWriteMany (RWX) アクセスモードを持つ PersistentVolumeClaim (PVC) のライブマイグレーションが必要です。
Web コンソールまたは CLI のいずれかでノードをメンテナーンス状態にします。
10.3.2. Web コンソールでのノードのメンテナーンスモードへの設定
Compute → Nodes 一覧で各ノードにある Options メニュー
を使用するか、または Node Details 画面の Actions コントロールを使用してノードをメンテナーンスモードに設定します。
手順
- OpenShift Virtualization コンソールで、 Compute → Nodes をクリックします。
この画面からノードをメンテナーンスモードに設定できます。 これにより、1 つの画面で複数のノードに対してアクションを実行することがより容易になります。 または、Node Details 画面からノードをメンテナーンスモードに設定することもできます。 この場合、選択されたノードの総合的な詳細情報を確認できます。
-
ノードの末尾の Options メニュー
をクリックし、Start Maintenance を選択します。
- ノード名をクリックし、Node Details 画面を開いて Actions → Stat Maintenance をクリックします。
-
ノードの末尾の Options メニュー
- 確認ウィンドウで Start Maintenance をクリックします。
ノードは liveMigration
エビクションストラテジーを持つ仮想マシンインスタンスのライブマイグレーションを行い、このノードはスケジュール対象外となります。このノードの他のすべての Pod および仮想マシンは削除され、別のノードで再作成されます。
10.3.3. CLI でのノードのメンテナーンスモードへの設定
ノード名、およびこれをメンテナーンスモードに設定する理由を参照する NodeMaintenance
カスタムリソース (CR) オブジェクトを作成し、ノードをメンテナーンスモードに設定します。
手順
ノードメンテナーンス CR 設定を作成します。この例では、
node02-maintenance.yaml
という CR を使用します。apiVersion: nodemaintenance.kubevirt.io/v1beta1 kind: NodeMaintenance metadata: name: node02-maintenance spec: nodeName: node02 reason: "Replacing node02"
NodeMaintenance
オブジェクトをクラスターに作成します。$ oc apply -f <node02-maintenance.yaml>
ノードは liveMigration
エビクションストラテジーを持つ仮想マシンインスタンスのライブマイグレーションを実行し、これがスケジュール対象外になるようにノードにテイントを設定します。このノードの他のすべての Pod および仮想マシンは削除され、別のノードで再作成されます。
追加リソース:
10.4. メンテナーンスモードからのノードの再開
ノードを再開することにより、ノードをメンテナーンスモードから切り替え、再度スケジュール可能な状態にします。
Web コンソールまたは CLI のいずれかでノードをメンテナーンスモードから再開します。
10.4.1. Web コンソールでのメンテナーンスモードからのノードの再開
Options メニュー
(Compute → Nodes 一覧の各ノードにある) を使用するか、または Node Details 画面の Actions コントロールを使用してノードをメンテナーンスモードから再開します。
手順
- OpenShift Virtualization コンソールで、 Compute → Nodes をクリックします。
この画面からノードを再開できます。 これにより、1 つの画面で複数のノードに対してアクションを実行することがより容易になります。 または、Node Details 画面からノードを再開することもできます。 この場合、選択されたノードの総合的な詳細情報を確認できます。
-
ノードの末尾の Options メニュー
をクリックし、Stop Maintenance を選択します。
- ノード名をクリックし、Node Details 画面を開いて Actions → Stop Maintenance をクリックします。
-
ノードの末尾の Options メニュー
- 確認ウィンドウで Stop Maintenance をクリックします。
ノードはスケジュール可能な状態になりますが、メンテナーンス前にノード上で実行されていた仮想マシンインスタンスはこのノードに自動的に戻されません。
10.4.2. CLI でのメンテナーンスモードからのノードの再開
ノードの NodeMaintenance
オブジェクトを削除することによって、メンテナーンスモードからノードを再開し、これを再度スケジュール可能な状態にします。
手順
NodeMaintenance
オブジェクトを見つけます。$ oc get nodemaintenance
オプション:
NodeMaintenance
オブジェクトを検査し、これが正しいノードに関連付けられていることを確認します。$ oc describe nodemaintenance <node02-maintenance>
出力例
Name: node02-maintenance Namespace: Labels: Annotations: API Version: nodemaintenance.kubevirt.io/v1beta1 Kind: NodeMaintenance ... Spec: Node Name: node02 Reason: Replacing node02
NodeMaintenance
オブジェクトを削除します。$ oc delete nodemaintenance <node02-maintenance>
第11章 ノードのネットワーク
11.1. ノードのネットワーク状態の確認
ノードのネットワーク状態は、クラスター内のすべてのノードのネットワーク設定です。
11.1.1. nmstate について
OpenShift Virtualization は nmstate
を使用してノードネットワークの状態を報告し、設定します。これにより、単一の設定マニフェストをクラスターに適用して、すべてのノードに Linux ブリッジを作成するなどして、ネットワークポリシーの設定を変更することができます。
ノードのネットワークは、以下のオブジェクトによって監視され更新されます。
NodeNetworkState
- そのノード上のネットワークの状態を報告します。
NodeNetworkConfigurationPolicy
-
ノードで要求されるネットワーク設定について説明します。
NodeNetworkConfigurationPolicy
マニフェストをクラスターに適用して、インターフェイスの追加および削除など、ノードネットワーク設定を更新します。 NodeNetworkConfigurationEnactment
- 各ノードに制定されたネットワークポリシーを報告します。
OpenShift Virtualization は以下の nmstate インターフェイスタイプの使用をサポートします。
- Linux Bridge
- VLAN
- Bond
- イーサネット
11.1.2. ノードのネットワーク状態の表示
NodeNetworkState
オブジェクトはクラスター内のすべてのノードにあります。このオブジェクトは定期的に更新され、ノードのネットワークの状態を取得します。
手順
クラスターのすべての
NodeNetworkState
オブジェクトを一覧表示します。$ oc get nns
NodeNetworkState
を検査して、そのノードにネットワークを表示します。この例の出力は、明確にするために編集されています。$ oc get nns node01 -o yaml
出力例
apiVersion: nmstate.io/v1alpha1 kind: NodeNetworkState metadata: name: node01 1 status: currentState: 2 dns-resolver: ... interfaces: ... route-rules: ... routes: ... lastSuccessfulUpdateTime: "2020-01-31T12:14:00Z" 3
11.2. ノードのネットワーク設定の更新
NodeNetworkConfigurationPolicy
マニフェストをクラスターに適用して、ノードからのインターフェイスの追加または削除など、ノードネットワーク設定を更新できます。
11.2.1. nmstate について
OpenShift Virtualization は nmstate
を使用してノードネットワークの状態を報告し、設定します。これにより、単一の設定マニフェストをクラスターに適用して、すべてのノードに Linux ブリッジを作成するなどして、ネットワークポリシーの設定を変更することができます。
ノードのネットワークは、以下のオブジェクトによって監視され更新されます。
NodeNetworkState
- そのノード上のネットワークの状態を報告します。
NodeNetworkConfigurationPolicy
-
ノードで要求されるネットワーク設定について説明します。
NodeNetworkConfigurationPolicy
マニフェストをクラスターに適用して、インターフェイスの追加および削除など、ノードネットワーク設定を更新します。 NodeNetworkConfigurationEnactment
- 各ノードに制定されたネットワークポリシーを報告します。
OpenShift Virtualization は以下の nmstate インターフェイスタイプの使用をサポートします。
- Linux Bridge
- VLAN
- Bond
- イーサネット
11.2.2. ノード上でのインターフェイスの作成
NodeNetworkConfigurationPolicy
マニフェストをクラスターに適用してクラスター内のノード上にインターフェイスを作成します。マニフェストには、インターフェイスの要求された設定の詳細が含まれます。
デフォルトでは、マニフェストはクラスター内のすべてのノードに適用されます。インターフェイスを特定ノードに追加するには、ノードセレクターの spec: nodeSelector
パラメーターおよび適切な <key>:<value>
を追加します。
手順
NodeNetworkConfigurationPolicy
マニフェストを作成します。以下の例は、すべてのワーカーノードで Linux ブリッジを設定します。apiVersion: nmstate.io/v1alpha1 kind: NodeNetworkConfigurationPolicy metadata: name: <br1-eth1-policy> 1 spec: nodeSelector: 2 node-role.kubernetes.io/worker: "" 3 desiredState: interfaces: - name: br1 description: Linux bridge with eth1 as a port 4 type: linux-bridge state: up ipv4: dhcp: true enabled: true bridge: options: stp: enabled: false port: - name: eth1
Polilcy を作成します。
$ oc apply -f <br1-eth1-policy.yaml> 1
- 1
- Policy マニフェストのファイル名。
追加リソース
11.2.3. ノード上での Policy 更新の確認
NodeNetworkConfigurationPolicy
マニフェストは、クラスターのノードについて要求されるネットワーク設定を記述します。Policy オブジェクトには、要求されたネットワーク設定と、クラスター全体での Policy の実行ステータスが含まれます。
Policy を適用する際に、NodeNetworkConfigurationEnactment
がクラスター内のすべてのノードについて作成されます。Enactment は、そのノードでの Policy の実行ステータスを表す読み取り専用オブジェクトです。Policy がノードに適用されない場合、そのノードの Enactment にはトラブルシューティングのためのトレースバックが含まれます。
手順
Policy がクラスターに適用されていることを確認するには、Policy とそのステータスを一覧表示します。
$ oc get nncp
オプション: ポリシーの設定に想定されている以上の時間がかかる場合は、特定のポリシーの要求される状態とステータスの状態を検査できます。
$ oc get nncp <policy> -o yaml
オプション: ポリシーのすべてのノード上での設定に想定されている以上の時間がかかる場合は、クラスターの enactment (実行) のステータスを一覧表示できます。
$ oc get nnce
オプション: 特定の enactment (実行) の設定 (失敗した設定のエラーレポートを含む) を表示するには、以下を実行します。
$ oc get nnce <node>.<policy> -o yaml
11.2.4. ノードからインターフェイスの削除
NodeNetworkConfigurationPolicy
オブジェクトを編集してノードからインターフェイスを削除し、インターフェイスの state
を absent
に設定します。
インターフェイスを追加した Policy を削除しても、ノード上のネットワークポリシーの設定は変更されません。NodeNetworkConfigurationPolicy
はクラスターのオブジェクトですが、これは要求される設定のみを表します。
同様に、インターフェイスを削除しても Policy は削除されません。
手順
インターフェイスの作成に使用する
NodeNetworkConfigurationPolicy
マニフェストを更新します。以下の例では、Linux ブリッジが削除されます。apiVersion: nmstate.io/v1alpha1 kind: NodeNetworkConfigurationPolicy metadata: name: <br1-eth1-policy> 1 spec: nodeSelector: 2 node-role.kubernetes.io/worker: "" 3 desiredState: interfaces: - name: br1 type: linux-bridge state: absent 4
ノード上で Policy を更新し、インターフェイスを削除します。
$ oc apply -f <br1-eth1-policy.yaml> 1
- 1
- Policy マニフェストのファイル名。
11.2.5. インターフェイスの削除後のノードネットワーク設定の復元
ノードからインターフェイスを削除しても、ノードのネットワーク設定は以前の状態に自動的に復元されません。インターフェイスを削除した後には、クラスター全体で、以前にインターフェイスに割り当てられたか、または以前のインターフェイスの下位に置かれたノード NIC は down
状態になります。新規 NodeNetworkConfigurationPolicy
マニフェストをクラスターに適用した後に NIC を復元します。
手順
NIC および必要な状態の
up
を指定するNodeNetworkConfigurationPolicy
マニフェストを作成します。apiVersion: nmstate.io/v1alpha1 kind: NodeNetworkConfigurationPolicy metadata: name: eth1 spec: desiredState: interfaces: - name: eth1 type: ethernet state: up ipv4: dhcp: true enabled: true
マニフェストをクラスターに適用します。
$ oc apply -f <eth1.yaml> 1
- 1
- Policy マニフェストのファイル名。
11.2.6. 異なるインターフェイスの Policy 設定の例
11.2.6.1. 例: Linux ブリッジインターフェイス NodeNetworkConfigurationPolicy
NodeNetworkConfigurationPolicy
マニフェストをクラスターに適用してクラスター内のノード上に Linux ブリッジインターフェイスを作成します。
以下の YAML ファイルは、Linux ブリッジインターフェイスのマニフェストの例です。これには、独自の情報で置き換える必要のあるサンプルの値が含まれます。
apiVersion: nmstate.io/v1alpha1 kind: NodeNetworkConfigurationPolicy metadata: name: br1-eth1-policy 1 spec: nodeSelector: 2 kubernetes.io/hostname: <node01> 3 desiredState: interfaces: - name: br1 4 description: Linux bridge with eth1 as a port 5 type: linux-bridge 6 state: up 7 ipv4: dhcp: true 8 enabled: true 9 bridge: options: stp: enabled: false 10 port: - name: eth1 11
- 1
- Policy の名前。
- 2
- オプション:
nodeSelector
を含めない場合、Policy はクラスター内のすべてのノードに適用されます。 - 3
- この例では、
hostname
ノードセレクターを使用します。 - 4
- インターフェイスの名前。
- 5
- オプション: 人間が判読できるインターフェイスの説明。
- 6
- インターフェイスのタイプ。この例では、ブリッジを作成します。
- 7
- 作成後のインターフェイスの要求された状態。
- 8
- オプション:
dhcp
を使用しない場合は、静的 IP を設定するか、IP アドレスなしでインターフェイスを出ることができます。 - 9
- この例では
ipv4
を有効にします。 - 10
- この例では
stp
を無効にします。 - 11
- ブリッジが接続されるノードの NIC。
11.2.6.2. 例: VLAN インターフェイス NodeNetworkConfigurationPolicy
NodeNetworkConfigurationPolicy
マニフェストをクラスターに適用してクラスター内のノード上に VLAN インターフェイスを作成します。
以下の YAML ファイルは、VLAN インターフェイスのマニフェストの例です。これには、独自の情報で置き換える必要のあるサンプルの値が含まれます。
apiVersion: nmstate.io/v1alpha1 kind: NodeNetworkConfigurationPolicy metadata: name: vlan-eth1-policy 1 spec: nodeSelector: 2 kubernetes.io/hostname: <node01> 3 desiredState: interfaces: - name: eth1.102 4 description: VLAN using eth1 5 type: vlan 6 state: up 7 vlan: base-iface: eth1 8 id: 102 9
11.2.6.3. 例: ボンドインターフェイス NodeNetworkConfigurationPolicy
NodeNetworkConfigurationPolicy
マニフェストをクラスターに適用してノード上にボンドインターフェイスを作成します。
OpenShift Virtualization は以下のボンドモードのみをサポートします。
-
mode=1 active-backup
-
mode=5 balance-tlb
- mode=6 balance-alb
以下の YAML ファイルは、ボンドインターフェイスのマニフェストの例です。これには、独自の情報で置き換える必要のあるサンプルの値が含まれます。
apiVersion: nmstate.io/v1alpha1 kind: NodeNetworkConfigurationPolicy metadata: name: bond0-eth1-eth2-policy 1 spec: nodeSelector: 2 kubernetes.io/hostname: <node01> 3 desiredState: interfaces: - name: bond0 4 description: Bond enslaving eth1 and eth2 5 type: bond 6 state: up 7 ipv4: dhcp: true 8 enabled: true 9 link-aggregation: mode: active-backup 10 options: miimon: '140' 11 slaves: 12 - eth1 - eth2 mtu: 1450 13
- 1
- Policy の名前。
- 2
- オプション:
nodeSelector
を含めない場合、Policy はクラスター内のすべてのノードに適用されます。 - 3
- この例では、
hostname
ノードセレクターを使用します。 - 4
- インターフェイスの名前。
- 5
- オプション: 人間が判読できるインターフェイスの説明。
- 6
- インターフェイスのタイプ。この例では、ボンドを作成します。
- 7
- 作成後のインターフェイスの要求された状態。
- 8
- オプション:
dhcp
を使用しない場合は、静的 IP を設定するか、IP アドレスなしでインターフェイスを出ることができます。 - 9
- この例では
ipv4
を有効にします。 - 10
- ボンドのドライバーモード。この例では、アクティブなバックアップモードを使用します。
- 11
- オプション: この例では、miimon を使用して 140ms ごとにボンドリンクを検査します。
- 12
- ボンド内の下位ノードの NIC。
- 13
- オプション: ボンドの Maximum transmission unit (MTU)指定がない場合、この値はデフォルトで
1500
に設定されます。
11.2.6.4. 例: イーサネットインターフェイス NodeNetworkConfigurationPolicy
NodeNetworkConfigurationPolicy
マニフェストをクラスターに適用してクラスター内のノードにイーサネットインターフェイスを作成します。
以下の YAML ファイルは、イーサネットインターフェイスのマニフェストの例です。これには、独自の情報で置き換える必要のあるサンプルの値が含まれます。
apiVersion: nmstate.io/v1alpha1 kind: NodeNetworkConfigurationPolicy metadata: name: eth1-policy 1 spec: nodeSelector: 2 kubernetes.io/hostname: <node01> 3 desiredState: interfaces: - name: eth1 4 description: Configuring eth1 on node01 5 type: ethernet 6 state: up 7 ipv4: dhcp: true 8 enabled: true 9
- 1
- Policy の名前。
- 2
- オプション:
nodeSelector
を含めない場合、Policy はクラスター内のすべてのノードに適用されます。 - 3
- この例では、
hostname
ノードセレクターを使用します。 - 4
- インターフェイスの名前。
- 5
- オプション: 人間が判読できるインターフェイスの説明。
- 6
- インターフェイスのタイプ。この例では、イーサネットネットワークインターフェイスを作成します。
- 7
- 作成後のインターフェイスの要求された状態。
- 8
- オプション:
dhcp
を使用しない場合は、静的 IP を設定するか、IP アドレスなしでインターフェイスを出ることができます。 - 9
- この例では
ipv4
を有効にします。
11.2.6.5. 例: 同じ Policy の複数のインターフェイス
同じ Policy で複数のインターフェイスを作成できます。これらのインターフェイスは相互に参照でき、単一の Policy マニフェストを使用してネットワーク設定をビルドし、デプロイできます。
以下のスニペット例では、2 つの NIC 間に bond10
という名前のボンドと、ボンドに接続する br1
という名前の Linux ブリッジを作成します。
... interfaces: - name: bond10 description: Bonding eth2 and eth3 for Linux bridge type: bond state: up link-aggregation: slaves: - eth2 - eth3 - name: br1 description: Linux bridge on bond type: linux-bridge state: up bridge: port: - name: bond10 ...
11.2.7. 例: IP 管理
以下の設定スニペットの例は、さまざまな IP 管理方法を示しています。
これらの例では、ethernet
インターフェイスタイプを使用して、Policy 設定に関連するコンテキストを表示しつつ、サンプルを単純化します。これらの IP 管理のサンプルは、他のインターフェイスタイプでも使用できます。
11.2.7.1. 静的
以下のスニペットは、イーサネットインターフェイスで IP アドレスを静的に設定します。
...
interfaces:
- name: eth1
description: static IP on eth1
type: ethernet
state: up
ipv4:
address:
- ip: 192.168.122.250 1
prefix-length: 24
enabled: true
...
- 1
- この値を、インターフェイスの静的 IP アドレスに置き換えます。
11.2.7.2. IP アドレスなし
以下のスニペットでは、インターフェイスに IP アドレスがないことを確認できます。
... interfaces: - name: eth1 description: No IP on eth1 type: ethernet state: up ipv4: enabled: false ...
11.2.7.3. 動的ホストの設定
以下のスニペットは、動的 IP アドレス、ゲートウェイアドレス、および DNS を使用するイーサネットインターフェイスを設定します。
... interfaces: - name: eth1 description: DHCP on eth1 type: ethernet state: up ipv4: dhcp: true enabled: true ...
以下のスニペットは、動的 IP アドレスを使用しますが、動的ゲートウェイアドレスまたは DNS を使用しないイーサネットインターフェイスを設定します。
... interfaces: - name: eth1 description: DHCP without gateway or DNS on eth1 type: ethernet state: up ipv4: dhcp: true auto-gateway: false auto-dns: false enabled: true ...
11.2.7.4. DNS
以下のスニペットは、ホストに DNS 設定を設定します。
... interfaces: ... dns-resolver: config: search: - example.com - example.org server: - 8.8.8.8 ...
11.2.7.5. 静的ルーティング
以下のスニペットは、インターフェイス eth1
に静的ルートおよび静的 IP を設定します。
... interfaces: - name: eth1 description: Static routing on eth1 type: ethernet state: up ipv4: address: - ip: 192.0.2.251 1 prefix-length: 24 enabled: true routes: config: - destination: 198.51.100.0/24 metric: 150 next-hop-address: 192.0.2.1 2 next-hop-interface: eth1 table-id: 254 ...
11.3. ノードのネットワーク設定のトラブルシューティング
ノードのネットワーク設定で問題が発生した場合には、Policy が自動的にロールバックされ、Enactment レポートは失敗します。これには、以下のような問題が含まれます。
- ホストで設定を適用できません。
- ホストはデフォルトゲートウェイへの接続を失います。
- ホストは API サーバーへの接続を失います。
11.3.1. 正確でない NodeNetworkConfigurationPolicy 設定のトラブルシューティング
NodeNetworkConfigurationPolicy を適用し、クラスター全体でノードのネットワーク設定への変更を適用することができます。正確でない設定を適用する場合、以下の例を使用して、失敗したネットワークポリシーのトラブルシューティングと修正を行うことができます。
この例では、Linux ブリッジ Policy は 3 つのマスターノードと 3 つのワーカーノードを持つクラスターのサンプルに適用されます。Policy は正しくないインターフェイスを参照するために、適用することができません。エラーを確認するには、利用可能な nmstate リソースを調べます。その後に、正しい設定で Policy を更新できます。
手順
Policy を作成し、これをクラスターに適用します。以下の例では、
ens01
インターフェイスに単純なブリッジを作成します。apiVersion: nmstate.io/v1alpha1 kind: NodeNetworkConfigurationPolicy metadata: name: ens01-bridge-testfail spec: desiredState: interfaces: - name: br1 description: Linux bridge with the wrong port type: linux-bridge state: up ipv4: dhcp: true enabled: true bridge: options: stp: enabled: false port: - name: ens01
$ oc apply -f ens01-bridge-testfail.yaml
出力例
nodenetworkconfigurationpolicy.nmstate.io/ens01-bridge-testfail created
以下のコマンドを実行して Policy のステータスを確認します。
$ oc get nncp
この出力は、Policy が失敗したことを示しています。
出力例
NAME STATUS ens01-bridge-testfail FailedToConfigure
ただし、Policy のステータスのみでは、すべてのノードで失敗したか、またはノードのサブセットで失敗したかを確認することはできません。
Enactment を一覧表示し、Policy がいずれかのノードで成功したかどうかを確認します。Policy がサブセットに対してのみ失敗した場合は、問題は特定のノード設定にあることにあることが示唆されます。Policy がすべてのノードで失敗した場合は、問題は Policy に関連したものであることが示唆されます。
$ oc get nnce
この出力は、Policy がすべてのノードで失敗したことを示しています。
出力例
NAME STATUS master-1.ens01-bridge-testfail FailedToConfigure master-2.ens01-bridge-testfail FailedToConfigure master-3.ens01-bridge-testfail FailedToConfigure worker-1.ens01-bridge-testfail FailedToConfigure worker-2.ens01-bridge-testfail FailedToConfigure worker-3.ens01-bridge-testfail FailedToConfigure
失敗した Enactment のいずれかを表示し、トレースバックを確認します。以下のコマンドは、出力ツール
jsonpath
を使用して出力をフィルターします。$ oc get nnce worker-1.ens01-bridge-testfail -o jsonpath='{.status.conditions[?(@.type=="Failing")].message}'
このコマンドは、簡潔にするために編集されている大きなトレースバックを返します。
出力例
error reconciling NodeNetworkConfigurationPolicy at desired state apply: , failed to execute nmstatectl set --no-commit --timeout 480: 'exit status 1' '' ... libnmstate.error.NmstateVerificationError: desired ======= --- name: br1 type: linux-bridge state: up bridge: options: group-forward-mask: 0 mac-ageing-time: 300 multicast-snooping: true stp: enabled: false forward-delay: 15 hello-time: 2 max-age: 20 priority: 32768 port: - name: ens01 description: Linux bridge with the wrong port ipv4: address: [] auto-dns: true auto-gateway: true auto-routes: true dhcp: true enabled: true ipv6: enabled: false mac-address: 01-23-45-67-89-AB mtu: 1500 current ======= --- name: br1 type: linux-bridge state: up bridge: options: group-forward-mask: 0 mac-ageing-time: 300 multicast-snooping: true stp: enabled: false forward-delay: 15 hello-time: 2 max-age: 20 priority: 32768 port: [] description: Linux bridge with the wrong port ipv4: address: [] auto-dns: true auto-gateway: true auto-routes: true dhcp: true enabled: true ipv6: enabled: false mac-address: 01-23-45-67-89-AB mtu: 1500 difference ========== --- desired +++ current @@ -13,8 +13,7 @@ hello-time: 2 max-age: 20 priority: 32768 - port: - - name: ens01 + port: [] description: Linux bridge with the wrong port ipv4: address: [] line 651, in _assert_interfaces_equal\n current_state.interfaces[ifname],\nlibnmstate.error.NmstateVerificationError:
NmstateVerificationError
は、desired
Policy 設定、ノード上の Policy のcurrent
設定、および一致しないパラメーターを強調表示するdifference
を一覧表示します。この例では、port
はdifference
に組み込まれ、これは問題が Policy のポート設定に関連するものであることを示唆します。Policy が適切に設定されていることを確認するには、
NodeNetworkState
を要求して、1 つまたはすべてのノードのネットワーク設定を表示します。以下のコマンドは、master-1
ノードのネットワーク設定を返します。$ oc get nns master-1 -o yaml
出力は、ノード上のインターフェイス名は
ens1
であるものの、失敗した Policy がens01
を誤って使用していることを示します。出力例
- ipv4: ... name: ens1 state: up type: ethernet
既存の Policy を編集してエラーを修正します。
$ oc edit nncp ens01-bridge-testfail
... port: - name: ens1
Policy を保存して修正を適用します。
Policy のステータスをチェックして、更新が正常に行われたことを確認します。
$ oc get nncp
出力例
NAME STATUS ens01-bridge-testfail SuccessfullyConfigured
更新された Policy は、クラスターのすべてのノードで正常に設定されました。
第12章 ロギング、イベント、およびモニターリング
12.1. 仮想マシンログの表示
12.1.1. 仮想マシンのログについて
ログは、OpenShift Container Platform ビルド、デプロイメントおよび Pod について収集されます。OpenShift Virtualization では、仮想マシンのログは Web コンソールまたは CLI のいずれかで仮想マシンランチャー Pod から取得されます。
-f
オプションは、リアルタイムでログ出力をフォローします。 これは進捗のモニターおよびエラーの確認に役立ちます。
ランチャー Pod の起動が失敗する場合、--previous
オプションを使用して最後の試行時のログを確認します。
ErrImagePull
および ImagePullBackOff
エラーは、誤ったデプロイメント設定または参照されるイメージに関する問題によって引き起こされる可能性があります。
12.1.2. CLI での仮想マシンログの表示
仮想マシンランチャー Pod から仮想マシンログを取得します。
手順
以下のコマンドを使用します。
$ oc logs <virt-launcher-name>
12.1.3. Web コンソールでの仮想マシンログの表示
関連付けられた仮想マシンランチャー Pod から仮想マシンログを取得します。
手順
- OpenShift Virtualization コンソールのサイドメニューから Workloads → Virtualization をクリックします。
- Virtual Machines タブをクリックします。
- 仮想マシンを選択して、Virtual Machine Overview 画面を開きます。
-
Details タブで、Pod セクションの
virt-launcher-<name>
Pod をクリックします。 - Logs をクリックします。
12.2. イベントの表示
12.2.1. 仮想マシンイベントについて
OpenShift Container Platform イベントは、namespace 内の重要なライフサイクル情報のレコードであり、リソースのスケジュール、作成、および削除に関する問題のモニターおよびトラブルシューティングに役立ちます。
OpenShift Virtualization は、仮想マシンおよび仮想マシンインスタンスについてのイベントを追加します。これらは Web コンソールまたは CLI のいずれかで表示できます。
OpenShift Container Platform クラスター内のシステムイベント情報の表示 も参照してください。
12.2.2. Web コンソールでの仮想マシンのイベントの表示
実行中の仮想マシンのストリームイベントは、Web コンソールの Virtual Machine Overview パネルから確認できます。
▮▮ ボタンはイベントストリームを一時停止します。
▶ ボタンは一時停止されたイベントストリームを継続します。
手順
- サイドメニューから Workloads → Virtualization をクリックします。
- Virtual Machines タブをクリックします。
- 仮想マシンを選択して、Virtual Machine Overview 画面を開きます。
- Events をクリックして、仮想マシンのすべてのイベントを表示します。
12.2.3. CLI での namespace イベントの表示
OpenShift Container Platform クライアントを使用して namespace のイベントを取得します。
手順
namespace で、
oc get
コマンドを使用します。$ oc get events
12.2.4. CLI でのリソースイベントの表示
イベントはリソース説明に組み込むこともできます。 これは OpenShift Container Platform クライアントを使用して取得できます。
手順
namespace で、
oc describe
コマンドを使用します。以下の例は、仮想マシン、仮想マシンインスタンス、および仮想マシンの virt-launcher Pod のイベント取得する方法を示しています。$ oc describe vm <vm>
$ oc describe vmi <vmi>
$ oc describe pod virt-launcher-<name>
12.3. イベントおよび状態を使用した DataVolume の診断
oc describe
コマンドを使用して DataVolume の問題を分析し、解決できるようにします。
12.3.1. 状態およびイベントについて
コマンドで生成される Conditions
および Events
セクションの出力を検査して DataVolume の問題を診断します。
$ oc describe dv <DataVolume>
表示される Conditions
セクションには、3 つの Types
があります。
-
Bound
-
running
-
Ready
Events
セクションでは、以下の追加情報を提供します。
-
イベントの
Type
-
ロギングの
Reason
-
イベントの
Source
-
追加の診断情報が含まれる
Message
oc describe
からの出力には常に Events
が含まれるとは限りません。
イベントは Status
、Reason
、または Message
のいずれかの変更時に生成されます。状態およびイベントはどちらも DataVolume の状態の変更に対応します。
たとえば、インポート操作中に URL のスペルを誤ると、インポートにより 404 メッセージが生成されます。メッセージの変更により、理由と共にイベントが生成されます。Conditions
セクションの出力も更新されます。
12.3.2. 状態およびイベントを使用した DataVolume の分析
describe
コマンドで生成される Conditions
セクションおよび Events
セクションを検査することにより、PersistentVolumeClaim (PVC) に関連して DataVolume の状態を判別します。また、操作がアクティブに実行されているか、または完了しているかどうかを判断します。また、DataVolume のステータスについての特定の詳細、およびどのように現在の状態になったかについての情報を提供するメッセージを受信する可能性があります。
状態の組み合わせは多数あります。それぞれは一意のコンテキストで評価される必要があります。
各種の組み合わせの例を以下に示します。
Bound
: この例では正常にバインドされた PVC が表示されます。Type
はBound
であるため、Status
はTrue
になります。PVC がバインドされていない場合、Status
はFalse
になります。PVC がバインドされると、PVC がバインドされていることを示すイベントが生成されます。この場合、
Reason
はBound
で、Status
はTrue
です。Message
は DataVolume を所有する PVC を示します。Events
セクションのMessage
では、PVC がバインドされている期間 (Age
) およびどのリソース (From
) によってバインドされているか、datavolume-controller
に関する詳細が提供されます。出力例
Status: Conditions: Last Heart Beat Time: 2020-07-15T03:58:24Z Last Transition Time: 2020-07-15T03:58:24Z Message: PVC win10-rootdisk Bound Reason: Bound Status: True Type: Bound Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Bound 24s datavolume-controller PVC example-dv Bound
Running
: この場合、Type
がRunning
であり、Status
がFalse
であることに注意してください。これは、操作の失敗の原因となったイベントが発生したことを示しています。ステータスをTrue
からFalse
に変更します。ただし、
Reason
がCompleted
であり、Message
フィールドにはImport Complete
が表示されることに注意してください。Events
セクションには、Reason
およびMessage
に失敗した操作に関する追加のトラブルシューティング情報が含まれます。この例では、Events
セクションの最初のWarning
に一覧表示されるMessage
に、404
によって接続できないことが示唆されます。この情報から、インポート操作が実行されており、DataVolume にアクセスしようとしている他の操作に対して競合が生じることを想定できます。
出力例
Status: Conditions: Last Heart Beat Time: 2020-07-15T04:31:39Z Last Transition Time: 2020-07-15T04:31:39Z Message: Import Complete Reason: Completed Status: False Type: Running Events: Type Reason Age From Message ---- ------ ---- ---- ------- Warning Error 12s (x2 over 14s) datavolume-controller Unable to connect to http data source: expected status code 200, got 404. Status: 404 Not Found
Ready
:Type
がReady
であり、Status
がTrue
の場合、以下の例のように DataVolume は使用可能な状態にあります。DataVolume が使用可能な状態にない場合、Status
はFalse
になります。出力例
Status: Conditions: Last Heart Beat Time: 2020-07-15T04:31:39Z Last Transition Time: 2020-07-15T04:31:39Z Status: True Type: Ready
12.4. 仮想マシンのワークロードに関する情報の表示
OpenShift Container Platform Web コンソールで Virtual Machines ダッシュボードを使用して、仮想マシンについての概要を表示できます。
12.4.1. Virtual Machines ダッシュボードについて
OpenShift Container Platform Web コンソールの Workloads → Virtualization ページに移動して、仮想マシンにアクセスします。Workloads → Virtualization ページには、* Virtual Machines * Virtual Machine Templates の 2 つのタブが含まれます。
以下のカードは、それぞれの仮想マシンについて説明しています。
Details: 以下を含む、仮想マシンについての識別情報を提供します。
- 名前
- namespace
- 作成日
- ノード名
- IP アドレス
Inventory: 以下を含む、仮想マシンのリソースを一覧表示します。
- ネットワークインターフェイスコントローラー (NIC)
- ディスク
Status には、以下が含まれます。
- 仮想マシンの現在の状態
- QEMU ゲストエージェントが仮想マシンにインストールされているかどうかを示す注記
Utilization: 以下の使用状況についてのデータを表示するチャートが含まれます。
- CPU
- メモリー
- Filesystem
- ネットワーク転送
ドロップダウンリストを使用して、使用状況データの期間を選択します。選択できるオプションは、1 Hour、6 Hours、および 24 Hours です。
- Events: 過去 1 時間における仮想マシンのアクティビティーについてのメッセージを一覧表示します。追加のイベントを表示するには、View all をクリックします。
12.5. 仮想マシンの正常性のモニターリング
以下の手順を使用して liveness および readiness プローブを作成し、仮想マシンの正常性監視します。
12.5.1. liveness および readiness プローブ
VirtualMachineInstance (VMI) が失敗すると、liveness プローブは VMI を停止します。次に、VirtualMachine などのコントローラーが他の VMI を起動し、仮想マシンの応答を復元します。
readiness プローブは、サービスとエンドポイントに対して VirtualMachineInstance がサービスからトラフィックを受信できることを示します。readiness プローブが失敗すると、VirtualMachineInstance はプローブが復旧するまで、該当のエンドポイントから削除されます。
12.5.2. HTTP liveness プローブの定義
以下の手順では、HTTP liveness プローブを定義する設定ファイルの例について説明します。
手順
以下のコードブロックをサンプルとして使用し、YAML 設定ファイルをカスタマイズして HTTP liveness プローブを作成します。この例では、以下のようになります。
-
初回の
120
秒の遅延後に仮想マシンインスタンスのポート1500
をクエリーするspec.livenessProbe.httpGet
を使用してプローブを設定します。 -
仮想マシンインスタンスは、
cloud-init
を使用して、ポート1500
に最小限の HTTP サーバーをインストールし、実行します。
注記timeoutSeconds
値はperiodSeconds
の値よりも低い値である必要があります。timeoutSeconds
のデフォルト値は1
です。periodSeconds
のデフォルト値は10
です。apiVersion: kubevirt.io/v1alpha3 kind: VirtualMachineInstance metadata: labels: special: vmi-fedora name: vmi-fedora spec: domain: devices: disks: - disk: bus: virtio name: containerdisk - disk: bus: virtio name: cloudinitdisk resources: requests: memory: 1024M livenessProbe: initialDelaySeconds: 120 periodSeconds: 20 httpGet: port: 1500 timeoutSeconds: 10 terminationGracePeriodSeconds: 0 volumes: - name: containerdisk registryDisk: image: kubevirt/fedora-cloud-registry-disk-demo - cloudInitNoCloud: userData: |- #cloud-config password: fedora chpasswd: { expire: False } bootcmd: - setenforce 0 - dnf install -y nmap-ncat - systemd-run --unit=httpserver nc -klp 1500 -e '/usr/bin/echo -e HTTP/1.1 200 OK\\n\\nHello World!' name: cloudinitdisk
-
初回の
以下のコマンドを実行して VirtualMachineInstance を作成します。
$ oc create -f <file name>.yaml
12.5.3. TCP liveness プローブの定義
以下の手順では、TCP liveness プローブを定義する設定ファイルの例について説明します。
手順
このコードブロックをサンプルとして使用し、YAML 設定ファイルをカスタマイズして TCP liveness プローブを作成します。この例では、以下のようになります。
-
初回の
120
秒の遅延後に仮想マシンインスタンスのポート1500
をクエリーするspec.livenessProbe.tcpSocket
を使用してプローブを設定します。 -
仮想マシンインスタンスは、
cloud-init
を使用して、ポート1500
に最小限の HTTP サーバーをインストールし、実行します。
注記timeoutSeconds
値はperiodSeconds
の値よりも低い値である必要があります。timeoutSeconds
のデフォルト値は1
です。periodSeconds
のデフォルト値は10
です。apiVersion: kubevirt.io/v1alpha3 kind: VirtualMachineInstance metadata: labels: special: vmi-fedora name: vmi-fedora spec: domain: devices: disks: - disk: bus: virtio name: containerdisk - disk: bus: virtio name: cloudinitdisk resources: requests: memory: 1024M livenessProbe: initialDelaySeconds: 120 periodSeconds: 20 tcpSocket: port: 1500 timeoutSeconds: 10 terminationGracePeriodSeconds: 0 volumes: - name: containerdisk registryDisk: image: kubevirt/fedora-cloud-registry-disk-demo - cloudInitNoCloud: userData: |- #cloud-config password: fedora chpasswd: { expire: False } bootcmd: - setenforce 0 - dnf install -y nmap-ncat - systemd-run --unit=httpserver nc -klp 1500 -e '/usr/bin/echo -e HTTP/1.1 200 OK\\n\\nHello World!' name: cloudinitdisk
-
初回の
以下のコマンドを実行して VirtualMachineInstance を作成します。
$ oc create -f <file name>.yaml
12.5.4. readiness プローブの定義
以下の手順では、readiness プローブを定義する設定ファイルの例について説明します。
手順
YAML 設定ファイルをカスタマイズして readiness プローブを作成します。readiness プローブは liveness プローブと同じように設定されます。ただし、この例では以下の違いに注意してください。
-
readiness プローブは、異なる仕様名を使用して保存されます。たとえば、readiness プローブを
spec.livenessProbe.<type-of-probe>
としてではなく、spec.readinessProbe
として作成します。 -
readiness プローブを作成する場合、プローブが複数回失敗または成功する場合に備えて
ready
とnon-ready
状態の間で切り換えられるようにfailureThreshold
およびsuccessThreshold
をオプションで設定します。
注記timeoutSeconds
値はperiodSeconds
の値よりも低い値である必要があります。timeoutSeconds
のデフォルト値は1
です。periodSeconds
のデフォルト値は10
です。apiVersion: kubevirt.io/v1alpha3 kind: VirtualMachineInstance metadata: labels: special: vmi-fedora name: vmi-fedora spec: domain: devices: disks: - disk: bus: virtio name: containerdisk - disk: bus: virtio name: cloudinitdisk resources: requests: memory: 1024M readinessProbe: httpGet: port: 1500 initialDelaySeconds: 120 periodSeconds: 20 timeoutSeconds: 10 failureThreshold: 3 successThreshold: 3 terminationGracePeriodSeconds: 0 volumes: - name: containerdisk registryDisk: image: kubevirt/fedora-cloud-registry-disk-demo - cloudInitNoCloud: userData: |- #cloud-config password: fedora chpasswd: { expire: False } bootcmd: - setenforce 0 - dnf install -y nmap-ncat - systemd-run --unit=httpserver nc -klp 1500 -e '/usr/bin/echo -e HTTP/1.1 200 OK\\n\\nHello World!' name: cloudinitdisk
-
readiness プローブは、異なる仕様名を使用して保存されます。たとえば、readiness プローブを
以下のコマンドを実行して VirtualMachineInstance を作成します。
$ oc create -f <file name>.yaml
12.6. OpenShift Container Platform Dashboard を使用したクラスター情報の取得
OpenShift Container Platform Web コンソールから Home > Dashboards > Overview をクリックしてクラスターについてのハイレベルな情報をキャプチャーする OpenShift Container Platform ダッシュボードにアクセスします。
OpenShift Container Platform ダッシュボードは、個別のダッシュボード カード でキャプチャーされるさまざまなクラスター情報を提供します。
12.6.1. OpenShift Container Platform ダッシュボードページについて
OpenShift Container Platform ダッシュボードは以下のカードで設定されます。
Details は、クラスターの詳細情報の概要を表示します。
ステータスには、ok、error、warning、in progress、および unknown が含まれます。リソースでは、カスタムのステータス名を追加できます。
- クラスター
- プロバイダー
- バージョン
Cluster Inventory は、リソースの数および関連付けられたステータスの詳細を表示します。これは、問題の解決に介入が必要な場合に役立ちます。以下についての情報が含まれます。
- ノード数
- Pod 数
- 永続ストレージボリューム要求
- 仮想マシン (OpenShift Virtualization がインストールされている場合に利用可能)
- クラスター内のベアメタルホスト。これらはステータス別に一覧表示されます (metal3 環境でのみ利用可能)。
- Cluster Health では、関連するアラートおよび説明を含む、クラスターの現在の健全性についてのサマリーを表示します。OpenShift Virtualization がインストールされている場合、OpenShift Virtualization の健全性についても全体的に診断されます。複数のサブシステムが存在する場合は、See All をクリックして、各サブシステムのステータスを表示します。
Cluster Capacity チャートは、管理者が追加リソースがクラスターで必要になるタイミングを把握するのに役立ちます。このチャートには、現在の消費量を表示する内側の円が含まれ、外側の円には、以下の情報を含む、リソースに対して設定されたしきい値が表示されます。
- CPU 時間
- メモリー割り当て
- 消費されるストレージ
- 消費されるネットワークリソース
- Cluster Utilization は指定された期間における各種リソースの容量を表示します。これは、管理者がリソースの高い消費量の規模および頻度を理解するのに役立ちます。
- Events は、Pod の作成または別のホストへの仮想マシンの移行などのクラスター内の最近のアクティビティーに関連したメッセージを一覧表示します。
- Top Consumers は、管理者がクラスターリソースが消費される状況を把握するのに役立ちます。リソースをクリックし、指定されたクラスターリソース (CPU、メモリー、またはストレージ) の最大量を消費する Pod およびノードを一覧表示する詳細ページに切り替えます。
12.7. OpenShift Container Platform クラスターモニターリング、ロギング、および Telemetry
OpenShift Container Platform は、クラスターレベルでモニターするための各種のリソースを提供します。
12.7.1. OpenShift Container Platform クラスターモニターリングについて
OpenShift Container Platform には、Prometheus オープンソースプロジェクトおよびその幅広いエコシステムをベースとする事前に設定され、事前にインストールされた自己更新型のモニターリングスタックが同梱されます。これはクラスターのモニタリング機能を提供し、クラスター管理者に問題の発生を即時に通知するアラートのセットと Grafana ダッシュボードのセットを提供します。クラスターモニタリングスタックは、OpenShift Container Platform クラスターのモニタリング用のみにサポートされています。
今後の OpenShift Container Platform の更新との互換性を確保するために、指定されたモニターリングスタックのオプションのみを設定することがサポートされます。
12.7.2. クラスターロギングのコンポーネントについて
クラスターロギングコンポーネントには、すべてのノードおよびコンテナーログを収集し、それらをログストアに書き込む OpenShift Container Platform クラスターの各ノードにデプロイされるコレクターが含まれます。一元化された Web UI を使用し、集計されたデータを使用して高度な可視化 (visualization) およびダッシュボードを作成できます。
クラスターロギングの主要コンポーネントは以下の通りです。
- collection: これは、クラスターからログを収集し、それらをフォーマットし、ログストアに転送するコンポーネントです。現在の実装は Fluentd です。
- log store: これはログが保存される場所です。デフォルトの実装は Elasticsearch です。デフォルトの Elasticsearch ログストアを使用するか、またはログを外部ログストアに転送することができます。デフォルトのログストアは、短期の保存について最適化され、テストされています。
- visualization: これは、ログ、グラフ、チャートなどを表示するために使用される UI コンポーネントです。現在の実装は Kibana です。
クラスターロギングについての詳細は、OpenShift Container Platform クラスターロギング のドキュメントを参照してください。
12.7.3. Telemetry について
Telemetry は厳選されたクラスターモニターリングメトリクスのサブセットを Red Hat に送信します。Telemeter Client はメトリクス値を 4 分 30 秒ごとにフェッチし、データを Red Hat にアップロードします。これらのメトリクスについては、本書で説明しています。
このデータのストリームは、Red Hat によってリアルタイムでクラスターをモニターし、お客様に影響を与える問題に随時対応するために使用されます。またこれにより、Red Hat がサービスへの影響を最小限に抑えつつつアップグレードエクスペリエンスの継続的な改善に向けた OpenShift Container Platform のアップグレードの展開を可能にします。
このデバッグ情報は、サポートケースでレポートされるデータへのアクセスと同じ制限が適用された状態で Red Hat サポートおよびエンジニアリングチームが利用できます。接続クラスターのすべての情報は、OpenShift Container Platform をより使用しやすく、より直感的に使用できるようにするために Red Hat によって使用されます。
12.7.3.1. Telemetry で収集される情報
以下の情報は、Telemetry によって収集されます。
- インストール時に生成される一意でランダムな識別子
- OpenShift Container Platform クラスターのバージョン情報、および更新バージョンの可用性を特定するために使用されるインストールの更新の詳細を含むバージョン情報
- クラスターごとに利用可能な更新の数、更新に使用されるチャネルおよびイメージリポジトリー、更新の進捗情報、および更新で発生するエラーの数などの更新情報
- OpenShift Container Platform がデプロイされているプラットフォームの名前およびデータセンターの場所
- CPU コアの数およびそれぞれに使用される RAM の容量を含む、クラスター、マシンタイプ、およびマシンについてのサイジング情報
- クラスター内での実行中の仮想マシンインスタンスの数
- etcd メンバーの数および etcd クラスターに保存されるオブジェクトの数
- クラスターにインストールされている OpenShift Container Platform フレームワークコンポーネントおよびそれらの状態とステータス
- コンポーネント、機能および拡張機能に関する使用状況の情報
- テクノロジープレビューおよびサポート対象外の設定に関する使用状況の詳細
- 動作が低下したソフトウェアに関する情報
-
NotReady
とマークされているノードについての情報 - 動作が低下した Operator の関連オブジェクトとして一覧表示されるすべての namespace のイベント
- Red Hat サポートがお客様にとって有用なサポートを提供するのに役立つ設定の詳細。これには、クラウドインフラストラクチャーレベルのノード設定、ホスト名、IP アドレス、Kubernetes Pod 名、namespace、およびサービスが含まれます。
- 証明書の有効性についての情報
Telemetry は、ユーザー名やパスワードなどの識別情報を収集しません。Red Hat は、個人情報を収集することを意図していません。Red Hat は、個人情報が誤って受信したことを検知した場合に、該当情報を削除します。Telemetry データが個人データを設定する場合において、Red Hat のプライバシー方針については、Red Hat Privacy Statement を参照してください。
12.7.4. CLI のトラブルシューティングおよびデバッグコマンド
oc
クライアントのトラブルシューティングおよびデバッグコマンドの一覧については、OpenShift Container Platform CLI ツール のドキュメントを参照してください。
12.8. Red Hat サポート向けの OpenShift Virtualization データの収集
サポートケースを作成する際、ご使用のクラスターについてのデバッグ情報を Red Hat サポートに提供していただくと Red Hat のサポートに役立ちます。
must-gather
ツールを使用すると、仮想マシンおよび OpenShift Virtualization に関連する他のデータを含む、 OpenShift Container Platform クラスターについての診断情報を収集できます。
迅速なサポートを得るには、OpenShift Container Platform と OpenShift Virtualization の両方の診断情報を提供してください。
12.8.1. must-gather ツールについて
oc adm must-gather
CLI コマンドは、以下のような問題のデバッグに必要となる可能性のあるクラスターからの情報を収集します。
- リソース定義
- 監査ログ
- サービスログ
--image
引数を指定してコマンドを実行する際にイメージを指定できます。イメージを指定する際、ツールはその機能または製品に関連するデータを収集します。
oc adm must-gather
を実行すると、新しい Pod がクラスターに作成されます。データは Pod で収集され、must-gather.local
で始まる新規ディレクトリーに保存されます。このディレクトリーは、現行の作業ディレクトリーに作成されます。
12.8.2. OpenShift Virtualization データの収集について
oc adm must-gather
CLI コマンドを使用してクラスターについての情報を収集できます。これには、OpenShift Virtualization に関連する機能およびオブジェクトが含まれます。
- Hyperconverged Cluster Operator namespace (および子オブジェクト)
- OpenShift Virtualization リソースに属するすべての namespace (およびそれらの子オブジェクト)
- すべての OpenShift Virtualization カスタムリソース定義 (CRD)
- 仮想マシンを含むすべての namespace
- すべての仮想マシン定義
must-gather
を使用して OpenShift Virtualization データを収集するには、OpenShift Virtualization イメージ --image=registry.redhat.io/container-native-virtualization/cnv-must-gather-rhel8:v2.4.9
を指定する必要があります。
12.8.3. 特定の機能に関するデータ収集
oc adm must-gather
CLI コマンドを --image
または --image-stream
引数と共に使用して、特定に機能についてのデバッグ情報を収集できます。must-gather
ツールは複数のイメージをサポートするため、単一のコマンドを実行して複数の機能についてのデータを収集できます。
特定の機能データに加えてデフォルトの must-gather
データを収集するには、--image-stream=openshift/must-gather
引数を追加します。
前提条件
-
cluster-admin
ロールを持つユーザーとしてクラスターにアクセスできる。 -
OpenShift Container Platform CLI (
oc
) がインストールされている。
手順
-
must-gather
データを保存するディレクトリーに移動します。 oc adm must-gather
コマンドを 1 つまたは複数の--image
または--image-stream
引数と共に実行します。たとえば、以下のコマンドは、デフォルトのクラスターデータと OpenShift Virtualization に固有の情報の両方を収集します。$ oc adm must-gather \ --image-stream=openshift/must-gather \ 1 --image=registry.redhat.io/container-native-virtualization/cnv-must-gather-rhel8:v2.4.9 2
must-gather
ツールを追加の引数と共に使用し、クラスターロギングおよびクラスター内の Cluster Logging Operator に関連するデータを収集できます。クラスターロギングの場合、以下のコマンドを実行します。$ oc adm must-gather --image=$(oc -n openshift-logging get deployment.apps/cluster-logging-operator \ -o jsonpath='{.spec.template.spec.containers[?(@.name == "cluster-logging-operator")].image}')
例12.1 クラスターロギングの
must-gather
の出力例├── cluster-logging │ ├── clo │ │ ├── cluster-logging-operator-74dd5994f-6ttgt │ │ ├── clusterlogforwarder_cr │ │ ├── cr │ │ ├── csv │ │ ├── deployment │ │ └── logforwarding_cr │ ├── collector │ │ ├── fluentd-2tr64 │ ├── curator │ │ └── curator-1596028500-zkz4s │ ├── eo │ │ ├── csv │ │ ├── deployment │ │ └── elasticsearch-operator-7dc7d97b9d-jb4r4 │ ├── es │ │ ├── cluster-elasticsearch │ │ │ ├── aliases │ │ │ ├── health │ │ │ ├── indices │ │ │ ├── latest_documents.json │ │ │ ├── nodes │ │ │ ├── nodes_stats.json │ │ │ └── thread_pool │ │ ├── cr │ │ ├── elasticsearch-cdm-lp8l38m0-1-794d6dd989-4jxms │ │ └── logs │ │ ├── elasticsearch-cdm-lp8l38m0-1-794d6dd989-4jxms │ ├── install │ │ ├── co_logs │ │ ├── install_plan │ │ ├── olmo_logs │ │ └── subscription │ └── kibana │ ├── cr │ ├── kibana-9d69668d4-2rkvz ├── cluster-scoped-resources │ └── core │ ├── nodes │ │ ├── ip-10-0-146-180.eu-west-1.compute.internal.yaml │ └── persistentvolumes │ ├── pvc-0a8d65d9-54aa-4c44-9ecc-33d9381e41c1.yaml ├── event-filter.html ├── gather-debug.log └── namespaces ├── openshift-logging │ ├── apps │ │ ├── daemonsets.yaml │ │ ├── deployments.yaml │ │ ├── replicasets.yaml │ │ └── statefulsets.yaml │ ├── batch │ │ ├── cronjobs.yaml │ │ └── jobs.yaml │ ├── core │ │ ├── configmaps.yaml │ │ ├── endpoints.yaml │ │ ├── events │ │ │ ├── curator-1596021300-wn2ks.162634ebf0055a94.yaml │ │ │ ├── curator.162638330681bee2.yaml │ │ │ ├── elasticsearch-delete-app-1596020400-gm6nl.1626341a296c16a1.yaml │ │ │ ├── elasticsearch-delete-audit-1596020400-9l9n4.1626341a2af81bbd.yaml │ │ │ ├── elasticsearch-delete-infra-1596020400-v98tk.1626341a2d821069.yaml │ │ │ ├── elasticsearch-rollover-app-1596020400-cc5vc.1626341a3019b238.yaml │ │ │ ├── elasticsearch-rollover-audit-1596020400-s8d5s.1626341a31f7b315.yaml │ │ │ ├── elasticsearch-rollover-infra-1596020400-7mgv8.1626341a35ea59ed.yaml │ │ ├── events.yaml │ │ ├── persistentvolumeclaims.yaml │ │ ├── pods.yaml │ │ ├── replicationcontrollers.yaml │ │ ├── secrets.yaml │ │ └── services.yaml │ ├── openshift-logging.yaml │ ├── pods │ │ ├── cluster-logging-operator-74dd5994f-6ttgt │ │ │ ├── cluster-logging-operator │ │ │ │ └── cluster-logging-operator │ │ │ │ └── logs │ │ │ │ ├── current.log │ │ │ │ ├── previous.insecure.log │ │ │ │ └── previous.log │ │ │ └── cluster-logging-operator-74dd5994f-6ttgt.yaml │ │ ├── cluster-logging-operator-registry-6df49d7d4-mxxff │ │ │ ├── cluster-logging-operator-registry │ │ │ │ └── cluster-logging-operator-registry │ │ │ │ └── logs │ │ │ │ ├── current.log │ │ │ │ ├── previous.insecure.log │ │ │ │ └── previous.log │ │ │ ├── cluster-logging-operator-registry-6df49d7d4-mxxff.yaml │ │ │ └── mutate-csv-and-generate-sqlite-db │ │ │ └── mutate-csv-and-generate-sqlite-db │ │ │ └── logs │ │ │ ├── current.log │ │ │ ├── previous.insecure.log │ │ │ └── previous.log │ │ ├── curator-1596028500-zkz4s │ │ ├── elasticsearch-cdm-lp8l38m0-1-794d6dd989-4jxms │ │ ├── elasticsearch-delete-app-1596030300-bpgcx │ │ │ ├── elasticsearch-delete-app-1596030300-bpgcx.yaml │ │ │ └── indexmanagement │ │ │ └── indexmanagement │ │ │ └── logs │ │ │ ├── current.log │ │ │ ├── previous.insecure.log │ │ │ └── previous.log │ │ ├── fluentd-2tr64 │ │ │ ├── fluentd │ │ │ │ └── fluentd │ │ │ │ └── logs │ │ │ │ ├── current.log │ │ │ │ ├── previous.insecure.log │ │ │ │ └── previous.log │ │ │ ├── fluentd-2tr64.yaml │ │ │ └── fluentd-init │ │ │ └── fluentd-init │ │ │ └── logs │ │ │ ├── current.log │ │ │ ├── previous.insecure.log │ │ │ └── previous.log │ │ ├── kibana-9d69668d4-2rkvz │ │ │ ├── kibana │ │ │ │ └── kibana │ │ │ │ └── logs │ │ │ │ ├── current.log │ │ │ │ ├── previous.insecure.log │ │ │ │ └── previous.log │ │ │ ├── kibana-9d69668d4-2rkvz.yaml │ │ │ └── kibana-proxy │ │ │ └── kibana-proxy │ │ │ └── logs │ │ │ ├── current.log │ │ │ ├── previous.insecure.log │ │ │ └── previous.log │ └── route.openshift.io │ └── routes.yaml └── openshift-operators-redhat ├── ...
作業ディレクトリーに作成された
must-gather
ディレクトリーから圧縮ファイルを作成します。たとえば、Linux オペレーティングシステムを使用するコンピューターで以下のコマンドを実行します。$ tar cvaf must-gather.tar.gz must-gather.local.5421342344627712289/ 1
- 1
must-gather-local.5421342344627712289/
を実際のディレクトリー名に置き換えてください。
- 圧縮ファイルを Red Hat カスタマーポータル で作成したサポートケースに添付します。