仮想化
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 は、Red Hat OpenShift Data Foundation の機能とうまく連携するように設計およびテストされています。
OpenShift Data Foundation を使用して OpenShift Virtualization をデプロイする場合は、Windows 仮想マシンディスク用の専用ストレージクラスを作成する必要があります。詳細は 、Windows VM の ODF PersistentVolumes の最適化 を参照してください。
OpenShift Virtualization は、OVN-Kubernetes、OpenShiftSDN、または 認定 OpenShift CNI プラグイン に一記載されている他の認定デフォルトの Container Network Interface (CNI) ネットワークプロバイダーの 1 つと使用できます。
Compliance Operator をインストールし、ocp4-moderate
および ocp4-moderate-node
プロファイル を使用してスキャンを実行することにより、OpenShift Virtualization クラスターのコンプライアンスの問題を確認できます。Compliance Operator は、NIST 認定ツール である OpenSCAP を使用して、セキュリティーポリシーをスキャンし、適用します。
OpenShift Virtualization と Compliance Operator の統合は、テクノロジープレビュー機能のみです。テクノロジープレビュー機能は、Red Hat 製品のサービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではないことがあります。Red Hat は、実稼働環境でこれらを使用することを推奨していません。テクノロジープレビュー機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行いフィードバックを提供していただくことを目的としています。
Red Hat のテクノロジープレビュー機能のサポート範囲に関する詳細は、テクノロジープレビュー機能のサポート範囲 を参照してください。
1.1.1. OpenShift Virtualization サポートのクラスターバージョン
OpenShift Virtualization 4.11 は OpenShift Container Platform 4.11 クラスターで使用するためにサポートされます。Open Shift Virtualization の最新の z-stream リリースを使用するには、最初に Open Shift Container Platform の最新バージョンにアップグレードする必要があります。
第2章 OpenShift Virtualization アーキテクチャー
OpenShift Virtualization アーキテクチャーについて学習します。
2.1. OpenShift Virtualization アーキテクチャーの仕組み
OpenShift Virtualization をインストールすると、Operator Lifecycle Manager (OLM) は、OpenShift Virtualization の各コンポーネントのオペレーター Pod をデプロイします。
-
コンピューティング:
virt-operator
-
ストレージ:
cdi-operator
-
ネットワーク:
cluster-network-addons-operator
-
スケーリング:
ssp-operator
-
テンプレート作成:
tekton-tasks-operator
OLM は、他のコンポーネントのデプロイ、設定、およびライフサイクルを担当する hyperconverged-cluster-operator
Pod と、いくつかのヘルパー Pod (hco-webhook
および hyperconverged-cluster-cli-download
) もデプロイします。
すべての Operator Pod が正常にデプロイされたら、HyperConverged
カスタム リソース (CR) を作成する必要があります。HyperConverged
CR で設定された設定は、信頼できる唯一の情報源および OpenShift Virtualization のエントリーポイントとして機能し、CR の動作をガイドします。
HyperConverged
CR は、調整ループ内の他のすべてのコンポーネントの Operator に対応する CR を作成します。その後、各 Operator は、デーモンセット、config map、および OpenShift Virtualization コントロールプレーン用の追加コンポーネントなどのリソースを作成します。たとえば、hco-operator
が KubeVirt
CR を作成すると、virt-operator
はそれを調整し、virt-controller
、virt-handler
、virt-api
などの追加リソースを作成します。
OLM は hostpath-provisioner-operator
をデプロイしますが、hostpath provisioner
(HPP) CR を作成するまで機能しません。

2.2. hco-operator について
hco- operator
(HCO) は、OpenShift Virtualization をデプロイおよび管理するための単一のエントリーポイントと、独自のデフォルトを持ついくつかのヘルパー Operator を提供します。また、これらの Operator のカスタム リソース (CR) も作成します。

表2.1 hco-operator コンポーネント
コンポーネント | 説明 |
---|---|
|
|
|
クラスターから直接ダウンロードできるように、 |
| OpenShift Virtualization に必要なすべての Operator、CR、およびオブジェクトが含まれています。 |
| SSP CR。これは、HCO によって自動的に作成されます。 |
| A CDI CR。これは、HCO によって自動的に作成されます。 |
|
|
2.3. cdi-operator について
cdi-operator
は、Containerized Data Importer (CDI) とその関連リソースを管理します。これは、データ ボリュームを使用して仮想マシン (VM) イメージを永続ボリューム要求 (PVC) にインポートします。

表2.2 cdi-operator コンポーネント
コンポーネント | 説明 |
---|---|
| 安全なアップロードトークンを発行して、VM ディスクを PVC にアップロードするための承認を管理します。 |
| 外部ディスクのアップロードトラフィックを適切なアップロードサーバー Pod に転送して、正しい PVC に書き込むことができるようにします。有効なアップロードトークンが必要です。 |
| データ ボリュームの作成時に仮想マシンイメージを PVC にインポートするヘルパー Pod。 |
2.4. cluster-network-addons-operator について
cluster-network-addons-operator
は、ネットワーク コンポーネントをクラスターにデプロイし、ネットワーク機能を拡張するための関連リソースを管理します。

表2.3 cluster-network-addons-operator コンポーネント
コンポーネント | 説明 |
---|---|
| Kubemacpool の Webhook の TLS 証明書を管理します。 |
| 仮想マシン (VM) ネットワークインターフェイス カード (NIC) の MAC アドレスプールサービスを提供します。 |
| ノードで使用可能なネットワークブリッジをノードリソースとしてマークします。 |
| クラスターノードに CNI プラグインをインストールし、ネットワーク接続定義を介して Linux ブリッジに VM を接続できるようにします。 |
2.5. hostpath-provisioner-operator について
hostpath-provisioner-operator
は、マルチノードホストパスプロビジョナー (HPP) および関連リソースをデプロイおよび管理します。

表2.4 hostpath-provisioner-operator コンポーネント
コンポーネント | 説明 |
---|---|
| ホストパスプロビジョナー (HPP) の実行が指定されている各ノードにワーカーを提供します。Pod は、指定されたバッキングストレージをノードにマウントします。 |
| HPP の Container Storage Interface (CSI) ドライバーインターフェイスを実装します。 |
| HPP のレガシードライバーインターフェイスを実装します。 |
2.6. ssp-operator について
ssp-operator
は、共通テンプレート、関連するデフォルトのブートソース、およびテンプレートバリデーターをデプロイします。

表2.5 ssp-operator components
コンポーネント | 説明 |
---|---|
|
テンプレートから作成された仮想マシンの |
2.7. tekton-tasks-operator について
tekton-tasks-operator
は、VM 用の OpenShift パイプラインの使用法を示すサンプルパイプラインをデプロイします。また、ユーザーがテンプレートから VM を作成し、テンプレートをコピーおよび変更し、データボリュームを作成できるようにする追加の OpenShift Pipeline タスクをデプロイします。

2.8. 仮想 Operator について
virt-operator
は、現在の仮想マシン (VM) のワークロードを中断することなく、OpenShift Virtualization をデプロイ、アップグレード、および管理します。

表2.6 virt-operator コンポーネント
コンポーネント | 説明 |
---|---|
| すべての仮想化関連フローのエントリーポイントとして機能する HTTP API サーバー。 |
|
新しい VM インスタンス オブジェクトの作成を監視し、対応する Pod を作成します。Pod がノードでスケジュールされると、 |
|
VM への変更を監視し、必要な操作を実行するように |
|
|
第3章 OpenShift Virtualization の開始
基本的な OpenShift Virtualization 環境をインストールして設定し、その特徴と機能を調べることができます。
クラスター設定手順には、cluster-admin
権限が必要です。
3.1. 作業を開始する前に
- OpenShift Virtualization 用に クラスターを準備します。
- クローン作成、スナップショット、およびライブマイグレーションの ストレージ要件 を確認します。
- OpenShift Virtualization Operator をインストールします。
-
virtctl
ツール をインストールします。
3.1.1. 関連情報
3.2. スタートガイド
仮想マシンを作成します。
- Web コンソールを使用して仮想マシンを クイック作成 します。
- Windows ブート ソース を作成してカスタマイズします。
- 仮想マシンに VirtIO ドライバーと QEMU ゲストエージェント をインストールします。
仮想マシンに接続します。
- 仮想マシンに接続する
- 仮想マシンの管理
- Web コンソールから 仮想マシンを停止、開始、一時停止、再起動します。
-
仮想マシンを管理し、ポートを公開し、コマンド ラインから
virtctl
を使用して仮想マシンのシリアルコンソールに接続します。
3.3. 次のステップ
- 仮想マシンをセカンダリーネットワークに接続する
- OpenShift Virtualization 環境を監視する
- 仮想化の概要ページ で、リソース、詳細、ステータス、上位のコンシューマーを監視します。
- 仮想マシンダッシュボード で、仮想マシンに関する概要情報を表示します。
- 仮想マシンの ログ を表示します。
- デプロイメントの自動化
-
sysprep
を使用して Windows 仮想マシンのデプロイメントを自動化 します。
-
3.3.1. 関連情報
第4章 OpenShift Virtualization リリースノート
4.1. 多様性を受け入れるオープンソースの強化
Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。まずは、マスター (master)、スレーブ (slave)、ブラックリスト (blacklist)、ホワイトリスト (whitelist) の 4 つの用語の置き換えから始めます。この取り組みは膨大な作業を要するため、今後の複数のリリースで段階的に用語の置き換えを実施して参ります。詳細は、Red Hat CTO である Chris Wright のメッセージ をご覧ください。
4.2. Red Hat OpenShift Virtualization について
Red Hat OpenShift Virtualization は、従来の仮想マシン (VM) をコンテナーと共に実行される OpenShift Container Platform に組み込み、それらをネイティブ Kubernetes オブジェクトとして管理することを可能にします。
OpenShift Virtualization は、
アイコンで表されます。
OVN-Kubernetes または OpenShiftSDN のデフォルトの Container Network Interface (CNI) ネットワークプロバイダーのいずれかで OpenShift Virtualization を使用できます。
OpenShift Virtualization の機能 について参照してください。
OpenShift Virtualization のアーキテクチャーとデプロイメント の詳細を参照してください。
OpenShift Virtualization 用に クラスターを準備します。
4.2.1. OpenShift Virtualization サポートのクラスターバージョン
OpenShift Virtualization 4.11 は OpenShift Container Platform 4.11 クラスターで使用するためにサポートされます。Open Shift Virtualization の最新の z-stream リリースを使用するには、最初に Open Shift Container Platform の最新バージョンにアップグレードする必要があります。
4.2.2. サポート対象のゲストオペレーティングシステム
OpenShift Virtualization でサポートされているゲストオペレーティングシステムを確認するにはCertified Guest Operating Systems in Red Hat OpenStack Platform, Red Hat Virtualization and OpenShift Virtualization参照してください。
4.3. 新機能および変更された機能
- コンピュートノードがゼロの 3 ノードクラスター に OpenShift Virtualization をデプロイできるようになりました。
- デフォルトでは、仮想マシンは非特権ワークロードとしてセッションモードで実行されます。この機能は、escalation-of-privilege 攻撃を軽減することでクラスターのセキュリティーを向上させます。
- Red Hat Enterprise Linux (RHEL) 9 がゲストオペレーティングシステムとしてサポートされるようになりました。
- OpenShift Container Platform Web コンソールに Migration Toolkit for Virtualization (MTV) Operator をインストールするためのリンクが移動されました。現在は、Virtualization → Overview ページの Getting started resources カードの Related operators セクションにあります。
-
HyperConverged
カスタム リソース (CR) を編集することで、virtLauncher
、virtHandler
、virtController
、virtAPI
、およびvirtOperator
Pod ログの 詳細レベル を設定して、特定のコンポーネントをデバッグできます。
4.3.1. クイックスタート
-
クイックスタートツアーは、複数の OpenShift Virtualization 機能で利用できます。ツアーを表示するには、OpenShift Virtualization コンソールのヘッダーのメニューバーにある Help アイコン ? をクリックし、Quick Starts を選択します。Filter フィールドに
virtualization
キーワードを入力して、利用可能なツアーをフィルタリングできます。
4.3.2. ストレージ
- 仮想マシンのスナップショット に関する情報を提供する新しいメトリックを使用できます。
- 非接続環境のログ数を減らしたり、リソースの使用量を減らしたりできます。そのためには、事前定義済みブートソースの自動インポートと更新を無効 にします。
4.3.3. Web コンソール
- Web コンソールを使用して、テンプレートおよび仮想マシンの 起動モード を BIOS、UEFI、または UEFI (セキュア) に設定できます。
- VirtualMachine details ページの Scheduling タブで、Web コンソールから descheduler を有効または無効にできるようになりました。
- サイドメニューの Virtualization → VirtualMachines に移動して、仮想マシンにアクセスできます。各仮想マシンには、仮想マシンの設定、アラート、スナップショット、ネットワークインターフェイス、ディスク、使用状況データ、およびハードウェアデバイスに関する情報を提供する、更新された Overview タブ が表示されるようになりました。
- Web コンソールの Create a Virtual Machine ウィザードは仮想マシンの作成に使用できる使用可能なテンプレートをリスト表示する カタログ ページに置き換えられました。使用可能なブートソースを備えたテンプレートを使用して仮想マシンをすばやく作成したり、テンプレートをカスタマイズして仮想マシンを作成したりできます。
- Windows 仮想マシンに vGPU が接続されている場合、Web コンソールを使用して、デフォルトのディスプレイと vGPU ディスプレイを切り替える ことができるようになりました。
- サイド メニューの Virtualization → Templates に移動して、仮想マシンテンプレートにアクセスできます。更新された VirtualMachine Templates ページでは、ワークロードプロファイル、ブートソース、CPU とメモリーの設定など、各テンプレートに関する有用な情報が提供されるようになりました。
- Create Template ウィザードは VirtualMachine Templates ページから削除されました。YAML ファイルの例を編集して、仮想マシンテンプレートを作成 します。
4.4. 非推奨および削除された機能
4.4.1. 非推奨の機能
非推奨の機能は現在のリリースに含まれており、サポートされています。ただし、これらは今後のリリースで削除されるため、新規デプロイメントでの使用は推奨されません。
- 今後のリリースでは、従来の HPP カスタムリソースと関連するストレージクラスのサポートは非推奨になります。OpenShift Virtualization 4.11 以降、HPP Operator は Kubernetes Container Storage Interface (CSI) ドライバーを使用してローカルストレージを設定します。Operator は、引き続き HPP カスタムリソースの既存の (レガシー) 形式および関連付けられたストレージクラスをサポートします。HPP Operator を使用する場合、移行ストラテジーの一部として CSI ドライバーのストレージクラスを作成する ことを計画してください。
4.4.2. 削除された機能
削除された機能は、現在のリリースではサポートされません。
OpenShift Virtualization 4.11 は、以下のオブジェクトを含む nmstate のサポートを削除します。
-
NodeNetworkState
-
NodeNetworkConfigurationPolicy
-
NodeNetworkConfigurationEnactment
既存の nmstate 設定を維持およびサポートするには、OpenShift Virtualization 4.11 に更新する前に Kubernetes NMState Operator をインストールします。これは、OpenShift Container Platform Web コンソールの OperatorHub から、または OpenShift CLI (
oc
) を使用してインストールできます。-
Node Maintenance Operator (NMO) は OpenShift Virtualization に同梱されなくなりました。これは、OpenShift Container Platform Web コンソールの OperatorHub から NMO をインストール、または OpenShift CLI (
oc
) を使用してインストールできます。OpenShift Virtualization 4.10.2 以降のリリースから OpenShift Virtualization 4.11 に更新する前に、以下のいずれかのタスクを実行する必要があります。
- すべてのノードをメンテナンスモードから移動します。
-
スタンドアロン NMO をインストールし、
nodemaintenances.nodemaintenance.kubevirt.io
カスタムリソース (CR) をnodemaintenances.nodemaintenance.medik8s.io
CR に置き換えます。
- 仮想マシンテンプレートをお気に入りとしてマークできなくなりました。
4.5. テクノロジープレビューの機能
現在、今回のリリースに含まれる機能にはテクノロジープレビューのものがあります。これらの実験的機能は、実稼働環境での使用を目的としていません。これらの機能に関しては、Red Hat カスタマーポータルの以下のサポート範囲を参照してください。
- Microsoft Windows 11 をゲスト OS として使用できるようになりました。ただし、OpenShift Virtualization 4.11 は、BitLocker リカバリーの重要な機能に必要な USB ディスクをサポートしていません。回復キーを保護するには、BitLocker recovery guide で説明されている他の方法を使用します。
- OpenShift Virtualization を AWS ベアメタルノードにデプロイできるようになりました。
- OpenShift Virtualization には、緊急の対応が必要な問題が発生したときに通知する 重要なアラート があります。各アラートには、問題に対する説明、アラートが発生した理由、問題の原因を診断するためのトラブルシューティングプロセス、およびアラートの解決手順が含まれるようになりました。
-
管理者は、
HyperConverged
CR を編集することにより、宣言的に、仮想グラフィックス処理ユニット (vGPU) などの仲介デバイスを作成および公開できるようになりました。仮想マシンの所有者は、これらのデバイスを仮想マシンに割り当てることができます。
-
単一の
NodeNetworkConfigurationPolicy
マニフェストをクラスターに適用することにより、ブリッジに接続されている NIC の静的 IP 設定を転送できます。
- OpenShift Virtualization を IBM Cloud ベアメタルサーバーにインストールできるようになりました。他のクラウドプロバイダーが提供するベアメタルサーバーはサポートされません。
-
Compliance Operator をインストールし、
ocp4-moderate
およびocp4-moderate-node
プロファイル を使用してスキャンを実行することにより、OpenShift Virtualization クラスターのコンプライアンスの問題を確認できます。
- OpenShift Virtualization には、クラスターのメンテナンスとトラブルシューティングに使用できる定義済みのチェックアップを実行するための 診断フレームワーク が含まれるようになりました。定義済みのチェックアップを実行して、セカンダリー ネットワーク上の仮想マシンの ネットワーク接続性とレイテンシーをチェック できます。
- 帯域幅の使用率、並列移行の最大数、タイムアウトなどの特定のパラメーターを使用してライブマイグレーションポリシーを作成し、仮想マシンと namespace のラベルを使用して、仮想マシンのグループにポリシーを適用できます。
4.6. バグ修正
- 以前は、大規模なクラスターでは OpenShift Virtualization MAC プールマネージャーの起動に時間がかかりすぎる可能性があり、OpenShift Virtualization が準備状態にならないことがありました。今回の更新により、プールの初期化と起動の待ち時間が短縮されました。その結果、仮想マシンを正常に定義できるようになりました。(BZ#2035344)
- シャットダウン中に Windows 仮想マシンがクラッシュまたはハングした場合、手動で強制シャットダウンリクエストを発行して仮想マシンを停止できるようになりました。(BZ#2040766)
- 仮想マシンウィザードの YAML の例が更新され、アップストリームの最新の変更が含まれるようになりました。(BZ#2055492)
- VM Network Interfaces タブの Add Network Interface ボタンが、非特権ユーザーに対して無効にならなくなりました。(BZ#2056420)
- 非特権ユーザーは、RBAC ルールエラーを取得することなく、仮想マシンにディスクを正常に追加できるようになりました。(BZ#2056421)
- Web コンソールは、カスタム namespace にデプロイされた仮想マシンテンプレートを正常に表示するようになりました。(BZ#2054650)
-
以前は、
spec.evictionStrategy
フィールドが VMI のLiveMigrate
に設定されている場合、Single Node OpenShift (SNO) クラスターの更新が失敗していました。ライブマイグレーションを成功させるには、クラスターに複数のコンピュートノードが必要です。今回の更新により、spec.evictionStrategy
フィールドが SNO 環境の仮想マシンテンプレートから削除されました。その結果、クラスターの更新が成功するようになりました。(BZ#2073880)
4.7. 既知の問題
- シングルスタックの IPv6 クラスターで OpenShift Virtualization は実行できません。(BZ#2193267)
- コンピュートノードがさまざま含まれる、異種クラスターでは、HyperV Reenlightenment が有効になっている仮想マシンは、タイムスタンプカウンタースケーリング (TSC) をサポートしていないノード、TSC 頻度が非季節なノードでスケジュールできません。(BZ#2151169)
異なる SELinux コンテキストで 2 つの Pod を使用すると、
ocs-storagecluster-cephfs
ストレージクラスの VM が移行に失敗し、VM のステータスがPaused
に変わります。これは、両方の Pod がReadWriteMany
CephFS の共有ボリュームに同時にアクセスしようとするためです。(BZ#2092271)-
回避策として、
ocs-storagecluster-ceph-rbd
ストレージクラスを使用して、Red Hat Ceph Storage を使用するクラスターで VM をライブマイグレーションします。
-
回避策として、
OpenShift Virtualization を更新せずに OpenShift Container Platform をバージョン 4.11 に更新すると、VM スナップショットの復元に失敗します。これは、スナップショットオブジェクトに使用される API バージョン間の不一致が原因です。(BZ#2159442)
- 回避策として、OpenShift Virtualization を OpenShift Container Platform と同じマイナーバージョンに更新します。バージョンが同期されていることを確認するには、推奨される Automatic 承認ストラテジーを使用してください。
- OpenShift Virtualization をアンインストールしても、OpenShift Virtualization によって作成されたノードラベルは削除されません。ラベルは手動で削除する必要があります。(CNV-22036)
OVN-Kubernetes クラスターネットワークプロバイダーは、大量の
NodePort
サービスを作成すると、RAM と CPU の使用率がピークに達するとクラッシュします。これは、NodePort
サービスを使用して SSH アクセスを多数の仮想マシン (VM) に公開する場合に発生する可能性があります。(OCPBUGS-1940)-
回避策として、
NodePort
サービスを介して多数の仮想マシンに SSH アクセスを公開する場合は、OpenShift SDN クラスターネットワークプロバイダーを使用します。
-
回避策として、
バージョン 4.10 から OpenShift Virtualization 4.11 への更新は、スタンドアロンの Kubernetes NMState Operator をインストールするまでブロックされます。これは、クラスター設定が nmstate リソースを使用していない場合でも発生します。(BZ#2126537)
回避策として、以下を実施します。
クラスターにノードネットワーク設定ポリシーが定義されていないことを確認します。
$ oc get nncp
OpenShift Virtualization を更新する適切な方法を選択します。
- ノードネットワーク設定ポリシーのリストが空でない場合は、この手順を終了し、Kubernetes NMState Operator をインストールして、既存の nmstate 設定を保持およびサポートします。
- リストが空の場合は、ステップ 3 に進みます。
HyperConverged
カスタムリソース (CR) にアノテーションを付けます。次のコマンドは、既存の JSON パッチを上書きします。$ oc annotate --overwrite -n openshift-cnv hco kubevirt-hyperconverged 'networkaddonsconfigs.kubevirt.io/jsonpatch=[{"op": "replace","path": "/spec/nmstate", "value": null}]'
注記このパッチが適用されている間、
HyperConverged
オブジェクトはTaintedConfiguration
状態をレポートします。これは無害です。- OpenShift Virtualization を更新します。
更新が完了したら、次のコマンドを実行してアノテーションを削除します。
$ oc annotate -n openshift-cnv hco kubevirt-hyperconverged networkaddonsconfigs.kubevirt.io/jsonpatch-
- オプション: 上書きされた、以前に設定された JSON パッチを元に戻します。
Containerized Data Importer (CDI) によって作成された一部の永続ボリューム要求 (PVC) アノテーションにより、仮想マシンのスナップショット復元操作が無期限に停止する可能性があります。(BZ#2070366)
回避策として、アノテーションを手動で削除できます。
-
VirtualMachineSnapshot
CR のstatus.virtualMachineSnapshotContentName
値から、VirtualMachineSnapshotContent カスタムリソース (CR) 名を取得します。 -
VirtualMachineSnapshotContent
CR を編集し、k8s.io/cloneRequest
を含むすべての行を削除します。 VirtualMachine
オブジェクトでspec.dataVolumeTemplates
の値を指定しなかった場合は、次の両方の条件に該当するこの namespace のDataVolume
およびPersistentVolumeClaim
オブジェクトを削除します。-
オブジェクトの名前は
restore-
で始まります。 オブジェクトは仮想マシンによって参照されません。
spec.dataVolumeTemplates
の値を指定した場合、この手順はオプションとなります。
-
オブジェクトの名前は
-
更新された
VirtualMachineSnapshot
CR で 復元操作 を繰り返します。
-
-
Windows 11 仮想マシンは、FIPS モード で実行されているクラスターで起動しません。Windows 11 には、デフォルトで Trusted Platform Module (TPM) デバイスが必要です。ただし、
swtpm
(ソフトウェア TPM エミュレーター) パッケージは FIPS と互換性がありません。(BZ#2089301) -
Single Node OpenShift (SNO) クラスターでは、エビクションストラテジーが
LiveMigrate
に設定されている共通テンプレートから作成された仮想マシンでVMCannotBeEvicted
アラートが発生します。(BZ#2092412) Fedora 35 仮想マシン上の QEMU ゲストエージェントは SELinux によってブロックされ、データを報告しません。他の Fedora バージョンが影響を受ける可能性があります。(BZ#2028762)
- 回避策として、仮想マシンで SELinux を無効にし、QEMU ゲストエージェントコマンドを実行してから、SELinux を再度有効にします。
OpenShift Container Platform クラスターが OVN-Kubernetes をデフォルトの Container Network Interface (CNI) プロバイダーとして使用する場合、OVN-Kubernetes のホストネットワークトポロジーの変更により、Linux ブリッジまたはボンディングデバイスをホストのデフォルトインターフェイスに割り当てることはできません。(BZ#1885605)
- 回避策として、ホストに接続されたセカンダリーネットワークインターフェイスを使用するか、OpenShift SDN デフォルト CNI プロバイダーに切り替えることができます。
Red Hat Ceph Storage または Red Hat OpenShift Data Foundation Storage を使用する場合は、一度に 100 台以上の仮想マシンのクローンを作成できない場合があります。(BZ#1989527)
回避策として、ストレージプロファイルマニフェストに
spec.cloneStrategy: copy
を設定して、ホスト支援コピーを実行できます。以下に例を示します。apiVersion: cdi.kubevirt.io/v1beta1 kind: StorageProfile metadata: name: <provisioner_class> # ... spec: claimPropertySets: - accessModes: - ReadWriteOnce volumeMode: Filesystem cloneStrategy: copy 1 status: provisioner: <provisioner> storageClass: <provisioner_class>
- 1
- デフォルトのクローン作成方法は
copy
に設定されています。
場合によっては、複数の仮想マシンが読み取り/書き込みモードで同じ PVC をマウントできるため、データが破損する可能性があります。(BZ#1992753)
- 回避策として、複数の仮想マシンで読み取り/書き込みモードで単一の PVC を使用しないでください。
Pod Disruption Budget (PDB) は、移行可能な仮想マシンイメージについての Pod の中断を防ぎます。PDB が Pod の中断を検出する場合、
openshift-monitoring
はLiveMigrate
エビクションストラテジーを使用する仮想マシンイメージに対して 60 分ごとにPodDisruptionBudgetAtLimit
アラートを送信します。(BZ#2026733)- 回避策として、アラートをサイレンス にします。
OpenShift Virtualization は、Pod によって使用されるサービスアカウントトークンをその特定の Pod にリンクします。OpenShift Virtualization は、トークンが含まれるディスクイメージを作成してサービスアカウントボリュームを実装します。仮想マシンを移行すると、サービスアカウントボリュームが無効になります。(BZ#2037611)
- 回避策として、サービスアカウントではなくユーザーアカウントを使用してください。ユーザーアカウントトークンは特定の Pod にバインドされていないためです。
ドライバーをインストールする前に仲介デバイスを有効にするように
HyperConverged
カスタムリソース (CR) を設定すると、新しいデバイス設定は有効になりません。この問題は更新によってトリガーされます。たとえば、NVIDIA ドライバーをインストールするdaemonset
の前にvirt-handler
を更新した場合、ノードは仮想マシン GPU を提供することができません。(BZ#2046298)回避策として、以下を実施します。
-
HyperConverged
CR からmediatedDevicesConfiguration
およびpermittedHostDevices
を削除します。 -
使用する設定で、
mediatedDevicesConfiguration
およびpermittedHostDevices
スタンザの両方を更新します。
-
csi-clone
クローンストラテジーを使用して 100 台以上の仮想マシンのクローンを作成する場合、Ceph CSI はクローンをパージしない可能性があります。クローンの手動削除も失敗する可能性があります。(BZ#2055595)-
回避策として、
ceph-mgr
を再起動して仮想マシンのクローンをパージすることができます。
-
回避策として、
第5章 インストール
5.1. OpenShift Virtualization のクラスターの準備
OpenShift Virtualization をインストールする前にこのセクションを確認して、クラスターが要件を満たしていることを確認してください。
ユーザープロビジョニング、インストーラープロビジョニング、またはアシステッドインストーラーなど、任意のインストール方法を使用して、OpenShift Container Platform をデプロイできます。ただし、インストール方法とクラスタートポロジーは、スナップショットやライブマイグレーションなどの OpenShift Virtualization 機能に影響を与える可能性があります。
単一ノードの Openshift の違い
単一ノードのクラスターに OpenShift Virtualization をインストールできます。詳細は、単一ノードの Openshift について を参照してください。単一ノードの Openshift は高可用性をサポートしていないため、次の違いがあります。
- Pod disruption budgets はサポートされていません。
- ライブマイグレーション には対応していません。
-
データボリュームまたはストレージプロファイルを使用するテンプレートまたは仮想マシンには、
evictionStrategy
が設定されていてはなりません。
FIPS モード
クラスターを FIPS モード でインストールする場合、OpenShift Virtualization に追加の設定は必要ありません。
IPv6
シングルスタックの IPv6 クラスターで OpenShift Virtualization は実行できません。(BZ#2193267)
5.1.1. ハードウェアとオペレーティングシステムの要件
OpenShift Virtualization の次のハードウェアおよびオペレーティングシステム要件を確認してください。
サポート対象プラットフォーム
- オンプレミスのベアメタルサーバー
- Amazon Web Services ベアメタルインスタンス。詳細は、AWS ベアメタルノードへの OpenShift Virtualization のデプロイ を参照してください。
- IBM Cloud Bare Metal Servers。詳細は IBM Cloud Bare Metal Nodes への OpenShift Virtualization のデプロイ を参照してください。
AWS ベアメタルインスタンスまたは IBM Cloud Bare Metal Servers への OpenShift Virtualization のインストールは、テクノロジープレビュー機能のみです。テクノロジープレビュー機能は、Red Hat 製品のサービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではないことがあります。Red Hat は、実稼働環境でこれらを使用することを推奨していません。テクノロジープレビュー機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行いフィードバックを提供していただくことを目的としています。
Red Hat のテクノロジープレビュー機能のサポート範囲に関する詳細は、テクノロジープレビュー機能のサポート範囲 を参照してください。
- 他のクラウドプロバイダーが提供するベアメタルインスタンスまたはサーバーはサポートされていません。
CPU の要件
- Red Hat Enterprise Linux (RHEL) 8 でサポート
- Intel 64 または AMD64 CPU 拡張機能のサポート
- Intel VT または AMD-V ハードウェア仮想化拡張機能が有効化されている。
- NX (実行なし) フラグが有効
ストレージ要件
- OpenShift Container Platform によるサポート
Red Hat OpenShift Data Foundation を使用して OpenShift Virtualization をデプロイする場合は、Windows 仮想マシンディスク用の専用ストレージクラスを作成する必要があります。詳細は 、Windows VM の ODF PersistentVolumes の最適化 を参照してください。
オペレーティングシステム要件
ワーカーノードにインストールされた Red Hat Enterprise Linux CoreOS (RHCOS)
注記RHEL ワーカー ノードはサポートされていません。
- クラスターが CPU の異なるワーカーノードを使用している場合、CPU ごとに能力が異なるため、ライブマイグレーションの失敗が発生する可能性があります。このような失敗を回避するには、各ノードに適切な能力の CPU を使用し、仮想マシンにノードアフィニティーを設定して、移行が成功するようにします。詳細は、必須のノードのアフィニティールールの設定 を参照してください。
関連情報
- RHCOS について
- サポートされている CPU の Red Hat Ecosystem Catalog
- 対応ストレージ
5.1.2. 物理リソースのオーバーヘッド要件
OpenShift Virtualization は OpenShift Container Platform のアドオンであり、クラスターの計画時に考慮する必要のある追加のオーバーヘッドを強要します。各クラスターマシンは、OpenShift Container Platform の要件に加えて、以下のオーバーヘッドの要件を満たす必要があります。クラスター内の物理リソースを過剰にサブスクライブすると、パフォーマンスに影響する可能性があります。
本書に記載されている数は、Red Hat のテスト方法およびセットアップに基づいています。これらの数は、独自のセットアップおよび環境に応じて異なります。
5.1.2.1. メモリーのオーバーヘッド
以下の式を使用して、OpenShift Virtualization のメモリーオーバーヘッドの値を計算します。
クラスターメモリーのオーバーヘッド
Memory overhead per infrastructure node ≈ 150 MiB
Memory overhead per worker node ≈ 360 MiB
さらに、OpenShift Virtualization 環境リソースには、すべてのインフラストラクチャーノードに分散される合計 2179 MiB の RAM が必要です。
仮想マシンのメモリーオーバーヘッド
Memory overhead per virtual machine ≈ (1.002 * requested memory) + 146 MiB \ + 8 MiB * (number of vCPUs) \ 1 + 16 MiB * (number of graphics devices) 2
お使いの環境に Single Root I/O Virtualization (SR-IOV) ネットワークデバイスまたは Graphics Processing Unit (GPU) が含まれる場合、それぞれのデバイスに 1 GiB の追加のメモリーオーバーヘッドを割り当てます。
5.1.2.2. CPU オーバーヘッド
以下の式を使用して、OpenShift Virtualization のクラスタープロセッサーのオーバーヘッド要件を計算します。仮想マシンごとの CPU オーバーヘッドは、個々の設定によって異なります。
クラスターの CPU オーバーヘッド
CPU overhead for infrastructure nodes ≈ 4 cores
OpenShift Virtualization は、ロギング、ルーティング、およびモニタリングなどのクラスターレベルのサービスの全体的な使用率を増加させます。このワークロードに対応するには、インフラストラクチャーコンポーネントをホストするノードに、4 つの追加コア (4000 ミリコア) の容量があり、これがそれらのノード間に分散されていることを確認します。
CPU overhead for worker nodes ≈ 2 cores + CPU overhead per virtual machine
仮想マシンをホストする各ワーカーノードには、仮想マシンのワークロードに必要な CPU に加えて、OpenShift Virtualization 管理ワークロード用に 2 つの追加コア (2000 ミリコア) の容量が必要です。
仮想マシンの CPU オーバーヘッド
専用の CPU が要求される場合は、仮想マシン 1 台につき CPU 1 つとなり、クラスターの CPU オーバーヘッド要件に影響が出てきます。それ以外の場合は、仮想マシンに必要な CPU の数に関する特別なルールはありません。
5.1.2.3. ストレージのオーバーヘッド
以下のガイドラインを使用して、OpenShift Virtualization 環境のストレージオーバーヘッド要件を見積もります。
クラスターストレージオーバーヘッド
Aggregated storage overhead per node ≈ 10 GiB
10 GiB は、OpenShift Virtualization のインストール時にクラスター内の各ノードについてのディスク上のストレージの予想される影響に相当します。
仮想マシンのストレージオーバーヘッド
仮想マシンごとのストレージオーバーヘッドは、仮想マシン内のリソース割り当ての特定の要求により異なります。この要求は、クラスター内の別の場所でホストされるノードまたはストレージリソースの一時ストレージに対するものである可能性があります。OpenShift Virtualization は現在、実行中のコンテナー自体に追加の一時ストレージを割り当てていません。
5.1.2.4. 例
クラスター管理者が、クラスター内の 10 台の (それぞれ 1 GiB の RAM と 2 つの vCPU の) 仮想マシンをホストする予定の場合、クラスター全体で影響を受けるメモリーは 11.68 GiB になります。クラスターの各ノードについて予想されるディスク上のストレージの影響は 10 GiB で示され、仮想マシンのワークロードをホストするワーカーノードについての CPU の影響は最小 2 コアで示されます。
5.1.3. オブジェクトの最大値
クラスターを計画するときは、次のテスト済みオブジェクトの最大数を考慮する必要があります。
5.1.4. 制限されたネットワーク環境
インターネット接続のない制限された環境に OpenShift Virtualization をインストールする場合は、制限されたネットワーク用に Operator Lifecycle Manager を設定 する必要があります。
インターネット接続が制限されている場合、Operator Lifecycle Manager でプロキシーサポートを設定 して、Red Hat が提供する OperatorHub にアクセスすることができます。
5.1.5. ライブマイグレーション
ライブマイグレーションには次の要件があります。
-
ReadWriteMany
(RWX) アクセスモードの共有ストレージ - 十分な RAM およびネットワーク帯域幅
- 仮想マシンがホストモデルの CPU を使用する場合、ノードは仮想マシンのホストモデルの CPU をサポートする必要があります。
ライブマイグレーションを引き起こすノードドレインをサポートするために、クラスター内に十分なメモリーリクエスト容量があることを確認する必要があります。以下の計算を使用して、必要な予備のメモリーを把握できます。
Product of (Maximum number of nodes that can drain in parallel) and (Highest total VM memory request allocations across nodes)
クラスターで 並行して実行できるデフォルトの移行数 は 5 です。
5.1.6. スナップショットとクローン作成
スナップショットとクローン作成の要件は、OpenShift Virtualization ストレージ機能 を参照してください。
5.1.7. クラスターの高可用性オプション
クラスターには、次の高可用性 (HA) オプションのいずれかを設定できます。
インストーラーによってプロビジョニングされたインフラストラクチャー (IPI) の 自動高可用性は、マシンの可用性チェック をデプロイすることで利用できます。
注記インストーラーでプロビジョニングされるインフラストラクチャーを使用してインストールされ、MachineHealthCheck が適切に設定された OpenShift Container Platform クラスターで、ノードで MachineHealthCheck が失敗し、クラスターで利用できなくなると、そのノードは再利用されます。障害が発生したノードで実行された仮想マシンでは、一連の条件によって次に起こる動作が変わります。潜在的な結果と RunStrategy がそれらの結果にどのように影響するかについての詳細情報は、仮想マシンの RunStrategies について を参照してください。
IPI と非 IPI の両方の自動高可用性は、OpenShift Container Platform クラスターで Node Health Check Operator を使用して
NodeHealthCheck
コントローラーをデプロイすることで利用できます。コントローラーは異常なノードを識別し、セルフノード修復 Operator を使用して異常なノードを修復します。重要Node Health Check Operator は、テクノロジープレビュー機能のみです。テクノロジープレビュー機能は、Red Hat 製品のサービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではないことがあります。Red Hat は、実稼働環境でこれらを使用することを推奨していません。テクノロジープレビュー機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行いフィードバックを提供していただくことを目的としています。
Red Hat のテクノロジープレビュー機能のサポート範囲に関する詳細は、テクノロジープレビュー機能のサポート範囲 を参照してください。
モニタリングシステムまたは有資格者を使用してノードの可用性をモニターすることにより、あらゆるプラットフォームの高可用性を利用できます。ノードが失われた場合は、これをシャットダウンして
oc delete node <lost_node>
を実行します。注記外部モニタリングシステムまたは資格のある人材によるノードの正常性の監視が行われない場合、仮想マシンは高可用性を失います。
5.2. OpenShift Virtualization コンポーネントのノードの指定
ノードの配置ルールを設定して、OpenShift Virtualization Operator、ワークロード、およびコントローラーをデプロイするノードを指定します。
OpenShift Virtualization のインストール後に一部のコンポーネントのノードの配置を設定できますが、ワークロード用にノードの配置を設定する場合には仮想マシンを含めることはできません。
5.2.1. 仮想化コンポーネントのノード配置について
OpenShift Virtualization がそのコンポーネントをデプロイする場所をカスタマイズして、以下を確認する必要がある場合があります。
- 仮想マシンは、仮想化ワークロード用のノードにのみデプロイされる。
- Operator はインフラストラクチャーノードにのみデプロイされる。
- 特定のノードは OpenShift Virtualization の影響を受けない。たとえば、クラスターで実行される仮想化に関連しないワークロードがあり、それらのワークロードを OpenShift Virtualization から分離する必要があるとします。
5.2.1.1. ノードの配置ルールを仮想化コンポーネントに適用する方法
対応するオブジェクトを直接編集するか、Web コンソールを使用して、コンポーネントのノードの配置ルールを指定できます。
-
Operator Lifecycle Manager (OLM) がデプロイする OpenShift Virtualization Operator の場合は、OLM
Subscription
オブジェクトを直接編集します。現時点では、Web コンソールを使用してSubscription
オブジェクトのノードの配置ルールを設定することはできません。 -
OpenShift Virtualization Operator がデプロイするコンポーネントの場合は、
HyperConverged
オブジェクトを直接編集するか、OpenShift Virtualization のインストール時に Web コンソールを使用してこれを設定します。 ホストパスプロビジョナーの場合、
HostPathProvisioner
オブジェクトを直接編集するか、Web コンソールを使用してこれを設定します。警告ホストパスプロビジョナーと仮想化コンポーネントを同じノードでスケジュールする必要があります。スケジュールしない場合は、ホストパスプロビジョナーを使用する仮想化 Pod を実行できません。
オブジェクトに応じて、以下のルールタイプを 1 つ以上使用できます。
nodeSelector
- Pod は、キーと値のペアまたはこのフィールドで指定したペアを使用してラベルが付けられたノードに Pod をスケジュールできます。ノードには、リスト表示されたすべてのペアに一致するラベルがなければなりません。
affinity
- より表現的な構文を使用して、ノードと Pod に一致するルールを設定できます。アフィニティーを使用すると、ルールの適用方法に追加のニュアンスを持たせることができます。たとえば、ルールがハード要件ではなく基本設定になるように指定し、ルールの条件が満たされない場合も Pod がスケジュールされるようにすることができます。
tolerations
- 一致するテイントを持つノードで Pod をスケジュールできます。テイントがノードに適用される場合、そのノードはテイントを容認する Pod のみを受け入れます。
5.2.1.2. OLM Subscription オブジェクトのノード配置
OLM が OpenShift Virtualization Operator をデプロイするノードを指定するには、OpenShift Virtualization のインストール時に Subscription
オブジェクトを編集します。以下の例に示されるように、spec.config
フィールドにノードの配置ルールを追加できます。
apiVersion: operators.coreos.com/v1alpha1
kind: Subscription
metadata:
name: hco-operatorhub
namespace: openshift-cnv
spec:
source: redhat-operators
sourceNamespace: openshift-marketplace
name: kubevirt-hyperconverged
startingCSV: kubevirt-hyperconverged-operator.v4.11.6
channel: "stable"
config: 1
- 1
config
フィールドはnodeSelector
およびtolerations
をサポートしますが、affinity
はサポートしません。
5.2.1.3. HyperConverged オブジェクトのノード配置
OpenShift Virtualization がそのコンポーネントをデプロイするノードを指定するには、OpenShift Virtualization のインストール時に作成する HyperConverged Cluster カスタムリソース (CR) ファイルに nodePlacement
オブジェクトを含めることができます。以下の例のように、spec.infra
および spec.workloads
フィールドに nodePlacement
を含めることができます。
apiVersion: hco.kubevirt.io/v1beta1
kind: HyperConverged
metadata:
name: kubevirt-hyperconverged
namespace: openshift-cnv
spec:
infra:
nodePlacement: 1
...
workloads:
nodePlacement:
...
- 1
nodePlacement
フィールドは、nodeSelector
、affinity
、およびtolerations
フィールドをサポートします。
5.2.1.4. HostPathProvisioner オブジェクトのノード配置
ノードの配置ルールは、ホストパスプロビジョナーのインストール時に作成する HostPathProvisioner
オブジェクトの spec.workload
フィールドで設定できます。
apiVersion: hostpathprovisioner.kubevirt.io/v1beta1
kind: HostPathProvisioner
metadata:
name: hostpath-provisioner
spec:
imagePullPolicy: IfNotPresent
pathConfig:
path: "</path/to/backing/directory>"
useNamingPrefix: false
workload: 1
- 1
workload
フィールドは、nodeSelector
、affinity
、およびtolerations
フィールドをサポートします。
5.2.1.5. 関連情報
5.2.2. マニフェストの例
以下の YAML ファイルの例では、nodePlacement
、affinity
、および tolerations
オブジェクトを使用して OpenShift Virtualization コンポーネントのノード配置をカスタマイズします。
5.2.2.1. Operator Lifecycle Manager サブスクリプションオブジェクト
5.2.2.1.1. 例: OLM Subscription オブジェクトの nodeSelector を使用したノード配置
この例では、OLM が example.io/example-infra-key = example-infra-value
のラベルが付けられたノードに OpenShift Virtualization Operator を配置するように、nodeSelector
を設定します。
apiVersion: operators.coreos.com/v1alpha1 kind: Subscription metadata: name: hco-operatorhub namespace: openshift-cnv spec: source: redhat-operators sourceNamespace: openshift-marketplace name: kubevirt-hyperconverged startingCSV: kubevirt-hyperconverged-operator.v4.11.6 channel: "stable" config: nodeSelector: example.io/example-infra-key: example-infra-value
5.2.2.1.2. 例: OLM Subscription オブジェクトの容認を使用したノード配置
この例では、OLM が OpenShift Virtualization Operator をデプロイするために予約されるノードには key=virtualization:NoSchedule
テイントのラベルが付けられます。一致する容認のある Pod のみがこれらのノードにスケジュールされます。
apiVersion: operators.coreos.com/v1alpha1 kind: Subscription metadata: name: hco-operatorhub namespace: openshift-cnv spec: source: redhat-operators sourceNamespace: openshift-marketplace name: kubevirt-hyperconverged startingCSV: kubevirt-hyperconverged-operator.v4.11.6 channel: "stable" config: tolerations: - key: "key" operator: "Equal" value: "virtualization" effect: "NoSchedule"
5.2.2.2. HyperConverged オブジェクト
5.2.2.2.1. 例: HyperConverged Cluster CR の nodeSelector を使用したノード配置
この例では、nodeSelector
は、インフラストラクチャーリソースが example.io/example-infra-key = example-infra-value
のラベルが付けられたノードに配置されるように設定され、ワークロードは example.io/example-workloads-key = example-workloads-value
のラベルが付けられたノードに配置されるように設定されます。
apiVersion: hco.kubevirt.io/v1beta1 kind: HyperConverged metadata: name: kubevirt-hyperconverged namespace: openshift-cnv spec: infra: nodePlacement: nodeSelector: example.io/example-infra-key: example-infra-value workloads: nodePlacement: nodeSelector: example.io/example-workloads-key: example-workloads-value
5.2.2.2.2. 例: HyperConverged Cluster CR のアフィニティーを使用したノード配置
この例では、affinity
は、インフラストラクチャーリソースが example.io/example-infra-key = example-infra-value
のラベルが付けられたノードに配置されるように設定され、ワークロードが example.io/example-workloads-key = example-workloads-value
のラベルが付けられたノードに配置されるように設定されます。ワークロード用には 9 つ以上の CPU を持つノードが優先されますが、それらが利用可能ではない場合も、Pod は依然としてスケジュールされます。
apiVersion: hco.kubevirt.io/v1beta1 kind: HyperConverged metadata: name: kubevirt-hyperconverged namespace: openshift-cnv spec: infra: nodePlacement: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: example.io/example-infra-key operator: In values: - example-infra-value workloads: nodePlacement: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: example.io/example-workloads-key operator: In values: - example-workloads-value preferredDuringSchedulingIgnoredDuringExecution: - weight: 1 preference: matchExpressions: - key: example.io/num-cpus operator: Gt values: - 8
5.2.2.2.3. 例: HyperConverged Cluster CR の容認を使用したノード配置
この例では、OpenShift Virtualization コンポーネント用に予約されるノードには key=virtualization:NoSchedule
テイントのラベルが付けられます。一致する容認のある Pod のみがこれらのノードにスケジュールされます。
apiVersion: hco.kubevirt.io/v1beta1 kind: HyperConverged metadata: name: kubevirt-hyperconverged namespace: openshift-cnv spec: workloads: nodePlacement: tolerations: - key: "key" operator: "Equal" value: "virtualization" effect: "NoSchedule"
5.2.2.3. HostPathProvisioner オブジェクト
5.2.2.3.1. 例: HostPathProvisioner オブジェクトの nodeSelector を使用したノード配置
この例では、example.io/example-workloads-key = example-workloads-value
のラベルが付けられたノードにワークロードが配置されるように nodeSelector
を設定します。
apiVersion: hostpathprovisioner.kubevirt.io/v1beta1 kind: HostPathProvisioner metadata: name: hostpath-provisioner spec: imagePullPolicy: IfNotPresent pathConfig: path: "</path/to/backing/directory>" useNamingPrefix: false workload: nodeSelector: example.io/example-workloads-key: example-workloads-value
5.3. Web コンソールを使用した OpenShift Virtualization のインストール
OpenShift Virtualization をインストールし、仮想化機能を OpenShift Container Platform クラスターに追加します。
OpenShift Container Platform 4.11 web console を使用して、OpenShift Virtualization Operator にサブスクライブし、これをデプロイすることができます。
5.3.1. OpenShift Virtualization Operator のインストール
OpenShift Container Platform Web コンソールから OpenShift Virtualization Operator をインストールできます。
前提条件
- OpenShift Container Platform 4.11 をクラスターにインストールしていること。
-
cluster-admin
パーミッションを持つユーザーとして OpenShift Container Platform Web コンソールにログインすること。
手順
- Administrator パースペクティブから、Operators → OperatorHub をクリックします。
- Filter by keyword フィールドに Virtualization と入力します。
- {CNVOperatorDisplayName} タイルと Red Hat ソースラベルを選択します。
- Operator についての情報を確認してから、Install をクリックします。
Install Operator ページで以下を行います。
- 選択可能な Update Channel オプションの一覧から stable を選択します。これにより、OpenShift Container Platform バージョンと互換性がある OpenShift Virtualization のバージョンをインストールすることができます。
インストールされた namespace の場合、Operator recommended namespace オプションが選択されていることを確認します。これにより、Operator が必須の
openshift-cnv
namespace にインストールされます。この namespace は存在しない場合は、自動的に作成されます。警告OpenShift Virtualization Operator を
openshift-cnv
以外の namespace にインストールしようとすると、インストールが失敗します。Approval Strategy の場合に、stable 更新チャネルで新しいバージョンが利用可能になったときに OpenShift Virtualization が自動更新されるように、デフォルト値である Automaticを選択することを強く推奨します。
Manual 承認ストラテジーを選択することは可能ですが、クラスターのサポート容易性および機能に対応するリスクが高いため、推奨できません。これらのリスクを完全に理解していて、Automatic を使用できない場合のみ、Manual を選択してください。
警告OpenShift Virtualization は対応する OpenShift Container Platform バージョンで使用される場合にのみサポートされるため、OpenShift Virtualization が更新されないと、クラスターがサポートされなくなる可能性があります。
-
Install をクリックし、Operator を
openshift-cnv
namespace で利用可能にします。 - Operator が正常にインストールされたら、Create HyperConverged をクリックします。
- オプション: OpenShift Virtualization コンポーネントの Infra および Workloads ノード配置オプションを設定します。
- Create をクリックして OpenShift Virtualization を起動します。
検証
- Workloads → Pods ページに移動して、OpenShift Virtualization Pod がすべて Running 状態になるまでこれらの Pod をモニターします。すべての Pod で Running 状態が表示された後に、OpenShift Virtualization を使用できます。
5.3.2. 次のステップ
以下のコンポーネントを追加で設定する必要がある場合があります。
- ホストパスプロビジョナー は、OpenShift Virtualization 用に設計されたローカルストレージプロビジョナーです。仮想マシンのローカルストレージを設定する必要がある場合、まずホストパスプロビジョナーを有効にする必要があります。
5.4. CLI を使用した OpenShift Virtualization のインストール
OpenShift Virtualization をインストールし、仮想化機能を OpenShift Container Platform クラスターに追加します。コマンドラインを使用してマニフェストをクラスターに適用し、OpenShift Virtualization Operator にサブスクライブし、デプロイできます。
OpenShift Virtualization がそのコンポーネントをインストールするノードを指定するには、ノードの配置ルールを設定 します。
5.4.1. 前提条件
- OpenShift Container Platform 4.11 をクラスターにインストールしていること。
-
OpenShift CLI (
oc
) がインストールされている。 -
cluster-admin
権限を持つユーザーとしてログインしている。
5.4.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.v4.11.6 channel: "stable" 1
- 1
stable
チャネルを使用することで、OpenShift Container Platform バージョンと互換性のある OpenShift Virtualization のバージョンをインストールすることができます。
以下のコマンドを実行して、OpenShift Virtualization に必要な
Namespace
、OperatorGroup
、およびSubscription
オブジェクトを作成します。$ oc apply -f <file name>.yaml
YAML ファイルで、証明書のローテーションパラメーターを設定 できます。
5.4.3. CLI を使用した OpenShift Virtualization Operator のデプロイ
oc
CLI を使用して OpenShift Virtualization Operator をデプロイすることができます。
前提条件
-
openshift-cnv
namespace の OpenShift Virtualization カタログへのアクティブなサブスクリプション。
手順
以下のマニフェストを含む YAML ファイルを作成します。
apiVersion: hco.kubevirt.io/v1beta1 kind: HyperConverged metadata: name: kubevirt-hyperconverged namespace: openshift-cnv spec:
以下のコマンドを実行して OpenShift Virtualization Operator をデプロイします。
$ oc apply -f <file_name>.yaml
検証
openshift-cnv
namespace の Cluster Service Version (CSV) のPHASE
を監視して、OpenShift Virtualization が正常にデプロイされたことを確認します。以下のコマンドを実行します。$ watch oc get csv -n openshift-cnv
以下の出力は、デプロイメントに成功したかどうかを表示します。
出力例
NAME DISPLAY VERSION REPLACES PHASE kubevirt-hyperconverged-operator.v4.11.6 OpenShift Virtualization 4.11.6 Succeeded
5.4.4. 次のステップ
以下のコンポーネントを追加で設定する必要がある場合があります。
- ホストパスプロビジョナー は、OpenShift Virtualization 用に設計されたローカルストレージプロビジョナーです。仮想マシンのローカルストレージを設定する必要がある場合、まずホストパスプロビジョナーを有効にする必要があります。
5.5. virtctl クライアントの有効化
virtctl
クライアントは、OpenShift Virtualization リソースを管理するためのコマンドラインユーティリティーです。これは、Linux、macOS、および Windows ディストリビューションで利用できます。
5.5.1. virtctl クライアントのダウンロードおよびインストール
5.5.1.1. virtctl クライアントのダウンロード
ConsoleCLIDownload
カスタムリソース (CR) で提供されるリンクを使用して virtctl
クライアントをダウンロードします。
手順
以下のコマンドを実行して
ConsoleCLIDownload
オブジェクトを表示します。$ oc get ConsoleCLIDownload virtctl-clidownloads-kubevirt-hyperconverged -o yaml
-
お使いのディストリビューションにリスト表示されているリンクを使用して
virtctl
クライアントをダウンロードします。
5.5.1.2. virtctl クライアントのインストール
オペレーティングシステムに適した場所からダウンロードした後に、virtctl
クライアントをデプロイメントし、インストールします。
前提条件
-
virtctl
クライアントをダウンロードしている。
手順
Linux の場合
tarball を展開します。以下の CLI コマンドは、tarball と同じディレクトリーにデプロイメントします。
$ tar -xvf <virtctl-version-distribution.arch>.tar.gz
デプロイメントしたフォルダー階層に移動し、以下のコマンドを実行して
virtctl
バイナリーを実行可能にします。$ chmod +x <virtctl-file-name>
-
virtctl
バイナリーをPATH 環境変数
にあるディレクトリーに移動します。 パスを確認するには、以下のコマンドを実行します。
$ echo $PATH
Windows ユーザーの場合:
- アーカイブを展開し、解凍します。
-
展開したフォルダー階層に移動し、
virtctl
実行可能ファイルをダブルクリックしてクライアントをインストールします。 -
virtctl
バイナリーをPATH 環境変数
にあるディレクトリーに移動します。 パスを確認するには、以下のコマンドを実行します。
C:\> path
macOS ユーザーの場合:
- アーカイブを展開し、解凍します。
-
virtctl
バイナリーをPATH 環境変数
にあるディレクトリーに移動します。 パスを確認するには、以下のコマンドを実行します。
echo $PATH
5.5.2. virtctl RPM パッケージのインストール
OpenShift Virtualization リポジトリーを有効にした後、virtctl
クライアントを RPM としてインストールできます。
5.5.2.1. OpenShift Virtualization リポジトリーの有効化
Red Hat Enterprise Linux (RHEL) のバージョンの OpenShift Virtualization リポジトリーを有効にします。
前提条件
- システムは、Red Hat Container Native Virtualization エンタイトルメントへの有効なサブスクリプションを持つ Red Hat アカウントに登録されています。
手順
subscription-manager
CLI ツールを使用して、オペレーティングシステムに適切な OpenShift Virtualization リポジトリーを有効にします。RHEL 8 のリポジトリーを有効にするには、次を実行します。
# subscription-manager repos --enable cnv-4.11-for-rhel-8-x86_64-rpms
RHEL 7 のリポジトリーを有効にするには、次を実行します。
# subscription-manager repos --enable rhel-7-server-cnv-4.11-rpms
5.5.2.2. yum ユーティリティーを使用した virtctl クライアントのインストール
kubevirt-virtctl
パッケージから virtctl
クライアントをインストールします。
前提条件
- Red Hat Enterprise Linux (RHEL) システムで OpenShift Virtualization リポジトリーを有効にしました。
手順
kubevirt-virtctl
パッケージをインストールします。# yum install kubevirt-virtctl
5.5.3. 関連情報
- OpenShift Virtualization の CLI ツールの使用。
5.6. OpenShift Virtualization のアンインストール
Web コンソールまたはコマンドラインインターフェイス (CLI) を使用して OpenShift Virtualization をアンインストールし、OpenShift Virtualization ワークロード、Operator、およびそのリソースを削除します。
5.6.1. Web コンソールを使用した OpenShift Virtualization のアンインストール
Web コンソール を使用して OpenShift Virtualization をアンインストールし、以下のタスクを実行します。
最初に、すべての 仮想マシン、仮想マシンインスタンス、および データボリューム を削除する必要があります。
ワークロードがクラスターに残っている間は、OpenShift Virtualization をアンインストールできません。
5.6.1.1. HyperConverged カスタムリソースの削除
OpenShift Virtualization をアンインストールするには、最初に HyperConverged
カスタムリソース (CR) を削除します。
前提条件
-
cluster-admin
パーミッションを持つアカウントを使用して OpenShift Container Platform クラスターにアクセスできる。
手順
- Operators → Installed Operators ページに移動します。
- OpenShift Virtualization Operator を選択します。
- OpenShift Virtualization Deployment タブをクリックします。
-
kubevirt-hyperconverged
の横にある Options メニューをクリックし、Delete HyperConverged を選択します。
- 確認ウィンドウで Delete をクリックします。
5.6.1.2. Web コンソールの使用によるクラスターからの Operator の削除
クラスター管理者は Web コンソールを使用して、選択した namespace からインストールされた Operator を削除できます。
前提条件
-
cluster-admin
パーミッションを持つアカウントを使用して OpenShift Container Platform クラスター Web コンソールにアクセスできる。
手順
- Operators → Installed Operators ページに移動します。
- スクロールするか、キーワードを Filter by name フィールドに入力して、削除する Operator を見つけます。次に、それをクリックします。
Operator Details ページの右側で、Actions 一覧から Uninstall Operator を選択します。
Uninstall Operator? ダイアログボックスが表示されます。
Uninstall を選択し、Operator、Operator デプロイメント、および Pod を削除します。このアクションの後には、Operator は実行を停止し、更新を受信しなくなります。
注記このアクションは、カスタムリソース定義 (CRD) およびカスタムリソース (CR) など、Operator が管理するリソースは削除されません。Web コンソールおよび継続して実行されるクラスター外のリソースによって有効にされるダッシュボードおよびナビゲーションアイテムには、手動でのクリーンアップが必要になる場合があります。Operator のアンインストール後にこれらを削除するには、Operator CRD を手動で削除する必要があります。
5.6.1.3. Web コンソールを使用した namespace の削除
OpenShift Container Platform Web コンソールを使用して namespace を削除できます。
前提条件
-
cluster-admin
パーミッションを持つアカウントを使用して OpenShift Container Platform クラスターにアクセスできる。
手順
- Administration → Namespaces に移動します。
- namespace の一覧で削除する必要のある namespace を見つけます。
-
namespace の一覧の右端で、Options メニュー
から Delete Namespace を選択します。
- Delete Namespace ペインが表示されたら、フィールドから削除する namespace の名前を入力します。
- Delete をクリックします。
5.6.1.4. OpenShift Virtualization カスタムリソース定義の削除
Web コンソールを使用して、OpenShift Virtualization カスタムリソース定義 (CRD) を削除できます。
前提条件
-
cluster-admin
パーミッションを持つアカウントを使用して OpenShift Container Platform クラスターにアクセスできる。
手順
- Administration → CustomResourceDefinitions に移動します。
-
Label フィルターを選択し、Search フィールドに
operators.coreos.com/kubevirt-hyperconverged.openshift-cnv
と入力して OpenShift Virtualization CRD を表示します。 -
各 CRD の横にある Options メニュー
をクリックし、Delete CustomResourceDefinition の削除を選択します。
5.6.2. CLI を使用した OpenShift Virtualization のアンインストール
コマンドラインインターフェイス (CLI) を使用して OpenShift Virtualization をアンインストールできます。
前提条件
-
cluster-admin
パーミッションを持つアカウントを使用して OpenShift Container Platform クラスターにアクセスできる。 - OpenShift CLI (oc) がインストールされている。
- すべての 仮想マシン、仮想マシンインスタンス、および データボリューム を削除しました。ワークロードがクラスターに残っている間は、OpenShift Virtualization をアンインストールできません。
手順
HyperConverged
カスタムリソースを削除します。$ oc delete HyperConverged kubevirt-hyperconverged -n openshift-cnv
OpenShift Virtualization Operator サブスクリプションを削除します。
$ oc delete subscription kubevirt-hyperconverged -n openshift-cnv
OpenShift Virtualization
ClusterServiceVersion
リソースを削除します。$ oc delete csv -n openshift-cnv -l operators.coreos.com/kubevirt-hyperconverged.openshift-cnv
OpenShift Virtualization namespace を削除します。
$ oc delete namespace openshift-cnv
dry-run
オプションを指定してoc delete crd
コマンドを実行し、OpenShift Virtualization カスタムリソース定義 (CRD) を一覧表示します。$ oc delete crd --dry-run=client -l operators.coreos.com/kubevirt-hyperconverged.openshift-cnv
出力例
customresourcedefinition.apiextensions.k8s.io "cdis.cdi.kubevirt.io" deleted (dry run) customresourcedefinition.apiextensions.k8s.io "hostpathprovisioners.hostpathprovisioner.kubevirt.io" deleted (dry run) customresourcedefinition.apiextensions.k8s.io "hyperconvergeds.hco.kubevirt.io" deleted (dry run) customresourcedefinition.apiextensions.k8s.io "kubevirts.kubevirt.io" deleted (dry run) customresourcedefinition.apiextensions.k8s.io "networkaddonsconfigs.networkaddonsoperator.network.kubevirt.io" deleted (dry run) customresourcedefinition.apiextensions.k8s.io "ssps.ssp.kubevirt.io" deleted (dry run) customresourcedefinition.apiextensions.k8s.io "tektontasks.tektontasks.kubevirt.io" deleted (dry run)
dry-run
オプションを指定せずにoc delete crd
コマンドを実行して、CRD を削除します。$ oc delete crd -l operators.coreos.com/kubevirt-hyperconverged.openshift-cnv
第6章 OpenShift Virtualization の更新
Operator Lifecycle Manager(OLM) が OpenShift Virtualization の z-stream およびマイナーバージョンの更新を提供する方法を確認します。
Node Maintenance Operator (NMO) は OpenShift Virtualization に同梱されなくなりました。これは、OpenShift Container Platform Web コンソールの OperatorHub から NMO をインストール、または OpenShift CLI (
oc
) を使用してインストールできます。OpenShift Virtualization 4.10.2 以降のリリースから OpenShift Virtualization 4.11 に更新する前に、以下のいずれかのタスクを実行する必要があります。
- すべてのノードをメンテナンスモードから移動します。
-
スタンドアロン NMO をインストールし、
nodemaintenances.nodemaintenance.kubevirt.io
カスタムリソース (CR) をnodemaintenances.nodemaintenance.medik8s.io
CR に置き換えます。
6.1. OpenShift Virtualization の更新について
- Operator Lifecycle Manager(OLM) は OpenShift Virtualization Operator のライフサイクルを管理します。OpenShift Container Platform のインストール時にデプロイされる Marketplace Operator により、クラスターで外部 Operator が利用できるようになります。
- OLM は、OpenShift Virtualization の z-stream およびマイナーバージョンの更新を提供します。OpenShift Container Platform を次のマイナーバージョンに更新すると、マイナーバージョンの更新が利用可能になります。OpenShift Container Platform を最初に更新しない限り、OpenShift Virtualization を次のマイナーバージョンに更新できません。
- OpenShift Virtualization サブスクリプションは、stable という名前の単一の更新チャネルを使用します。stable チャネルでは、OpenShift Virtualization および OpenShift Container Platform バージョンとの互換性が確保されます。
サブスクリプションの承認ストラテジーが Automatic に設定されている場合に、更新プロセスは、Operator の新規バージョンが stable チャネルで利用可能になるとすぐに開始します。サポート可能な環境を確保するために、自動 承認ストラテジーを使用することを強く推奨します。OpenShift Virtualization の各マイナーバージョンは、対応する OpenShift Container Platform バージョンを実行する場合にのみサポートされます。たとえば、OpenShift Virtualization 4.11 は OpenShift Container Platform 4.11 で実行する必要があります。
- クラスターのサポート容易性および機能が損なわれるリスクがあるので、Manual 承認ストラテジーを選択することは可能ですが、推奨していません。Manual 承認ストラテジーでは、保留中のすべての更新を手動で承認する必要があります。OpenShift Container Platform および OpenShift Virtualization の更新の同期が取れていない場合には、クラスターはサポートされなくなります。
- 更新の完了までにかかる時間は、ネットワーク接続によって異なります。ほとんどの自動更新は 15 分以内に完了します。
- Open Shift Virtualization を更新しても、ネットワーク接続が中断されることはありません。
- データボリュームおよびその関連付けられた永続ボリューム要求 (PVC) は更新時に保持されます。
ホストパスプロビジョナーストレージを使用する仮想マシンを実行している場合、それらをライブマイグレーションすることはできず、Open Shift Container Platform クラスターの更新をブロックする可能性があります。
回避策として、仮想マシンを再設定し、クラスターの更新時にそれらの電源を自動的にオフになるようにできます。evictionStrategy: LiveMigrate
フィールドを削除し、runStrategy
フィールドを Always
に設定します。
6.2. ワークロードの自動更新の設定
6.2.1. ワークロードの更新について
OpenShift Virtualization を更新すると、ライブマイグレーションをサポートしている場合には libvirt
、virt-launcher
、および qemu
などの仮想マシンのワークロードが自動的に更新されます。
各仮想マシンには、仮想マシンインスタンス (VMI) を実行する virt-launcher
Pod があります。virt-launcher
Pod は、仮想マシン (VM) のプロセスを管理するために使用される libvirt
のインスタンスを実行します。
HyperConverged
カスタムリソース (CR) の spec.workloadUpdateStrategy
スタンザを編集して、ワークロードの更新方法を設定できます。ワークロードの更新方法として、LiveMigrate
と Evict
の 2 つが利用可能です。
Evict
メソッドは VMI Pod をシャットダウンするため、デフォルトではLiveMigrate
更新ストラテジーのみが有効になっています。
LiveMigrate
が有効な唯一の更新ストラテジーである場合:
- ライブマイグレーションをサポートする VMI は更新プロセス時に移行されます。VM ゲストは、更新されたコンポーネントが有効になっている新しい Pod に移動します。
ライブマイグレーションをサポートしない VMI は中断または更新されません。
-
VMI に
LiveMigrate
エビクションストラテジーがあるが、ライブマイグレーションをサポートしていない場合、VMI は更新されません。
-
VMI に
LiveMigrate
とEvict
の両方を有効にした場合:
-
ライブマイグレーションをサポートする VMI は、
LiveMigrate
更新ストラテジーを使用します。 -
ライブマイグレーションをサポートしない VMI は、
Evict
更新ストラテジーを使用します。VMI が、runStrategy
の値がalways
であるVirtualMachine
オブジェクトによって制御されている場合、新しい VMI は、コンポーネントが更新された新しい Pod に作成されます。
移行の試行とタイムアウト
ワークロードを更新するときに、Pod が次の期間Pending
状態の場合、ライブマイグレーションは失敗します。
- 5 分間
-
Pod が
Unschedulable
であるために保留中の場合。 - 15 分
- 何らかの理由で Pod が保留状態のままになっている場合。
VMI が移行に失敗すると、 virt-controller
は VMI の移行を再試行します。すべての移行可能な VMI が新しいvirt-launcher
Pod で実行されるまで、このプロセスが繰り返されます。ただし、VMI が不適切に設定されている場合、これらの試行は無限に繰り返される可能性があります。
各試行は、移行オブジェクトに対応します。直近の 5 回の試行のみがバッファーに保持されます。これにより、デバッグ用の情報を保持しながら、移行オブジェクトがシステムに蓄積されるのを防ぎます。
6.2.2. ワークロードの更新方法の設定
HyperConverged
カスタムリソース (CR) を編集することにより、ワークロードの更新方法を設定できます。
前提条件
ライブマイグレーションを更新方法として使用するには、まずクラスターでライブマイグレーションを有効にする必要があります。
注記VirtualMachineInstance
CR にevictionStrategy: LiveMigrate
が含まれており、仮想マシンインスタンス (VMI) がライブマイグレーションをサポートしない場合には、VMI は更新されません。
手順
デフォルトエディターで
HyperConverged
CR を作成するには、以下のコマンドを実行します。$ oc edit hco -n openshift-cnv kubevirt-hyperconverged
HyperConverged
CR のworkloadUpdateStrategy
スタンザを編集します。以下に例を示します。apiVersion: hco.kubevirt.io/v1beta1 kind: HyperConverged metadata: name: kubevirt-hyperconverged spec: workloadUpdateStrategy: workloadUpdateMethods: 1 - LiveMigrate 2 - Evict 3 batchEvictionSize: 10 4 batchEvictionInterval: "1m0s" 5 ...
- 1
- ワークロードの自動更新を実行するのに使用できるメソッド。設定可能な値は
LiveMigrate
およびEvict
です。上記の例のように両方のオプションを有効にした場合に、ライブマイグレーションをサポートする VMI にはLiveMigrate
を、ライブマイグレーションをサポートしない VMI にはEvict
を、更新に使用します。ワークロードの自動更新を無効にするには、workloadUpdateStrategy
スタンザを削除するか、workloadUpdateMethods: []
を設定して配列を空のままにします。 - 2
- 中断を最小限に抑えた更新メソッド。ライブマイグレーションをサポートする VMI は、仮想マシン (VM) ゲストを更新されたコンポーネントが有効なっている新規 Pod に移行することで更新されます。
LiveMigrate
がリストされている唯一のワークロード更新メソッドである場合には、ライブマイグレーションをサポートしない VMI は中断または更新されません。 - 3
- アップグレード時に VMI Pod をシャットダウンする破壊的な方法。
Evict
は、ライブマイグレーションがクラスターで有効でない場合に利用可能な唯一の更新方法です。VMI がrunStrategy: always
に設定されたVirtualMachine
オブジェクトによって制御される場合には、新規の VMI は、更新されたコンポーネントを使用して新規 Pod に作成されます。 - 4
Evict
メソッドを使用して一度に強制的に更新できる VMI の数。これは、LiveMigrate
メソッドには適用されません。- 5
- 次のワークロードバッチをエビクトするまで待機する間隔。これは、
LiveMigrate
メソッドには適用されません。
注記HyperConverged
CR のspec.liveMigrationConfig
スタンザを編集することにより、ライブマイグレーションの制限とタイムアウトを設定できます。- 変更を適用するには、エディターを保存し、終了します。
6.3. 保留中の Operator 更新の承認
6.3.1. 保留中の Operator 更新の手動による承認
インストールされた Operator のサブスクリプションの承認ストラテジーが Manual に設定されている場合、新規の更新が現在の更新チャネルにリリースされると、インストールを開始する前に更新を手動で承認する必要があります。
前提条件
- Operator Lifecycle Manager (OLM) を使用して以前にインストールされている Operator。
手順
- OpenShift Container Platform Web コンソールの Administrator パースペクティブで、Operators → Installed Operators に移動します。
- 更新が保留中の Operator は Upgrade available のステータスを表示します。更新する Operator の名前をクリックします。
- Subscription タブをクリックします。承認が必要な更新は、アップグレードステータス の横に表示されます。たとえば、1 requires approval が表示される可能性があります。
- 1 requires approval をクリックしてから、Preview Install Plan をクリックします。
- 更新に利用可能なリソースとして一覧表示されているリソースを確認します。問題がなければ、Approve をクリックします。
- Operators → Installed Operators ページに戻り、更新の進捗をモニターします。完了時に、ステータスは Succeeded および Up to date に変更されます。
6.4. 更新ステータスの監視
6.4.1. OpenShift Virtualization アップグレードステータスのモニタリング
OpenShift Virtualization Operator のアップグレードのステータスをモニターするには、クラスターサービスバージョン (CSV) PHASE
を監視します。Web コンソールを使用するか、ここに提供されているコマンドを実行して CSV の状態をモニターすることもできます。
PHASE
および状態の値は利用可能な情報に基づく近似値になります。
前提条件
-
cluster-admin
ロールを持つユーザーとしてクラスターにログインすること。 -
OpenShift CLI (
oc
) がインストールされている。
手順
以下のコマンドを実行します。
$ oc get csv -n openshift-cnv
出力を確認し、
PHASE
フィールドをチェックします。以下に例を示します。出力例
VERSION REPLACES PHASE 4.9.0 kubevirt-hyperconverged-operator.v4.8.2 Installing 4.9.0 kubevirt-hyperconverged-operator.v4.9.0 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
6.4.2. 以前の OpenShift Virtualization ワークロードの表示
CLI を使用して、以前のワークロードのリストを表示できます。
クラスターに以前の仮想化 Pod がある場合には、OutdatedVirtualMachineInstanceWorkloads
アラートが実行されます。
手順
以前の仮想マシンインスタンス (VMI) のリストを表示するには、以下のコマンドを実行します。
$ oc get vmi -l kubevirt.io/outdatedLauncherImage --all-namespaces
ワークロードの更新を設定して、VMI が自動的に更新されるようにします。
6.5. 関連情報
第7章 セキュリティーポリシー
仮想マシン (VM) のワークロードは、特権のない Pod として実行されます。仮想マシンが OpenShift Virtualization 機能を使用できるように、一部の Pod には、他の Pod 所有者が使用できないカスタムセキュリティーポリシーが付与されます。
-
拡張された
container_t
SELinux ポリシーがvirt-launcher
Pod に適用されます。 -
セキュリティーコンテキスト制約 (SCC) は、
kubevirt-controller
サービスアカウントに対して定義されます。
7.1. ワークロードのセキュリティーについて
デフォルトでは、仮想マシン (VM) のワークロードは OpenShift Virtualization の root 権限では実行されません。
仮想マシンごとに、virt-launcher
Pod が libvirt
のインスタンスを セッションモード で実行し、仮想マシンプロセスを管理します。セッションモードでは、libvirt
デーモンは root 以外のユーザーアカウントとして実行され、同じユーザー識別子 (UID) で実行されているクライアントからの接続のみを許可します。したがって、仮想マシンは権限のない Pod として実行し、最小権限のセキュリティー原則に従います。
root 権限を必要とするサポート対象の OpenShift Virtualization 機能はありません。機能に root が必要な場合は、OpenShift Virtualization での使用がサポートされていない可能性があります。
7.2. virt-launcher Pod の拡張 SELinux ポリシー
virt-launcher
Pod の container_t
SELinux ポリシーが拡張され、OpenShift 仮想化の重要な機能が有効になります。
ネットワークマルチキューには次のポリシーが必要です。これにより、使用可能な vCPU の数が増加するにつれてネットワークパフォーマンスを拡張できます。
-
allow process self (tun_socket (relabelfrom relabelto attach_queue))
-
次のポリシーによって、
virt-launcher
が/proc/cpuinfo
および/proc/uptime
を含む/proc
ディレクトリーの下のファイルを読み取ることができます。-
allow process proc_type (file (getattr open read))
-
次のポリシーによって、
libvirtd
がネットワーク関連のデバッグメッセージをリレーできます。allow process self (netlink_audit_socket (nlmsg_relay))
注記このポリシーがない場合、ネットワークデバッグメッセージをリレーしようとする試みはブロックされます。これにより、ノードの監査ログが SELinux 拒否でいっぱいになる可能性があります。
次のポリシーによって、
libvirtd
がhugetblfs
にアクセスできます。これは、巨大なページをサポートするために必要です。-
allow process hugetlbfs_t (dir (add_name create write remove_name rmdir setattr))
-
allow process hugetlbfs_t (file (create unlink))
-
次のポリシーによって、
virtiofs
がファイルシステムをマウントし、NFS にアクセスできます。-
allow process nfs_t (dir (mounton))
-
allow process proc_t (dir (mounton))
-
allow process proc_t (filesystem (mount unmount))
-
7.3. kubevirt-controller サービスアカウントの追加の OpenShift Container Platform SCC (Security Context Constraints) および Linux 機能
SCC (Security Context Constraints) は Pod のパーミッションを制御します。これらのパーミッションには、コンテナーのコレクションである Pod が実行できるアクションおよびそれがアクセスできるリソース情報が含まれます。SCC を使用して、Pod がシステムに受け入れられるために必要な Pod の実行に関する条件の一覧を定義できます。
virt-controller
は、クラスター内の仮想マシンの virt-launcher
Pod を作成するクラスターコントローラーです。これらの Pod には、kubevirt-controller
サービスアカウントによってパーミッションが付与されます。
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{"SYS_NICE", "NET_BIND_SERVICE"}
-
SYS_NICE
を使用すると、CPU アフィニティーを設定できます。 -
NET_BIND_SERVICE
は、DHCP および Slirp 操作を許可します。 -
SYS_PTRACE
を使用すると、特定バージョンのlibvirt
で、ソフトウェア Trusted Platform Module (TPM) エミュレーターであるswtpm
のプロセス ID (PID) を見つけることができます。
-
7.3.1. 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
7.4. 関連情報
- SSC (Security Context Constraints) の管理
- RBAC の使用によるパーミッションの定義および適用
- Red Hat Enterprise Linux (RHEL) ドキュメントの 仮想マシンネットワークパフォーマンスの最適化
- 仮想マシンでの Huge Page の使用
- RHEL ドキュメントの huge ページの設定
第8章 CLI ツールの使用
クラスターでリソースを管理するために使用される 2 つの主な CLI ツールは以下の通りです。
-
OpenShift virtualization
virtctl
クライアント -
OpenShift Container Platform
oc
クライアント
8.1. 前提条件
8.2. OpenShift Container Platform クライアントコマンド
OpenShift Container Platform oc
クライアントは、VirtualMachine
(vm
) および VirtualMachineInstance
(vmi
) オブジェクトタイプを含む、OpenShift Container Platform リソースを管理するためのコマンドラインユーティリティーです。
-n <namespace>
フラグを使用して、別のプロジェクトを指定できます。
表8.1 oc
コマンド
コマンド | Description |
---|---|
|
OpenShift Container Platform クラスターに |
| 現在のプロジェクトの指定されたオブジェクトタイプのオブジェクトのリストを表示します。 |
| 現在のプロジェクトで特定のリソースの詳細を表示します。 |
| 現在のプロジェクトで、ファイル名または標準入力 (stdin) からリソースを作成します。 |
| 現在のプロジェクトのリソースを編集します。 |
| 現在のプロジェクトのリソースを削除します。 |
oc
client コマンドについてのより総合的な情報については、OpenShift Container Platform CLI ツール のドキュメントを参照してください。
8.3. Virtctl クライアントコマンド
virtctl
クライアントは、OpenShift Virtualization リソースを管理するためのコマンドラインユーティリティーです。
virtctl
コマンドのリストを表示するには、次のコマンドを実行します。
$ virtctl help
特定のコマンドで使用できるオプションの一覧を表示するには、これを -h
または --help
フラグを指定して実行します。以下に例を示します。
$ virtctl image-upload -h
任意のvirtctl
コマンドで使用できるグローバルコマンドオプションのリストを表示するには、次のコマンドを実行します。
$ virtctl options
以下の表には、OpenShift Virtualization のドキュメント全体で使用されている virtctl
コマンドが記載されています。
表8.2 virtctl
クライアントコマンド
コマンド | Description |
---|---|
| 仮想マシンを起動します。 |
| 仮想マシンを一時停止状態で起動します。このオプションを使用すると、VNC コンソールからブートプロセスを中断できます。 |
| 仮想マシンを停止します。 |
| 仮想マシンを強制停止します。このオプションは、データの不整合またはデータ損失を引き起こす可能性があります。 |
| 仮想マシンまたは仮想マシンインスタンスを一時停止します。マシンの状態がメモリーに保持されます。 |
| 仮想マシンまたは仮想マシンインスタンスの一時停止を解除します。 |
| 仮想マシンを移行します。 |
| 仮想マシンを再起動します。 |
| 仮想マシンまたは仮想マシンインスタンスの指定されたポートを転送するサービスを作成し、このサービスをノードの指定されたポートで公開します。 |
| 仮想マシンインスタンスのシリアルコンソールに接続します。 |
| VNC (仮想ネットワーククライアント) の仮想マシンインスタンスへの接続を開きます。ローカルマシンでリモートビューアーを必要とする VNC を使用して仮想マシンインスタンスのグラフィカルコンソールにアクセスします。 |
| VNC 接続からビューアーを使用してポート番号を表示し、仮想マシンインスタンスに手動で接続します。 |
| ポートが利用可能な場合、その指定されたポートでプロキシーを実行するためにポート番号を指定します。ポート番号が指定されていない場合、プロキシーはランダムポートで実行されます。 |
| 仮想マシンイメージをすでに存在するデータボリュームにアップロードします。 |
| 仮想マシンイメージを新規データボリューム にアップロードします。 |
| クライアントおよびサーバーのバージョン情報を表示します。 |
| ゲストマシンで利用可能なファイルシステムの詳細なリストを返します。 |
| オペレーティングシステムに関するゲストエージェント情報を返します。 |
| ゲストマシンでログインしているユーザーの詳細な一覧を返します。 |
8.4. virtctl guestfs を使用したコンテナーの作成
virtctl guestfs
コマンドを使用して、libguestfs-tools
および永続ボリューム要求 (PVC) がアタッチされた対話型コンテナーをデプロイできます。
手順
libguestfs-tools
でコンテナーをデプロイして PVC をマウントし、シェルを割り当てるには、以下のコマンドを実行します。$ virtctl guestfs -n <namespace> <pvc_name> 1
- 1
- PVC 名は必須の引数です。この引数を追加しないと、エラーメッセージが表示されます。
8.5. Libguestfs ツールおよび virtctl guestfs
Libguestfs
ツールは、仮想マシン (VM) のディスクイメージにアクセスして変更するのに役立ちます。libguestfs
ツールを使用して、ゲスト内のファイルの表示および編集、仮想マシンのクローンおよびビルド、およびディスクのフォーマットおよびサイズ変更を実行できます。
virtctl guestfs
コマンドおよびそのサブコマンドを使用して、PVC で仮想マシンディスクを変更して検査し、デバッグすることもできます。使用可能なサブコマンドの完全なリストを表示するには、コマンドラインで virt-
と入力して Tab を押します。以下に例を示します。
コマンド | Description |
---|---|
| ターミナルでファイルを対話的に編集します。 |
| ゲストに ssh キーを挿入し、ログインを作成します。 |
| 仮想マシンによって使用されるディスク容量を確認します。 |
| 詳細のリストを含む出力ファイルを作成して、ゲストにインストールされたすべての RPM の詳細リストを参照してください。 |
|
ターミナルで |
| テンプレートとして使用する仮想マシンディスクイメージをシールします。 |
デフォルトでは、virtctl guestfs
は、仮想ディスク管理に必要な項目を含めてセッションを作成します。ただし、動作をカスタマイズできるように、コマンドは複数のフラグオプションもサポートしています。
フラグオプション | Description |
---|---|
|
|
| 特定の namespace から PVC を使用します。
|
|
|
|
デフォルトでは、
クラスターに
設定されていない場合、 |
|
|
このコマンドは、PVC が別の Pod によって使用されているかどうかを確認します。使用されている場合には、エラーメッセージが表示されます。ただし、libguestfs-tools
プロセスが開始されると、設定では同じ PVC を使用する新規 Pod を回避できません。同じ PVC にアクセスする仮想マシンを起動する前に、アクティブな virtctl guestfs
Pod がないことを確認する必要があります。
virtctl guestfs
コマンドは、インタラクティブな Pod に割り当てられている PVC 1 つだけを受け入れます。
8.6. 関連情報
第9章 仮想マシン
9.1. 仮想マシンの作成
以下のいずれかの手順を使用して、仮想マシンを作成します。
- クイックスタートのガイド付きツアー
- カタログからクイック作成
- 仮想マシンウィザードによる事前に設定された YAML ファイルの貼り付け
- CLI の使用
openshift-*
namespace に仮想マシンを作成しないでください。代わりに、openshift
接頭辞なしの新規 namespace を作成するか、既存 namespace を使用します。
Web コンソールから仮想マシンを作成する場合、ブートソースで設定される仮想マシンテンプレートを選択します。ブートソースを含む仮想マシンテンプレートには Available boot source というラベルが付けられるか、それらはカスタマイズされたラベルテキストを表示します。選択可能なブートソースでテンプレートを使用すると、仮想マシンの作成プロセスをスピードアップできます。
ブートソースのないテンプレートには、Boot source required というラベルが付けられます。仮想マシンにブートソースを追加する 手順を完了すれば、これらのテンプレートを使用することができます。
ストレージの動作の違いにより、一部の仮想マシンテンプレートは単一ノードの Openshift と互換性がありません。互換性を確保するためには、テンプレートまたはデータボリュームまたはストレージプロファイルを使用する仮想マシンにevictionStrategy
フィールドを設定しないでください。
9.1.1. クイックスタートの使用による仮想マシンの作成
Web コンソールは、仮想マシンを作成するためのガイド付きツアーを含むクイックスタートを提供します。Administrator パースペクティブの Help メニューを選択して Quick Starts カタログにアクセスし、Quick Starts カタログを表示できます。Quick Starts タイルをクリックし、ツアーを開始すると、システムによるプロセスのガイドが開始します。
Quick Starts のタスクは、Red Hat テンプレートの選択から開始します。次に、ブートソースを追加して、オペレーティングシステムイメージをインポートできます。最後に、カスタムテンプレートを保存し、これを使用して仮想マシンを作成できます。
前提条件
- オペレーティングシステムイメージの URL リンクをダウンロードできる Web サイトにアクセスすること。
手順
- Web コンソールで、Help メニューから Quick Starts を選択します。
- Quick Starts カタログのタイルをクリックします。例: Red Hat Linux Enterprise Linux 仮想マシンの作成
- ガイド付きツアーの手順に従い、オペレーティングシステムイメージのインポートと仮想マシンの作成タスクを実行します。Virtualization → VirtualMachines ページに仮想マシンが表示されます。
9.1.2. 仮想マシンのクイック作成
使用可能なブートソースを含むテンプレートを使用して、仮想マシン (VM) をすばやく作成できます。
手順
- サイドメニューの Virtualization → Catalog をクリックします。
利用可能なブートソース をクリックして、テンプレートをブートソースでフィルタリングします。
注記デフォルトでは、テンプレートリストには Default Templates のみが表示されます。選択したフィルターで使用可能なすべてのテンプレートを表示するには、フィルタリング時に すべてのアイテムをクリックします。
- テンプレートをクリックして詳細を表示します。
仮想マシンのクイック作成をクリックして、テンプレートから VM を作成します。
仮想マシンの詳細ページに、プロビジョニングステータスが表示されます。
検証
- Events をクリックして、仮想マシンがプロビジョニングされたときにイベントのストリームを表示します。
- Console をクリックして、仮想マシンが正常に起動したことを確認します。
9.1.3. カスタマイズされたテンプレートからの仮想マシンの作成
一部のテンプレートでは、追加のパラメーターが必要です。たとえば、ブート ソースを持つ PVC などです。テンプレートの選択パラメーターをカスタマイズして、仮想マシン (VM) を作成できます。
手順
Web コンソールで、テンプレートを選択します。
- サイドメニューの Virtualization → Catalog をクリックします。
- オプション: プロジェクト、キーワード、オペレーティングシステム、またはワークロードプロファイルでテンプレートをフィルター処理します。
- カスタマイズするテンプレートをクリックします。
- Customize VirtualMachineを クリックします。
- Name や Disk source など、仮想マシンのパラメーターを指定します。オプションで、複製するデータソースを指定できます。
検証
- Events をクリックして、仮想マシンがプロビジョニングされたときにイベントのストリームを表示します。
- Console をクリックして、仮想マシンが正常に起動したことを確認します。
Web コンソールから仮想マシンを作成する場合は、仮想マシンのフィールドセクションを参照してください。
9.1.3.1. 仮想マシンフィールド
以下の表には、OpenShift Container Platform Web コンソールで編集できる仮想マシンのフィールドが記載されています。
表9.1 仮想マシンフィールド
タブ | フィールドまたは機能 |
---|---|
概要 |
|
YAML |
|
スケジューリング |
|
環境 |
|
Network Interfaces |
|
ディスク |
|
スクリプト |
|
メタデータ |
|
9.1.3.1.1. ネットワークフィールド
Name | Description |
---|---|
Name | ネットワークインターフェイスコントローラーの名前。 |
モデル | ネットワークインターフェイスコントローラーのモデルを示します。サポートされる値は e1000e および virtio です。 |
ネットワーク | 利用可能なネットワーク接続定義のリスト。 |
Type | 利用可能なバインディングメソッドの一覧。ネットワークインターフェイスに適したバインド方法を選択します。
|
MAC Address | ネットワークインターフェイスコントローラーの MAC アドレス。MAC アドレスが指定されていない場合、これは自動的に割り当てられます。 |
9.1.3.2. ストレージフィールド
Name | 選択 | Description |
---|---|---|
Source | 空白 (PVC の作成) | 空のディスクを作成します。 |
URL を使用したインポート (PVC の作成) | URL (HTTP または HTTPS エンドポイント) を介してコンテンツをインポートします。 | |
既存 PVC の使用 | クラスターですでに利用可能な PVC を使用します。 | |
既存の PVC のクローン作成 (PVC の作成) | クラスターで利用可能な既存の PVC を選択し、このクローンを作成します。 | |
レジストリーを使用したインポート (PVC の作成) | コンテナーレジストリーを使用してコンテンツをインポートします。 | |
コンテナー (一時的) | クラスターからアクセスできるレジストリーにあるコンテナーからコンテンツをアップロードします。コンテナーディスクは、CD-ROM や一時的な仮想マシンなどの読み取り専用ファイルシステムにのみ使用する必要があります。 | |
Name |
ディスクの名前。この名前には、小文字 ( | |
Size | ディスクのサイズ (GiB 単位)。 | |
Type | ディスクのタイプ。例: Disk または CD-ROM | |
Interface | ディスクデバイスのタイプ。サポートされるインターフェイスは、virtIO、SATA、および SCSI です。 | |
Storage Class | ディスクの作成に使用されるストレージクラス。 |
ストレージの詳細設定
以下のストレージの詳細設定はオプションであり、Blank、Import via URLURL、および Clone existing PVC ディスクで利用できます。OpenShift Virtualization 4.11 より前では、これらのパラメーターを指定しない場合、システムは kubevirt-storage-class-defaults
設定マップのデフォルト値を使用します。OpenShift Virtualization 4.11 以降では、システムは ストレージプロファイル のデフォルト値を使用します。
ストレージプロファイルを使用して、OpenShift Virtualization のストレージをプロビジョニングするときに一貫した高度なストレージ設定を確保します。
Volume Mode と Access Mode を手動で指定するには、デフォルトで選択されている Apply optimized StorageProfile settings チェックボックスをオフにする必要があります。
Name | モードの説明 | パラメーター | パラメーターの説明 |
---|---|---|---|
ボリュームモード | 永続ボリュームがフォーマットされたファイルシステムまたは raw ブロック状態を使用するかどうかを定義します。デフォルトは Filesystem です。 | Filesystem | ファイルシステムベースのボリュームで仮想ディスクを保存します。 |
Block |
ブロックボリュームで仮想ディスクを直接保存します。基礎となるストレージがサポートしている場合は、 | ||
アクセスモード | 永続ボリュームのアクセスモード。 | ReadWriteOnce (RWO) | ボリュームは単一ノードで読み取り/書き込みとしてマウントできます。 |
ReadWriteMany (RWX) | ボリュームは、一度に多くのノードで読み取り/書き込みとしてマウントできます。 注記 これは、ノード間の仮想マシンのライブマイグレーションなどの、一部の機能で必要になります。 | ||
ReadOnlyMany (ROX) | ボリュームは数多くのノードで読み取り専用としてマウントできます。 |
9.1.3.3. Cloud-init フィールド
Name | 説明 |
---|---|
Hostname | 仮想マシンの特定のホスト名を設定します。 |
認可された SSH キー | 仮想マシンの ~/.ssh/authorized_keys にコピーされるユーザーの公開鍵。 |
カスタムスクリプト | 他のオプションを、カスタム cloud-init スクリプトを貼り付けるフィールドに置き換えます。 |
ストレージクラスのデフォルトを設定するには、ストレージプロファイルを使用します。詳細については、ストレージプロファイルのカスタマイズを参照してください。
9.1.3.4. 仮想マシンウィザードの作成用の事前に設定された YAML ファイルの貼り付け
YAML 設定ファイルを作成し、解析して仮想マシンを作成します。YAML 編集画面を開くと、常に有効な example
仮想マシン設定がデフォルトで提供されます。
Create をクリックする際に YAML 設定が無効な場合、エラーメッセージでエラーが発生したパラメーターが示唆されます。エラーは一度に 1 つのみ表示されます。
編集中に YAML 画面から離れると、設定に対して加えた変更が取り消されます。
手順
- サイドメニューから Virtualization → VirtualMachines をクリックします。
- Create をクリックし、With YAML を選択します。
編集可能なウィンドウで仮想マシンの設定を作成するか、これを貼り付けます。
-
または、YAML 画面にデフォルトで提供される
example
仮想マシンを使用します。
-
または、YAML 画面にデフォルトで提供される
- オプション: Download をクリックして YAML 設定ファイルをその現在の状態でダウンロードします。
- Create をクリックして仮想マシンを作成します。
仮想マシンが VirtualMachines ページにリスト表示されます。
9.1.4. CLI の使用による仮想マシンの作成
virtualMachine
マニフェストから仮想マシンを作成できます。
手順
仮想マシンの
VirtualMachine
マニフェストを編集します。たとえば、次のマニフェストは Red Hat Enterprise Linux (RHEL) 仮想マシンを設定します。例9.1 RHEL 仮想マシンのマニフェストの例
apiVersion: kubevirt.io/v1 kind: VirtualMachine metadata: labels: app: <vm_name> 1 name: <vm_name> spec: dataVolumeTemplates: - apiVersion: cdi.kubevirt.io/v1beta1 kind: DataVolume metadata: name: <vm_name> spec: sourceRef: kind: DataSource name: rhel9 namespace: openshift-virtualization-os-images storage: resources: requests: storage: 30Gi running: false template: metadata: labels: kubevirt.io/domain: <vm_name> spec: domain: cpu: cores: 1 sockets: 2 threads: 1 devices: disks: - disk: bus: virtio name: rootdisk - disk: bus: virtio name: cloudinitdisk interfaces: - masquerade: {} name: default rng: {} features: smm: enabled: true firmware: bootloader: efi: {} resources: requests: memory: 8Gi evictionStrategy: LiveMigrate networks: - name: default pod: {} volumes: - dataVolume: name: <vm_name> name: rootdisk - cloudInitNoCloud: userData: |- #cloud-config user: cloud-user password: '<password>' 2 chpasswd: { expire: False } name: cloudinitdisk
マニフェストファイルを使用して仮想マシンを作成します。
$ oc create -f <vm_manifest_file>.yaml
オプション: 仮想マシンを開始します。
$ virtctl start <vm_name>
9.1.5. 仮想マシンのストレージボリュームタイプ
ストレージボリュームタイプ | Description |
---|---|
ephemeral | ネットワークボリュームを読み取り専用のバッキングストアとして使用するローカルの copy-on-write (COW) イメージ。バッキングボリュームは PersistentVolumeClaim である必要があります。一時イメージは仮想マシンの起動時に作成され、すべての書き込みをローカルに保存します。一時イメージは、仮想マシンの停止、再起動または削除時に破棄されます。バッキングボリューム (PVC) はいずれの方法でも変更されません。 |
persistentVolumeClaim | 利用可能な PV を仮想マシンに割り当てます。PV の割り当てにより、仮想マシンデータのセッション間での永続化が可能になります。 CDI を使用して既存の仮想マシンディスクを PVC にインポートし、PVC を仮想マシンインスタンスに割り当てる方法は、既存の仮想マシンを OpenShift Container Platform にインポートするための推奨される方法です。ディスクを PVC 内で使用できるようにするためのいくつかの要件があります。 |
dataVolume |
データボリュームは、インポート、クローンまたはアップロード操作で仮想マシンディスクの準備プロセスを管理することによって
|
cloudInitNoCloud | 参照される cloud-init NoCloud データソースが含まれるディスクを割り当て、ユーザーデータおよびメタデータを仮想マシンに提供します。cloud-init インストールは仮想マシンディスク内で必要になります。 |
containerDisk | コンテナーイメージレジストリーに保存される、仮想マシンディスクなどのイメージを参照します。イメージはレジストリーからプルされ、仮想マシンの起動時にディスクとして仮想マシンに割り当てられます。
RAW および QCOW2 形式のみがコンテナーイメージレジストリーのサポートされるディスクタイプです。QCOW2 は、縮小されたイメージサイズの場合に推奨されます。 注記
|
emptyDisk | 仮想マシンインターフェイスのライフサイクルに関連付けられるスパースの QCOW2 ディスクを追加で作成します。データは仮想マシンのゲストによって実行される再起動後も存続しますが、仮想マシンが Web コンソールから停止または再起動する場合には破棄されます。空のディスクは、アプリケーションの依存関係および一時ディスクの一時ファイルシステムの制限を上回るデータを保存するために使用されます。 ディスク 容量 サイズも指定する必要があります。 |
9.1.6. 仮想マシンの RunStrategy について
仮想マシンの RunStrategy
は、一連の条件に応じて仮想マシンインスタンス (VMI) の動作を判別します。spec.runStrategy
設定は、spec.running
設定の代わりに仮想マシン設定プロセスに存在します。spec.runStrategy
設定を使用すると、true
または false
の応答のみを伴う spec.running
設定とは対照的に、VMI の作成および管理をより柔軟に行えます。ただし、2 つの設定は相互排他的です。spec.running
または spec.runStrategy
のいずれかを使用できます。両方を使用する場合は、エラーが発生します。
4 つ RunStrategy が定義されています。
Always
-
VMI は仮想マシンの作成時に常に表示されます。元の VMI が何らかの理由で停止する場合に、新規の VMI が作成されます。これは
spec.running: true
と同じ動作です。 RerunOnFailure
- 前のインスタンスがエラーが原因で失敗する場合は、VMI が再作成されます。インスタンスは、仮想マシンが正常に停止する場合 (シャットダウン時など) には再作成されません。
Manual
(手動)-
start
、stop
、およびrestart
virtctl クライアントコマンドは、 VMI の状態および存在を制御するために使用できます。 Halted
-
仮想マシンが作成される際に VMI は存在しません。これは
spec.running: false
と同じ動作です。
start
、stop
、および restart
の virtctl コマンドの各種の組み合わせは、どの RunStrategy
が使用されるかに影響を与えます。
以下の表は、仮想マシンの各種の状態からの移行について示しています。最初の列には、仮想マシンの初期の RunStrategy
が表示されます。それぞれの追加の列には、virtctl コマンドと、このコマンド実行後の新規 RunStrategy
が表示されます。
初期 RunStrategy | start | stop | restart |
---|---|---|---|
Always | - | Halted | Always |
RerunOnFailure | - | Halted | RerunOnFailure |
Manual | Manual | Manual | Manual |
Halted | Always | - | - |
インストーラーでプロビジョニングされるインフラストラクチャーを使用してインストールされた OpenShift Virtualization クラスターでは、ノードで MachineHealthCheck に失敗し、クラスターで利用できなくなると、RunStrategy が Always
または RerunOnFailure
の仮想マシンが新規ノードで再スケジュールされます。
apiVersion: kubevirt.io/v1
kind: VirtualMachine
spec:
RunStrategy: Always 1
template:
...
- 1
- VMI の現在の
RunStrategy
設定。
9.1.7. 関連情報
KubeVirt v0.53.2 API リファレンス の
VirtualMachineSpec
定義は、仮想マシン仕様のパラメーターおよび階層のより範囲の広いコンテキストを提供します。注記KubeVirt API リファレンスはアップストリームのプロジェクトリファレンスであり、OpenShift Virtualization でサポートされていないパラメーターが含まれる場合があります。
- CPU マネージャーが高パフォーマンスのワークロードプロファイルを使用できるようにします。
-
containerDisk
ボリュームとして仮想マシンに追加する前に、コンテナーディスクの準備 を参照してください。 - マシンのヘルスチェックの導入と有効化の詳細は、マシンの可用性チェックの導入 を参照してください。
- インストーラーでプロビジョニングされるインフラストラクチャーについての詳細は、インストーラーでプロビジョニングされるインフラストラクチャーの概要 を参照してください。
- ストレージプロファイルのカスタマイズ
9.2. 仮想マシンの編集
Web コンソールの YAML エディターまたはコマンドラインの OpenShift CLI のいずれかを使用して、仮想マシン設定を更新できます。Virtual Machine Details 画面でパラメーターのサブセットを更新することもできます。
9.2.1. Web コンソールでの仮想マシンの編集
関連するフィールドの横にある鉛筆アイコンをクリックして、Web コンソールで仮想マシンの選択する値 (select values) を編集します。他の値は、CLI を使用して編集できます。
Red Hat が提供するものを含め、任意のテンプレートのラベルとアノテーションを編集できます。その他のフィールドは、ユーザーがカスタマイズしたテンプレートでのみ編集できます。
手順
- サイドメニューから Virtualization → VirtualMachines をクリックします。
- オプション: Filter ドロップダウン メニューを使用して、ステータス、テンプレート、ノード、またはオペレーティング システム (OS) などの属性で仮想マシンのリストを並べ替えます。
- 仮想マシンを選択して、VirtualMachine details ページを開きます。
- フィールドが編集可能であることを示す鉛筆アイコンが付いているフィールドをクリックします。たとえば、BIOS や UEFI などの現在の ブートモード 設定をクリックして、Boot mode ウィンドウを開き、リストからオプションを選択します。
- 関連する変更を加え、Save をクリックします。
仮想マシンが実行されている場合、Boot Order または Flavor への変更は仮想マシンを再起動するまで反映されません。
関連するフィールドの右側にある View Pending Changes をクリックして、保留中の変更を表示できます。ページ上部の Pending Changes バナーには、仮想マシンの再起動時に適用されるすべての変更の一覧が表示されます。
9.2.1.1. 仮想マシンフィールド
以下の表には、OpenShift Container Platform Web コンソールで編集できる仮想マシンのフィールドが記載されています。
表9.2 仮想マシンフィールド
タブ | フィールドまたは機能 |
---|---|
Details |
|
YAML |
|
スケジューリング |
|
Network Interfaces |
|
ディスク |
|
スクリプト |
|
スナップショット |
|
9.2.2. Web コンソールを使用した仮想マシンの YAML 設定の編集
Web コンソールで、仮想マシンの YAML 設定を編集できます。一部のパラメーターは変更できません。無効な設定で Save をクリックすると、エラーメッセージで変更できないパラメーターが示唆されます。
編集中に YAML 画面から離れると、設定に対して加えた変更が取り消されます。
手順
- サイドメニューから Virtualization → VirtualMachines をクリックします。
- 仮想マシンを選択します。
- YAML タブをクリックして編集可能な設定を表示します。
- オプション: Download をクリックして YAML ファイルをその現在の状態でローカルにダウンロードできます。
- ファイルを編集し、Save をクリックします。
オブジェクトの更新されたバージョン番号を含む、変更が正常に行われたことを示す確認メッセージが表示されます。
9.2.3. CLI を使用した仮想マシン YAML 設定の編集
以下の手順を使用し、CLI を使用して仮想マシン YAML 設定を編集します。
前提条件
- YAML オブジェクト設定ファイルを使用して仮想マシンを設定していること。
-
oc
CLI をインストールしていること。
手順
以下のコマンドを実行して、仮想マシン設定を更新します。
$ oc edit <object_type> <object_ID>
- オブジェクト設定を開きます。
- YAML を編集します。
実行中の仮想マシンを編集する場合は、以下のいずれかを実行する必要があります。
- 仮想マシンを再起動します。
新規の設定を有効にするために、以下のコマンドを実行します。
$ oc apply <object_type> <object_ID>
9.2.4. 仮想マシンへの仮想ディスクの追加
以下の手順を使用して仮想ディスクを仮想マシンに追加します。
手順
- サイドメニューから Virtualization → VirtualMachines をクリックします。
- 仮想マシンを選択して、VirtualMachine details 画面を開きます。
- Disks タブをクリックし、Add disk をクリックします。
Add disk ウィンドウで、Source、Name、Size、Type、Interface、および Storage Class を指定します。
- オプション: 空のディスクソースを使用し、データボリュームの作成時に最大の書き込みパフォーマンスが必要な場合に、事前割り当てを有効にできます。そのためには、Enable preallocation チェックボックスをオンにします。
-
オプション: Apply optimized StorageProfile settings をクリアして、仮想ディスクの Volume Mode と Access Mode を変更できます。これらのパラメーターを指定しない場合、システムは
kubevirt-storage-class-defaults
config map のデフォルト値を使用します。
- Add をクリックします。
仮想マシンが実行中の場合、新規ディスクは pending restart 状態にあり、仮想マシンを再起動するまで割り当てられません。
ページ上部の Pending Changes バナーには、仮想マシンの再起動時に適用されるすべての変更の一覧が表示されます。
ストレージクラスのデフォルトを設定するには、ストレージプロファイルを使用します。詳細については、ストレージプロファイルのカスタマイズを参照してください。
9.2.4.1. VirtualMachine の CD-ROM の編集
以下の手順を使用して、仮想マシンの CD-ROM を編集します。
手順
- サイドメニューから Virtualization → VirtualMachines をクリックします。
- 仮想マシンを選択して、VirtualMachine details 画面を開きます。
- Disks タブをクリックします。
-
編集する CD-ROM の Options メニュー
をクリックし、Edit を選択します。
- Edit CD-ROM ウィンドウで、Source、Persistent Volume Claim、Name、Type、および Interface フィールドを編集します。
- Save をクリックします。
9.2.4.2. ストレージフィールド
Name | 選択 | Description |
---|---|---|
Source | 空白 (PVC の作成) | 空のディスクを作成します。 |
URL を使用したインポート (PVC の作成) | URL (HTTP または HTTPS エンドポイント) を介してコンテンツをインポートします。 | |
既存 PVC の使用 | クラスターですでに利用可能な PVC を使用します。 | |
既存の PVC のクローン作成 (PVC の作成) | クラスターで利用可能な既存の PVC を選択し、このクローンを作成します。 | |
レジストリーを使用したインポート (PVC の作成) | コンテナーレジストリーを使用してコンテンツをインポートします。 | |
コンテナー (一時的) | クラスターからアクセスできるレジストリーにあるコンテナーからコンテンツをアップロードします。コンテナーディスクは、CD-ROM や一時的な仮想マシンなどの読み取り専用ファイルシステムにのみ使用する必要があります。 | |
Name |
ディスクの名前。この名前には、小文字 ( | |
Size | ディスクのサイズ (GiB 単位)。 | |
Type | ディスクのタイプ。例: Disk または CD-ROM | |
Interface | ディスクデバイスのタイプ。サポートされるインターフェイスは、virtIO、SATA、および SCSI です。 | |
Storage Class | ディスクの作成に使用されるストレージクラス。 |
ストレージの詳細設定
以下のストレージの詳細設定はオプションであり、Blank、Import via URLURL、および Clone existing PVC ディスクで利用できます。OpenShift Virtualization 4.11 より前では、これらのパラメーターを指定しない場合、システムは kubevirt-storage-class-defaults
設定マップのデフォルト値を使用します。OpenShift Virtualization 4.11 以降では、システムは ストレージプロファイル のデフォルト値を使用します。
ストレージプロファイルを使用して、OpenShift Virtualization のストレージをプロビジョニングするときに一貫した高度なストレージ設定を確保します。
Volume Mode と Access Mode を手動で指定するには、デフォルトで選択されている Apply optimized StorageProfile settings チェックボックスをオフにする必要があります。
Name | モードの説明 | パラメーター | パラメーターの説明 |
---|---|---|---|
ボリュームモード | 永続ボリュームがフォーマットされたファイルシステムまたは raw ブロック状態を使用するかどうかを定義します。デフォルトは Filesystem です。 | Filesystem | ファイルシステムベースのボリュームで仮想ディスクを保存します。 |
Block |
ブロックボリュームで仮想ディスクを直接保存します。基礎となるストレージがサポートしている場合は、 | ||
アクセスモード | 永続ボリュームのアクセスモード。 | ReadWriteOnce (RWO) | ボリュームは単一ノードで読み取り/書き込みとしてマウントできます。 |
ReadWriteMany (RWX) | ボリュームは、一度に多くのノードで読み取り/書き込みとしてマウントできます。 注記 これは、ノード間の仮想マシンのライブマイグレーションなどの、一部の機能で必要になります。 | ||
ReadOnlyMany (ROX) | ボリュームは数多くのノードで読み取り専用としてマウントできます。 |
9.2.5. 仮想マシンへのネットワークインターフェイスの追加
以下の手順を使用してネットワークインターフェイスを仮想マシンに追加します。
手順
- サイドメニューから Virtualization → VirtualMachines をクリックします。
- 仮想マシンを選択して、VirtualMachine details 画面を開きます。
- Network Interfaces タブをクリックします。
- Add Network Interface をクリックします。
- Add Network Interface ウィンドウで、ネットワークインターフェイスの Name、Model、Network、 Type、および MAC Address を指定します。
- Add をクリックします。
仮想マシンが実行中の場合、新規ネットワークインターフェイスは pending restart 状態にあり、仮想マシンを再起動するまで変更は反映されません。
ページ上部の Pending Changes バナーには、仮想マシンの再起動時に適用されるすべての変更のリストが表示されます。
9.2.5.1. ネットワークフィールド
Name | Description |
---|---|
Name | ネットワークインターフェイスコントローラーの名前。 |
モデル | ネットワークインターフェイスコントローラーのモデルを示します。サポートされる値は e1000e および virtio です。 |
ネットワーク | 利用可能なネットワーク接続定義のリスト。 |
Type | 利用可能なバインディングメソッドの一覧。ネットワークインターフェイスに適したバインド方法を選択します。
|
MAC Address | ネットワークインターフェイスコントローラーの MAC アドレス。MAC アドレスが指定されていない場合、これは自動的に割り当てられます。 |
9.2.6. 関連情報
9.3. ブート順序の編集
Web コンソールまたは CLI を使用して、ブート順序リストの値を更新できます。
Virtual Machine Overview ページの Boot Order で、以下を実行できます。
- ディスクまたはネットワークインターフェイスコントローラー (NIC) を選択し、これをブート順序のリストに追加します。
- ブート順序の一覧でディスクまたは NIC の順序を編集します。
- ブート順序のリストからディスクまたは NIC を削除して、起動可能なソースのインベントリーに戻します。
9.3.1. Web コンソールでのブート順序リストへの項目の追加
Web コンソールを使用して、ブート順序リストに項目を追加します。
手順
- サイドメニューから Virtualization → VirtualMachines をクリックします。
- 仮想マシンを選択して、VirtualMachine details ページを開きます。
- Details タブをクリックします。
- Boot Order の右側にある鉛筆アイコンをクリックします。YAML 設定が存在しない場合や、これがブート順序リストの初回作成時の場合、以下のメッセージが表示されます。No resource selected.仮想マシンは、YAML ファイルでの出現順にディスクからの起動を試行します。
- Add Source をクリックして、仮想マシンのブート可能なディスクまたはネットワークインターフェイスコントローラー (NIC) を選択します。
- 追加のディスクまたは NIC をブート順序一覧に追加します。
- Save をクリックします。
仮想マシンが実行されている場合、Boot Order への変更は仮想マシンを再起動するまで反映されません。
Boot Order フィールドの右側にある View Pending Changes をクリックして、保留中の変更を表示できます。ページ上部の Pending Changes バナーには、仮想マシンの再起動時に適用されるすべての変更のリストが表示されます。
9.3.2. Web コンソールでのブート順序リストの編集
Web コンソールで起動順序リストを編集します。
手順
- サイドメニューから Virtualization → VirtualMachines をクリックします。
- 仮想マシンを選択して、VirtualMachine details ページを開きます。
- Details タブをクリックします。
- Boot Order の右側にある鉛筆アイコンをクリックします。
ブート順序リストで項目を移動するのに適した方法を選択します。
- スクリーンリーダーを使用しない場合、移動する項目の横にある矢印アイコンにカーソルを合わせ、項目を上下にドラッグし、選択した場所にドロップします。
- スクリーンリーダーを使用する場合は、上矢印キーまたは下矢印を押して、ブート順序リストで項目を移動します。次に Tab キーを押して、選択した場所に項目をドロップします。
- Save をクリックします。
仮想マシンが実行されている場合、ブート順序の変更は仮想マシンが再起動されるまで反映されません。
Boot Order フィールドの右側にある View Pending Changes をクリックして、保留中の変更を表示できます。ページ上部の Pending Changes バナーには、仮想マシンの再起動時に適用されるすべての変更のリストが表示されます。
9.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 ファイルの更新されたブート順序の値をブート順序リストに適用します。
9.3.4. Web コンソールでのブート順序リストからの項目の削除
Web コンソールを使用して、ブート順序のリストから項目を削除します。
手順
- サイドメニューから Virtualization → VirtualMachines をクリックします。
- 仮想マシンを選択して、VirtualMachine details ページを開きます。
- Details タブをクリックします。
- Boot Order の右側にある鉛筆アイコンをクリックします。
-
項目の横にある Remove アイコン
をクリックします。この項目はブート順序のリストから削除され、利用可能なブートソースのリストに保存されます。ブート順序リストからすべての項目を削除する場合、以下のメッセージが表示されます。No resource selected.仮想マシンは、YAML ファイルでの出現順にディスクからの起動を試行します。
仮想マシンが実行されている場合、Boot Order への変更は仮想マシンを再起動するまで反映されません。
Boot Order フィールドの右側にある View Pending Changes をクリックして、保留中の変更を表示できます。ページ上部の Pending Changes バナーには、仮想マシンの再起動時に適用されるすべての変更のリストが表示されます。
9.4. 仮想マシンの削除
Web コンソールまたは oc
コマンドラインインターフェイスを使用して、仮想マシンを削除できます。
9.4.1. Web コンソールの使用による仮想マシンの削除
仮想マシンを削除すると、仮想マシンはクラスターから永続的に削除されます。
仮想マシンを削除する際に、これが使用するデータボリュームは自動的に削除されます。
手順
- OpenShift Container Platform コンソールで、サイドメニューから Virtualization → VirtualMachines をクリックします。
削除する仮想マシンの Options メニュー
をクリックし、Delete を選択します。
- または、仮想マシン名をクリックして VirtualMachine details ページを開き、Actions → Delete をクリックします。
- 確認のポップアップウィンドウで、Delete をクリックし、仮想マシンを永続的に削除します。
9.4.2. CLI の使用による仮想マシンの削除
oc
コマンドラインインターフェイス (CLI) を使用して仮想マシンを削除できます。oc
クライアントを使用すると、複数の仮想マシンで各種のアクションを実行できます。
仮想マシンを削除する際に、これが使用するデータボリュームは自動的に削除されます。
前提条件
- 削除する仮想マシンの名前を特定すること。
手順
以下のコマンドを実行し、仮想マシンを削除します。
$ oc delete vm <vm_name>
注記このコマンドは、現在のプロジェクトに存在するオブジェクトのみを削除します。削除する必要のあるオブジェクトが別のプロジェクトまたは namespace にある場合、
-n <project_name>
オプションを指定します。
9.5. 仮想マシンインスタンスの管理
OpenShift Virtualization 環境の外部で独立して作成されたスタンドアロン仮想マシンインスタンス (VMI) がある場合、Web コンソールを使用するか、コマンドラインインターフェイス (CLI) から oc
または virtctl
コマンドを使用してそれらを管理できます。
virtctl
コマンドは、oc
コマンドよりも多くの仮想化オプションを提供します。たとえば、virtctl
を使用して仮想マシンを一時停止したり、ポートを公開したりできます。
9.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 を削除します。
9.5.2. CLI を使用した仮想マシンインスタンスのリスト表示
oc
コマンドラインインターフェイス (CLI) を使用して、スタンドアロンおよび仮想マシンによって所有されている VMI を含むすべての仮想マシンのリストを表示できます。
手順
以下のコマンドを実行して、すべての VMI のリストを表示します。
$ oc get vmis -A
9.5.3. Web コンソールを使用したスタンドアロン仮想マシンインスタンスのリスト表示
Web コンソールを使用して、仮想マシンによって所有されていないクラスター内のスタンドアロンの仮想マシンインスタンス (VMI) のリストを表示できます。
仮想マシンまたは他のオブジェクトが所有する VMI は、Web コンソールには表示されません。Web コンソールは、スタンドアロンの VMI のみを表示します。クラスター内のすべての VMI をリスト表示するには、CLI を使用する必要があります。
手順
サイドメニューから Virtualization → VirtualMachines をクリックします。
スタンドアロン VMI は、名前の横にある濃い色のバッジで識別できます。
9.5.4. Web コンソールを使用したスタンドアロン仮想マシンインスタンスの編集
Web コンソールを使用して、スタンドアロン仮想マシンインスタンスのアノテーションおよびラベルを編集できます。他のフィールドは編集できません。
手順
- OpenShift Container Platform コンソールで、サイドメニューから Virtualization → VirtualMachines をクリックします。
- スタンドアロン VMI を選択して、VirtualMachineInstance details ページを開きます。
- Details タブで、Annotations または Labels の横にある鉛筆アイコンをクリックします。
- 関連する変更を加え、Save をクリックします。
9.5.5. CLI を使用したスタンドアロン仮想マシンインスタンスの削除
oc
コマンドラインインターフェイス (CLI) を使用してスタンドアロン仮想マシンインスタンス (VMI) を削除できます。
前提条件
- 削除する必要のある VMI の名前を特定すること。
手順
以下のコマンドを実行して VMI を削除します。
$ oc delete vmi <vmi_name>
9.5.6. Web コンソールを使用したスタンドアロン仮想マシンインスタンスの削除
Web コンソールからスタンドアロン仮想マシンインスタンス (VMI) を削除します。
手順
- Open Shift Container Platform Web コンソールで、サイドメニューからVirtualization → VirtualMachinesをクリックします。
- Actions → Delete VirtualMachineInstance をクリックします。
- 確認のポップアップウィンドウで、Delete をクリックし、スタンドアロン VMI を永続的に削除します。
9.6. 仮想マシンの状態の制御
Web コンソールから仮想マシンを停止し、起動し、再起動し、一時停止を解除することができます。
virtctl
を使用して仮想マシンの状態を管理し、CLI から他のアクションを実行できます。たとえば、virtctl
を使用して仮想マシンを強制停止したり、ポートを公開したりできます。
9.6.1. 仮想マシンの起動
Web コンソールから仮想マシンを起動できます。
手順
- サイドメニューから Virtualization → VirtualMachines をクリックします。
- 起動する仮想マシンが含まれる行を見つけます。
ユースケースに適したメニューに移動します。
複数の仮想マシンでのアクションの実行が可能なこのページに留まるには、以下を実行します。
-
行の右端にある Options メニュー
をクリックします。
-
行の右端にある Options メニュー
選択した仮想マシンを起動する前に、その仮想マシンの総合的な情報を表示するには、以下を実行します。
- 仮想マシンの名前をクリックして、VirtualMachine details ページにアクセスします。
- Actions をクリックします。
- 再起動を選択します。
- 確認ウィンドウで Start をクリックし、仮想マシンを起動します。
URL
ソースからプロビジョニングされる仮想マシンの初回起動時に、OpenShift Virtualization が URL エンドポイントからコンテナーをインポートする間、仮想マシンの状態は Importing になります。このプロセスは、イメージのサイズによって数分の時間がかかる可能性があります。
9.6.2. 仮想マシンの再起動
Web コンソールから実行中の仮想マシンを再起動できます。
エラーを回避するには、ステータスが Importing の仮想マシンは再起動しないでください。
手順
- サイドメニューから Virtualization → VirtualMachines をクリックします。
- 再起動する仮想マシンが含まれる行を見つけます。
ユースケースに適したメニューに移動します。
複数の仮想マシンでのアクションの実行が可能なこのページに留まるには、以下を実行します。
-
行の右端にある Options メニュー
をクリックします。
-
行の右端にある Options メニュー
選択した仮想マシンを再起動する前に、その仮想マシンの総合的な情報を表示するには、以下を実行します。
- 仮想マシンの名前をクリックして、VirtualMachine details ページにアクセスします。
- Actions → Restart をクリックします。
- 確認ウィンドウで Restart をクリックし、仮想マシンを再起動します。
9.6.3. 仮想マシンの停止
Web コンソールから仮想マシンを停止できます。
手順
- サイドメニューから Virtualization → VirtualMachines をクリックします。
- 停止する仮想マシンが含まれる行を見つけます。
ユースケースに適したメニューに移動します。
複数の仮想マシンでのアクションの実行が可能なこのページに留まるには、以下を実行します。
-
行の右端にある Options メニュー
をクリックします。
-
行の右端にある Options メニュー
選択した仮想マシンを停止する前に、その仮想マシンの総合的な情報を表示するには、以下を実行します。
- 仮想マシンの名前をクリックして、VirtualMachine details ページにアクセスします。
- Actions → Stop をクリックします。
- 確認ウィンドウで Stop をクリックし、仮想マシンを停止します。
9.6.4. 仮想マシンの一時停止の解除
Web コンソールから仮想マシンの一時停止を解除できます。
前提条件
1 つ以上の仮想マシンのステータスが Paused である必要がある。
注記virtctl
クライアントを使用して仮想マシンを一時停止することができます。
手順
- サイドメニューから Virtualization → VirtualMachines をクリックします。
- 一時停止を解除する仮想マシンが含まれる行を見つけます。
ユースケースに適したメニューに移動します。
複数の仮想マシンでのアクションの実行が可能なこのページに留まるには、以下を実行します。
- Status 列で、Paused をクリックします。
選択した仮想マシンの一時停止を解除する前に、その仮想マシンの総合的な情報を表示するには、以下を実行します。
- 仮想マシンの名前をクリックして、VirtualMachine details ページにアクセスします。
- Status の右側にある鉛筆アイコンをクリックします。
- 確認ウィンドウで Stop をクリックし、仮想マシンの一時停止を解除します。
9.7. 仮想マシンコンソールへのアクセス
OpenShift Virtualization は、異なる製品タスクを実現するために使用できる異なる仮想マシンコンソールを提供します。これらのコンソールには、OpenShift Container Platform Web コンソールから、また CLI コマンドを使用してアクセスできます。
9.7.1. OpenShift Container Platform Web コンソールでの仮想マシンコンソールへのアクセス
OpenShift Container Platform Web コンソールでシリアルコンソールまたは VNC コンソールを使用して、仮想マシンに接続できます。
OpenShift Container Platform Web コンソールで、RDP (リモートデスクトッププロトコル) を使用するデスクトップビューアーコンソールを使用して、Windows 仮想マシンに接続できます。
9.7.1.1. シリアルコンソールへの接続
Web コンソールの VirtualMachine details ページにある Console タブから、実行中の仮想マシンのシリアルコンソールに接続します。
手順
- OpenShift Container Platform コンソールで、サイドメニューから Virtualization → VirtualMachines をクリックします。
- 仮想マシンを選択して、VirtualMachine details ページを開きます。
- Console タブをクリックします。VNC コンソールがデフォルトで開きます。
- 一度に 1 つのコンソール セッションのみが開かれるようにするには、Disconnect をクリックします。それ以外の場合、VNC コンソール セッションはバックグラウンドでアクティブなままになります。
- VNC Console ドロップダウンリストをクリックし、Serial Console を選択します。
- Disconnect をクリックして、コンソールセッションを終了します。
- オプション: Open Console in New Window をクリックして、別のウィンドウでシリアルコンソールを開きます。
9.7.1.2. VNC コンソールへの接続
Web コンソールの VirtualMachine details ページにある Console タブから、実行中の仮想マシンの VNC コンソールに接続します。
手順
- OpenShift Container Platform コンソールで、サイドメニューから Virtualization → VirtualMachines をクリックします。
- 仮想マシンを選択して、VirtualMachine details ページを開きます。
- Console タブをクリックします。VNC コンソールがデフォルトで開きます。
- オプション: Open Console in New Window をクリックして、別のウィンドウで VNC コンソールを開きます。
- オプション: Send Key をクリックして、キーの組み合わせを仮想マシンに送信します。
- コンソールウィンドウの外側をクリックし、Disconnect をクリックしてセッションを終了します。
9.7.1.3. RDP を使用した Windows 仮想マシンへの接続
Remote Desktop Protocol (RDP) を使用する Desktop viewer コンソールは、Windows 仮想マシンに接続するためのより使いやすいコンソールを提供します。
RDP を使用して Windows 仮想マシンに接続するには、Web コンソールの VirtualMachine 詳細 ページの Console タブから仮想マシンの console.rdp
ファイルをダウンロードし、優先する RDP クライアントに提供します。
前提条件
-
QEMU ゲストエージェントがインストールされた実行中の Windows 仮想マシン。
qemu-guest-agent
は VirtIO ドライバーに含まれています。 - Windows 仮想マシンと同じネットワーク上のマシンにインストールされた RDP クライアント。
手順
- OpenShift Container Platform コンソールで、サイドメニューから Virtualization → VirtualMachines をクリックします。
- Windows 仮想マシンをクリックして、VirtualMachine details ページを開きます。
- Console タブをクリックします。
- コンソールのリストから、Desktop viewer を選択します。
-
Launch Remote Desktop をクリックし、
console.rdp
ファイルをダウンロードします。 -
優先する RDP クライアントで
console.rdp
ファイルを参照して、Windows 仮想マシンに接続します。
9.7.1.4. 仮想マシンの表示の切り替え
Windows 仮想マシン (VM) に vGPU が接続されている場合、Web コンソールを使用してデフォルトのディスプレイと vGPU ディスプレイを切り替えることができます。
前提条件
-
仲介されたデバイスは、
HyperConverged
カスタムリソースで設定され、仮想マシンに割り当てられます。 - 仮想マシンは実行中です。
手順
- OpenShift Container Platform コンソールで、Virtualization → VirtualMachines をクリックします。
- Windows 仮想マシンを選択して Overview 画面を開きます。
- Console タブをクリックします。
- コンソールのリストから、VNC console を選択します。
Send Key リストから適切なキーの組み合わせを選択します。
-
デフォルトの仮想マシン表示にアクセスするには、
Ctl + Alt+ 1
を選択します。 -
vGPU ディスプレイにアクセスするには、
Ctl + Alt + 2
を選択します。
-
デフォルトの仮想マシン表示にアクセスするには、
関連情報
9.7.2. CLI コマンドの使用による仮想マシンコンソールへのアクセス
9.7.2.1. virtctl を使用して SSH 経由で仮想マシンにアクセスする
virtctl ssh
コマンドを使用して、SSH トラフィックを仮想マシン (VM) に転送できます。
コントロールプレーンの SSH トラフィックが多いと、API サーバーの速度が低下する可能性があります。定期的に多数の接続が必要な場合は、専用の Kubernetes Service
オブジェクトを使用して仮想マシンにアクセスします。
前提条件
-
cluster-admin
パーミッションを持つ OpenShift Container Platform クラスターにアクセスできる。 -
OpenShift CLI (
oc
) がインストールされている。 -
virtctl
クライアントをインストールしました。 - アクセスする仮想マシンが実行されています。
- 仮想マシンと同じプロジェクトにいます。
手順
ssh-keygen
コマンドを使用して、SSH 公開鍵ペアを生成します。$ ssh-keygen -f <key_file> 1
- 1
- キーを格納するファイルを指定します。
仮想マシンにアクセスするための SSH 公開鍵を含む SSH 認証シークレットを作成します。
$ oc create secret generic my-pub-key --from-file=key1=<key_file>.pub
VirtualMachine
マニフェストにシークレットへの参照を追加します。以下に例を示します。apiVersion: kubevirt.io/v1 kind: VirtualMachine metadata: name: testvm spec: running: true template: spec: accessCredentials: - sshPublicKey: source: secret: secretName: my-pub-key 1 propagationMethod: configDrive: {} 2 # ...
- 仮想マシンを再起動して変更を適用します。
次のコマンドを実行して、SSH 経由で仮想マシンにアクセスします。
$ virtctl ssh -i <key_file> <vm_username>@<vm_name>
オプション: 仮想マシンとの間でファイルを安全に転送するには、次のコマンドを使用します。
マシンから仮想マシンにファイルをコピーする
$ virtctl scp -i <key_file> <filename> <vm_username>@<vm_name>:
仮想マシンからマシンにファイルをコピーする
$ virtctl scp -i <key_file> <vm_username@<vm_name>:<filename> .
9.7.2.2. 仮想マシンインスタンスのシリアルコンソールへのアクセス
virtctl console
コマンドは、指定された仮想マシンインスタンスへのシリアルコンソールを開きます。
前提条件
-
virt-viewer
パッケージがインストールされていること。 - アクセスする仮想マシンインスタンスが実行中であること。
手順
virtctl
でシリアルコンソールに接続します。$ virtctl console <VMI>
9.7.2.3. VNC を使用した仮想マシンインスタンスのグラフィカルコンソールへのアクセス
virtctl
クライアントユーティリティーは remote-viewer
機能を使用し、実行中の仮想マシンインスタンスに対してグラフィカルコンソールを開くことができます。この機能は virt-viewer
パッケージに組み込まれています。
前提条件
-
virt-viewer
パッケージがインストールされていること。 - アクセスする仮想マシンインスタンスが実行中であること。
リモートマシンで SSH 経由で virtctl
を使用する場合、X セッションをマシンに転送する必要があります。
手順
virtctl
ユーティリティーを使用してグラフィカルインターフェイスに接続します。$ virtctl vnc <VMI>
コマンドが失敗した場合には、トラブルシューティング情報を収集するために
-v
フラグの使用を試行します。$ virtctl vnc <VMI> -v 4
9.7.2.4. RDP コンソールの使用による Windows 仮想マシンへの接続
ローカルのリモートデスクトッププロトコル (RDP) クライアントを使用して、Windows 仮想マシン (VM) に接続するための Kubernetes Service
オブジェクトを作成します。
前提条件
-
QEMU ゲストエージェントがインストールされた実行中の Windows 仮想マシン。
qemu-guest-agent
オブジェクトは VirtIO ドライバーに含まれています。 - ローカルマシンにインストールされた RDP クライアント。
手順
VirtualMachine
マニフェストを編集して、サービス作成のラベルを追加します。apiVersion: kubevirt.io/v1 kind: VirtualMachine metadata: name: vm-ephemeral namespace: example-namespace spec: running: false template: metadata: labels: special: key 1 # ...
- 1
- ラベル
special: key
をspec.template.metadata.labels
セクションに追加します。
注記仮想マシンのラベルは Pod に渡されます。
special: キー
ラベルは、Service
マニフェストのspec.selector
属性のラベルと一致する必要があります。-
VirtualMachine
マニフェストファイルを保存して変更を適用します。 仮想マシンを公開するための
Service
マニフェストを作成します。apiVersion: v1 kind: Service metadata: name: rdpservice 1 namespace: example-namespace 2 spec: ports: - targetPort: 3389 3 protocol: TCP selector: special: key 4 type: NodePort 5 # ...
-
サービス
マニフェストファイルを保存します。 以下のコマンドを実行してサービスを作成します。
$ oc create -f <service_name>.yaml
- 仮想マシンを起動します。仮想マシンがすでに実行中の場合は、再起動します。
Service
オブジェクトをクエリーし、これが利用可能であることを確認します。$ oc get service -n example-namespace
NodePort
サービスの出力例NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE rdpservice NodePort 172.30.232.73 <none> 3389:30000/TCP 5m
以下のコマンドを実行して、ノードの IP アドレスを取得します。
$ oc get node <node_name> -o wide
出力例
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP node01 Ready worker 6d22h v1.24.0 192.168.55.101 <none>
- 優先する RDP クライアントでノード IP アドレスと割り当てられたポートを指定します。
- Windows 仮想マシンに接続するためのユーザー名とパスワードを入力します。
9.8. sysprep を使用した Windows のインストールの自動化
Microsoft DVD イメージとsysprep
を使用して、Windows 仮想マシンのインストール、セットアップ、およびソフトウェアプロビジョニングを自動化できます。
9.8.1. Windows DVD を使用した VM ディスクイメージの作成
Microsoft はダウンロード用のディスクイメージを提供していませんが、Windows DVD を使用してディスクイメージを作成できます。このディスクイメージを使用して、仮想マシンを作成できます。
手順
- Open Shift Virtualization Web コンソールで、Storage → PersistentVolumeClaims → Create PersistentVolumeClaim With Data upload formをクリックします。
- 目的のプロジェクトを選択します。
- 永続ボリューム要求の名前を設定します。
- Windows DVD から仮想マシンディスクイメージをアップロードします。これで、イメージをブートソースとして使用して、新しい Windows 仮想マシンを作成できます。
9.8.2. ディスクイメージを使用した Windows のインストール
ディスクイメージを使用して、仮想マシンに Windows をインストールできます。
前提条件
- Windows DVD を使用してディスクイメージを作成する必要があります。
-
autounattend.xml
応答ファイルを作成する必要があります。詳細は、Microsoft のドキュメント を参照してください。
手順
- OpenShift Container Platform コンソールで、サイドメニューから Virtualization → Catalog をクリックします。
- Windows テンプレートを選択し、Customize VirtualMachine をクリックします。
- Disk source リストから Upload (Upload a new file to a PVC) を選択し、DVD イメージを参照します。
- Review and create VirtualMachine をクリックします。
- Clone available operating system source to this Virtual Machine のチェックを外します。
- Start this VirtualMachine after creation のチェックを外します。
- Scripts タブの Sysprep セクションで、Edit をクリックします。
-
autounattend.xml
応答ファイルを参照し、Save をクリックします。 - Create VirtualMachine をクリックします。
-
YAML タブで、
running:false
をrunStrategy: RerunOnFailure
に置き換え、Save をクリックします。
VM は、autounattend.xml
応答ファイルを含む sysprep
ディスクで開始されます。
9.8.3. sysprep を使用した Windows 仮想マシンの一般化
イメージを一般化すると、イメージが仮想マシン (VM) にデプロイされる際に、システム固有の設定データがすべて削除されます。
仮想マシンを一般化する前に、Windows の無人インストール後にsysprep
ツールが応答ファイルを検出できないことを確認する必要があります。
手順
- OpenShift Container Platform コンソールで、Virtualization → VirtualMachines をクリックします。
- Windows 仮想マシンを選択して、VirtualMachine details ページを開きます。
- Disks タブをクリックします。
-
sysprep
ディスクの Options メニューをクリックし、Detach を選択します。
- デタッチ をクリックします。
-
sysprep
ツールによる検出を回避するために、C:\Windows\Panther\unattend.xml
の名前を変更します。 次のコマンドを実行して、
sysprep
プログラムを開始します。%WINDIR%\System32\Sysprep\sysprep.exe /generalize /shutdown /oobe /mode:vm
-
sysprep
ツールが完了すると、Windows 仮想マシンがシャットダウンします。これで、仮想マシンのディスクイメージを Windows 仮想マシンのインストールイメージとして使用できるようになりました。
これで、仮想マシンを特殊化できます。
9.8.4. Windows 仮想マシンの特殊化
仮想マシン (VM) を特殊化すると、一般化された Windows イメージから VM にコンピューター固有の情報が設定されます。
前提条件
- 一般化された Windows ディスクイメージが必要です。
-
unattend.xml
応答ファイルを作成する必要があります。詳細は、Microsoft のドキュメント を参照してください。
手順
- OpenShift Container Platform コンソールで、Virtualization → Catalog をクリックします。
- Windows テンプレートを選択し、Customize VirtualMachine をクリックします。
- Disk source リストから PVC (clone PVC) を選択します。
- 一般化された Windows イメージの Persistent Volume Claim project および Persistent Volume Claim name を指定します。
- Review and create VirtualMachine をクリックします。
- Scripts タブをクリックします。
-
Sysprep セクションで、Edit をクリックし、
unattend.xml
応答ファイルを参照して、Save をクリックします。 - Create VirtualMachine をクリックします。
Windows は初回起動時に、unattend.xml
応答ファイルを使用して VM を特殊化します。これで、仮想マシンを使用する準備が整いました。
9.8.5. 関連情報
9.9. 障害が発生したノードの解決による仮想マシンのフェイルオーバーのトリガー
ノードに障害が発生し、マシンヘルスチェック がクラスターにデプロイされていない場合、RunStrategy: Always
が設定された仮想マシン (VM) は正常なノードに自動的に移動しません。仮想マシンのフェイルオーバーをトリガーするには、Node
オブジェクトを手動で削除する必要があります。
インストーラーでプロビジョニングされるインフラストラクチャー を使用してクラスターをインストールし、マシンヘルスチェックを適切に設定している場合は、以下のようになります。
- 障害が発生したノードは自動的に再利用されます。
-
RunStrategy
がAlways
またはRerunOnFailure
に設定された仮想マシンは正常なノードで自動的にスケジュールされます。
9.9.1. 前提条件
-
仮想マシンが実行されているノードには
NotReady
状態 が設定されている。 -
障害のあるノードで実行されていた仮想マシンでは、
RunStrategy
がAlways
に設定されている。 -
OpenShift CLI (
oc
) がインストールされている。
9.9.2. ベアメタルクラスターからのノードの削除
CLI を使用してノードを削除する場合、ノードオブジェクトは Kubernetes で削除されますが、ノード自体にある Pod は削除されません。レプリケーションコントローラーで管理されないベア Pod は、OpenShift Container Platform からはアクセスできなくなります。レプリケーションコントローラーで管理されるベア Pod は、他の利用可能なノードに再スケジュールされます。ローカルのマニフェスト Pod は削除する必要があります。
手順
以下の手順を実行して、ベアメタルで実行されている OpenShift Container Platform クラスターからノードを削除します。
ノードにスケジュール対象外 (unschedulable) のマークを付けます。
$ oc adm cordon <node_name>
ノード上のすべての Pod をドレイン (解放) します。
$ oc adm drain <node_name> --force=true
このステップは、ノードがオフラインまたは応答しない場合に失敗する可能性があります。ノードが応答しない場合でも、共有ストレージに書き込むワークロードを実行している可能性があります。データの破損を防ぐには、続行する前に物理ハードウェアの電源を切ります。
クラスターからノードを削除します。
$ oc delete node <node_name>
ノードオブジェクトはクラスターから削除されていますが、これは再起動後や kubelet サービスが再起動される場合にクラスターに再び参加することができます。ノードとそのすべてのデータを永続的に削除するには、ノードの使用を停止 する必要があります。
- 物理ハードウェアを電源を切っている場合は、ノードがクラスターに再度加わるように、そのハードウェアを再びオンに切り替えます。
9.9.3. 仮想マシンのフェイルオーバーの確認
すべてのリソースが正常でないノードで終了すると、移行した仮想マシンのそれぞれについて、新しい仮想マシンインスタンス (VMI) が正常なノードに自動的に作成されます。VMI が作成されていることを確認するには、oc
CLI を使用してすべての VMI を表示します。
9.9.3.1. CLI を使用した仮想マシンインスタンスのリスト表示
oc
コマンドラインインターフェイス (CLI) を使用して、スタンドアロンおよび仮想マシンによって所有されている VMI を含むすべての仮想マシンのリストを表示できます。
手順
以下のコマンドを実行して、すべての VMI のリストを表示します。
$ oc get vmis -A
9.10. QEMU ゲストエージェントの仮想マシンへのインストール
QEMU ゲストエージェント は、仮想マシンで実行され、仮想マシン、ユーザー、ファイルシステム、およびセカンダリーネットワークに関する情報をホストに渡すデーモンです。
9.10.1. QEMU ゲストエージェントの Linux 仮想マシンへのインストール
qemu-guest-agent
は広く利用されており、Red Hat 仮想マシンでデフォルトで利用できます。このエージェントをインストールし、サービスを起動します。
仮想マシン (VM) に QEMU ゲストエージェントがインストールされ、実行されているかどうかを確認するには、AgentConnected
が VM 仕様に表示されていることを確認します。
整合性が最も高いオンライン (実行状態) の仮想マシンのスナップショットを作成するには、QEMU ゲストエージェントをインストールします。
QEMU ゲストエージェントは、システムのワークロードに応じて、可能な限り仮想マシンのファイルシステムの休止しようとすることで一貫性のあるスナップショットを取得します。これにより、スナップショットの作成前にインフライトの I/O がディスクに書き込まれるようになります。ゲストエージェントが存在しない場合は、休止はできず、ベストエフォートスナップショットが作成されます。スナップショットの作成条件は、Web コンソールまたは CLI に表示されるスナップショットの指示に反映されます。
手順
- コンソールのいずれか、SSH を使用して仮想マシンのコマンドラインにアクセスします。
QEMU ゲストエージェントを仮想マシンにインストールします。
$ yum install -y qemu-guest-agent
サービスに永続性があることを確認し、これを起動します。
$ systemctl enable --now qemu-guest-agent
9.10.2. QEMU ゲストエージェントの Windows 仮想マシンへのインストール
Windows 仮想マシンの場合には、QEMU ゲストエージェントは VirtIO ドライバーに含まれます。既存または新規の Windows インストールにドライバーをインストールします。
仮想マシン (VM) に QEMU ゲストエージェントがインストールされ、実行されているかどうかを確認するには、AgentConnected
が VM 仕様に表示されていることを確認します。
整合性が最も高いオンライン (実行状態) の仮想マシンのスナップショットを作成するには、QEMU ゲストエージェントをインストールします。
QEMU ゲストエージェントは、システムのワークロードに応じて、可能な限り仮想マシンのファイルシステムの休止しようとすることで一貫性のあるスナップショットを取得します。これにより、スナップショットの作成前にインフライトの I/O がディスクに書き込まれるようになります。ゲストエージェントが存在しない場合は、休止はできず、ベストエフォートスナップショットが作成されます。スナップショットの作成条件は、Web コンソールまたは CLI に表示されるスナップショットの指示に反映されます。
9.10.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 をクリックしてウィンドウを閉じます。
- 仮想マシンを再起動してドライバーのインストールを完了します。
9.10.2.2. Windows インストール時の VirtIO ドライバーのインストール
Windows のインストール時に割り当てられた SATA CD ドライバーから VirtIO ドライバーをインストールします。
この手順では、Windows インストールの汎用的なアプローチを使用しますが、インストール方法は Windows のバージョンごとに異なる可能性があります。インストールする Windows のバージョンについてのドキュメントを参照してください。
手順
- 仮想マシンを起動し、グラフィカルコンソールに接続します。
- Windows インストールプロセスを開始します。
- Advanced インストールを選択します。
-
ストレージの宛先は、ドライバーがロードされるまで認識されません。
Load driver
をクリックします。 - ドライバーは SATA CD ドライブとして割り当てられます。OK をクリックし、CD ドライバーでロードするストレージドライバーを参照します。ドライバーは、ドライバーのタイプ、オペレーティングシステム、および CPU アーキテクチャー別に階層的に編成されます。
- 必要なすべてのドライバーについて直前の 2 つの手順を繰り返します。
- Windows インストールを完了します。
9.11. 仮想マシンの QEMU ゲストエージェント情報の表示
QEMU ゲストエージェントが仮想マシンで実行されている場合は、Web コンソールを使用して、仮想マシン、ユーザー、ファイルシステム、およびセカンダリーネットワークに関する情報を表示できます。
9.11.1. 前提条件
- 仮想マシンに QEMU ゲストエージェントを インストールします。
9.11.2. Web コンソールでの QEMU ゲストエージェント情報について
QEMU ゲストエージェントがインストールされると、VirtualMachine details ページの Overview タブおよび Details タブに、ホスト名、オペレーティングシステム、タイムゾーン、およびログインユーザーに関する情報が表示されます。
VirtualMachine details ページには、仮想マシンにインストールされているゲストオペレーティングシステムに関する情報が表示されます。Details タブには、ログインユーザーの情報が含まれる表が表示されます。Disks タブには、ファイルシステムの情報が含まれる表が表示されます。
QEMU ゲストエージェントがインストールされていないと、Overview タブおよび Details タブには、仮想マシンの作成時に指定したオペレーティングシステムについての情報が表示されます。
9.11.3. Web コンソールでの QEMU ゲストエージェント情報の表示
Web コンソールを使用して、QEMU ゲストエージェントによってホストに渡される仮想マシンの情報を表示できます。
手順
- サイドメニューから Virtualization → VirtualMachines をクリックします。
- 仮想マシン名を選択して、VirtualMachine details ページを開きます。
- Details タブをクリックして、アクティブなユーザーを表示します。
- Disks タブをクリックして、ファイルシステムについての情報を表示します。
9.12. 仮想マシンでの config map、シークレット、およびサービスアカウントの管理
シークレット、config map、およびサービスアカウントを使用して設定データを仮想マシンに渡すことができます。たとえば、以下を実行できます。
- シークレットを仮想マシンに追加して認証情報を必要とするサービスに仮想マシンのアクセスを付与します。
- Pod または別のオブジェクトがデータを使用できるように、機密データではない設定データを config map に保存します。
- サービスアカウントをそのコンポーネントに関連付けることにより、コンポーネントが API サーバーにアクセスできるようにします。
OpenShift Virtualization はシークレット、設定マップ、およびサービスアカウントを仮想マシンディスクとして公開し、追加のオーバーヘッドなしにプラットフォーム全体でそれらを使用できるようにします。
9.12.1. シークレット、設定マップ、またはサービスアカウントの仮想マシンへの追加
OpenShift Container Platform Web コンソールを使用して、シークレット、設定マップ、またはサービスアカウントを仮想マシンに追加します。
これらのリソースは、ディスクとして仮想マシンに追加されます。他のディスクをマウントするように、シークレット、設定マップ、またはサービスアカウントをマウントします。
仮想マシンが実行中の場合、変更内容は仮想マシンが再起動されるまで反映されません。新規に追加されたリソースは、ページ上部の Pending Changes バナーの Environment および Disks タブの両方に保留中のリソースとしてマークされます。
前提条件
- 追加するシークレット、設定マップ、またはサービスアカウントは、ターゲット仮想マシンと同じ namespace に存在する必要がある。
手順
- サイドメニューから Virtualization → VirtualMachines をクリックします。
- 仮想マシンを選択して、VirtualMachine details ページを開きます。
- Environment タブで、Add Config Map, Secret or Service Account をクリックします。
- Select a resource をクリックし、リストから resource を選択します。6 文字のシリアル番号が、選択したリソースについて自動的に生成されます。
- オプション: Reload をクリックして、環境を最後に保存した状態に戻します。
- Save をクリックします。
検証
- VirtualMachine details ページで、Disks タブをクリックし、シークレット、config map、またはサービスアカウントがディスクのリストに含まれていることを確認します。
- Actions → Restart をクリックして、仮想マシンを再起動します。
他のディスクをマウントするように、シークレット、設定マップ、またはサービスアカウントをマウントできるようになりました。
9.12.2. 仮想マシンからのシークレット、設定マップ、またはサービスアカウントの削除
OpenShift Container Platform Web コンソールを使用して、シークレット、設定マップ、またはサービスアカウントを仮想マシンから削除します。
前提条件
- 仮想マシンに割り当てられるシークレット、設定マップ、またはサービスアカウントが少なくとも 1 つ必要である。
手順
- サイドメニューから Virtualization → VirtualMachines をクリックします。
- 仮想マシンを選択して、VirtualMachine details ページを開きます。
- Environment タブをクリックします。
-
リストで削除する項目を見つけ、項目の右上にある Remove
をクリックします。
- Save をクリックします。
Reload をクリックし、最後に保存された状態にフォームをリセットできます。
検証
- VirtualMachine details ページで、Disks タブをクリックします。
- 削除したシークレット、設定マップ、またはサービスアカウントがディスクの一覧に含まれていないことを確認します。
9.12.3. 関連情報
9.13. VirtIO ドライバーの既存の Windows 仮想マシンへのインストール
9.13.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
コンテナーディスクは仮想マシンから削除できます。
新しい Windows 仮想マシンに Virtio ドライバーをインストールする も参照してください。
9.13.2. Microsoft Windows 仮想マシンのサポートされる VirtIO ドライバー
表9.3 サポートされるドライバー
ドライバー名 | ハードウェア ID | Description |
---|---|---|
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 が設定されている場合にのみ利用できます。 |
9.13.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 ドライブからインストールできます。
9.13.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 をクリックしてウィンドウを閉じます。
- 仮想マシンを再起動してドライバーのインストールを完了します。
9.13.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
- 変更を有効にするために仮想マシンを再起動します。
9.14. VirtIO ドライバーの新規 Windows 仮想マシンへのインストール
9.14.1. 前提条件
- 仮想マシンからアクセスできる Windows インストールメディア (ISO のデータボリュームへのインポート および仮想マシンへの割り当てを実行)。
9.14.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 仮想マシンへのインストール も参照してください。
9.14.3. Microsoft Windows 仮想マシンのサポートされる VirtIO ドライバー
表9.4 サポートされるドライバー
ドライバー名 | ハードウェア ID | Description |
---|---|---|
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 が設定されている場合にのみ利用できます。 |
9.14.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 ドライブからインストールできます。
9.14.5. Windows インストール時の VirtIO ドライバーのインストール
Windows のインストール時に割り当てられた SATA CD ドライバーから VirtIO ドライバーをインストールします。
この手順では、Windows インストールの汎用的なアプローチを使用しますが、インストール方法は Windows のバージョンごとに異なる可能性があります。インストールする Windows のバージョンについてのドキュメントを参照してください。
手順
- 仮想マシンを起動し、グラフィカルコンソールに接続します。
- Windows インストールプロセスを開始します。
- Advanced インストールを選択します。
-
ストレージの宛先は、ドライバーがロードされるまで認識されません。
Load driver
をクリックします。 - ドライバーは SATA CD ドライブとして割り当てられます。OK をクリックし、CD ドライバーでロードするストレージドライバーを参照します。ドライバーは、ドライバーのタイプ、オペレーティングシステム、および CPU アーキテクチャー別に階層的に編成されます。
- 必要なすべてのドライバーについて直前の 2 つの手順を繰り返します。
- Windows インストールを完了します。
9.14.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
- 変更を有効にするために仮想マシンを再起動します。
9.15. 仮想 Trusted Platform Module デバイスの使用
VirtualMachine
(VM) または VirtualMachineInstance
(VMI) マニフェストを編集して、仮想 Trusted Platform Module (vTPM) デバイスを新規または既存の仮想マシンに追加します。
9.15.1. vTPM デバイスについて
仮想トラステッドプラットフォームモジュール (vTPM) デバイスは、物理トラステッドプラットフォームモジュール (TPM) ハードウェアチップのように機能します。
vTPM デバイスはどのオペレーティングシステムでも使用できますが、Windows 11 をインストールまたは起動するには TPM チップが必要です。vTPM デバイスを使用すると、Windows 11 イメージから作成された VM を物理 TPM チップなしで機能させることができます。
vTPM を有効にしないと、ノードに TPM デバイスがある場合でも、VM は TPM デバイスを認識しません。
また、vTPM デバイスは、物理ハードウェアなしでシークレットを一時的に保存することで、仮想マシンを保護します。ただし、永続的なシークレット ストレージに vTPM を使用することは現在サポートされていません。vTPM は、VM のシャットダウン後に保存されたシークレットを破棄します。
9.15.2. 仮想マシンへの vTPM デバイスの追加
仮想トラステッドプラットフォームモジュール (vTPM) デバイスを仮想マシン (VM) に追加すると、物理 TPM デバイスなしで Windows 11 イメージから作成された仮想マシンを実行できます。vTPM デバイスは、その仮想マシンのシークレットも一時的に保存します。
手順
次のコマンドを実行して、仮想マシン設定を更新します。
$ oc edit vm <vm_name>
tpm: {}
行が含まれるように仮想マシンspec
を編集します。以下に例を示します。apiVersion: kubevirt.io/v1 kind: VirtualMachine metadata: name: example-vm spec: template: spec: domain: devices: tpm: {} 1 ...
- 1
- TPM デバイスを仮想マシンに追加します。
- 変更を適用するには、エディターを保存し、終了します。
- オプション: 実行中の仮想マシンを編集している場合は、変更を有効にするためにこれを再起動する必要があります。
9.16. 高度な仮想マシン管理
9.16.1. 仮想マシンのリソースクォータの使用
仮想マシンのリソースクォータの作成および管理
9.16.1.1. 仮想マシンのリソースクォータ制限の設定
リクエストのみを使用するリソースクォータは、仮想マシン (VM) で自動的に機能します。リソースクォータで制限を使用する場合は、VM に手動でリソース制限を設定する必要があります。リソース制限は、リソース要求より少なくとも 100 MiB 大きくする必要があります。
手順
VirtualMachine
マニフェストを編集して、VM の制限を設定します。以下に例を示します。apiVersion: kubevirt.io/v1 kind: VirtualMachine metadata: name: with-limits spec: running: false template: spec: domain: # ... resources: requests: memory: 128Mi limits: memory: 256Mi 1
- 1
- この設定がサポートされるのは、
limits.memory
値がrequests.memory
値より少なくとも100Mi
大きいためです。
-
VirtualMachine
マニフェストを保存します。
9.16.1.2. 関連情報
9.16.2. 仮想マシンのノードの指定
ノードの配置ルールを使用して、仮想マシン (VM) を特定のノードに配置することができます。
9.16.2.1. 仮想マシンのノード配置について
仮想マシン (VM) が適切なノードで実行されるようにするには、ノードの配置ルールを設定できます。以下の場合にこれを行うことができます。
- 仮想マシンが複数ある。フォールトトレランスを確保するために、これらを異なるノードで実行する必要がある。
- 2 つの相互間のネットワークトラフィックの多い chatty VM がある。冗長なノード間のルーティングを回避するには、仮想マシンを同じノードで実行します。
- 仮想マシンには、利用可能なすべてのノードにない特定のハードウェア機能が必要です。
- 機能をノードに追加する Pod があり、それらの機能を使用できるように仮想マシンをそのノードに配置する必要があります。
仮想マシンの配置は、ワークロードの既存のノードの配置ルールに基づきます。ワークロードがコンポーネントレベルの特定のノードから除外される場合、仮想マシンはそれらのノードに配置できません。
以下のルールタイプは、VirtualMachine
マニフェストの spec
フィールドで使用できます。
nodeSelector
- 仮想マシンは、キーと値のペアまたはこのフィールドで指定したペアを使用してラベルが付けられたノードに Pod をスケジュールできます。ノードには、リスト表示されたすべてのペアに一致するラベルがなければなりません。
affinity
より表現的な構文を使用して、ノードと仮想マシンに一致するルールを設定できます。たとえば、ルールがハード要件ではなく基本設定になるように指定し、ルールの条件が満たされない場合も仮想マシンがスケジュールされるようにすることができます。Pod のアフィニティー、Pod の非アフィニティー、およびノードのアフィニティーは仮想マシンの配置でサポートされます。Pod のアフィニティーは仮想マシンに対して動作します。
VirtualMachine
ワークロードタイプはPod
オブジェクトに基づくためです。注記アフィニティールールは、スケジューリング時にのみ適用されます。OpenShift Container Platform は、制約を満たさなくなった場合に実行中のワークロードを再スケジューリングしません。
tolerations
- 一致するテイントを持つノードで仮想マシンをスケジュールできます。テイントがノードに適用される場合、そのノードはテイントを容認する仮想マシンのみを受け入れます。
9.16.2.2. ノード配置の例
以下の YAML スニペットの例では、nodePlacement
、affinity
、および tolerations
フィールドを使用して仮想マシンのノード配置をカスタマイズします。
9.16.2.2.1. 例: nodeSelector を使用した仮想マシンノードの配置
この例では、仮想マシンに example-key-1 = example-value-1
および example-key-2 = example-value-2
ラベルの両方が含まれるメタデータのあるノードが必要です。
この説明に該当するノードがない場合、仮想マシンはスケジュールされません。
仮想マシンマニフェストの例
metadata: name: example-vm-node-selector apiVersion: kubevirt.io/v1 kind: VirtualMachine spec: template: spec: nodeSelector: example-key-1: example-value-1 example-key-2: example-value-2 ...
9.16.2.2.2. 例: Pod のアフィニティーおよび Pod の非アフィニティーによる仮想マシンノードの配置
この例では、仮想マシンはラベル example-key-1 = example-value-1
を持つ実行中の Pod のあるノードでスケジュールされる必要があります。このようなノードで実行中の Pod がない場合、仮想マシンはスケジュールされません。
可能な場合に限り、仮想マシンはラベル example-key-2 = example-value-2
を持つ Pod のあるノードではスケジュールされません。ただし、すべての候補となるノードにこのラベルを持つ Pod がある場合、スケジューラーはこの制約を無視します。
仮想マシンマニフェストの例
metadata: name: example-vm-pod-affinity apiVersion: kubevirt.io/v1 kind: VirtualMachine spec: affinity: podAffinity: requiredDuringSchedulingIgnoredDuringExecution: 1 - labelSelector: matchExpressions: - key: example-key-1 operator: In values: - example-value-1 topologyKey: kubernetes.io/hostname podAntiAffinity: preferredDuringSchedulingIgnoredDuringExecution: 2 - weight: 100 podAffinityTerm: labelSelector: matchExpressions: - key: example-key-2 operator: In values: - example-value-2 topologyKey: kubernetes.io/hostname ...
9.16.2.2.3. 例: ノードのアフィニティーによる仮想マシンノードの配置
この例では、仮想マシンはラベル example.io/example-key = example-value-1
またはラベル example.io/example-key = example-value-2
を持つノードでスケジュールされる必要があります。この制約は、ラベルのいずれかがノードに存在する場合に満たされます。いずれのラベルも存在しない場合、仮想マシンはスケジュールされません。
可能な場合、スケジューラーはラベル example-node-label-key = example-node-label-value
を持つノードを回避します。ただし、すべての候補となるノードにこのラベルがある場合、スケジューラーはこの制約を無視します。
仮想マシンマニフェストの例
metadata: name: example-vm-node-affinity apiVersion: kubevirt.io/v1 kind: VirtualMachine spec: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: 1 nodeSelectorTerms: - matchExpressions: - key: example.io/example-key operator: In values: - example-value-1 - example-value-2 preferredDuringSchedulingIgnoredDuringExecution: 2 - weight: 1 preference: matchExpressions: - key: example-node-label-key operator: In values: - example-node-label-value ...
9.16.2.2.4. 例: 容認 (toleration) を使用した仮想マシンノードの配置
この例では、仮想マシン用に予約されるノードには、すでに key=virtualization:NoSchedule
テイントのラベルが付けられています。この仮想マシンには一致する tolerations
があるため、これをテイントが付けられたノードにスケジュールできます。
テイントを容認する仮想マシンは、そのテイントを持つノードにスケジュールする必要はありません。
仮想マシンマニフェストの例
metadata: name: example-vm-tolerations apiVersion: kubevirt.io/v1 kind: VirtualMachine spec: tolerations: - key: "key" operator: "Equal" value: "virtualization" effect: "NoSchedule" ...
9.16.2.3. 関連情報
9.16.3. 証明書ローテーションの設定
証明書ローテーションパラメーターを設定して、既存の証明書を置き換えます。
9.16.3.1. 証明書ローテーションの設定
これは、Web コンソールでの OpenShift Virtualization のインストール時に、または HyperConverged
カスタムリソース (CR) でインストール後に実行することができます。
手順
以下のコマンドを実行して
HyperConverged
CR を開きます。$ oc edit hco -n openshift-cnv kubevirt-hyperconverged
以下の例のように
spec.certConfig
フィールドを編集します。システムのオーバーロードを避けるには、すべての値が 10 分以上であることを確認します。golangParseDuration
形式 に準拠する文字列として、すべての値を表現します。apiVersion: hco.kubevirt.io/v1beta1 kind: HyperConverged metadata: name: kubevirt-hyperconverged namespace: openshift-cnv spec: certConfig: ca: duration: 48h0m0s renewBefore: 24h0m0s 1 server: duration: 24h0m0s 2 renewBefore: 12h0m0s 3
- YAML ファイルをクラスターに適用します。
9.16.3.2. 証明書ローテーションパラメーターのトラブルシューティング
1 つ以上の certConfig
値を削除すると、デフォルト値が以下のいずれかの条件と競合する場合を除き、デフォルト値に戻ります。
-
ca.renewBefore
の値はca.duration
の値以下である必要があります。 -
server.duration
の値はca.duration
の値以下である必要があります。 -
server.renewBefore
の値はserver.duration
の値以下である必要があります。
デフォルト値がこれらの条件と競合すると、エラーが発生します。
以下の例で server.duration
値を削除すると、デフォルト値の 24h0m0s
は ca.duration
の値よりも大きくなり、指定された条件と競合します。
例
certConfig: ca: duration: 4h0m0s renewBefore: 1h0m0s server: duration: 4h0m0s renewBefore: 4h0m0s
これにより、以下のエラーメッセージが表示されます。
error: hyperconvergeds.hco.kubevirt.io "kubevirt-hyperconverged" could not be patched: admission webhook "validate-hco.kubevirt.io" denied the request: spec.certConfig: ca.duration is smaller than server.duration
エラーメッセージには、最初の競合のみが記載されます。続行する前に、すべての certConfig の値を確認します。
9.16.4. 仮想マシンに UEFI モードを使用する
Unified Extensible Firmware Interface (UEFI) モードで仮想マシン (VM) を起動できます。
9.16.4.1. 仮想マシンの UEFI モードについて
レガシー BIOS などの Unified Extensible Firmware Interface (UEFI) は、コンピューターの起動時にハードウェアコンポーネントやオペレーティングシステムのイメージファイルを初期化します。UEFI は BIOS よりも最新の機能とカスタマイズオプションをサポートするため、起動時間を短縮できます。
これは、.efi
拡張子を持つファイルに初期化と起動に関する情報をすべて保存します。このファイルは、EFI System Partition (ESP) と呼ばれる特別なパーティションに保管されます。ESP には、コンピューターにインストールされるオペレーティングシステムのブートローダープログラムも含まれます。
9.16.4.2. UEFI モードでの仮想マシンの起動
VirtualMachine
マニフェストを編集して、UEFI モードで起動するように仮想マシンを設定できます。
前提条件
-
OpenShift CLI (
oc
) がインストールされている。
手順
VirtualMachine
マニフェストファイルを編集または作成します。spec.firmware.bootloader
スタンザを使用して、UEFI モードを設定します。セキュアブートがアクティブな状態の UEFI モードでのブート
apiversion: kubevirt.io/v1 kind: VirtualMachine metadata: labels: special: vm-secureboot name: vm-secureboot spec: template: metadata: labels: special: vm-secureboot spec: domain: devices: disks: - disk: bus: virtio name: containerdisk features: acpi: {} smm: enabled: true 1 firmware: bootloader: efi: secureBoot: true 2 ...
以下のコマンドを実行して、マニフェストをクラスターに適用します。
$ oc create -f <file_name>.yaml
9.16.5. 仮想マシンの PXE ブートの設定
PXE ブートまたはネットワークブートは OpenShift Virtualization で利用できます。ネットワークブートにより、ローカルに割り当てられたストレージデバイスなしにコンピューターを起動し、オペレーティングシステムまたは他のプログラムを起動し、ロードすることができます。たとえば、これにより、新規ホストのデプロイ時に PXE サーバーから必要な OS イメージを選択できます。
9.16.5.1. 前提条件
- Linux ブリッジが 接続されていること。
- PXE サーバーがブリッジとして同じ VLAN に接続されていること。
9.16.5.2. MAC アドレスを指定した PXE ブート
まず、管理者は PXE ネットワークの NetworkAttachmentDefinition
オブジェクトを作成し、ネットワーク経由でクライアントを起動できます。次に、仮想マシンインスタンスの設定ファイルでネットワーク接続定義を参照して仮想マシンインスタンスを起動します。また PXE サーバーで必要な場合には、仮想マシンインスタンスの設定ファイルで MAC アドレスを指定することもできます。
前提条件
- Linux ブリッジが接続されていること。
- PXE サーバーがブリッジとして同じ VLAN に接続されていること。
手順
クラスターに PXE ネットワークを設定します。
PXE ネットワーク
pxe-net-conf
のネットワーク接続定義ファイルを作成します。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
に割り当てられます。
直前の手順で作成したファイルを使用してネットワーク接続定義を作成します。
$ oc create -f pxe-net-conf.yaml
仮想マシンインスタンス設定ファイルを、インターフェイスおよびネットワークの詳細を含めるように編集します。
PXE サーバーで必要な場合には、ネットワークおよび 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
直前に作成されたネットワーク接続定義に接続されるネットワークを指定します。このシナリオでは、
<pxe-net>
は<pxe-net-conf>
というネットワーク接続定義に接続されます。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
9.16.5.3. OpenShift Virtualization ネットワークの用語集
OpenShift Virtualization は、カスタムリソースおよびプラグインを使用して高度なネットワーク機能を提供します。
以下の用語は、OpenShift Virtualization ドキュメント全体で使用されています。
- Container Network Interface (CNI)
- コンテナーのネットワーク接続に重点を置く Cloud Native Computing Foundation プロジェクト。OpenShift Virtualization は CNI プラグインを使用して基本的な Kubernetes ネットワーク機能を強化します。
- Multus
- 複数の CNI の存在を可能にし、Pod または仮想マシンが必要なインターフェイスを使用できるようにするメタ CNI プラグイン。
- カスタムリソース定義 (CRD、Custom Resource Definition)
- カスタムリソースの定義を可能にする Kubernetes API リソース、または CRD API リソースを使用して定義されるオブジェクト。
- ネットワーク接続定義 (NAD)
- Pod、仮想マシン、および仮想マシンインスタンスを 1 つ以上のネットワークに割り当てることを可能にする Multus プロジェクトによって導入される CRD。
- ノードネットワーク設定ポリシー (NNCP)
-
ノードで要求されるネットワーク設定の説明。
NodeNetworkConfigurationPolicy
マニフェストをクラスターに適用して、インターフェイスの追加および削除など、ノードネットワーク設定を更新します。 - PXE (Preboot eXecution Environment)
- 管理者がネットワーク経由でサーバーからクライアントマシンを起動できるようにするインターフェイス。ネットワークのブートにより、オペレーティングシステムおよび他のソフトウェアをクライアントにリモートでロードできます。
9.16.6. 仮想マシンでの Huge Page の使用
Huge Page は、クラスター内の仮想マシンのバッキングメモリーとして使用できます。
9.16.6.1. 前提条件
9.16.6.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 を使用できるように仮想マシンを設定できます。
9.16.6.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
9.16.7. 仮想マシン用の専用リソースの有効化
パフォーマンスを向上させるために、CPU などのノードリソースを仮想マシン専用に確保できます。
9.16.7.1. 専用リソースについて
仮想マシンの専用リソースを有効にする場合、仮想マシンのワークロードは他のプロセスで使用されない CPU でスケジュールされます。専用リソースを使用することで、仮想マシンのパフォーマンスとレイテンシーの予測の精度を向上させることができます。
9.16.7.2. 前提条件
-
CPU マネージャー がノード上に設定されている。仮想マシンのワークロードをスケジュールする前に、ノードに
cpumanager = true
ラベルが設定されていることを確認する。 - 仮想マシンの電源がオフになっている。
9.16.7.3. 仮想マシンの専用リソースの有効化
Details タブで、仮想マシンの専用リソースを有効にすることができます。Red Hat テンプレートから作成された仮想マシンは、専用のリソースで設定できます。
手順
- OpenShift Container Platform コンソールで、サイドメニューから Virtualization → VirtualMachines をクリックします。
- 仮想マシンを選択して、VirtualMachine details ページを開きます。
- Scheduling タブで、Dedicated Resources の横にある鉛筆アイコンをクリックします。
- Schedule this workload with dedicated resources (guaranteed policy) を選択します。
- Save をクリックします。
9.16.8. 仮想マシンのスケジュール
仮想マシンの CPU モデルとポリシー属性が、ノードがサポートする CPU モデルおよびポリシー属性との互換性について一致することを確認して、ノードで仮想マシン (VM) をスケジュールできます。
9.16.8.1. ポリシー属性
仮想マシン (VM) をスケジュールするには、ポリシー属性と、仮想マシンがノードでスケジュールされる際の互換性について一致する CPU 機能を指定します。仮想マシンに指定されるポリシー属性は、その仮想マシンをノードにスケジュールする方法を決定します。
ポリシー属性 | Description |
---|---|
force | 仮想マシンは強制的にノードでスケジュールされます。これは、ホストの CPU が仮想マシンの CPU に対応していない場合でも該当します。 |
require | 仮想マシンが特定の CPU モデルおよび機能仕様で設定されていない場合に仮想マシンに適用されるデフォルトのポリシー。このデフォルトポリシー属性または他のポリシー属性のいずれかを持つ CPU ノードの検出をサポートするようにノードが設定されていない場合、仮想マシンはそのノードでスケジュールされません。ホストの CPU が仮想マシンの CPU をサポートしているか、ハイパーバイザーが対応している CPU モデルをエミュレートできる必要があります。 |
optional | 仮想マシンがホストの物理マシンの CPU でサポートされている場合は、仮想マシンがノードに追加されます。 |
disable | 仮想マシンは CPU ノードの検出機能と共にスケジュールすることはできません。 |
forbid | この機能がホストの CPU でサポートされ、CPU ノード検出が有効になっている場合でも、仮想マシンはスケジュールされません。 |
9.16.8.2. ポリシー属性および CPU 機能の設定
それぞれの仮想マシン (VM) にポリシー属性および CPU 機能を設定して、これがポリシーおよび機能に従ってノードでスケジュールされるようにすることができます。設定する CPU 機能は、ホストの CPU によってサポートされ、またはハイパーバイザーがエミュレートされることを確認するために検証されます。
9.16.8.3. サポートされている CPU モデルでの仮想マシンのスケジューリング
仮想マシン (VM) の CPU モデルを設定して、CPU モデルがサポートされるノードにこれをスケジュールできます。
手順
仮想マシン設定ファイルの
domain
仕様を編集します。以下の例は、VM 向けに定義された特定の CPU モデルを示しています。apiVersion: kubevirt.io/v1 kind: VirtualMachine metadata: name: myvm spec: template: spec: domain: cpu: model: Conroe 1
- 1
- VM の CPU モデル。
9.16.8.4. ホストモデルでの仮想マシンのスケジューリング
仮想マシン (VM) の CPU モデルが host-model
に設定されている場合、仮想マシンはスケジュールされているノードの CPU モデルを継承します。
手順
仮想マシン設定ファイルの
domain
仕様を編集します。以下の例は、仮想マシン (VM) に指定されるhost-model
を示しています。apiVersion: kubevirt/v1alpha3 kind: VirtualMachine metadata: name: myvm spec: template: spec: domain: cpu: model: host-model 1
- 1
- スケジュールされるノードの CPU モデルを継承する仮想マシン。
9.16.9. PCI パススルーの設定
PCI (Peripheral Component Interconnect) パススルー機能を使用すると、仮想マシンからハードウェアデバイスにアクセスし、管理できます。PCI パススルーが設定されると、PCI デバイスはゲストオペレーティングシステムに物理的に接続されているかのように機能します。
クラスター管理者は、oc
コマンドラインインターフェイス (CLI) を使用して、クラスターでの使用が許可されているホストデバイスを公開および管理できます。
9.16.9.1. PCI パススルー用ホストデバイスの準備について
CLI を使用して PCI パススルー用にホストデバイスを準備するには、MachineConfig
オブジェクトを作成し、カーネル引数を追加して、Input-Output Memory Management Unit (IOMMU) を有効にします。PCI デバイスを Virtual Function I/O (VFIO) ドライバーにバインドしてから、HyperConverged
カスタムリソース (CR) の permittedHostDevices
フィールドを編集してクラスター内で公開します。OpenShift Virtualization Operator を最初にインストールする場合、permittedHostDevices
のリストは空になります。
CLI を使用してクラスターから PCI ホストデバイスを削除するには、HyperConverged
CR から PCI デバイス情報を削除します。
9.16.9.1.1. IOMMU ドライバーを有効にするためのカーネル引数の追加
カーネルの IOMMU (Input-Output Memory Management Unit) ドライバーを有効にするには、MachineConfig
オブジェクトを作成し、カーネル引数を追加します。
前提条件
- 作業用の OpenShift Container Platform クラスターに対する管理者権限が必要です。
- Intel または AMD CPU ハードウェア。
- Intel Virtualization Technology for Directed I/O 拡張または BIOS (Basic Input/Output System) の AMD IOMMU が有効にされている。
手順
カーネル引数を識別する
MachineConfig
オブジェクトを作成します。以下の例は、Intel CPU のカーネル引数を示しています。apiVersion: machineconfiguration.openshift.io/v1 kind: MachineConfig metadata: labels: machineconfiguration.openshift.io/role: worker 1 name: 100-worker-iommu 2 spec: config: ignition: version: 3.2.0 kernelArguments: - intel_iommu=on 3 ...
新規
MachineConfig
オブジェクトを作成します。$ oc create -f 100-worker-kernel-arg-iommu.yaml
検証
新規
MachineConfig
オブジェクトが追加されていることを確認します。$ oc get MachineConfig
9.16.9.1.2. PCI デバイスの VFIO ドライバーへのバインディング
PCI デバイスを VFIO (Virtual Function I/O) ドライバーにバインドするには、各デバイスから vendor-ID
および device-ID
の値を取得し、これらの値でリストを作成します。リストを MachineConfig
オブジェクトに追加します。MachineConfig
Operator は、PCI デバイスを持つノードで /etc/modprobe.d/vfio.conf
を生成し、PCI デバイスを VFIO ドライバーにバインドします。
前提条件
- カーネル引数を CPU の IOMMU を有効にするために追加している。
手順
lspci
コマンドを実行して、PCI デバイスのvendor-ID
およびdevice-ID
を取得します。$ lspci -nnv | grep -i nvidia
出力例
02:01.0 3D controller [0302]: NVIDIA Corporation GV100GL [Tesla V100 PCIe 32GB] [10de:1eb8] (rev a1)
Butane 設定ファイル
100-worker-vfiopci.bu
を作成し、PCI デバイスを VFIO ドライバーにバインドします。注記Butane の詳細は、Butane を使用したマシン設定の作成を参照してください。
例
variant: openshift version: 4.11.0 metadata: name: 100-worker-vfiopci labels: machineconfiguration.openshift.io/role: worker 1 storage: files: - path: /etc/modprobe.d/vfio.conf mode: 0644 overwrite: true contents: inline: | options vfio-pci ids=10de:1eb8 2 - path: /etc/modules-load.d/vfio-pci.conf 3 mode: 0644 overwrite: true contents: inline: vfio-pci
Butane を使用して、ワーカーノードに配信される設定を含む
MachineConfig
オブジェクトファイル (100-worker-vfiopci.yaml
) を生成します。$ butane 100-worker-vfiopci.bu -o 100-worker-vfiopci.yaml
MachineConfig
オブジェクトをワーカーノードに適用します。$ oc apply -f 100-worker-vfiopci.yaml
MachineConfig
オブジェクトが追加されていることを確認します。$ oc get MachineConfig
出力例
NAME GENERATEDBYCONTROLLER IGNITIONVERSION AGE 00-master d3da910bfa9f4b599af4ed7f5ac270d55950a3a1 3.2.0 25h 00-worker d3da910bfa9f4b599af4ed7f5ac270d55950a3a1 3.2.0 25h 01-master-container-runtime d3da910bfa9f4b599af4ed7f5ac270d55950a3a1 3.2.0 25h 01-master-kubelet d3da910bfa9f4b599af4ed7f5ac270d55950a3a1 3.2.0 25h 01-worker-container-runtime d3da910bfa9f4b599af4ed7f5ac270d55950a3a1 3.2.0 25h 01-worker-kubelet d3da910bfa9f4b599af4ed7f5ac270d55950a3a1 3.2.0 25h 100-worker-iommu 3.2.0 30s 100-worker-vfiopci-configuration 3.2.0 30s
検証
VFIO ドライバーがロードされていることを確認します。
$ lspci -nnk -d 10de:
この出力では、VFIO ドライバーが使用されていることを確認します。
出力例
04:00.0 3D controller [0302]: NVIDIA Corporation GP102GL [Tesla P40] [10de:1eb8] (rev a1) Subsystem: NVIDIA Corporation Device [10de:1eb8] Kernel driver in use: vfio-pci Kernel modules: nouveau
9.16.9.1.3. CLI を使用したクラスターでの PCI ホストデバイスの公開
クラスターで PCI ホストデバイスを公開するには、PCI デバイスの詳細を HyperConverged
カスタムリソース (CR) の spec.permittedHostDevices.pciHostDevices
配列に追加します。
手順
以下のコマンドを実行して、デフォルトエディターで
HyperConverged
CR を編集します。$ oc edit hyperconverged kubevirt-hyperconverged -n openshift-cnv
PCI デバイス情報を
spec.permittedHostDevices.pciHostDevices
配列に追加します。以下に例を示します。設定ファイルのサンプル
apiVersion: hco.kubevirt.io/v1 kind: HyperConverged metadata: name: kubevirt-hyperconverged namespace: openshift-cnv spec: permittedHostDevices: 1 pciHostDevices: 2 - pciDeviceSelector: "10DE:1DB6" 3 resourceName: "nvidia.com/GV100GL_Tesla_V100" 4 - pciDeviceSelector: "10DE:1EB8" resourceName: "nvidia.com/TU104GL_Tesla_T4" - pciDeviceSelector: "8086:6F54" resourceName: "intel.com/qat" externalResourceProvider: true 5 ...
注記上記のスニペットの例は、
nvidia.com/GV100GL_Tesla_V100
およびnvidia.com/TU104GL_Tesla_T4
という名前の 2 つの PCI ホストデバイスが、HyperConverged
CR の許可されたホストデバイスの一覧に追加されたことを示しています。これらのデバイスは、OpenShift Virtualization と動作することがテストおよび検証されています。- 変更を保存し、エディターを終了します。
検証
以下のコマンドを実行して、PCI ホストデバイスがノードに追加されたことを確認します。この出力例は、各デバイスが
nvidia.com/GV100GL_Tesla_V100
、nvidia.com/TU104GL_Tesla_T4
、およびintel.com/qat
のリソース名にそれぞれ関連付けられたデバイスが 1 つあることを示しています。$ oc describe node <node_name>
出力例
Capacity: cpu: 64 devices.kubevirt.io/kvm: 110 devices.kubevirt.io/tun: 110 devices.kubevirt.io/vhost-net: 110 ephemeral-storage: 915128Mi hugepages-1Gi: 0 hugepages-2Mi: 0 memory: 131395264Ki nvidia.com/GV100GL_Tesla_V100 1 nvidia.com/TU104GL_Tesla_T4 1 intel.com/qat: 1 pods: 250 Allocatable: cpu: 63500m devices.kubevirt.io/kvm: 110 devices.kubevirt.io/tun: 110 devices.kubevirt.io/vhost-net: 110 ephemeral-storage: 863623130526 hugepages-1Gi: 0 hugepages-2Mi: 0 memory: 130244288Ki nvidia.com/GV100GL_Tesla_V100 1 nvidia.com/TU104GL_Tesla_T4 1 intel.com/qat: 1 pods: 250
9.16.9.1.4. CLI を使用したクラスターからの PCI ホストデバイスの削除
クラスターから PCI ホストデバイスを削除するには、HyperConverged
カスタムリソース (CR) からそのデバイスの情報を削除します。
手順
以下のコマンドを実行して、デフォルトエディターで
HyperConverged
CR を編集します。$ oc edit hyperconverged kubevirt-hyperconverged -n openshift-cnv
適切なデバイスの
pciDeviceSelector
、resourceName
、およびexternalResourceProvider
(該当する場合) のフィールドを削除して、spec.permittedHostDevices.pciHostDevices
配列から PCI デバイス情報を削除します。この例では、intel.com/qat
リソースが削除されました。設定ファイルのサンプル
apiVersion: hco.kubevirt.io/v1 kind: HyperConverged metadata: name: kubevirt-hyperconverged namespace: openshift-cnv spec: permittedHostDevices: pciHostDevices: - pciDeviceSelector: "10DE:1DB6" resourceName: "nvidia.com/GV100GL_Tesla_V100" - pciDeviceSelector: "10DE:1EB8" resourceName: "nvidia.com/TU104GL_Tesla_T4" ...
- 変更を保存し、エディターを終了します。
検証
以下のコマンドを実行して、PCI ホストデバイスがノードから削除されたことを確認します。この出力例は、
intel.com/qat
リソース名に関連付けられているデバイスがゼロであることを示しています。$ oc describe node <node_name>
出力例
Capacity: cpu: 64 devices.kubevirt.io/kvm: 110 devices.kubevirt.io/tun: 110 devices.kubevirt.io/vhost-net: 110 ephemeral-storage: 915128Mi hugepages-1Gi: 0 hugepages-2Mi: 0 memory: 131395264Ki nvidia.com/GV100GL_Tesla_V100 1 nvidia.com/TU104GL_Tesla_T4 1 intel.com/qat: 0 pods: 250 Allocatable: cpu: 63500m devices.kubevirt.io/kvm: 110 devices.kubevirt.io/tun: 110 devices.kubevirt.io/vhost-net: 110 ephemeral-storage: 863623130526 hugepages-1Gi: 0 hugepages-2Mi: 0 memory: 130244288Ki nvidia.com/GV100GL_Tesla_V100 1 nvidia.com/TU104GL_Tesla_T4 1 intel.com/qat: 0 pods: 250
9.16.9.2. PCI パススルー用の仮想マシンの設定
PCI デバイスがクラスターに追加された後に、それらを仮想マシンに割り当てることができます。PCI デバイスが仮想マシンに物理的に接続されているかのような状態で利用できるようになりました。
9.16.9.2.1. PCI デバイスの仮想マシンへの割り当て
PCI デバイスがクラスターで利用可能な場合、これを仮想マシンに割り当て、PCI パススルーを有効にすることができます。
手順
PCI デバイスをホストデバイスとして仮想マシンに割り当てます。
例
apiVersion: kubevirt.io/v1 kind: VirtualMachine spec: domain: devices: hostDevices: - deviceName: nvidia.com/TU104GL_Tesla_T4 1 name: hostdevices1
- 1
- クラスターでホストデバイスとして許可される PCI デバイスの名前。仮想マシンがこのホストデバイスにアクセスできます。
検証
以下のコマンドを使用して、ホストデバイスが仮想マシンから利用可能であることを確認します。
$ lspci -nnk | grep NVIDIA
出力例
$ 02:01.0 3D controller [0302]: NVIDIA Corporation GV100GL [Tesla V100 PCIe 32GB] [10de:1eb8] (rev a1)
9.16.9.3. 関連情報
9.16.10. 仮想 GPU パススルーの設定
仮想マシンは仮想 GPU (vGPU) ハードウェアにアクセスできます。仮想マシンに仮想 GPU を割り当てると、次のことが可能になります。
- 基盤となるハードウェアの GPU の一部にアクセスして、仮想マシンで高いパフォーマンスのメリットを実現する。
- リソースを大量に消費する I/O 操作を合理化する。
仮想 GPU パススルーは、ベアメタル環境で実行されているクラスターに接続されているデバイスにのみ割り当てることができます。
9.16.10.1. 仮想マシンへの vGPU パススルーデバイスの割り当て
Open Shift Container Platform Web コンソールを使用して、vGPU パススルーデバイスを仮想マシンに割り当てます。
前提条件
- 仮想マシンを停止する必要があります。
手順
- Open Shift Container Platform Web コンソールで、サイドメニューから Virtualization → VirtualMachines をクリックします。
- デバイスを割り当てる仮想マシンを選択します。
Details タブで、GPU devices をクリックします。
vGPU デバイスをホストデバイスとして追加すると、VNC コンソールでデバイスにアクセスすることはできません。
- Add GPU device をクリックし、Name を入力して、Device name リストからデバイスを選択します。
- Save をクリックします。
-
YAMLタブをクリックして、クラスター設定の
hostDevices
セクションに新しいデバイスが追加されていることを確認します。
カスタマイズされたテンプレートまたは YAML ファイルから作成された仮想マシンに、ハードウェアデバイスを追加できます。Windows 10 や RHEL 7 などの特定のオペレーティングシステム用に事前に提供されているブートソーステンプレートにデバイスを追加することはできません。
クラスターに接続されているリソースを表示するには、サイドメニューから Compute → Hardware Devices をクリックします。
9.16.10.2. 関連情報
9.16.11. 仲介デバイスの設定
HyperConverged
カスタムリソース (CR) でデバイスのリストを提供すると、Open Shift Virtualization は仮想 GPU (vGPU) などの仲介デバイスを自動的に作成します。
仲介デバイスの宣言型設定は、テクノロジープレビュー機能としてのみ提供されます。テクノロジープレビュー機能は、Red Hat 製品のサービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではないことがあります。Red Hat は、実稼働環境でこれらを使用することを推奨していません。テクノロジープレビュー機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行いフィードバックを提供していただくことを目的としています。
Red Hat のテクノロジープレビュー機能のサポート範囲に関する詳細は、テクノロジープレビュー機能のサポート範囲 を参照してください。
9.16.11.1. NVIDIA GPU Operator の使用について
NVIDIA GPU Operator は、OpenShift Container Platform クラスターで NVIDIA GPU リソースを管理し、GPU ノードのブートストラップに関連するタスクを自動化します。GPU はクラスター内の特別なリソースであるため、アプリケーションワークロードを GPU にデプロイする前に、いくつかのコンポーネントをインストールする必要があります。これらのコンポーネントには、コンピューティングユニファイドデバイスアーキテクチャー (CUDA)、Kubernetes デバイスプラグイン、コンテナーランタイム、および自動ノードラベル付け、監視などを可能にする NVIDIA ドライバーが含まれます。
NVIDIA GPU Operator は、NVIDIA によってのみサポートされています。NVIDIA からサポートを受ける方法は、Obtaining Support from NVIDIA を参照してください。
OpenShift Container Platform OpenShift Virtualization で GPU を有効にする方法は、OpenShift Container Platform ネイティブの方法と、NVIDIA GPU Operator を使用する方法の 2 つあります。ここでは、OpenShift Container Platform ネイティブの方法を説明します。
NVIDIA GPU Operator は、OpenShift Container Platform OpenShift Virtualization が GPU を OpenShift Container Platform で実行されている仮想化されたワークロードに公開できるようにする Kubernetes Operator です。これにより、ユーザーは GPU 対応の仮想マシンを簡単にプロビジョニングおよび管理できるようになり、他のワークロードと同じプラットフォームで複雑な人工知能/機械学習 (AI/ML) ワークロードを実行できるようになります。また、インフラストラクチャーの GPU 容量を簡単にスケーリングできるようになり、GPU ベースのワークロードが急激に増加しても対応できます。
NVIDIA GPU Operator を使用して、GPU で高速化された VM を実行するためのワーカーノードをプロビジョニングする方法の詳細は、NVIDIA GPU Operator with OpenShift Virtualization を参照してください。
9.16.11.2. OpenShift Virtualization での仮想 GPU の使用について
一部のグラフィックス処理ユニット (GPU) カードは、仮想 GPU (vGPU) の作成をサポートしています。管理者がHyperConverged
カスタムリソース (CR) で設定の詳細を提供すると、Open Shift Virtualization は仮想 GPU およびその他の仲介デバイスを自動的に作成できます。この自動化は、大規模なクラスターで特に役立ちます。
機能とサポートの詳細については、ハードウェアベンダーのドキュメントを参照してください。
- 仲介デバイス
- 1 つまたは複数の仮想デバイスに分割された物理デバイス。仮想 GPU は、仲介デバイス (mdev) の一種です。物理 GPU のパフォーマンスが、仮想デバイス間で分割されます。仲介デバイスを 1 つまたは複数の仮想マシン (VM) に割り当てることができますが、ゲストの数は GPU と互換性がある必要があります。一部の GPU は複数のゲストをサポートしていません。
9.16.11.2.1. 前提条件
ハードウェアベンダーがドライバーを提供している場合は、仲介デバイスを作成するノードにドライバーをインストールしている。
- NVIDIA カードを使用する場合は、NVIDIAGRID ドライバーをインストールしている。
9.16.11.2.2. 設定の概要
仲介デバイスを設定する場合、管理者は次のタスクを完了する必要があります。
- 仲介デバイスを作成する。
- 仲介デバイスをクラスターに公開する。
HyperConverged
CR には、両方のタスクを実行する API が含まれています。
仲介デバイスの作成
... spec: mediatedDevicesConfiguration: mediatedDevicesTypes: 1 - <device_type> nodeMediatedDeviceTypes: 2 - mediatedDevicesTypes: 3 - <device_type> nodeSelector: 4 <node_selector_key>: <node_selector_value> ...
仲介デバイスのクラスターへの公開
... permittedHostDevices: mediatedDevices: - mdevNameSelector: GRID T4-2Q 1 resourceName: nvidia.com/GRID_T4-2Q 2 ...
- 1
- この値にマッピングする仲介デバイスをホスト上に公開します。注記
実際のシステムの正しい値に置き換えて、
/sys/bus/pci/devices/<slot>:<bus>:<domain>.<function>/mdev_supported_types/<type>/name
の内容を表示し、デバイスがサポートする仲介デバイスのタイプを確認できます。たとえば、
nvidia-231
タイプの name ファイルには、セレクター文字列GRID T4-2Q
が含まれます。GRID T4-2Q
をmdevNameSelector
値として使用することで、ノードはnvidia-231
タイプを使用できます。 - 2
resourceName
は、ノードに割り当てられたものと一致する必要があります。次のコマンドを使用して、resourceName
を検索します。$ oc get $NODE -o json \ | jq '.status.allocatable \ | with_entries(select(.key | startswith("nvidia.com/"))) \ | with_entries(select(.value != "0"))'
9.16.11.2.3. 仮想 GPU がノードに割り当てられる方法
物理デバイスごとに、OpenShift Virtualization は以下の値を設定します。
- 1 つの mdev タイプ。
-
選択した
mdev
タイプのインスタンスの最大数。
クラスターのアーキテクチャーは、デバイスの作成およびノードへの割り当て方法に影響します。
- ノードごとに複数のカードを持つ大規模なクラスター
同様の仮想 GPU タイプに対応する複数のカードを持つノードでは、関連するデバイス種別がラウンドロビン方式で作成されます。以下に例を示します。
... mediatedDevicesConfiguration: mediatedDevicesTypes: - nvidia-222 - nvidia-228 - nvidia-105 - nvidia-108 ...
このシナリオでは、各ノードに以下の仮想 GPU 種別に対応するカードが 2 つあります。
nvidia-105 ... nvidia-108 nvidia-217 nvidia-299 ...
各ノードで、OpenShift Virtualization は以下の vGPU を作成します。
- 最初のカード上に nvidia-105 タイプの 16 の仮想 GPU
- 2 番目のカード上に nvidia-108 タイプの 2 つの仮想 GPU
- 1 つのノードに、要求された複数の仮想 GPU タイプをサポートするカードが 1 つある
OpenShift Virtualization は、
mediatedDevicesTypes
一覧の最初のサポートされるタイプを使用します。たとえば、ノードカードのカードは
nvidia-223
とnvidia-224
をサポートします。以下のmediatedDevicesTypes
一覧が設定されます。... mediatedDevicesConfiguration: mediatedDevicesTypes: - nvidia-22 - nvidia-223 - nvidia-224 ...
この例では、OpenShift Virtualization は
nvidia-223
タイプを使用します。
9.16.11.2.4. 仲介デバイスの変更および削除について
クラスターの仲介デバイス設定は、次の方法を使用して OpenShift Virtualization で更新できます。
-
HyperConverged
CR を編集し、mediadDevicesTypes
スタンザの内容を変更します。 -
nodeMediatedDeviceTypes
ノードセレクターに一致するノードラベルを変更します。 HyperConverged
CR のspec.mediaDevicesConfiguration
およびspec.permittedHostDevices
スタンザからデバイス情報を削除します。注記spec.permittedHostDevices
スタンザからデバイス情報を削除したが、spec.mediatedDevicesConfiguration
スタンザからは削除しなかった場合、同じノードで新規の仲介デバイスタイプを作成することはできません。仲介デバイスを適切に削除するには、両方のスタンザからデバイス情報を削除します。
具体的な変更に応じて、これらのアクションにより、OpenShift Virtualization は仲介デバイスを再設定するか、クラスターノードからそれらを削除します。
9.16.11.2.5. 仲介デバイス用のホストの準備
仲介デバイスを設定する前に、入出力メモリー管理ユニット (IOMMU) ドライバーを有効にする必要があります。
9.16.11.2.5.1. IOMMU ドライバーを有効にするためのカーネル引数の追加
カーネルの IOMMU (Input-Output Memory Management Unit) ドライバーを有効にするには、MachineConfig
オブジェクトを作成し、カーネル引数を追加します。
前提条件
- 作業用の OpenShift Container Platform クラスターに対する管理者権限が必要です。
- Intel または AMD CPU ハードウェア。
- Intel Virtualization Technology for Directed I/O 拡張または BIOS (Basic Input/Output System) の AMD IOMMU が有効にされている。
手順
カーネル引数を識別する
MachineConfig
オブジェクトを作成します。以下の例は、Intel CPU のカーネル引数を示しています。apiVersion: machineconfiguration.openshift.io/v1 kind: MachineConfig metadata: labels: machineconfiguration.openshift.io/role: worker 1 name: 100-worker-iommu 2 spec: config: ignition: version: 3.2.0 kernelArguments: - intel_iommu=on 3 ...
新規
MachineConfig
オブジェクトを作成します。$ oc create -f 100-worker-kernel-arg-iommu.yaml
検証
新規
MachineConfig
オブジェクトが追加されていることを確認します。$ oc get MachineConfig
9.16.11.2.6. 仲介デバイスの追加および削除
仲介デバイスを追加または削除できます。
9.16.11.2.6.1. 仲介デバイスの作成および公開
HyperConverged
カスタムリソース (CR) を編集して、仮想 GPU (vGPU) などの仲介デバイスを公開し、作成できます。
前提条件
- IOMMU (Input-Output Memory Management Unit) ドライバーを有効にしている。
手順
以下のコマンドを実行して、デフォルトエディターで
HyperConverged
CR を編集します。$ oc edit hyperconverged kubevirt-hyperconverged -n openshift-cnv
仲介デバイス情報を
HyperConverged
CR のspec
に追加し、mediatedDevicesConfiguration
およびpermittedHostDevices
スタンザが含まれるようにします。以下に例を示します。設定ファイルのサンプル
apiVersion: hco.kubevirt.io/v1 kind: HyperConverged metadata: name: kubevirt-hyperconverged namespace: openshift-cnv spec: mediatedDevicesConfiguration: <.> mediatedDevicesTypes: <.> - nvidia-231 nodeMediatedDeviceTypes: <.> - mediatedDevicesTypes: <.> - nvidia-233 nodeSelector: kubernetes.io/hostname: node-11.redhat.com permittedHostDevices: <.> mediatedDevices: - mdevNameSelector: GRID T4-2Q resourceName: nvidia.com/GRID_T4-2Q - mdevNameSelector: GRID T4-8Q resourceName: nvidia.com/GRID_T4-8Q ...
<.> 仲介デバイスを作成します。<.> 必須: グローバル
MediedDevicesTypes
設定。<.> 任意: 特定のノードのグローバル設定をオーバーライドします。<.>nodeMediatedDeviceTypes
を使用する場合は必須。<.> 仲介デバイスをクラスターに公開します。- 変更を保存し、エディターを終了します。
検証
以下のコマンドを実行して、デバイスが特定のノードに追加されたことを確認できます。
$ oc describe node <node_name>
9.16.11.2.6.2. CLI を使用したクラスターからの仲介デバイスの削除
クラスターから仲介デバイスを削除するには、HyperConverged
カスタムリソース (CR) からそのデバイスの情報を削除します。
手順
以下のコマンドを実行して、デフォルトエディターで
HyperConverged
CR を編集します。$ oc edit hyperconverged kubevirt-hyperconverged -n openshift-cnv
HyperConverged
CR のspec.mediatedDevicesConfiguration
およびspec.permittedHostDevices
スタンザからデバイス情報を削除します。両方のエントリーを削除すると、後で同じノードで新しい仲介デバイスタイプを作成できます。以下に例を示します。設定ファイルのサンプル
apiVersion: hco.kubevirt.io/v1 kind: HyperConverged metadata: name: kubevirt-hyperconverged namespace: openshift-cnv spec: mediatedDevicesConfiguration: mediatedDevicesTypes: 1 - nvidia-231 permittedHostDevices: mediatedDevices: 2 - mdevNameSelector: GRID T4-2Q resourceName: nvidia.com/GRID_T4-2Q
- 変更を保存し、エディターを終了します。
9.16.11.3. 仲介デバイスの使用
vGPU は仲介デバイスの一種です。物理 GPU のパフォーマンスは仮想デバイス間で分割されます。仲介デバイスを 1 つ以上の仮想マシンに割り当てることができます。
9.16.11.3.1. 仮想マシンへの仲介デバイスの割り当て
仮想 GPU (vGPU) などの仲介デバイスを仮想マシンに割り当てます。
前提条件
-
仲介デバイスが
HyperConverged
カスタムリソースで設定されている。
手順
VirtualMachine
マニフェストのspec.domain.devices.gpus
スタンザを編集して、仲介デバイスを仮想マシン (VM) に割り当てます。仮想マシンマニフェストの例
apiVersion: kubevirt.io/v1 kind: VirtualMachine spec: domain: devices: gpus: - deviceName: nvidia.com/TU104GL_Tesla_T4 1 name: gpu1 2 - deviceName: nvidia.com/GRID_T4-1Q name: gpu2
検証
デバイスが仮想マシンで利用できることを確認するには、
<device_name>
をVirtualMachine
マニフェストのdeviceName
の値に置き換えて以下のコマンドを実行します。$ lspci -nnk | grep <device_name>
9.16.11.4. 関連情報
9.16.12. ウォッチドッグの設定
ウォッチドッグデバイスに仮想マシン (VM) を設定し、ウォッチドッグをインストールして、ウォッチドッグサービスを開始することで、ウォッチドッグを公開します。
9.16.12.1. 前提条件
-
仮想マシンで
i6300esb
ウォッチドッグデバイスのカーネルサポートが含まれている。Red Hat Enterprise Linux(RHEL) イメージが、i6300esb
をサポートしている。
9.16.12.2. ウォッチドッグデバイスの定義
オペレーティングシステム (OS) が応答しなくなるときにウォッチドッグがどのように進行するかを定義します。
表9.5 利用可能なアクション
|
仮想マシン (VM) の電源がすぐにオフになります。 |
| VM はその場で再起動し、ゲスト OS は反応できません。ゲスト OS の再起動に必要な時間の長さにより liveness プローブのタイムアウトが生じる可能性があるため、このオプションの使用は推奨されません。このタイムアウトにより、クラスターレベルの保護が liveness プローブの失敗に気づき、強制的に再スケジュールした場合に、VM の再起動にかかる時間が長くなる可能性があります。 |
| VM は、すべてのサービスを停止することにより、正常に電源を切ります。 |
手順
以下の内容を含む YAML ファイルを作成します。
apiVersion: kubevirt.io/v1 kind: VirtualMachine metadata: labels: kubevirt.io/vm: vm2-rhel84-watchdog name: <vm-name> spec: running: false template: metadata: labels: kubevirt.io/vm: vm2-rhel84-watchdog spec: domain: devices: watchdog: name: <watchdog> i6300esb: action: "poweroff" 1 ...
- 1
watchdog
アクション (poweroff
、reset
、またはshutdown
) を指定します。
上記の例では、電源オフアクションを使用して、RHEL8 VM で
i6300esb
ウォッチドッグデバイスを設定し、デバイスを/dev/watchdog
として公開します。このデバイスは、ウォッチドッグバイナリーで使用できるようになりました。
以下のコマンドを実行して、YAML ファイルをクラスターに適用します。
$ oc apply -f <file_name>.yaml
この手順は、ウォッチドッグ機能をテストするためにのみ提供されており、実稼働マシンでは実行しないでください。
以下のコマンドを実行して、VM がウォッチドッグデバイスに接続されていることを確認します。
$ lspci | grep watchdog -i
以下のコマンドのいずれかを実行して、ウォッチドッグがアクティブであることを確認します。
カーネルパニックをトリガーします。
# echo c > /proc/sysrq-trigger
ウォッチドッグサービスを終了します。
# pkill -9 watchdog
9.16.12.3. ウォッチドッグデバイスのインストール
仮想マシンに watchdog
パッケージをインストールして、ウォッチドッグサービスを起動します。
手順
root ユーザーとして、
watchdog
パッケージおよび依存関係をインストールします。# yum install watchdog
/etc/watchdog.conf
ファイルの以下の行のコメントを解除して、変更を保存します。#watchdog-device = /dev/watchdog
ウォッチドッグサービスが起動時に開始できるように有効化します。
# systemctl enable --now watchdog.service
9.16.12.4. 関連情報
9.16.13. 事前定義済みのブートソースの自動インポートおよび更新
システム定義 で OpenShift Virtualization に含まれるブートソース、または作成した ユーザー定義 のブートソースを使用できます。システム定義のブートソースのインポートおよび更新は、製品の機能ゲートによって制御されます。機能ゲートを使用して、更新を有効、無効、または再度有効にすることができます。ユーザー定義のブートソースは、製品機能ゲートによって制御されないため、自動インポートおよび更新をオプトインまたはオプトアウトするには、個別に管理する必要があります。
バージョン 4.10 以降、OpenShift Virtualization は、手動でオプトアウトするか、デフォルトのストレージクラスを設定しない限り、ブートソースを自動的にインポートして更新します。
バージョン 4.10 にアップグレードする場合は、バージョン 4.9 以前からのブートソースの自動インポートおよび更新を手動で有効にする必要があります。
9.16.13.1. ブートソースの自動更新の有効化
OpenShift Virtualization 4.9 以前からのブートソースがある場合は、これらのブートソースの自動更新を手動で有効にする必要があります。OpenShift Virtualization 4.10 以降のすべてのブートソースは、デフォルトで自動的に更新されます。
自動ブートソースのインポートおよび更新を有効にするには、自動更新する各ブートソースの cdi.kubevirt.io/dataImportCron
フィールドを true
に設定します。
手順
ブートソースの自動更新を有効にするには、次のコマンドを使用して
dataImportCron
ラベルをデータソースに適用します。$ oc label --overwrite DataSource rhel8 -n openshift-virtualization-os-images cdi.kubevirt.io/dataImportCron=true 1
- 1
true
を指定すると、rhel8
ブートソースの自動更新がオンになります。
9.16.13.2. ブートソースの自動更新の無効化
ブートソースの自動インポートおよび更新を無効にすると、切断された環境でログの数を減らしたり、リソースの使用率を減らしたりするのに役立ちます。
ブートソースの自動インポートおよび更新を無効にするには、HyperConverged
カスタムリソース (CR) の spec.featureGates.enableCommonBootImageImport
フィールドを false
に設定します。
ユーザー定義のブートソースは、この設定の影響を受けません。
手順
次のコマンドを使用して、ブートソースの自動更新を無効にします。
$ oc patch hco kubevirt-hyperconverged -n openshift-cnv \ --type json -p '[{"op": "replace", "path": "/spec/featureGates/enableCommonBootImageImport", \ "value": false}]'
9.16.13.3. ブートソースの自動更新の再有効化
以前にブートソースの自動更新を無効にしている場合は、この機能を手動で再度有効にする必要があります。HyperConverged
カスタムリソース (CR) の spec.featureGates.enableCommonBootImageImport
フィールドを true
に設定します。
手順
以下のコマンドを使用して自動更新を再度有効にします。
$ oc patch hco kubevirt-hyperconverged -n openshift-cnv --type json -p '[{"op": "replace", "path": "/spec/featureGates/enableCommonBootImageImport", "value": true}]'
9.16.13.4. ユーザー定義のブートソース更新用のストレージクラスの設定
ユーザー定義のブートソースの自動インポートおよび更新を可能にするストレージクラスを設定できます。
手順
HyperConverged
カスタムリソース (CR) を編集して、新しいstorageClassName
を定義します。apiVersion: hco.kubevirt.io/v1beta1 kind: HyperConverged metadata: name: kubevirt-hyperconverged spec: dataImportCronTemplates: - metadata: name: rhel8-image-cron spec: template: spec: storageClassName: <appropriate_class_name> ...
次のコマンドを実行して、新しいデフォルトのストレージクラスを設定します。
$ oc patch storageclass <current_default_storage_class> -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"false"}}}'
$ oc patch storageclass <appropriate_storage_class> -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
9.16.13.5. ユーザー定義の起動ソースの自動更新を有効にする
OpenShift Virtualization は、デフォルトでシステム定義のブートソースを自動的に更新しますが、ユーザー定義のブートソースは自動的に更新しません。HyperConverged
カスタムリソース (CR) を編集して、ユーザー定義のブートソースで自動インポートおよび更新を手動で有効にする必要があります。
手順
以下のコマンドを使用して、編集するために
HyperConverged
CR を開きます。$ oc edit -n openshift-cnv HyperConverged
適切なテンプレートおよびブートソースを
dataImportCronTemplates
セクションで追加して、HyperConverged
CR を編集します。以下に例を示します。CentOS 7 の例
apiVersion: hco.kubevirt.io/v1beta1 kind: HyperConverged metadata: name: kubevirt-hyperconverged spec: dataImportCronTemplates: - metadata: name: centos7-image-cron annotations: cdi.kubevirt.io/storage.bind.immediate.requested: "true" 1 spec: schedule: "0 */12 * * *" 2 template: spec: source: registry: 3 url: docker://quay.io/containerdisks/centos:7-2009 storage: resources: requests: storage: 10Gi managedDataSource: centos7 4 retentionPolicy: "None" 5
- 1
- このアノテーションは、
volumeBindingMode
がWaitForFirstConsumer
に設定されたストレージクラスに必要です。 - 2
- cron 形式で指定されるジョブのスケジュール。
- 3
- レジストリーソースからデータボリュームを作成するのに使用します。
node
docker キャッシュに基づくデフォルトのnode
pullMethod
ではなく、デフォルトのpod
pullMethod
を使用します。node
docker キャッシュはレジストリーイメージがContainer.Image
で利用可能な場合に便利ですが、CDI インポーターはこれにアクセスすることは許可されていません。 - 4
- 利用可能なブートソースとして検出するカスタムイメージの場合、イメージの
managedDataSource
の名前が、仮想マシンテンプレート YAML ファイルのspec.dataVolumeTemplates.spec.sourceRef.name
にあるテンプレートのDataSource
の名前に一致する必要があります。 - 5
- cron ジョブが削除されたときにデータボリュームおよびデータソースを保持するには、
All
を使用します。cron ジョブが削除されたときにデータボリュームおよびデータソースを削除するには、None
を使用します。
9.16.13.6. システム定義またはユーザー定義のブートソースの自動更新の無効化
ユーザー定義のブートソースおよびシステム定義のブートソースの自動インポートおよび更新を無効にすることができます。
デフォルトでは、システム定義のブートソースは HyperConverged
カスタムリソース (CR) の spec.dataImportCronTemplates
にリストされていないため、ブートソースを追加し、自動インポートおよび更新を無効にする必要があります。
手順
-
ユーザー定義のブートソースの自動インポートおよび更新を無効にするには、カスタムリソースリストの
spec.dataImportCronTemplates
フィールドからブートソースを削除します。 システム定義の起動ソースの自動インポートおよび更新を無効にするには、以下を行います。
-
HyperConverged
CR を編集し、ブートソースをspec.dataImportCronTemplates
に追加します。 dataimportcrontemplate.kubevirt.io/enable
アノテーションをfalse
に設定して、自動インポートおよび更新を無効にします。以下に例を示します。apiVersion: hco.kubevirt.io/v1beta1 kind: HyperConverged metadata: name: kubevirt-hyperconverged spec: dataImportCronTemplates: - metadata: annotations: dataimportcrontemplate.kubevirt.io/enable: false name: rhel8-image-cron ...
-
9.16.13.7. ブートソースのステータスの確認
ブートソースがシステム定義かユーザー定義かを確認できます。
HyperConverged
CR の status.dataImportChronTemplates
フィールドにリストされている各ブートソースの status
セクションは、ブートソースのタイプを示します。たとえば、commonTemplate: true
はシステム定義 (commonTemplate
) の起動ソースを示し、status: {}
はユーザー定義の起動ソースを示します。
手順
-
oc get
コマンドを使用して、HyperConverged
CR 内のdataImportChronTemplates
を一覧表示します。 ブートソースのステータスを確認します。
出力例
... apiVersion: hco.kubevirt.io/v1beta1 kind: HyperConverged ... spec: ... status: 1 ... dataImportCronTemplates: 2 - metadata: annotations: cdi.kubevirt.io/storage.bind.immediate.requested: "true" name: centos-7-image-cron spec: garbageCollect: Outdated managedDataSource: centos7 schedule: 55 8/12 * * * template: metadata: {} spec: source: registry: url: docker://quay.io/containerdisks/centos:7-2009 storage: resources: requests: storage: 30Gi status: {} status: commonTemplate: true 3 ... - metadata: annotations: cdi.kubevirt.io/storage.bind.immediate.requested: "true" name: user-defined-dic spec: garbageCollect: Outdated managedDataSource: user-defined-centos-stream8 schedule: 55 8/12 * * * template: metadata: {} spec: source: registry: pullMethod: node url: docker://quay.io/containerdisks/centos-stream:8 storage: resources: requests: storage: 30Gi status: {} status: {} 4 ...
9.16.14. 仮想マシンでの Descheduler エビクションの有効化
Descheduler を使用して Pod を削除し、Pod をより適切なノードに再スケジュールできます。Pod が仮想マシンの場合、Pod の削除により、仮想マシンが別のノードにライブマイグレーションされます。
仮想マシンの Descheduler エビクションはテクノロジープレビュー機能としてのみご利用いただけます。テクノロジープレビュー機能は、Red Hat 製品のサービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではないことがあります。Red Hat は、実稼働環境でこれらを使用することを推奨していません。テクノロジープレビュー機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行いフィードバックを提供していただくことを目的としています。
Red Hat のテクノロジープレビュー機能のサポート範囲に関する詳細は、テクノロジープレビュー機能のサポート範囲 を参照してください。
9.16.14.1. Descheduler プロファイル
テクノロジープレビューの DevPreviewLongLifecycle
プロファイルを使用して、仮想マシンで Descheduler を有効にします。これは、現在 OpenShift Virtualization で利用可能な唯一の Descheduler プロファイルです。適切なスケジューリングを確保するには、予想される負荷に応じた CPU およびメモリー要求で仮想マシンを作成します。
DevPreviewLongLifecycle
このプロファイルは、ノード間のリソース使用率のバランスを取り、以下のストラテジーを有効にします。
-
RemovePodsHavingTooManyRestarts
: コンテナーが何度も再起動された Pod、およびすべてのコンテナー (Init コンテナーを含む) の再起動の合計が 100 を超える Pod を削除します。仮想マシンのゲストオペレーティングシステムを再起動しても、この数は増えません。 LowNodeUtilization
: 使用率の低いノードがある場合に、使用率の高いノードから Pod をエビクトします。エビクトされた Pod の宛先ノードはスケジューラーによって決定されます。- ノードは、使用率がすべてのしきい値 (CPU、メモリー、Pod の数) について 20% 未満の場合に使用率が低いと見なされます。
- ノードは、使用率がすべてのしきい値 (CPU、メモリー、Pod の数) について 50% を超える場合に過剰に使用されていると見なされます。
-
9.16.14.2. Descheduler のインストール
Descheduler はデフォルトで利用できません。Descheduler を有効にするには、Kube Descheduler Operator を OperatorHub からインストールし、1 つ以上の Descheduler プロファイルを有効にする必要があります。
デフォルトで、Descheduler は予測モードで実行されます。つまり、これは Pod エビクションのみをシミュレートします。Pod エビクションを実行するには、Descheduler のモードを automatic に変更する必要があります。
クラスターでホストされたコントロールプレーンを有効にしている場合は、カスタム優先度のしきい値を設定して、ホストされたコントロールプレーンの namespace の Pod が削除される可能性を下げます。ホストされたコントロールプレーンの優先度クラスの中で優先度値が最も低い (100000000
) ため、優先度しきい値クラス名を hypershift-control-plane
に設定します。
前提条件
- クラスター管理者の権限。
- OpenShift Container Platform Web コンソールにアクセスします。
手順
- OpenShift Container Platform Web コンソールにログインします。
Kube Descheduler Operator に必要な namespace を作成します。
- Administration → Namespaces に移動し、Create Namespace をクリックします。
-
Name フィールドに
openshift-kube-descheduler-operator
を入力し、Labels フィールドにopenshift.io/cluster-monitoring=true
を入力して Descheduler メトリックを有効にし、Create をクリックします。
Kube Descheduler Operator をインストールします。
- Operators → OperatorHub に移動します。
- Kube Descheduler Operator をフィルターボックスに入力します。
- Kube Descheduler Operator を選択し、Install をクリックします。
- Install Operator ページで、A specific namespace on the cluster を選択します。ドロップダウンメニューから openshift-kube-descheduler-operator を選択します。
- Update Channel および Approval Strategy の値を必要な値に調整します。
- Install をクリックします。
Descheduler インスタンスを作成します。
- Operators → Installed Operators ページから、 Kube Descheduler Operator をクリックします。
- Kube Descheduler タブを選択し、Create KubeDescheduler をクリックします。
必要に応じて設定を編集します。
- エビクションをシミュレーションせずに Pod をエビクトするには、Mode フィールドを Automatic に変更します。
Profiles セクションを展開し、
DevPreviewLongLifecycle
を選択します。AffinityAndTaints
プロファイルがデフォルトで有効になっています。重要OpenShift Virtualization で現在利用できるプロファイルは
DevPreviewLongLifecycle
のみです。
また、後で OpenShift CLI (oc
) を使用して、Descheduler のプロファイルおよび設定を設定することもできます。
9.16.14.3. 仮想マシン (VM) での Descheduler エビクションの有効化
Descheduler のインストール後に、アノテーションを VirtualMachine
カスタムリソース (CR) に追加して Descheduler エビクションを仮想マシンで有効にできます。
前提条件
-
Descheduler を OpenShift Container Platform Web コンソールまたは OpenShift CLI (
oc
) にインストールしている。 - 仮想マシンが実行されていないことを確認します。
手順
仮想マシンを起動する前に、
Descheduler.alpha.kubernetes.io/evict
アノテーションをVirtualMachine
CR に追加します。apiVersion: kubevirt.io/v1 kind: VirtualMachine spec: template: metadata: annotations: descheduler.alpha.kubernetes.io/evict: "true"
インストール時に Web コンソールで
DevPreviewLongLifecycle
プロファイルをまだ設定していない場合は、KubeDescheduler
オブジェクトのspec.profile
セクションにDevPreviewLongLifecycle
を指定します。apiVersion: operator.openshift.io/v1 kind: KubeDescheduler metadata: name: cluster namespace: openshift-kube-descheduler-operator spec: deschedulingIntervalSeconds: 3600 profiles: - DevPreviewLongLifecycle mode: Predictive 1
- 1
- デフォルトでは、Descheduler は Pod をエビクトしません。Pod をエビクトするには、
mode
をAutomatic
に設定します。
Descheduler が仮想マシンで有効になりました。
9.16.14.4. 関連情報
9.17. 仮想マシンのインポート
9.17.1. データボリュームインポートの TLS 証明書
9.17.1.1. データボリュームインポートの認証に使用する TLS 証明書の追加
ソースからデータをインポートするには、レジストリーまたは HTTPS エンドポイントの TLS 証明書を設定マップに追加する必要があります。この設定マップは、宛先データボリュームの namespace に存在する必要があります。
TLS 証明書の相対パスを参照して設定マップ を作成します。
手順
正しい namespace にあることを確認します。設定マップは、同じ namespace にある場合にデータボリュームによってのみ参照されます。
$ oc get ns
設定マップを作成します。
$ oc create configmap <configmap-name> --from-file=</path/to/file/ca.pem>
9.17.1.2. 例: TLS 証明書から作成される設定マップ
以下は、ca.pem
TLS 証明書で作成される設定マップの例です。
apiVersion: v1 kind: ConfigMap metadata: name: tls-certs data: ca.pem: | -----BEGIN CERTIFICATE----- ... <base64 encoded cert> ... -----END CERTIFICATE-----
9.17.2. データボリュームの使用による仮想マシンイメージのインポート
Containerized Data Importer (CDI) を使用し、データボリュームを使用して仮想マシンイメージを永続ボリューム要求 (PVC) にインポートします。次に、データボリュームを永続ストレージの仮想マシンに割り当てることができます。
仮想マシンイメージは、HTTP または HTTPS エンドポイントでホストするか、コンテナーディスクに組み込み、コンテナーレジストリーで保存できます。
ディスクイメージを PVC にインポートする際に、ディスクイメージは PVC で要求されるストレージの全容量を使用するように拡張されます。この領域を使用するには、仮想マシンのディスクパーティションおよびファイルシステムの拡張が必要になる場合があります。
サイズ変更の手順は、仮想マシンにインストールされるオペレーティングシステムによって異なります。詳細は、該当するオペレーティングシステムのドキュメントを参照してください。
9.17.2.1. 前提条件
- エンドポイントに TLS 証明書が必要な場合、証明書はデータボリュームと同じ namespace の 設定マップ に組み込む 必要があり、これはデータボリューム設定で参照されること。
コンテナーディスクをインポートするには、以下を実行すること。
- 仮想マシンイメージからコンテナーディスクを準備 し、これをコンテナーレジストリーに保存してからインポートする必要がある場合があります。
-
コンテナーレジストリーに TLS がない場合、レジストリーを
HyperConverged
カスタムリソースのinsecureRegistries
フィールドに追加 し、ここからコンテナーディスクをインポートできます。
- この操作を正常に完了するためには、ストレージクラスを定義するか、CDI スクラッチ領域を用意 しなければならない場合があります。
9.17.2.2. CDI がサポートする操作マトリックス
このマトリックスにはエンドポイントに対してコンテンツタイプのサポートされる CDI 操作が表示されます。これらの操作にはスクラッチ領域が必要です。
コンテンツタイプ | HTTP | HTTPS | HTTP Basic 認証 | レジストリー | アップロード |
---|---|---|---|---|---|
KubeVirt (QCOW2) |
✓ QCOW2 |
✓ QCOW2** |
✓ QCOW2 |
✓ QCOW2* |
✓ QCOW2* |
KubeVirt (RAW) |
✓ RAW |
✓ RAW |
✓ RAW |
✓ RAW* |
✓ RAW* |
✓ サポートされる操作
□ サポートされない操作
* スクラッチ領域が必要
**カスタム認証局が必要な場合にスクラッチ領域が必要
CDI は OpenShift Container Platform の クラスター全体のプロキシー設定 を使用するようになりました。
9.17.2.3. データボリュームについて
DataVolume
オブジェクトは、Containerized Data Importer (CDI) プロジェクトで提供されるカスタムリソースです。データボリュームは、基礎となる永続ボリューム要求 (PVC) に関連付けられるインポート、クローン作成、およびアップロード操作のオーケストレーションを行います。データボリュームは OpenShift Virtualization に統合され、仮想マシンが PVC の作成前に起動することを防ぎます。
9.17.2.4. データボリュームを使用して仮想マシンイメージをストレージにインポートする
データボリュームを使用して、仮想マシンイメージをストレージにインポートできます。
仮想マシンイメージは、HTTP または HTTPS エンドポイントでホストするか、イメージをコンテナーディスクに組み込み、コンテナーレジストリーで保存できます。
イメージのデータソースは、VirtualMachine
設定ファイルで指定します。仮想マシンが作成されると、仮想マシンイメージを含むデータボリュームがストレージにインポートされます。
前提条件
仮想マシンイメージをインポートするには、以下が必要である。
-
RAW、ISO、または QCOW2 形式の仮想マシンディスクイメージ (オプションで
xz
またはgz
を使用して圧縮される)。
-
RAW、ISO、または QCOW2 形式の仮想マシンディスクイメージ (オプションで