仮想化


Red Hat OpenShift Service on AWS 4

OpenShift Virtualization のインストールと使用方法。

Red Hat OpenShift Documentation Team

概要

このドキュメントでは、AWS の OpenShift Service で OpenShift Virtualization を使用する方法を説明します。

第1章 概要

1.1. OpenShift Virtualization について

OpenShift Virtualization の機能およびサポート範囲を確認します。

1.1.1. OpenShift Virtualization の機能

OpenShift Virtualization は、Red Hat OpenShift でスケーラブルなエンタープライズグレードの仮想化機能を提供します。これを使用して、仮想マシン (VM) だけを管理することも、またはコンテナーワークロードと合わせて管理することもできます。

OpenShift Virtualization は、Kubernetes カスタムリソースを使用して仮想化タスクを有効にし、Red Hat OpenShift Service on AWS クラスターに新しいオブジェクトを追加します。これらのタスクには、以下が含まれます。

  • Linux および Windows 仮想マシンの作成と管理
  • クラスター内で Pod と仮想マシンのワークロードの同時実行
  • さまざまなコンソールや CLI ツールを介した仮想マシンへの接続
  • 既存の仮想マシンのインポートとクローン作成
  • 仮想マシンに接続されたネットワークインターフェイスコントローラーとストレージディスクの管理
  • ノード間での仮想マシンのライブマイグレーション

Red Hat OpenShift Service on AWS Web コンソールの Virtualization パースペクティブ、および OpenShift CLI (oc) を使用して、クラスターと仮想化リソースを管理できます。

OpenShift Virtualization は OVN-Kubernetes とともに使用できます。

Compliance Operator をインストールし、ocp4-moderate および ocp4-moderate-node を使用してスキャンを実行することにより、OpenShift Virtualization クラスターのコンプライアンスの問題を確認できます。Compliance Operator は、NIST 認定ツール である OpenSCAP を使用して、セキュリティーポリシーをスキャンし、適用します。

特殊なストレージ、ネットワーク、バックアップ、および追加機能に関して、独立系ソフトウェアベンダー (ISV) およびサービスパートナーと連携する方法は、Red Hat Ecosystem Catalog を参照してください。

1.1.2. OpenShift Virtualization と VMware vSphere の比較

VMware vSphere に精通している場合は、以下の表に記載された、同様のタスクを実行できる OpenShift Virtualization コンポーネントを使用できます。ただし、OpenShift Virtualization は vSphere とは概念的に異なり、その機能の多くは基盤となる Red Hat OpenShift Service on AWS から提供されるため、OpenShift Virtualization には vSphere のすべての概念やコンポーネントに対する直接的な代替が存在するわけではありません。

Expand
表1.1 vSphere の概念と、それに最も近い OpenShift Virtualization の対応項目のマッピング
vSphere の概念OpenShift Virtualization詳細

Datastore

永続ボリューム (PV) +
永続ボリューム要求 (PVC)

仮想マシンディスクを保存します。PV は既存のストレージを表し、PVC 経由で仮想マシンに割り当てられます。ReadWriteMany (RWX) アクセスモードで作成されると、PVC は複数の仮想マシンによって同時にマウントできます。

Dynamic Resource Scheduling (DRS)

Pod エビクションポリシー +
Descheduler

アクティブなリソースバランシングを提供します。Pod のエビクションポリシーと descheduler の組み合わせにより、仮想マシンはより適切なノードへのライブマイグレーションが可能となり、ノードのリソースの使用状況を管理可能な状態に保つことができます。

NSX

Multus +
OVN-Kubernetes +
サードパーティーの Container Network Interface (CNI) プラグイン

オーバーレイネットワーク設定を提供します。OpenShift Virtualization の NSX と同等のものはありませんが、OVN-Kubernetes ネットワークプロバイダーを使用するか、認定されたサードパーティー CNI プラグインをインストールすることができます。

Storage Policy Based Management (SPBM)

Storage class

ポリシーベースのストレージの選択を提供します。ストレージクラスは、さまざまなストレージタイプを表し、Quality of Service (QoS)、バックアップポリシー、回収ポリシー、ボリューム拡張が許可されるかどうかなどのストレージ機能を記述します。PVC は、アプリケーションの要件を満たすために特定のストレージクラスを要求できます。

vCenter
vRealize Operations

OpenShift メトリクスおよびモニタリング

ホストおよび仮想マシンのメトリクスを提供します。Red Hat OpenShift Service on AWS Web コンソールを使用すると、メトリクスを表示し、クラスターと仮想マシンの全体的な健全性を監視できます。

vMotion

ライブマイグレーション

実行中の仮想マシンを中断せずに別のノードに移動します。ライブマイグレーションを使用できるようにするには、仮想マシンに割り当てられた PVC に ReadWriteMany (RWX) アクセスモードが必要です。

vSwitch
DvSwitch

NMState Operator +
Multus

物理ネットワーク設定を提供します。NMState Operator を使用して、ステートドリブンのネットワーク設定を適用し、Linux ブリッジやネットワークボンディングなど、さまざまなネットワークインターフェイスタイプを管理できます。Multus を使用すると、複数のネットワークインターフェイスを割り当て、仮想マシンを外部ネットワークに接続できます。

1.1.3. OpenShift Virtualization でサポートされるクラスターバージョン

OpenShift Virtualization 4.19 の最新の安定版リリースは 4.19.3 です。

OpenShift Virtualization 4.19 は、Red Hat OpenShift Service on AWS 4 クラスターでの使用がサポートされています。OpenShift Virtualization の最新の z-stream リリースを使用するには、まず、Red Hat OpenShift Service on AWS の最新バージョンにアップグレードする必要があります。

注記

OpenShift Virtualization は現在、x86-64 CPU で利用可能です。Arm ベースのノードはまだサポートされていません。

1.1.4. 仮想マシンディスクのボリュームとアクセスモードについて

既知のストレージプロバイダーでストレージ API を使用する場合、ボリュームモードとアクセスモードは自動的に選択されます。ただし、ストレージプロファイルのないストレージクラスを使用する場合は、ボリュームとアクセスモードを設定する必要があります。

OpenShift Virtualization に対応している既知のストレージプロバイダーのリストは、Red Hat Ecosystem Catalog を参照してください。

最良の結果を得るには、ReadWriteMany (RWX) アクセスモードと Block ボリュームモードを使用してください。これは、以下の理由により重要です。

  • ライブマイグレーションには ReadWriteMany (RWX) アクセスモードが必要です。
  • Block ボリュームモードは、Filesystem ボリュームモードよりもパフォーマンスが大幅に優れています。これは、Filesystem ボリュームモードでは、ファイルシステムレイヤーやディスクイメージファイルなどを含め、より多くのストレージレイヤーが使用されるためです。仮想マシンのディスクストレージに、これらのレイヤーは必要ありません。
重要

次の設定の仮想マシンをライブマイグレーションすることはできません。

  • ReadWriteOnce (RWO) アクセスモードのストレージボリューム
  • GPU などのパススルー機能

これらの仮想マシンの evictionStrategy フィールドを None に設定します。None ストラテジーでは、ノードの再起動中に仮想マシンの電源がオフになります。

1.2. セキュリティーポリシー

OpenShift Virtualization のセキュリティーと認可を説明します。

主なポイント

  • OpenShift Virtualization は、Pod セキュリティーの現在のベストプラクティスを強制することを目的とした、restricted Kubernetes pod security standards プロファイルに準拠しています。
  • 仮想マシン (VM) のワークロードは、特権のない Pod として実行されます。
  • Security Context Constraints (SCC) は、kubevirt-controller サービスアカウントに対して定義されます。
  • OpenShift Virtualization コンポーネントの TLS 証明書は更新され、自動的にローテーションされます。

1.2.1. ワークロードのセキュリティーについて

デフォルトでは、OpenShift Virtualization の仮想マシン (VM) ワークロードは root 権限では実行されず、root 権限を必要とするサポート対象の OpenShift Virtualization 機能はありません。

仮想マシンごとに、virt-launcher Pod が libvirt のインスタンスを セッションモード で実行し、仮想マシンプロセスを管理します。セッションモードでは、libvirt デーモンは root 以外のユーザーアカウントとして実行され、同じユーザー識別子 (UID) で実行されているクライアントからの接続のみを許可します。したがって、仮想マシンは権限のない Pod として実行し、最小権限のセキュリティー原則に従います。

1.2.2. TLS 証明書

OpenShift Virtualization コンポーネントの TLS 証明書は更新され、自動的にローテーションされます。手動で更新する必要はありません。

自動更新スケジュール

TLS 証明書は自動的に削除され、以下のスケジュールに従って置き換えられます。

  • KubeVirt 証明書は毎日更新されます。
  • Containerized Data Importer controller (CDI) 証明書は、15 日ごとに更新されます。
  • MAC プール証明書は毎年更新されます。

TLS 証明書の自動ローテーションはいずれの操作も中断しません。たとえば、以下の操作は中断せずに引き続き機能します。

  • 移行
  • イメージのアップロード
  • VNC およびコンソールの接続

1.2.3. 認可

OpenShift Virtualization は、ロールベースのアクセス制御 (RBAC) を使用して、人間のユーザーとサービスアカウントの権限を定義します。サービスアカウントに定義された権限は、OpenShift Virtualization コンポーネントが実行できるアクションを制御します。

RBAC ロールを使用して、仮想化機能へのユーザーアクセスを管理することもできます。たとえば管理者は、仮想マシンの起動に必要な権限を提供する RBAC ロールを作成できます。管理者は、ロールを特定のユーザーにバインドすることでアクセスを制限できます。

1.2.3.1. OpenShift Virtualization のデフォルトのクラスターロール

クラスターロール集約を使用することで、OpenShift Virtualization はデフォルトの Red Hat OpenShift Service on AWS クラスターロールを拡張して、仮想化オブジェクトにアクセスするための権限を組み込みます。OpenShift Virtualization 固有のロールは、Red Hat OpenShift Service on AWS のロールと集約されません。

Expand
表1.2 OpenShift Virtualization のクラスターロール
デフォルトのクラスターロールOpenShift Virtualization のクラスターロールOpenShift Virtualization クラスターロールの説明

view

kubevirt.io:view

クラスター内の OpenShift Virtualization リソースをすべて表示できるユーザー。ただし、リソースの作成、削除、変更、アクセスはできません。たとえば、ユーザーは仮想マシン (VM) が実行中であることを確認できますが、それをシャットダウンしたり、そのコンソールにアクセスしたりすることはできません。

edit

kubevirt.io:edit

クラスター内のすべての OpenShift Virtualization リソースを変更できるユーザー。たとえば、ユーザーは仮想マシンの作成、VM コンソールへのアクセス、仮想マシンの削除を行えます。

admin

kubevirt.io:admin

リソースコレクションの削除を含め、すべての OpenShift Virtualization リソースに対する完全な権限を持つユーザー。このユーザーは、openshift-cnv namespace の HyperConverged カスタムリソースにある OpenShift Virtualization ランタイム設定も表示および変更できます。

該当なし

kubevirt.io:migrate

namespace スコープの VirtualMachineInstanceMigration (VMIM) オブジェクトによって表される、仮想マシンのライブマイグレーション要求を作成、削除、更新できるユーザー。このロールは OpenShift Virtualization に固有です。

1.2.3.2. OpenShift Virtualization のストレージ機能の RBAC ロール

cdi-operator および cdi-controller サービスアカウントを含む、次のパーミッションがコンテナー化データインポーター (CDI) に付与されます。

1.2.3.2.1. クラスター全体の RBAC のロール
Expand
表1.3 cdi.kubevirt.io API グループの集約されたクラスターロール
CDI クラスターのロールリソース動詞

cdi.kubevirt.io:admin

datavolumesuploadtokenrequests

* (すべて)

datavolumes/source

create

cdi.kubevirt.io:edit

datavolumesuploadtokenrequests

*

datavolumes/source

create

cdi.kubevirt.io:view

cdiconfigsdataimportcronsdatasourcesdatavolumesobjecttransfersstorageprofilesvolumeimportsourcesvolumeuploadsourcesvolumeclonesources

get, list, watch

datavolumes/source

create

cdi.kubevirt.io:config-reader

cdiconfigsstorageprofiles

get, list, watch

Expand
表1.4 cdi-operator サービスアカウントのクラスター全体のロール
API グループリソース動詞

rbac.authorization.k8s.io

clusterrolebindingsclusterroles

getlistwatchcreateupdatedelete

security.openshift.io

securitycontextconstraints

getlistwatchupdatecreate

apiextensions.k8s.io

customresourcedefinitionscustomresourcedefinitions/status

getlistwatchcreateupdatedelete

cdi.kubevirt.io

*

*

upload.cdi.kubevirt.io

*

*

admissionregistration.k8s.io

validatingwebhookconfigurationsmutatingwebhookconfigurations

createlistwatch

admissionregistration.k8s.io

validatingwebhookconfigurations

許可リスト: cdi-api-dataimportcron-validate, cdi-api-populator-validate, cdi-api-datavolume-validate, cdi-api-validate, objecttransfer-api-validate

getupdatedelete

admissionregistration.k8s.io

mutatingwebhookconfigurations

許可リスト: cdi-api-datavolume-mutate

getupdatedelete

apiregistration.k8s.io

apiservices

getlistwatchcreateupdatedelete

Expand
表1.5 cdi-controller サービスアカウントのクラスター全体のロール
API グループリソース動詞

"" (core)

events

createpatch

"" (core)

persistentvolumeclaims

getlistwatchcreateupdatedeletedeletecollectionpatch

"" (core)

persistentvolumes

getlistwatchupdate

"" (core)

persistentvolumeclaims/finalizerspods/finalizers

update

"" (core)

podsservices

getlistwatchcreatedelete

"" (core)

configmaps

getcreate

storage.k8s.io

storageclassescsidrivers

get, list, watch

config.openshift.io

proxies

get, list, watch

cdi.kubevirt.io

*

*

snapshot.storage.k8s.io

volumesnapshotsvolumesnapshotclassesvolumesnapshotcontents

getlistwatchcreatedelete

snapshot.storage.k8s.io

volumesnapshots

updatedeletecollection

apiextensions.k8s.io

customresourcedefinitions

get, list, watch

scheduling.k8s.io

priorityclasses

get, list, watch

image.openshift.io

imagestreams

get, list, watch

"" (core)

secrets

create

kubevirt.io

virtualmachines/finalizers

update

1.2.3.2.2. namespace 付きの RBAC ロール
Expand
表1.6 cdi-operator サービスアカウントの namespace 付きのロール
API グループリソース動詞

rbac.authorization.k8s.io

rolebindingsroles

getlistwatchcreateupdatedelete

"" (core)

serviceaccountsconfigmapseventssecretsservices

get, list, watch, create, update, patch, delete

apps

deploymentsdeployments/finalizers

getlistwatchcreateupdatedelete

route.openshift.io

routesroutes/custom-host

getlistwatchcreateupdate

config.openshift.io

proxies

get, list, watch

monitoring.coreos.com

servicemonitorsprometheusrules

getlistwatchcreatedeleteupdatepatch

coordination.k8s.io

leases

getcreateupdate

Expand
表1.7 cdi-controller サービスアカウントの namespace 付きのロール
API グループリソース動詞

"" (core)

configmaps

getlistwatchcreateupdatedelete

"" (core)

secrets

get, list, watch

batch

cronjobs

getlistwatchcreateupdatedelete

batch

jobs

createdeletelistwatch

coordination.k8s.io

leases

getcreateupdate

networking.k8s.io

ingresses

get, list, watch

route.openshift.io

routes

get, list, watch

1.2.3.3. kubevirt-controller サービスアカウントの追加の SCC とパーミッション

SCC (Security Context Constraints) は Pod のパーミッションを制御します。これらのパーミッションには、コンテナーのコレクションである Pod が実行できるアクションおよびそれがアクセスできるリソース情報が含まれます。SCC を使用して、Pod がシステムに受け入れられるために必要な Pod の実行に関する条件の一覧を定義できます。

virt-controller は、クラスター内の仮想マシンの virt-launcher Pod を作成するクラスターコントローラーです。

注記

デフォルトでは、virt-launcher Pod は名前空間内の デフォルトの サービスアカウントで実行されます。コンプライアンス制御に一意のサービスアカウントが必要な場合は、仮想マシンに割り当てます。この設定は、VirtualMachineInstance オブジェクトと virt-launcher Pod に適用されます。

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 操作を許可します。

kubevirt-controller の SCC および RBAC 定義の表示

oc ツールを使用して kubevirt-controllerSecurityContextConstraints 定義を表示できます。

$ oc get scc kubevirt-controller -o yaml
Copy to Clipboard Toggle word wrap

oc ツールを使用して kubevirt-controller クラスターロールの RBAC 定義を表示できます。

$ oc get clusterrole kubevirt-controller -o yaml
Copy to Clipboard Toggle word wrap

1.3. OpenShift Virtualization アーキテクチャー

Operator Lifecycle Manager (OLM) は、OpenShift Virtualization の各コンポーネントのオペレーター Pod をデプロイします。

  • コンピューティング: virt-operator
  • ストレージ: cdi-operator
  • ネットワーク: cluster-network-addons-operator
  • スケーリング: ssp-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 コントロールプレーン用の追加コンポーネントなどのリソースを作成します。たとえば、HyperConverged Operator (HCO) が KubeVirt CR を作成すると、OpenShift Virtualization Operator がそれを調整し、virt-controllervirt-handlervirt-api などの追加リソースを作成します。

OLM は Hostpath Provisioner (HPP) Operator をデプロイしますが、hostpath-provisioner CR を作成するまで機能しません。

1.3.1. HyperConverged Operator (HCO) について

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

Expand
表1.8 HyperConverged Operator コンポーネント
コンポーネント説明

deployment/hco-webhook

HyperConverged カスタムリソースの内容を検証します。

deployment/hyperconverged-cluster-cli-download

クラスターから直接ダウンロードできるように、virtctl ツールのバイナリーをクラスターに提供します。

KubeVirt/kubevirt-kubevirt-hyperconverged

OpenShift Virtualization に必要なすべての Operator、CR、およびオブジェクトが含まれています。

SSP/ssp-kubevirt-hyperconverged

Scheduling, Scale, and Performance (SSP) CR。これは、HCO によって自動的に作成されます。

CDI/cdi-kubevirt-hyperconverged

Containerized Data Importer (CDI) CR。これは、HCO によって自動的に作成されます。

NetworkAddonsConfig/cluster

cluster-network-addons-operator によって指示および管理される CR。

1.3.2. Containerized Data Importer (CDI) Operator について

CDI Operator cdi-operator は、CDI とその関連リソースを管理し、データボリュームを使用して仮想マシンイメージを永続ボリューム要求 (PVC) にインポートします。

Expand
表1.9 CDI Operator コンポーネント
コンポーネント説明

deployment/cdi-apiserver

安全なアップロードトークンを発行して、VM ディスクを PVC にアップロードするための承認を管理します。

deployment/cdi-uploadproxy

外部ディスクのアップロードトラフィックを適切なアップロードサーバー Pod に転送して、正しい PVC に書き込むことができるようにします。有効なアップロードトークンが必要です。

pod/cdi-importer

データボリュームの作成時に仮想マシンイメージを PVC にインポートするヘルパー Pod。

1.3.3. Cluster Network Addons Operator について

Cluster Network Addons Operator (cluster-network-addons-operator) は、クラスターにネットワークコンポーネントをデプロイし、拡張ネットワーク機能の関連リソースを管理します。

Expand
表1.10 Cluster Network Addons Operator コンポーネント
コンポーネント説明

deployment/kubemacpool-cert-manager

Kubemacpool の Webhook の TLS 証明書を管理します。

deployment/kubemacpool-mac-controller-manager

仮想マシン (VM) ネットワークインターフェイスカード (NIC) の MAC アドレスプールサービスを提供します。

daemonset/bridge-marker

ノードで使用可能なネットワークブリッジをノードリソースとしてマークします。

daemonset/kube-cni-linux-bridge-plugin

クラスターノードに Container Network Interface (CNI) プラグインをインストールし、Network Attachment Definition を介して Linux ブリッジに VM を接続できるようにします。

1.3.4. Hostpath Provisioner (HPP) Operator について

HPP オペレーター hostpath-provisioner-operator は、マルチノード HPP および関連リソースをデプロイおよび管理します。

Expand
表1.11 HPP Operator コンポーネント
コンポーネント説明

deployment/hpp-pool-hpp-csi-pvc-block-<worker_node_name>

HPP の実行が指定されている各ノードにワーカーを提供します。Pod は、指定されたバッキングストレージをノードにマウントします。

daemonset/hostpath-provisioner-csi

HPP の Container Storage Interface (CSI) ドライバーインターフェイスを実装します。

daemonset/hostpath-provisioner

HPP のレガシードライバーインターフェイスを実装します。

1.3.5. Scheduling, Scale, and Performance (SSP) Operator について

SSP オペレーター ssp-operator は、共通テンプレート、関連するデフォルトのブートソース、パイプラインタスク、およびテンプレートバリデーターをデプロイします。

1.3.6. OpenShift Virtualization Operator について

OpenShift Virtualization Operator virt-operator は、現在の仮想マシンワークロードを中断することなく OpenShift Virtualization をデプロイ、アップグレード、管理します。さらに、OpenShift Virtualization Operator は、共通のインスタンスタイプと共通の設定をデプロイします。

Expand
表1.12 virt-operator コンポーネント
コンポーネント説明

deployment/virt-api

すべての仮想化関連フローのエントリーポイントとして機能する HTTP API サーバー。

deployment/virt-controller

新しい VM インスタンスオブジェクトの作成を監視し、対応する Pod を作成します。Pod がノードでスケジュールされると、virt-controller は仮想マシンをノード名で更新します。

daemonset/virt-handler

仮想マシンへの変更を監視し、必要な操作を実行するように virt-launcher に指示します。このコンポーネントはノード固有です。

pod/virt-launcher

libvirt および qemu によって実装された、ユーザーによって作成された VM が含まれます。

第2章 スタートガイド

2.1. OpenShift Virtualization の開始

基本的な環境をインストールして設定することにより、OpenShift Virtualization の特徴と機能を調べることができます。

注記

クラスター設定手順には、cluster-admin 権限が必要です。

2.1.1. OpenShift Virtualization の計画とインストール

Red Hat OpenShift Service on AWS クラスターに OpenShift Virtualization を計画してインストールします。

計画およびインストールのリソース

2.1.2. 仮想マシンの作成と管理

仮想マシンを作成します。

仮想マシンをセカンダリーネットワークに接続します。

仮想マシンに接続します。

仮想マシンを管理します。

2.1.3. OpenShift Virtualization への移行

VMware vSphere、Red Hat OpenStack Platform (RHOSP)、Red Hat Virtualization、別の Red Hat OpenShift Service on AWS クラスターなどの外部プロバイダーから仮想マシンを移行するには、Migration Toolkit for Virtualization (MTV) を使用します。VMware vSphere によって作成された Open Virtual Appliance (OVA) ファイルも移行できます。

注記

Migration Toolkit for Virtualization は OpenShift Virtualization に含まれていないため、別途インストールする必要があります。そのため、この手順内のすべてのリンクは OpenShift Virtualization ドキュメントの外部につながります。

前提条件

2.1.4. 次のステップ

2.2. CLI ツールの使用

virtctl コマンドラインツールを使用して、OpenShift Virtualization リソースを管理できます。

libguestfs コマンドラインツールを使用すると、仮想マシン (VM) のディスクイメージにアクセスして変更できます。libguestfs をデプロイするには、virtctl libguestfs コマンドを使用します。

2.2.1. virtctl のインストール

Red Hat Enterprise Linux (RHEL) 9、Linux、Windows、および MacOS オペレーティングシステムに virtctl をインストールするには、virtctl バイナリーファイルをダウンロードしてインストールします。

RHEL 8 に virtctl をインストールするには、OpenShift Virtualization リポジトリーを有効にしてから、kubevirt-virtctl パッケージをインストールします。

2.2.1.1. RHEL 9、Linux、Windows、macOS への virtctl バイナリーのインストール

Red Hat OpenShift Service on AWS Web コンソールからオペレーティングシステムの virtctl バイナリーをダウンロードしてインストールできます。

手順

  1. Web コンソールの Virtualization → Overview ページに移動します。
  2. Download virtctl リンクをクリックして、オペレーティングシステム用の virtctl バイナリーをダウンロードします。
  3. virtctl をインストールします。

    • RHEL 9 およびその他の Linux オペレーティングシステムの場合:

      1. アーカイブファイルを解凍します。

        $ tar -xvf <virtctl-version-distribution.arch>.tar.gz
        Copy to Clipboard Toggle word wrap
      2. 次のコマンドを実行して、virtctl バイナリーを実行可能にします。

        $ chmod +x <path/virtctl-file-name>
        Copy to Clipboard Toggle word wrap
      3. virtctl バイナリーを PATH 環境変数 にあるディレクトリーに移動します。

        次のコマンドを実行して、パスを確認できます。

        $ echo $PATH
        Copy to Clipboard Toggle word wrap
      4. KUBECONFIG 環境変数を設定します。

        $ export KUBECONFIG=/home/<user>/clusters/current/auth/kubeconfig
        Copy to Clipboard Toggle word wrap
    • Windows の場合:

      1. アーカイブファイルを展開します。
      2. 展開したフォルダー階層に移動し、virtctl 実行可能ファイルをダブルクリックしてクライアントをインストールします。
      3. virtctl バイナリーを PATH 環境変数 にあるディレクトリーに移動します。

        次のコマンドを実行して、パスを確認できます。

        C:\> path
        Copy to Clipboard Toggle word wrap
    • macOS の場合:

      1. アーカイブファイルを展開します。
      2. virtctl バイナリーを PATH 環境変数 にあるディレクトリーに移動します。

        次のコマンドを実行して、パスを確認できます。

        echo $PATH
        Copy to Clipboard Toggle word wrap
2.2.1.2. RHEL 8 への virtctl RPM のインストール

OpenShift Virtualization リポジトリーを有効にし、kubevirt-virtctl パッケージをインストールすることで、Red Hat Enterprise Linux (RHEL) 8 に virtctl RPM をインストールできます。

前提条件

  • クラスター内の各ホストは Red Hat Subscription Manager (RHSM) に登録され、アクティブな Red Hat OpenShift Service on AWS サブスクリプションがある。

手順

  1. subscription-manager CLI ツールを使用して次のコマンドを実行し、OpenShift Virtualization リポジトリーを有効にします。

    # subscription-manager repos --enable cnv-4.19-for-rhel-8-x86_64-rpms
    Copy to Clipboard Toggle word wrap
  2. 次のコマンドを実行して、kubevirt-virtctl パッケージをインストールします。

    # yum install kubevirt-virtctl
    Copy to Clipboard Toggle word wrap

2.2.2. virtctl コマンド

virtctl クライアントは、OpenShift Virtualization リソースを管理するためのコマンドラインユーティリティーです。

注記

特に指定がない限り、仮想マシンコマンドは仮想マシンインスタンスにも適用されます。

2.2.2.1. virtctl 情報コマンド

virtctl information コマンドを使用して、virtctl クライアントに関する情報を表示します。

Expand
表2.1 情報コマンド
コマンド説明

virtctl version

virtctl クライアントとサーバーのバージョンを表示します。

virtctl help

virtctl コマンドのリストを表示します。

virtctl <command> -h|--help

特定のコマンドのオプションのリストを表示します。

virtctl オプション

任意の virtctl コマンドのグローバルコマンドオプションのリストを表示します。

2.2.2.2. 仮想マシン情報コマンド

virtctl を使用すると、仮想マシンおよび仮想マシンインスタンス (VMI) に関する情報を表示できます。

Expand
表2.2 仮想マシン情報コマンド
コマンド説明

virtctl fslist <vm_name>

ゲストマシンで使用可能なファイルシステムを表示します。

virtctl guestosinfo <vm_name>

ゲストマシンのオペレーティングシステムに関する情報を表示します。

virtctl userlist <vm_name>

ゲストマシンにログインしているユーザーを表示します。

2.2.2.3. 仮想マシンマニフェスト作成コマンド

virtctl create コマンドを使用して、仮想マシン、インスタンスタイプ、および設定のマニフェストを作成できます。

Expand
表2.3 仮想マシンマニフェスト作成コマンド
コマンド説明
virtctl create vm

VirtualMachine (VM) マニフェストを作成します。

virtctl create vm --name <vm_name>

仮想マシンの名前を指定して、仮想マシンのマニフェストを作成します。

virtctl create vm --user <user_name> --ssh-key|password-file=<value>

cloud-init 設定を使用して仮想マシンマニフェストの作成、選択したユーザーの作成を行い、指定された文字列から SSH 公開鍵を追加するか、ファイルからパスワードを追加します。

virtctl create vm --access-cred type:password,src:<secret>

選択したシークレットから注入されたユーザーとパスワードの組み合わせを使用して仮想マシンマニフェストを作成します。

virtctl create vm --access-cred type:ssh,src:<secret>,user:<user_name>

選択したシークレットから注入された SSH 公開鍵を使用して仮想マシンマニフェストを作成します。

virtctl create vm --volume-sysprep src:<config_map>

sysprep ボリュームとして使用する config map を指定して、仮想マシンマニフェストを作成します。config map には、unattend.xml または autounattend.xml という名前の有効な応答ファイルが含まれている必要があります。

virtctl create vm --instancetype <instancetype_name>

既存のクラスター全体のインスタンスの種類を使用する仮想マシンのマニフェストを作成します。

virtctl create vm --instancetype=virtualmachineinstancetype/<instancetype_name>

既存の namespaced 付きのインスタンスタイプを使用する仮想マシンのマニフェストを作成します。

virtctl create instancetype --cpu <cpu_value> --memory <memory_value> --name <instancetype_name>

クラスター全体のインスタンスタイプのマニフェストを作成します。

virtctl create instancetype --cpu <cpu_value> --memory <memory_value> --name <instancetype_name> --namespace <namespace_value>

namespace 付きのインスタンスタイプのマニフェストを作成します。

virtctl create preference --name <preference_name>

設定の名前を指定して、クラスター全体の仮想マシン設定のマニフェストを作成します。

virtctl create preference --namespace <namespace_value>

namespace 付きの仮想マシン設定のマニフェストを作成します。

2.2.2.4. 仮想マシン管理コマンド

virtctl 仮想マシン管理コマンドを使用して、仮想マシンおよび仮想マシンインスタンスを管理および移行します。

Expand
表2.4 仮想マシン管理コマンド
コマンド説明

virtctl start <vm_name>

仮想マシンを開始します。

virtctl start --paused <vm_name>

仮想マシンを一時停止状態で起動します。このオプションを使用すると、VNC コンソールからブートプロセスを中断できます。

virtctl stop <vm_name>

仮想マシンを停止します。

virtctl stop <vm_name> --grace-period 0 --force

仮想マシンを強制停止します。このオプションは、データの不整合またはデータ損失を引き起こす可能性があります。

virtctl pause vm <vm_name>

仮想マシンを一時停止します。マシンの状態がメモリーに保持されます。

virtctl unpause vm <vm_name>

仮想マシンの一時停止を解除します。

virtctl migrate <vm_name>

仮想マシンを移行します。

virtctl migrate-cancel <vm_name>

仮想マシンの移行をキャンセルします。

virtctl restart <vm_name>

仮想マシンを再起動します。

2.2.2.5. 仮想マシン接続コマンド

virtctl 接続コマンドを使用してポートを公開し、仮想マシンおよび仮想マシンインスタンスに接続します。

Expand
表2.5 仮想マシン接続コマンド
コマンド説明

virtctl console <vm_name>

仮想マシンのシリアルコンソールに接続します。

virtctl expose vm <vm_name> --name <service_name> --type <ClusterIP|NodePort|LoadBalancer> --port <port>

仮想マシンの指定されたポートを転送するサービスを作成し、ノードの指定されたポートでサービスを公開します。

例: virtctl expose vm rhel9_vm --name rhel9-ssh --type NodePort --port 22

virtctl scp -i <ssh_key> <file_name> <user_name>@<vm_name>

マシンから仮想マシンにファイルをコピーします。このコマンドは、SSH 鍵ペアの秘密鍵を使用します。仮想マシンは公開鍵を使用して設定する必要があります。

virtctl scp -i <ssh_key> <user_name@<vm_name>:<file_name> .

仮想マシンからマシンにファイルをコピーします。このコマンドは、SSH 鍵ペアの秘密鍵を使用します。仮想マシンは公開鍵を使用して設定する必要があります。

virtctl ssh -i <ssh_key> <user_name>@<vm_name>

仮想マシンとの SSH 接続を開きます。このコマンドは、SSH 鍵ペアの秘密鍵を使用します。仮想マシンは公開鍵を使用して設定する必要があります。

virtctl vnc <vm_name>

仮想マシンの VNC コンソールに接続します。

virt-viewer がインストールされている必要があります。

virtctl vnc --proxy-only=true <vm_name>

ポート番号を表示し、VNC 接続を介してビューアーを使用して手動で VM に接続します。

virtctl vnc --port=<port-number> <vm_name>

ポートが利用可能な場合、その指定されたポートでプロキシーを実行するためにポート番号を指定します。

ポート番号が指定されていない場合、プロキシーはランダムポートで実行されます。

2.2.2.6. 仮想マシンエクスポートコマンド

virtctl vmexport コマンドを使用して、仮想マシン、仮想マシンスナップショット、または永続ボリューム要求 (PVC) からエクスポートされたボリュームを作成、ダウンロード、または削除できます。特定のマニフェストには、OpenShift Virtualization が使用できる形式でディスクイメージをインポートするためのエンドポイントへのアクセスを許可するヘッダーシークレットも含まれています。

Expand
表2.6 仮想マシンエクスポートコマンド
コマンド説明

virtctl vmexport create <vmexport_name> --vm|snapshot|pvc=<object_name>

仮想マシン、仮想マシンスナップショット、または PVC からボリュームをエクスポートするには、VirtualMachineExport カスタムリソース (CR) を作成します。

  • --vm: 仮想マシンの PVC をエクスポートします。
  • --snapshot: VirtualMachineSnapshot CR に含まれる PVC をエクスポートします。
  • --pvc: PVC をエクスポートします。
  • オプション: --ttl=1h は存続時間を指定します。デフォルトの期間は 2 時間です。

virtctl vmexport delete <vmexport_name>

VirtualMachineExport CR を手動で削除します。

virtctl vmexport download <vmexport_name> --output=<output_file> --volume=<volume_name>

VirtualMachineExport CR で定義されたボリュームをダウンロードします。

  • --output はファイル形式を指定します。例: disk.img.gz
  • --volume は、ダウンロードするボリュームを指定します。使用可能なボリュームが 1 つだけの場合、このフラグはオプションです。

オプション:

  • --keep-vme は、ダウンロード後に VirtualMachineExport CR を保持します。デフォルトの動作では、ダウンロード後に VirtualMachineExport CR を削除します。
  • --insecure は、安全でない HTTP 接続を有効にします。

virtctl vmexport download <vmexport_name> --vm|snapshot|pvc=<object_name> --output=<output_file> --volume=<volume_name>

VirtualMachineExport CR を作成し、CR で定義されたボリュームをダウンロードします。

virtctl vmexport download export --manifest

既存のエクスポートのマニフェストを取得します。マニフェストにはヘッダーシークレットが含まれていません。

virtctl vmexport download export --manifest --vm=example

仮想マシンサンプルの仮想マシンエクスポートを作成し、マニフェストを取得します。マニフェストにはヘッダーシークレットが含まれていません。

virtctl vmexport download export --manifest --snap=example

仮想マシンスナップショットの例の仮想マシンエクスポートを作成し、マニフェストを取得します。マニフェストにはヘッダーシークレットが含まれていません。

virtctl vmexport download export --manifest --include-secret

既存のエクスポートのマニフェストを取得します。マニフェストにはヘッダーシークレットが含まれています。

virtctl vmexport download export --manifest --manifest-output-format=json

既存のエクスポートのマニフェストを json 形式で取得します。マニフェストにはヘッダーシークレットが含まれていません。

virtctl vmexport download export --manifest --include-secret --output=manifest.yaml

既存のエクスポートのマニフェストを取得します。マニフェストにはヘッダーシークレットが含まれており、指定されたファイルにそれを書き込みます。

2.2.2.7. 仮想マシンメモリーダンプコマンド

virtctl memory-dump コマンドを使用して、PVC に仮想マシンのメモリーダンプを出力できます。既存の PVC を指定するか、--create-claim フラグを使用して新しい PVC を作成できます。

前提条件

  • PVC ボリュームモードは FileSystem である必要があります。
  • PVC は、メモリーダンプを格納するのに十分な大きさである必要があります。

    PVC サイズを計算する式は (VMMemorySize + 100Mi) * FileSystemOverhead です。ここで、100Mi はメモリーダンプのオーバーヘッドです。

  • 次のコマンドを実行して、HyperConverged カスタムリソースでホットプラグフィーチャーゲートを有効にする必要があります。

    $ oc patch hyperconverged kubevirt-hyperconverged -n openshift-cnv \
      --type json -p '[{"op": "add", "path": "/spec/featureGates", \
      "value": "HotplugVolumes"}]'
    Copy to Clipboard Toggle word wrap

メモリーダンプのダウンロード

メモリーダンプをダウンロードするには、virtctl vmexport download コマンドを使用する必要があります。

$ virtctl vmexport download <vmexport_name> --vm|pvc=<object_name> \
  --volume=<volume_name> --output=<output_file>
Copy to Clipboard Toggle word wrap
Expand
表2.7 仮想マシンメモリーダンプコマンド
コマンド説明

virtctl memory-dump get <vm_name> --claim-name=<pvc_name>

仮想マシンのメモリーダンプを PVC に保存します。メモリーダンプのステータスは、VirtualMachine リソースの status セクションに表示されます。

オプション:

  • --create-claim は、適切なサイズで新しい PVC を作成します。このフラグには次のオプションがあります。

    • --storage-class=<storage_class>: PVC のストレージクラスを指定します。
    • --access-mode=<access_mode>: ReadWriteOnce または ReadWriteMany を指定します。

virtctl memory-dump get <vm_name>

同じ PVC で virtctl memory-dump コマンドを再実行します。

このコマンドは、以前のメモリーダンプを上書きします。

virtctl memory-dump remove <vm_name>

メモリーダンプを削除します。

ターゲット PVC を変更する場合は、メモリーダンプを手動で削除する必要があります。

このコマンドは、VirtualMachine リソースの status セクションにメモリーダンプが表示されないように、仮想マシンと PVC の間の関連付けを削除します。PVC は影響を受けません。

2.2.2.8. ホットプラグおよびホットアンプラグコマンド

virtctl を使用して、実行中の仮想マシンおよび仮想マシンインスタンス (VMI) にリソースを追加または削除します。

Expand
表2.8 ホットプラグおよびホットアンプラグコマンド
コマンド説明

virtctl addvolume <vm_name> --volume-name=<datavolume_or_PVC> [--persist] [--serial=<label>]

データボリュームまたは永続ボリューム要求 (PVC) をホットプラグします。

オプション:

  • --persist は仮想ディスクを VM に永続的にマウントします。このフラグは VMI には適用されません。
  • --serial=<label> は仮想マシンにラベルを追加します。ラベルを指定しない場合、デフォルトのラベルはデータボリュームまたは PVC 名になります。

virtctl removevolume <vm_name> --volume-name=<virtual_disk>

仮想ディスクをホットアンプラグします。

virtctl addinterface <vm_name> --network-attachment-definition-name <net_attach_def_name> --name <interface_name>

Linux ブリッジネットワークインターフェイスをホットプラグします。

virtctl removeinterface <vm_name> --name <interface_name>

Linux ブリッジネットワークインターフェイスをホットアンプラグします。

2.2.2.9. イメージアップロードコマンド

virtctl image-upload コマンドを使用して、VM イメージをデータボリュームにアップロードできます。

Expand
表2.9 イメージアップロードコマンド
コマンド説明

virtctl image-upload dv <datavolume_name> --image-path=</path/to/image> --no-create

VM イメージを既存のデータボリュームにアップロードします。

virtctl image-upload dv <datavolume_name> --size=<datavolume_size> --image-path=</path/to/image>

指定された要求されたサイズの新しいデータボリュームに VM イメージをアップロードします。

virtctl image-upload dv <datavolume_name> --datasource --size=<datavolume_size> --image-path=</path/to/image>

仮想マシンイメージを新しいデータボリュームにアップロードし、それに関連付けられた DataSource オブジェクトを作成します。

2.2.3. virtctl を使用した libguestfs のデプロイ

virtctl guestfs コマンドを使用して、libguestfs-tools および永続ボリューム要求 (PVC) がアタッチされた対話型コンテナーをデプロイできます。

手順

  • libguestfs-tools でコンテナーをデプロイして PVC をマウントし、シェルを割り当てるには、以下のコマンドを実行します。

    $ virtctl guestfs -n <namespace> <pvc_name> 
    1
    Copy to Clipboard Toggle word wrap
    1
    PVC 名は必須の引数です。この引数を追加しないと、エラーメッセージが表示されます。
2.2.3.1. Libguestfs および virtctl guestfs コマンド

Libguestfs ツールは、仮想マシン (VM) のディスクイメージにアクセスして変更するのに役立ちます。libguestfs ツールを使用して、ゲスト内のファイルの表示および編集、仮想マシンのクローンおよびビルド、およびディスクのフォーマットおよびサイズ変更を実行できます。

virtctl guestfs コマンドおよびそのサブコマンドを使用して、PVC で仮想マシンディスクを変更して検査し、デバッグすることもできます。使用可能なサブコマンドの完全なリストを表示するには、コマンドラインで virt- と入力して Tab を押します。以下に例を示します。

Expand
コマンド説明

virt-edit -a /dev/vda /etc/motd

ターミナルでファイルを対話的に編集します。

virt-customize -a /dev/vda --ssh-inject root:string:<public key example>

ゲストに ssh 鍵を注入し、ログインを作成します。

virt-df -a /dev/vda -h

仮想マシンによって使用されるディスク容量を確認します。

virt-customize -a /dev/vda --run-command 'rpm -qa > /rpm-list'

完全なリストを含む出力ファイルを作成して、ゲストにインストールされているすべての RPM の全リストを表示します。

virt-cat -a /dev/vda /rpm-list

ターミナルで virt-customize -a /dev/vda --run-command 'rpm -qa > /rpm-list' コマンドを使用して作成されたすべての RPM の出力ファイルのリストを表示します。

virt-sysprep -a /dev/vda

テンプレートとして使用する仮想マシンディスクイメージをシールします。

デフォルトでは、virtctl guestfs は、仮想ディスク管理に必要な項目を含めてセッションを作成します。ただし、動作をカスタマイズできるように、コマンドは複数のフラグオプションもサポートしています。

Expand
フラグオプション説明

--h または --help

guestfs のヘルプを提供します。

-n <namespace> オプションと <pvc_name> 引数

特定の namespace から PVC を使用します。

-n <namespace> オプションを使用しない場合には、現在のプロジェクトが使用されます。プロジェクトを変更するには、oc project <namespace> を使用します。

<pvc_name> 引数を追加しないと、エラーメッセージが表示されます。

--image string

libguestfs-tools コンテナーイメージをリスト表示します。

--image オプションを使用して、コンテナーがカスタムイメージを使用するように設定できます。

--kvm

kvmlibguestfs-tools コンテナーによって使用されることを示します。

デフォルトでは、virtctl guestfs はインタラクティブなコンテナー向けに kvm を設定します。これは、QEMU を使用するため、libguest-tools の実行が大幅に加速されます。

クラスターに kvm をサポートするノードがない場合は、オプション --kvm=false を設定して kvm を無効にする必要があります。

設定されていない場合、libguestfs-tools Pod はいずれのノードにもスケジュールできないため保留状態のままになります。

--pull-policy string

libguestfs イメージのプルポリシーを表示します。

pull-policy オプションを設定してイメージのプルポリシーを上書きすることもできます。

このコマンドは、PVC が別の Pod によって使用されているかどうかを確認します。使用されている場合には、エラーメッセージが表示されます。ただし、libguestfs-tools プロセスが開始されると、設定では同じ PVC を使用する新規 Pod を回避できません。同じ PVC にアクセスする仮想マシンを起動する前に、アクティブな virtctl guestfs Pod がないことを確認する必要があります。

注記

virtctl guestfs コマンドは、インタラクティブな Pod に割り当てられている PVC 1 つだけを受け入れます。

2.2.4. Ansible の使用

OpenShift Virtualization 用の Ansible コレクションを使用するには、Red Hat Ansible Automation Hub (Red Hat Hybrid Cloud Console) を参照してください。

第3章 インストール

3.1. OpenShift Virtualization のクラスターの準備

OpenShift Virtualization をインストールする前に、このセクションを参照して、クラスターが要件を満たしていることを確認してください。

3.1.1. Red Hat OpenShift Service on AWS での OpenShift Virtualization

Red Hat OpenShift Service on AWS クラスターで OpenShift Virtualization を実行できます。

クラスターを設定する前に、サポート対象の機能と制限に関する以下の要約を確認してください。

インストール
  • インストーラーでプロビジョニングされるインフラストラクチャーを使用してクラスターをインストールし、ワーカーノードにベアメタルインスタンスタイプを指定する必要があります。たとえば、x86_64 アーキテクチャーをベースとするマシンの c5n.metal タイプの値を使用できます。

    詳細は、AWS へのインストールに関する Red Hat OpenShift Service on AWS のドキュメントを参照してください。

仮想マシン (VM) へのアクセス
  • virtctl CLI ツールまたは Red Hat OpenShift Service on AWS Web コンソールを使用して仮想マシンにアクセスする方法に変更はありません。
  • NodePort または LoadBalancer サービスを使用して、仮想マシンを公開できます。

    • Red Hat OpenShift Service on AWS は AWS にロードバランサーを自動的に作成し、そのライフサイクルを管理するため、ロードバランサーのアプローチが推奨されます。また、セキュリティーグループはロードバランサー用にも作成され、アノテーションを使用して既存のセキュリティーグループをアタッチできます。サービスを削除すると、Red Hat OpenShift Service on AWS はロードバランサーとそれに関連するリソースを削除します。
ネットワーク
  • アプリケーションにフラットレイヤー 2 ネットワークが必要な場合や、IP プールを制御する必要がある場合は、OVN-Kubernetes セカンダリーオーバーレイネットワークを使用することを検討してください。
ストレージ
  • 基盤となるプラットフォームとの連携がストレージベンダーによって認定されている任意のストレージソリューションを使用できます。

    重要

    AWS ベアメタル、Red Hat OpenShift Service on AWS、および Red Hat OpenShift Service on AWS クラシックアーキテクチャーの各クラスターで、サポートされるストレージソリューションが異なる場合があります。ストレージベンダーにサポートを確認してください。

  • OpenShift Virtualization で Amazon Elastic File System (EFS) または Amazon Elastic Block Store (EBS) を使用すると、次の表に示すようにパフォーマンスと機能の制限が発生する可能性があります。

    Expand
    表3.1 EFS と EBS のパフォーマンスと機能の制限
    機能EBS ボリュームEFS ボリューム共有ストレージソリューション
     

    gp2

    gp3

    io2

      

    仮想マシンライブマイグレーション

    利用不可

    利用不可

    利用可能

    利用可能

    利用可能

    クローン作成による高速仮想マシン作成

    利用可能

    利用不可

    利用可能

    スナップショットを使用した仮想マシンのバックアップと復元

    利用可能

    利用不可

    利用可能

    ライブマイグレーション、高速仮想マシンの作成、仮想マシンスナップショット機能の有効化を行うには、ReadWriteMany (RWX)、クローン作成、スナップショットをサポートする CSI ストレージの使用を検討してください。

3.1.2. ハードウェアとオペレーティングシステムの要件

OpenShift Virtualization の次のハードウェアおよびオペレーティングシステム要件を確認してください。

3.1.2.1. CPU の要件
  • Red Hat Enterprise Linux (RHEL) 9 でサポート。

    サポートされている CPU の Red Hat Ecosystem Catalog を参照してください。

    注記

    ワーカーノードの CPU が異なる場合は、CPU ごとに機能が異なるため、ライブマイグレーションが失敗する可能性があります。この問題は、ワーカーノードに適切な容量の CPU が搭載されていることを確認し、仮想マシンのノードアフィニティールールを設定することで軽減できます。

    詳細は、ノードアフィニティーの required (必須) ルールの設定 を参照してください。

  • AMD および Intel 64 ビットアーキテクチャー (x86-64-v2) のサポート。
  • Intel 64 または AMD64 CPU 拡張機能のサポート。
  • Intel VT または AMD-V ハードウェア仮想化拡張機能が有効化されている。
  • NX (実行なし) フラグが有効。
3.1.2.2. オペレーティングシステム要件
  • ワーカーノードにインストールされた Red Hat Enterprise Linux CoreOS (RHCOS)。
3.1.2.3. ストレージ要件
  • Red Hat OpenShift Service on AWS によってサポートされます。
  • ストレージプロビジョナーがスナップショットをサポートしている場合は、VolumeSnapshotClass オブジェクトをデフォルトのストレージクラスに関連付ける必要があります。
3.1.2.3.1. 仮想マシンディスクのボリュームとアクセスモードについて

既知のストレージプロバイダーでストレージ API を使用する場合、ボリュームモードとアクセスモードは自動的に選択されます。ただし、ストレージプロファイルのないストレージクラスを使用する場合は、ボリュームとアクセスモードを設定する必要があります。

OpenShift Virtualization に対応している既知のストレージプロバイダーのリストは、Red Hat Ecosystem Catalog を参照してください。

最良の結果を得るには、ReadWriteMany (RWX) アクセスモードと Block ボリュームモードを使用してください。これは、以下の理由により重要です。

  • ライブマイグレーションには ReadWriteMany (RWX) アクセスモードが必要です。
  • Block ボリュームモードは、Filesystem ボリュームモードよりもパフォーマンスが大幅に優れています。これは、Filesystem ボリュームモードでは、ファイルシステムレイヤーやディスクイメージファイルなどを含め、より多くのストレージレイヤーが使用されるためです。仮想マシンのディスクストレージに、これらのレイヤーは必要ありません。
重要

次の設定の仮想マシンをライブマイグレーションすることはできません。

  • ReadWriteOnce (RWO) アクセスモードのストレージボリューム
  • GPU などのパススルー機能

これらの仮想マシンの evictionStrategy フィールドを None に設定します。None ストラテジーでは、ノードの再起動中に仮想マシンの電源がオフになります。

3.1.3. ライブマイグレーションの要件

  • ReadWriteMany (RWX) アクセスモードの共有ストレージ
  • 十分な RAM およびネットワーク帯域幅

    注記

    ノードのドレインに伴うライブマイグレーションを実行できるように、クラスター内に十分なメモリーリクエスト容量があることを確認する必要があります。以下の計算を使用して、必要な予備のメモリーを把握できます。

    Product of (Maximum number of nodes that can drain in parallel) and (Highest total VM memory request allocations across nodes)
    Copy to Clipboard Toggle word wrap

    クラスターで 並行して実行できるデフォルトの移行数 は 5 です。

  • 仮想マシンがホストモデルの CPU を使用する場合、ノードは仮想マシンのホストモデルの CPU をサポートする必要があります。
  • ライブマイグレーション 専用の Multus ネットワーク を強く推奨します。専用ネットワークは、移行中のテナントワークロードに対するネットワークの飽和状態の影響を最小限に抑えます。

3.1.4. 物理リソースのオーバーヘッド要件

OpenShift Virtualization は、Red Hat OpenShift Service on AWS へのアドオンであり、クラスターの計画時に考慮する必要があるオーバーヘッドが追加されます。各クラスターマシンは、Red Hat OpenShift Service on AWS 要件に加えて、次のオーバーヘッド要件に対応する必要があります。クラスター内の物理リソースを過剰にサブスクライブすると、パフォーマンスに影響する可能性があります。

重要

このドキュメントに記載されている数は、Red Hat のテスト方法およびセットアップに基づいています。これらの数は、独自のセットアップおよび環境に応じて異なります。

メモリーのオーバーヘッド

以下の式を使用して、OpenShift Virtualization のメモリーオーバーヘッドの値を計算します。

クラスターメモリーのオーバーヘッド

Memory overhead per infrastructure node ≈ 150 MiB
Copy to Clipboard Toggle word wrap

Memory overhead per worker node ≈ 360 MiB
Copy to Clipboard Toggle word wrap

さらに、OpenShift Virtualization 環境リソースには、すべてのインフラストラクチャーノードに分散される合計 2179 MiB の RAM が必要です。

仮想マシンのメモリーオーバーヘッド

Memory overhead per virtual machine ≈ (1.002 × requested memory) \
              + 218 MiB \ 
1

              + 8 MiB × (number of vCPUs) \ 
2

              + 16 MiB × (number of graphics devices) \ 
3

              + (additional memory overhead) 
4
Copy to Clipboard Toggle word wrap

1
virt-launcher Pod で実行されるプロセスに必要です。
2
仮想マシンが要求する仮想 CPU の数。
3
仮想マシンが要求する仮想グラフィックスカードの数。
4
追加のメモリーオーバーヘッド:
  • お使いの環境に Single Root I/O Virtualization (SR-IOV) ネットワークデバイスまたは Graphics Processing Unit (GPU) が含まれる場合、それぞれのデバイスに 1 GiB の追加のメモリーオーバーヘッドを割り当てます。
  • Secure Encrypted Virtualization (SEV) が有効な場合は、256 MiB を追加します。
  • Trusted Platform Module (TPM) が有効な場合は、53 MiB を追加します。
CPU オーバーヘッド

以下の式を使用して、OpenShift Virtualization のクラスタープロセッサーのオーバーヘッド要件を計算します。仮想マシンごとの CPU オーバーヘッドは、個々の設定によって異なります。

クラスターの CPU オーバーヘッド

CPU overhead for infrastructure nodes ≈ 4 cores
Copy to Clipboard Toggle word wrap

OpenShift Virtualization は、ロギング、ルーティング、およびモニタリングなどのクラスターレベルのサービスの全体的な使用率を増加させます。このワークロードに対応するには、インフラストラクチャーコンポーネントをホストするノードに、4 つの追加コア (4000 ミリコア) の容量があり、これがそれらのノード間に分散されていることを確認します。

CPU overhead for worker nodes ≈ 2 cores + CPU overhead per virtual machine
Copy to Clipboard Toggle word wrap

仮想マシンをホストする各ワーカーノードには、仮想マシンのワークロードに必要な CPU に加えて、OpenShift Virtualization 管理ワークロード用に 2 つの追加コア (2000 ミリコア) の容量が必要です。

仮想マシンの CPU オーバーヘッド

専用の CPU が要求される場合は、仮想マシン 1 台につき CPU 1 つとなり、クラスターの CPU オーバーヘッド要件に影響が出てきます。それ以外の場合は、仮想マシンに必要な CPU の数に関する特別なルールはありません。

ストレージのオーバーヘッド

以下のガイドラインを使用して、OpenShift Virtualization 環境のストレージオーバーヘッド要件を見積もります。

クラスターストレージオーバーヘッド

Aggregated storage overhead per node ≈ 10 GiB
Copy to Clipboard Toggle word wrap

10 GiB は、OpenShift Virtualization のインストール時にクラスター内の各ノードに関するディスク上のストレージの予想される影響に相当します。

仮想マシンのストレージオーバーヘッド

仮想マシンごとのストレージオーバーヘッドは、仮想マシン内のリソース割り当ての特定の要求により異なります。この要求は、クラスター内の別の場所でホストされるノードまたはストレージリソースの一時ストレージに対するものである可能性があります。OpenShift Virtualization は現在、実行中のコンテナー自体に追加の一時ストレージを割り当てていません。

クラスター管理者が、クラスター内の 10 台の (それぞれ 1 GiB の RAM と 2 つの仮想 CPU の) 仮想マシンをホストする予定の場合、クラスター全体で影響を受けるメモリーは 11.68 GiB になります。クラスターの各ノードについて予想されるディスク上のストレージの影響は 10 GiB で示され、仮想マシンのワークロードをホストするワーカーノードに関する CPU の影響は最小 2 コアで示されます。

3.2. OpenShift Virtualization のインストール

OpenShift Virtualization をインストールして、Red Hat OpenShift Service on AWS クラスターに仮想化機能を追加します。

3.2.1. OpenShift Virtualization Operator のインストール

Red Hat OpenShift Service on AWS Web コンソールまたはコマンドラインを使用して、OpenShift Virtualization Operator をインストールします。

3.2.1.1. Web コンソールを使用した OpenShift Virtualization Operator のインストール

Red Hat OpenShift Service on AWS Web コンソールを使用して OpenShift Virtualization Operator をデプロイできます。

前提条件

  • Red Hat OpenShift Service on AWS 4 をクラスターにインストールする。
  • cluster-admin 権限を持つユーザーとして、Red Hat OpenShift Service on AWS Web コンソールにログインする。
  • ベアメタルコンピュートノードインスタンスタイプに基づいてマシンプールを作成する。詳細は、このセクションの関連情報の「マシンプールの作成」を参照してください。

手順

  1. Administrator パースペクティブから、OperatorsOperatorHub をクリックします。
  2. Filter by keywordVirtualization と入力します。
  3. Red Hat ソースラベルが示されている OpenShift Virtualization Operator タイルを選択します。
  4. Operator の情報を確認してから、Install をクリックします。
  5. Install Operator ページで以下を行います。

    1. 選択可能な Update Channel オプションの一覧から stable を選択します。これにより、Red Hat OpenShift Service on AWS のバージョンと互換性のある OpenShift Virtualization のバージョンが確実にインストールされます。
    2. インストールされた namespace の場合、Operator recommended namespace オプションが選択されていることを確認します。これにより、Operator が必須の openshift-cnv namespace にインストールされます。この namespace は存在しない場合は、自動的に作成されます。

      警告

      OpenShift Virtualization Operator を openshift-cnv 以外の namespace にインストールしようとすると、インストールが失敗します。

    3. Approval Strategy の場合に、stable 更新チャネルで新しいバージョンが利用可能になったときに OpenShift Virtualization が自動更新されるように、デフォルト値である Automatic を選択することを強く推奨します。

      Manual 承認ストラテジーを選択することは可能ですが、クラスターのサポート容易性および機能に対応するリスクが高いため、推奨できません。これらのリスクを完全に理解していて、Automatic を使用できない場合のみ、Manual を選択してください。

      警告

      OpenShift Virtualization は、対応する Red Hat OpenShift Service on AWS バージョンで使用される場合にのみサポートされるため、OpenShift Virtualization の更新が欠落していると、クラスターがサポートされなくなる可能性があります。

  6. Install をクリックし、Operator を openshift-cnv namespace で利用可能にします。
  7. Operator が正常にインストールされたら、Create HyperConverged をクリックします。
  8. オプション: OpenShift Virtualization コンポーネントの Infra および Workloads ノード配置オプションを設定します。
  9. Create をクリックして OpenShift Virtualization を起動します。

検証

  • WorkloadsPods ページに移動して、OpenShift Virtualization Pod がすべて Running 状態になるまでこれらの Pod をモニターします。すべての Pod で Running 状態が表示された後に、OpenShift Virtualization を使用できます。
3.2.1.2. コマンドラインを使用した OpenShift Virtualization Operator のインストール

OpenShift Virtualization カタログをサブスクライブし、クラスターにマニフェストを適用して OpenShift Virtualization Operator をインストールします。

3.2.1.2.1. CLI を使用した OpenShift Virtualization カタログのサブスクライブ

OpenShift Virtualization をインストールする前に、OpenShift Virtualization カタログにサブスクライブする必要があります。サブスクライブにより、openshift-cnv namespace に OpenShift Virtualization Operator へのアクセスが付与されます。

単一マニフェストをクラスターに適用して NamespaceOperatorGroup、および Subscription オブジェクトをサブスクライブし、設定します。

前提条件

  • Red Hat OpenShift Service on AWS 4 をクラスターにインストールする。
  • OpenShift CLI (oc) がインストールされている。
  • cluster-admin 権限を持つユーザーとしてログインしている。

手順

  1. 以下のコマンドを実行して、OpenShift Virtualization に必要な NamespaceOperatorGroup、および Subscription オブジェクトを作成します。

    $ oc apply -f <file name>.yaml
    Copy to Clipboard Toggle word wrap
注記

YAML ファイルで、証明書のローテーションパラメーターを設定 できます。

3.2.1.2.2. CLI を使用した OpenShift Virtualization Operator のデプロイ

oc CLI を使用して OpenShift Virtualization Operator をデプロイすることができます。

前提条件

  • OpenShift CLI (oc) がインストールされている。
  • openshift-cnv namespace の OpenShift Virtualization カタログへのサブスクリプション。
  • cluster-admin 権限を持つユーザーとしてログインしている。
  • ベアメタルコンピュートノードインスタンスタイプに基づいてマシンプールを作成する。

手順

  1. 以下のマニフェストを含む YAML ファイルを作成します。

    apiVersion: hco.kubevirt.io/v1beta1
    kind: HyperConverged
    metadata:
      name: kubevirt-hyperconverged
      namespace: openshift-cnv
    spec:
    Copy to Clipboard Toggle word wrap
  2. 以下のコマンドを実行して OpenShift Virtualization Operator をデプロイします。

    $ oc apply -f <file_name>.yaml
    Copy to Clipboard Toggle word wrap

検証

  • openshift-cnv namespace の Cluster Service Version (CSV) の PHASE を監視して、OpenShift Virtualization が正常にデプロイされたことを確認します。以下のコマンドを実行します。

    $ watch oc get csv -n openshift-cnv
    Copy to Clipboard Toggle word wrap

    以下の出力は、デプロイメントに成功したかどうかを表示します。

    出力例

    NAME                                      DISPLAY                    VERSION   REPLACES   PHASE
    kubevirt-hyperconverged-operator.v4.19.3   OpenShift Virtualization   4.19.3                Succeeded
    Copy to Clipboard Toggle word wrap

3.2.2. 次のステップ

  • ホストパスプロビジョナー は、OpenShift Virtualization 用に設計されたローカルストレージプロビジョナーです。仮想マシンのローカルストレージを設定する必要がある場合、まずホストパスプロビジョナーを有効にする必要があります。

3.3. OpenShift Virtualization のアンインストール

Web コンソールまたはコマンドラインインターフェイス (CLI) を使用して OpenShift Virtualization をアンインストールし、OpenShift Virtualization のワークロード、Operator、およびそのリソースを削除します。

3.3.1. Web コンソールを使用した OpenShift Virtualization のアンインストール

OpenShift Virtualization をアンインストールするには、Web コンソール を使用して次のタスクを実行します。

重要

まず、すべての 仮想マシン仮想マシンインスタンス を削除する必要があります。

ワークロードがクラスターに残っている間は、OpenShift Virtualization をアンインストールできません。

3.3.1.1. HyperConverged カスタムリソースの削除

OpenShift Virtualization をアンインストールするには、最初に HyperConverged カスタムリソース (CR) を削除します。

前提条件

  • cluster-admin パーミッションを持つアカウントを使用して Red Hat OpenShift Service on AWS クラスターにアクセスできる。

手順

  1. OperatorsInstalled Operators ページに移動します。
  2. OpenShift Virtualization Operator を選択します。
  3. OpenShift Virtualization Deployment タブをクリックします。
  4. kubevirt-hyperconverged の横にある Options メニュー kebab をクリックし、Delete HyperConverged を選択します。
  5. 確認ウィンドウで Delete をクリックします。
3.3.1.2. Web コンソールの使用によるクラスターからの Operator の削除

クラスター管理者は Web コンソールを使用して、選択した namespace からインストールされた Operator を削除できます。

前提条件

  • dedicated-admin 権限を持つアカウントを使用して、Red Hat OpenShift Service on AWS にアクセスできる。

手順

  1. OperatorsInstalled Operators ページに移動します。
  2. スクロールするか、キーワードを Filter by name フィールドに入力して、削除する Operator を見つけます。次に、それをクリックします。
  3. Operator Details ページの右側で、Actions 一覧から Uninstall Operator を選択します。

    Uninstall Operator? ダイアログボックスが表示されます。

  4. Uninstall を選択し、Operator、Operator デプロイメント、および Pod を削除します。このアクションの後には、Operator は実行を停止し、更新を受信しなくなります。

    注記

    このアクションは、カスタムリソース定義 (CRD) およびカスタムリソース (CR) など、Operator が管理するリソースは削除されません。Web コンソールおよび継続して実行されるクラスター外のリソースによって有効にされるダッシュボードおよびナビゲーションアイテムには、手動でのクリーンアップが必要になる場合があります。Operator のアンインストール後にこれらを削除するには、Operator CRD を手動で削除する必要があります。

3.3.1.3. Web コンソールを使用した namespace の削除

Red Hat OpenShift Service on AWS Web コンソールを使用して namespace を削除できます。

前提条件

  • cluster-admin 権限を持つアカウントを使用して、Red Hat OpenShift Service on AWS クラスターにアクセスできます。

手順

  1. AdministrationNamespaces に移動します。
  2. namespace の一覧で削除する必要のある namespace を見つけます。
  3. namespace の一覧の右端で、Options メニュー kebab から Delete Namespace を選択します。
  4. Delete Namespace ペインが表示されたら、フィールドから削除する namespace の名前を入力します。
  5. Delete をクリックします。
3.3.1.4. OpenShift Virtualization カスタムリソース定義の削除

Web コンソールを使用して、OpenShift Virtualization カスタムリソース定義 (CRD) を削除できます。

前提条件

  • cluster-admin 権限を持つアカウントを使用して、Red Hat OpenShift Service on AWS クラスターにアクセスできます。

手順

  1. AdministrationCustomResourceDefinitions に移動します。
  2. Label フィルターを選択し、Search フィールドに operators.coreos.com/kubevirt-hyperconverged.openshift-cnv と入力して OpenShift Virtualization CRD を表示します。
  3. 各 CRD の横にある Options メニュー kebab をクリックし、Delete CustomResourceDefinition の削除を選択します。

3.3.2. CLI を使用した OpenShift Virtualization のアンインストール

OpenShift CLI (oc) を使用して OpenShift Virtualization をアンインストールできます。

前提条件

  • cluster-admin 権限を持つアカウントを使用して、Red Hat OpenShift Service on AWS クラスターにアクセスできます。
  • OpenShift CLI (oc) がインストールされている。
  • すべての仮想マシンと仮想マシンインスタンスを削除した。ワークロードがクラスターに残っている間は、OpenShift Virtualization をアンインストールできません。

手順

  1. HyperConverged カスタムリソースを削除します。

    $ oc delete HyperConverged kubevirt-hyperconverged -n openshift-cnv
    Copy to Clipboard Toggle word wrap
  2. OpenShift Virtualization Operator サブスクリプションを削除します。

    $ oc delete subscription kubevirt-hyperconverged -n openshift-cnv
    Copy to Clipboard Toggle word wrap
  3. OpenShift Virtualization ClusterServiceVersion リソースを削除します。

    $ oc delete csv -n openshift-cnv -l operators.coreos.com/kubevirt-hyperconverged.openshift-cnv
    Copy to Clipboard Toggle word wrap
  4. OpenShift Virtualization namespace を削除します。

    $ oc delete namespace openshift-cnv
    Copy to Clipboard Toggle word wrap
  5. dry-run オプションを指定して oc delete crd コマンドを実行し、OpenShift Virtualization カスタムリソース定義 (CRD) を一覧表示します。

    $ oc delete crd --dry-run=client -l operators.coreos.com/kubevirt-hyperconverged.openshift-cnv
    Copy to Clipboard Toggle word wrap

    出力例

    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)
    Copy to Clipboard Toggle word wrap

  6. dry-run オプションを指定せずに oc delete crd コマンドを実行して、CRD を削除します。

    $ oc delete crd -l operators.coreos.com/kubevirt-hyperconverged.openshift-cnv
    Copy to Clipboard Toggle word wrap

第4章 インストール後の設定

4.1. インストール後の設定

通常、次の手順は OpenShift Virtualization のインストール後に実行されます。環境に関連するコンポーネントを設定できます。

4.2. OpenShift Virtualization コンポーネントのノードの指定

ベアメタルノード上の仮想マシンのデフォルトのスケジューリングは適切です。任意で、ノードの配置ルールを設定して、OpenShift Virtualization Operator、ワークロード、およびコントローラーをデプロイするノードを指定できます。

注記

OpenShift Virtualization のインストール後に一部のコンポーネントに対してノード配置ルールを設定できますが、ワークロードに対してノード配置ルールを設定する場合は仮想マシンが存在できません。

4.2.1. OpenShift Virtualization コンポーネントのノード配置ルールについて

ノード配置ルールは次のタスクに使用できます。

  • 仮想マシンは、仮想化ワークロードを対象としたノードにのみデプロイしてください。
  • Operator はインフラストラクチャーノードにのみデプロイメントします。
  • ワークロード間の分離を維持します。

オブジェクトに応じて、以下のルールタイプを 1 つ以上使用できます。

nodeSelector
このフィールドで指定したキーと値のペアでラベル付けされたノードで Pod をスケジュールできるようにします。ノードには、リスト表示されたすべてのペアに一致するラベルがなければなりません。
affinity
より表現的な構文を使用して、ノードと Pod に一致するルールを設定できます。アフィニティーを使用すると、ルールの適用方法に追加のニュアンスを持たせることができます。たとえば、ルールが要件ではなく設定であると指定できます。ルールが優先の場合、ルールが満たされていない場合でも Pod はスケジュールされます。
tolerations
一致する taint を持つノードに Pod をスケジュールすることを許容します。ノードに taint が適用されると、そのノードはその taint を許容する Pod のみを受け入れます。

4.2.2. ノード配置ルールの適用

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

前提条件

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

手順

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

    $ oc edit <resource_type> <resource_name> -n openshift-cnv
    Copy to Clipboard Toggle word wrap
  2. 変更を適用するためにファイルを保存します。

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

SubscriptionHyperConverged、または HostPathProvisioner オブジェクトを編集することで、OpenShift Virtualization コンポーネントのノード配置ルールを指定できます。

4.2.3.1. サブスクリプションオブジェクトノード配置ルールの例

OLM が OpenShift Virtualization Operator をデプロイするノードを指定するには、OpenShift Virtualization のインストール時に Subscription オブジェクトを編集します。

現時点では、Web コンソールを使用して Subscription オブジェクトのノードの配置ルールを設定することはできません。

Subscription オブジェクトは、affinity ノードの配置ルールをサポートしていません。

nodeSelector ルールを使用した Subscription オブジェクトの例

apiVersion: operators.coreos.com/v1alpha1
kind: Subscription
metadata:
  name: hco-operatorhub
  namespace: openshift-cnv
spec:
  source: redhat-operators
  sourceNamespace: openshift-marketplace
  name: kubevirt-hyperconverged
  startingCSV: kubevirt-hyperconverged-operator.v4.19.3
  channel: "stable"
  config:
    nodeSelector:
      example.io/example-infra-key: example-infra-value 
1
Copy to Clipboard Toggle word wrap

1
OLM は、example.io/example-infra-key = example-infra-value というラベルのノードに OpenShift Virtualization Operator をデプロイします。

tolerations ルールを備えた Subscription オブジェクトの例

apiVersion: operators.coreos.com/v1alpha1
kind: Subscription
metadata:
  name: hco-operatorhub
  namespace: openshift-cnv
spec:
  source:  redhat-operators
  sourceNamespace: openshift-marketplace
  name: kubevirt-hyperconverged
  startingCSV: kubevirt-hyperconverged-operator.v4.19.3
  channel: "stable"
  config:
    tolerations:
    - key: "key"
      operator: "Equal"
      value: "virtualization" 
1

      effect: "NoSchedule"
Copy to Clipboard Toggle word wrap

1
OLM は、key = virtualization:NoSchedule taint のラベルが付けられているノードに OpenShift Virtualization Operator をデプロイします。このノードには、一致する toleration を持つ Pod のみがスケジュールされます。
4.2.3.2. HyperConverged オブジェクトノード配置ルールの例

OpenShift Virtualization がそのコンポーネントをデプロイするノードを指定するには、OpenShift Virtualization のインストール時に作成する HyperConverged カスタムリソース (CR) ファイルに nodePlacement オブジェクトを編集できます。

nodeSelector ルールを使用した HyperConverged オブジェクトの例

apiVersion: hco.kubevirt.io/v1beta1
kind: HyperConverged
metadata:
  name: kubevirt-hyperconverged
  namespace: openshift-cnv
spec:
  infra:
    nodePlacement:
      nodeSelector:
        example.io/example-infra-key: example-infra-value 
1

  workloads:
    nodePlacement:
      nodeSelector:
        example.io/example-workloads-key: example-workloads-value 
2
Copy to Clipboard Toggle word wrap

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

affinity ルールを使用した HyperConverged オブジェクトの例

apiVersion: hco.kubevirt.io/v1beta1
kind: HyperConverged
metadata:
  name: kubevirt-hyperconverged
  namespace: openshift-cnv
spec:
  infra:
    nodePlacement:
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
              - key: example.io/example-infra-key
                operator: In
                values:
                - example-infra-value 
1

  workloads:
    nodePlacement:
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
              - key: example.io/example-workloads-key 
2

                operator: In
                values:
                - example-workloads-value
          preferredDuringSchedulingIgnoredDuringExecution:
          - weight: 1
            preference:
              matchExpressions:
              - key: example.io/num-cpus
                operator: Gt
                values:
                - 8 
3
Copy to Clipboard Toggle word wrap

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

tolerations ルールを備えた HyperConverged オブジェクトの例

apiVersion: hco.kubevirt.io/v1beta1
kind: HyperConverged
metadata:
  name: kubevirt-hyperconverged
  namespace: openshift-cnv
spec:
  workloads:
    nodePlacement:
      tolerations: 
1

      - key: "key"
        operator: "Equal"
        value: "virtualization"
        effect: "NoSchedule"
Copy to Clipboard Toggle word wrap

1
OpenShift Virtualization コンポーネント用に予約されているノードには、key = virtualization:NoSchedule taint のラベルが付けられています。予約済みノードには、一致する toleration を持つ Pod のみがスケジュールされます。
4.2.3.3. HostPathProvisioner オブジェクトノード配置ルールの例

HostPathProvisioner オブジェクトは、直接編集することも、Web コンソールを使用して編集することもできます。

警告

ホストパスプロビジョナーと OpenShift Virtualization コンポーネントを同じノード上でスケジュールする必要があります。スケジュールしない場合は、ホストパスプロビジョナーを使用する仮想化 Pod を実行できません。仮想マシンを実行することはできません。

ホストパスプロビジョナー (HPP) ストレージクラスを使用して仮想マシン (VM) をデプロイした後、ノードセレクターを使用して同じノードからホストパスプロビジョナー Pod を削除できます。ただし、少なくともその特定のノードは、まずその変更を元に戻し、仮想マシンを削除しようとする前に Pod が実行されるのを待つ必要があります。

ノード配置ルールを設定するには、ホストパスプロビジョナーのインストール時に作成する HostPathProvisioner オブジェクトの spec.workload フィールドに nodeSelectoraffinity、または tolerations を指定します。

nodeSelector ルールを使用した HostPathProvisioner オブジェクトの例

apiVersion: hostpathprovisioner.kubevirt.io/v1beta1
kind: HostPathProvisioner
metadata:
  name: hostpath-provisioner
spec:
  imagePullPolicy: IfNotPresent
  pathConfig:
    path: "</path/to/backing/directory>"
    useNamingPrefix: false
  workload:
    nodeSelector:
      example.io/example-workloads-key: example-workloads-value 
1
Copy to Clipboard Toggle word wrap

1
ワークロードは、example.io/example-workloads-key = example-workloads-value というラベルの付いたノードに配置されます。

4.3. インストール後のネットワーク設定

デフォルトでは、OpenShift Virtualization は単一の内部 Pod ネットワークとともにインストールされます。

4.3.1. ネットワーキングオペレーターのインストール

4.3.2. Linux ブリッジネットワークの設定

Kubernetes NMState Operator をインストールしたら、ライブマイグレーションまたは仮想マシン (VM) への外部アクセス用に Linux ブリッジネットワークを設定できます。

4.3.2.1. Linux ブリッジ NNCP の作成

Linux ブリッジネットワークの NodeNetworkConfigurationPolicy (NNCP) マニフェストを作成できます。

前提条件

  • Kubernetes NMState Operator がインストールされている。

手順

  • NodeNetworkConfigurationPolicy マニフェストを作成します。この例には、独自の情報で置き換える必要のあるサンプルの値が含まれます。

    apiVersion: nmstate.io/v1
    kind: NodeNetworkConfigurationPolicy
    metadata:
      name: br1-eth1-policy 
    1
    
    spec:
      desiredState:
        interfaces:
          - name: br1 
    2
    
            description: Linux bridge with eth1 as a port 
    3
    
            type: linux-bridge 
    4
    
            state: up 
    5
    
            ipv4:
              enabled: false 
    6
    
            bridge:
              options:
                stp:
                  enabled: false 
    7
    
              port:
                - name: eth1 
    8
    Copy to Clipboard Toggle word wrap
    1
    ポリシーの名前。
    2
    インターフェイスの名前。
    3
    オプション: 人間が判読できるインターフェイスの説明。
    4
    インターフェイスのタイプ。この例では、ブリッジを作成します。
    5
    作成後のインターフェイスの要求された状態。
    6
    この例では IPv4 を無効にします。
    7
    この例では STP を無効にします。
    8
    ブリッジが接続されているノード NIC。
注記

IBM Z® で OSA を使用する Linux ブリッジ用の NNCP マニフェストを作成するには、NodeNetworkConfigurationPolicy マニフェストで rx-vlan-filterfalse に設定して VLAN フィルタリングを無効にする必要があります。

または、ノードへの SSH アクセス権がある場合は、次のコマンドを実行して VLAN フィルタリングを無効にできます。

$ sudo ethtool -K <osa-interface-name> rxvlan off
Copy to Clipboard Toggle word wrap
4.3.2.2. Web コンソールを使用した Linux ブリッジ NAD の作成

Red Hat OpenShift Service on AWS Web コンソールを使用して、ネットワークアタッチメント定義 (NAD) を作成し、Pod と仮想マシンにレイヤー 2 ネットワークを提供できます。

Linux ブリッジネットワーク接続定義は、仮想マシンを VLAN に接続するための最も効率的な方法です。

警告

仮想マシンのネットワークアタッチメント定義での IP アドレス管理 (IPAM) の設定はサポートされていません。

手順

  1. Web コンソールで、NetworkingNetworkAttachmentDefinitions をクリックします。
  2. Create Network Attachment Definition をクリックします。

    注記

    Network Attachment Definition は Pod または仮想マシンと同じ namespace にある必要があります。

  3. 一意の Name およびオプションの Description を入力します。
  4. Network Type リストから CNV Linux bridge を選択します。
  5. Bridge Name フィールドにブリッジの名前を入力します。
  6. オプション: リソースに VLAN ID が設定されている場合、VLAN Tag Number フィールドに ID 番号を入力します。

    注記

    IBM Z® 上の OSA インターフェイスは VLAN フィルタリングをサポートしていないため、VLAN タグ付きのトラフィックは破棄されます。OSA インターフェイスでは VLAN タグを使用する NAD を使用しないでください。

  7. オプション: MAC Spoof Check を選択して、MAC スプーフフィルタリングを有効にします。この機能により、Pod を終了するための MAC アドレスを 1 つだけ許可することで、MAC スプーフィング攻撃に対してセキュリティーを確保します。
  8. Create をクリックします。

4.3.3. ライブマイグレーション用のネットワークの設定

Linux ブリッジネットワークを設定した後、ライブマイグレーション用の専用ネットワークを設定できます。専用ネットワークは、ライブマイグレーション中のテナントワークロードに対するネットワークの飽和状態の影響を最小限に抑えます。

4.3.3.1. ライブマイグレーション用の専用セカンダリーネットワークの設定

ライブマイグレーション用に専用のセカンダリーネットワークを設定するには、まず CLI を使用してブリッジ Network Attachment Definition (NAD) を作成する必要があります。次に、NetworkAttachmentDefinition オブジェクトの名前を HyperConverged カスタムリソース (CR) に追加します。

前提条件

  • OpenShift CLI (oc) がインストールされている。
  • cluster-admin ロールを持つユーザーとしてクラスターにログインしている。
  • 各ノードには少なくとも 2 つのネットワークインターフェイスカード (NIC) があります。
  • ライブマイグレーション用の NIC は同じ VLAN に接続されます。

手順

  1. 次の例に従って、NetworkAttachmentDefinition マニフェストを作成します。

    設定ファイルのサンプル

    apiVersion: "k8s.cni.cncf.io/v1"
    kind: NetworkAttachmentDefinition
    metadata:
      name: my-secondary-network 
    1
    
      namespace: openshift-cnv
    spec:
      config: '{
        "cniVersion": "0.3.1",
        "name": "migration-bridge",
        "type": "macvlan",
        "master": "eth1", 
    2
    
        "mode": "bridge",
        "ipam": {
          "type": "whereabouts", 
    3
    
          "range": "10.200.5.0/24" 
    4
    
        }
      }'
    Copy to Clipboard Toggle word wrap

    1
    NetworkAttachmentDefinition オブジェクトの名前を指定します。
    2
    ライブマイグレーションに使用する NIC の名前を指定します。
    3
    NAD にネットワークを提供する CNI プラグインの名前を指定します。
    4
    セカンダリーネットワークの IP アドレス範囲を指定します。この範囲は、メインネットワークの IP アドレスと重複してはなりません。
  2. 以下のコマンドを実行して、デフォルトのエディターで HyperConverged CR を開きます。

    $ oc edit hyperconverged kubevirt-hyperconverged -n openshift-cnv
    Copy to Clipboard Toggle word wrap
  3. NetworkAttachmentDefinition オブジェクトの名前を HyperConverged CR の spec.liveMigrationConfig スタンザに追加します。

    HyperConverged マニフェストの例

    apiVersion: hco.kubevirt.io/v1beta1
    kind: HyperConverged
    metadata:
      name: kubevirt-hyperconverged
      namespace: openshift-cnv
    spec:
      liveMigrationConfig:
        completionTimeoutPerGiB: 800
        network: <network> 
    1
    
        parallelMigrationsPerCluster: 5
        parallelOutboundMigrationsPerNode: 2
        progressTimeout: 150
    # ...
    Copy to Clipboard Toggle word wrap

    1
    ライブマイグレーションに使用される Multus NetworkAttachmentDefinition オブジェクトの名前を指定します。
  4. 変更を保存し、エディターを終了します。virt-handler Pod が再起動し、セカンダリーネットワークに接続されます。

検証

  • 仮想マシンが実行されるノードがメンテナンスモードに切り替えられると、仮想マシンは自動的にクラスター内の別のノードに移行します。仮想マシンインスタンス (VMI) メタデータのターゲット IP アドレスを確認して、デフォルトの Pod ネットワークではなく、セカンダリーネットワーク上で移行が発生したことを確認できます。

    $ oc get vmi <vmi_name> -o jsonpath='{.status.migrationState.targetNodeAddress}'
    Copy to Clipboard Toggle word wrap
4.3.3.2. Web コンソールを使用して専用ネットワークを選択する

Red Hat OpenShift Service on AWS Web コンソールを使用して、ライブマイグレーション用の専用ネットワークを選択できます。

前提条件

  • ライブマイグレーション用に Multus ネットワークが設定されている。
  • ネットワークの Network Attachment Definition を作成している。

手順

  1. Red Hat OpenShift Service on AWS Web コンソールで Virtualization > Overview に移動します。
  2. Settings タブをクリックし、Live migration をクリックします。
  3. Live migration network リストからネットワークを選択します。

4.3.4. Web コンソールを使用したロードバランサーサービスの作成の有効化

Red Hat OpenShift Service on AWS Web コンソールを使用して、仮想マシン (VM) のロードバランサーサービスの作成を有効にできます。

前提条件

  • クラスターのロードバランサーが設定されました。
  • cluster-admin ロールを持つユーザーとしてログインしている。
  • ネットワークの Network Attachment Definition を作成している。

手順

  1. VirtualizationOverview に移動します。
  2. Settings タブで、Cluster をクリックします。
  3. Expand General settingsSSH configuration を展開します。
  4. SSH over LoadBalancer service をオンに設定します。

4.4. インストール後のストレージ設定

次のストレージ設定タスクは必須です。

  • ストレージプロバイダーが CDI によって認識されない場合は、storage profiles を設定する必要があります。ストレージプロファイルは、関連付けられたストレージクラスに基づいて推奨されるストレージ設定を提供します。

オプション: ホストパスプロビジョナー (HPP) を使用して、ローカルストレージを設定できます。

Containerized Data Importer (CDI)、データボリューム、自動ブートソース更新の設定など、その他のオプションは、ストレージ設定の概要 を参照してください。

4.4.1. HPP を使用したローカルストレージの設定

OpenShift Virtualization Operator のインストール時に、Hostpath Provisioner (HPP) Operator は自動的にインストールされます。HPP Operator は HPP プロビジョナーを作成します。

HPP は、OpenShift Virtualization 用に設計されたローカルストレージプロビジョナーです。HPP を使用するには、HPP カスタムリソース (CR) を作成する必要があります。

重要

HPP ストレージプールは、オペレーティングシステムと同じパーティションにあってはなりません。そうしないと、ストレージプールがオペレーティングシステムパーティションをいっぱいにする可能性があります。オペレーティングシステムのパーティションがいっぱいになると、パフォーマンスに影響が生じたり、ノードが不安定になったり使用できなくなったりする可能性があります。

4.4.1.1. storagePools スタンザを使用した CSI ドライバーのストレージクラスの作成

ホストパスプロビジョナー (HPP) を使用するには、コンテナーストレージインターフェイス (CSI) ドライバーに関連するストレージクラスを作成する必要があります。

ストレージクラスの作成時に、ストレージクラスに属する永続ボリューム (PV) の動的プロビジョニングに影響するパラメーターを設定します。StorageClass オブジェクトの作成後には、このオブジェクトのパラメーターを更新できません。

注記

仮想マシンは、ローカル PV に基づくデータボリュームを使用します。ローカル PV は特定のノードにバインドされます。ディスクイメージは仮想マシンで使用するために準備されますが、ローカルストレージ PV がすでに固定されたノードに仮想マシンをスケジュールすることができない可能性があります。

この問題を解決するには、Kubernetes Pod スケジューラーを使用して、永続ボリューム要求 (PVC) を正しいノードの PV にバインドします。volumeBindingMode パラメーターが WaitForFirstConsumer に設定された StorageClass 値を使用することにより、PV のバインディングおよびプロビジョニングは、Pod が PVC を使用して作成されるまで遅延します。

手順

  1. storageclass_csi.yaml ファイルを作成して、ストレージクラスを定義します。

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: hostpath-csi
    provisioner: kubevirt.io.hostpath-provisioner
    reclaimPolicy: Delete 
    1
    
    volumeBindingMode: WaitForFirstConsumer 
    2
    
    parameters:
      storagePool: my-storage-pool 
    3
    Copy to Clipboard Toggle word wrap
    1
    reclaimPolicy には、Delete および Retain の 2 つの値があります。値を指定しない場合、デフォルト値は Delete です。
    2
    volumeBindingMode パラメーターは、動的プロビジョニングとボリュームのバインディングが実行されるタイミングを決定します。WaitForFirstConsumer を指定して、永続ボリューム要求 (PVC) を使用する Pod が作成されるまで PV のバインディングおよびプロビジョニングを遅延させます。これにより、PV が Pod のスケジュール要件を満たすようになります。
    3
    HPP CR で定義されているストレージプールの名前を指定します。
  2. ファイルを保存して終了します。
  3. 次のコマンドを実行して、StorageClass オブジェクトを作成します。

    $ oc create -f storageclass_csi.yaml
    Copy to Clipboard Toggle word wrap

4.5. 証明書ローテーションの設定

証明書ローテーションパラメーターを設定して、既存の証明書を置き換えます。

4.5.1. 証明書ローテーションの設定

これは、Web コンソールでの OpenShift Virtualization のインストール時に、または HyperConverged カスタムリソース (CR) でインストール後に実行することができます。

前提条件

  • OpenShift CLI (oc) がインストールされている。

手順

  1. 以下のコマンドを実行して HyperConverged CR を開きます。

    $ oc edit hyperconverged kubevirt-hyperconverged -n openshift-cnv
    Copy to Clipboard Toggle word wrap
  2. 以下の例のように spec.certConfig フィールドを編集します。システムのオーバーロードを避けるには、すべての値が 10 分以上であることを確認します。golang ParseDuration 形式 に準拠する文字列として、すべての値を表現します。

    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
    Copy to Clipboard Toggle word wrap
    1
    ca.renewBefore の値は ca.duration の値以下である必要があります。
    2
    server.duration の値は ca.duration の値以下である必要があります。
    3
    server.renewBefore の値は server.duration の値以下である必要があります。
  3. YAML ファイルをクラスターに適用します。

4.5.2. 証明書ローテーションパラメーターのトラブルシューティング

1 つ以上の certConfig 値を削除すると、デフォルト値が以下のいずれかの条件と競合する場合を除き、デフォルト値に戻ります。

  • ca.renewBefore の値は ca.duration の値以下である必要があります。
  • server.duration の値は ca.duration の値以下である必要があります。
  • server.renewBefore の値は server.duration の値以下である必要があります。

デフォルト値がこれらの条件と競合すると、エラーが発生します。

以下の例で server.duration 値を削除すると、デフォルト値の 24h0m0sca.duration の値よりも大きくなり、指定された条件と競合します。

certConfig:
   ca:
     duration: 4h0m0s
     renewBefore: 1h0m0s
   server:
     duration: 4h0m0s
     renewBefore: 4h0m0s
Copy to Clipboard Toggle word wrap

これにより、以下のエラーメッセージが表示されます。

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
Copy to Clipboard Toggle word wrap

エラーメッセージには、最初の競合のみが記載されます。続行する前に、すべての certConfig の値を確認します。

第5章 更新

5.1. OpenShift Virtualization の更新

OpenShift Virtualization を最新の状態に保ち、Red Hat OpenShift Service on AWS との互換性を維持する方法について説明します。

5.1.1. OpenShift Virtualization の更新について

OpenShift Virtualization をインストールするときに、更新チャネルと承認ストラテジーを選択します。更新チャネルによって、OpenShift Virtualization が更新されるバージョンが決まります。承認ストラテジー設定により、更新が自動的に行われるか、手動の承認が必要かどうかが決まります。どちらの設定もサポート性に影響を与える可能性があります。

5.1.1.2. 予想されること
  • 更新の完了までにかかる時間は、ネットワーク接続によって異なります。ほとんどの自動更新は 15 分以内に完了します。
  • OpenShift Virtualization を更新しても、ネットワーク接続が中断されることはありません。
  • データボリュームとそれに関連付けられた永続ボリューム要求は、更新中に保持されます。
重要

AWS Elastic Block Store (EBS) ストレージを使用する仮想マシンを実行している場合、ライブマイグレーションができないため、Red Hat OpenShift Service on AWS クラスター更新がブロックされる可能性があります。

回避策として、仮想マシンを再設定し、クラスターの更新時にそれらの電源を自動的にオフになるようにできます。evictionStrategy フィールドを None に、runStrategy フィールドを Always に設定します。

5.1.1.3. 更新の仕組み
  • Operator Lifecycle Manager(OLM) は OpenShift Virtualization Operator のライフサイクルを管理します。Red Hat OpenShift Service on AWS のインストール中にデプロイされる Marketplace Operator により、クラスターで外部 Operators を使用できるようになります。
  • OLM は、OpenShift Virtualization の z-stream およびマイナーバージョンの更新を提供します。Red Hat OpenShift Service on AWS を次のマイナーバージョンに更新すると、マイナーバージョンの更新が利用可能になります。最初に Red Hat OpenShift Service on AWS を更新しない限り、OpenShift Virtualization を次のマイナーバージョンに更新できません。
5.1.1.4. RHEL 9 の互換性

OpenShift Virtualization 4.19 は、Red Hat Enterprise Linux (RHEL) 9 をベースにしています。標準の OpenShift Virtualization 更新手順に従って、RHEL 8 をベースとするバージョンから OpenShift Virtualization 4.19 に更新できます。追加の手順は必要ありません。

以前のバージョンと同様に、実行中のワークロードを中断することなく更新を実行できます。OpenShift Virtualization 4.19 では、RHEL 8 ノードから RHEL 9 ノードへのライブマイグレーションがサポートされています。

5.1.1.4.1. RHEL 9 マシンタイプ

OpenShift Virtualization に含まれるすべての仮想マシンテンプレートは、デフォルトで RHEL 9 マシンタイプ machineType: pc-q35-rhel9.<y>.0 を使用するようになりました。この場合の <y> は RHEL 9 の最新のマイナーバージョンに対応する 1 桁の数字です。たとえば、RHEL 9.2 の場合は pc-q35-rhel9.2.0 の値が使用されます。

OpenShift Virtualization を更新しても、既存仮想マシンの machineType 値は変更されません。これらの仮想マシンは、引き続き更新前と同様に機能します。RHEL 9 での改良を反映するために、オプションで仮想マシンのマシンタイプを変更できます。

重要

仮想マシンの machineType 値を変更する前に、仮想マシンをシャットダウンする必要があります。

5.1.2. 更新ステータスの監視

OpenShift Virtualization Operator の更新のステータスをモニターするには、クラスターサービスバージョン (CSV) PHASE を監視します。Web コンソールを使用するか、ここに提供されているコマンドを実行して CSV の状態をモニターすることもできます。

注記

PHASE および状態の値は利用可能な情報に基づく近似値になります。

前提条件

  • cluster-admin ロールを持つユーザーとしてクラスターにログインしている。
  • OpenShift CLI (oc) がインストールされている。

手順

  1. 以下のコマンドを実行します。

    $ oc get csv -n openshift-cnv
    Copy to Clipboard Toggle word wrap
  2. 出力を確認し、PHASE フィールドをチェックします。以下に例を示します。

    出力例

    VERSION  REPLACES                                        PHASE
    4.9.0    kubevirt-hyperconverged-operator.v4.8.2         Installing
    4.9.0    kubevirt-hyperconverged-operator.v4.9.0         Replacing
    Copy to Clipboard Toggle word wrap

  3. オプション: 以下のコマンドを実行して、すべての OpenShift Virtualization コンポーネントの状態の集約されたステータスをモニターします。

    $ oc get hyperconverged kubevirt-hyperconverged -n openshift-cnv \
      -o=jsonpath='{range .status.conditions[*]}{.type}{"\t"}{.status}{"\t"}{.message}{"\n"}{end}'
    Copy to Clipboard Toggle word wrap

    アップグレードが成功すると、以下の出力が得られます。

    出力例

    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
    Copy to Clipboard Toggle word wrap

5.1.3. 仮想マシンワークロードの更新

OpenShift Virtualization を更新すると、ライブマイグレーションをサポートしている場合には libvirtvirt-launcher、および qemu などの仮想マシンのワークロードが自動的に更新されます。

注記

各仮想マシンには、仮想マシンインスタンス (VMI) を実行する virt-launcher Pod があります。virt-launcher Pod は、仮想マシン (VM) のプロセスを管理するために使用される libvirt のインスタンスを実行します。

HyperConverged カスタムリソース (CR) の spec.workloadUpdateStrategy スタンザを編集して、ワークロードの更新方法を設定できます。ワークロードの更新方法として、LiveMigrateEvict の 2 つが利用可能です。

Evict メソッドは VMI Pod をシャットダウンするため、デフォルトでは LiveMigrate 更新ストラテジーのみが有効になっています。

LiveMigrate が有効な唯一の更新ストラテジーである場合:

  • ライブマイグレーションをサポートする VMI は更新プロセス時に移行されます。VM ゲストは、更新されたコンポーネントが有効になっている新しい Pod に移動します。
  • ライブマイグレーションをサポートしない VMI は中断または更新されません。

    • VMI に LiveMigrate エビクションストラテジーがあるが、ライブマイグレーションをサポートしていない場合、VMI は更新されません。

LiveMigrateEvict の両方を有効にした場合:

  • ライブマイグレーションをサポートする 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 回の試行のみがバッファーに保持されます。これにより、デバッグ用の情報を保持しながら、移行オブジェクトがシステムに蓄積されるのを防ぎます。

5.1.3.1. ワークロードの更新方法の設定

HyperConverged カスタムリソース (CR) を編集することにより、ワークロードの更新方法を設定できます。

前提条件

  • ライブマイグレーションを更新方法として使用するには、まずクラスターでライブマイグレーションを有効にする必要があります。

    注記

    VirtualMachineInstance CR に evictionStrategy: LiveMigrate が含まれており、仮想マシンインスタンス (VMI) がライブマイグレーションをサポートしない場合には、VMI は更新されません。

  • OpenShift CLI (oc) がインストールされている。

手順

  1. デフォルトエディターで HyperConverged CR を作成するには、以下のコマンドを実行します。

    $ oc edit hyperconverged kubevirt-hyperconverged -n openshift-cnv
    Copy to Clipboard Toggle word wrap
  2. 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
    
    # ...
    Copy to Clipboard Toggle word wrap
    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 スタンザを編集することにより、ライブマイグレーションの制限とタイムアウトを設定できます。

  3. 変更を適用するには、エディターを保存し、終了します。
5.1.3.2. 古くなった仮想マシンワークロードの表示

CLI を使用して、古くなった仮想マシン (VM) ワークロードのリストを表示できます。

注記

クラスターに以前の仮想化 Pod がある場合には、OutdatedVirtualMachineInstanceWorkloads アラートが実行されます。

前提条件

  • OpenShift CLI (oc) がインストールされている。

手順

  • 以前の仮想マシンインスタンス (VMI) の一覧を表示するには、以下のコマンドを実行します。

    $ oc get vmi -l kubevirt.io/outdatedLauncherImage --all-namespaces
    Copy to Clipboard Toggle word wrap
注記

VMI が自動的に更新されるようにするには、ワークロードの更新を設定します。

5.1.4. 高度なオプション

ほとんどの OpenShift Virtualization インストールでは、stable リリースチャネルと Automatic 承認ストラテジーが推奨されます。リスクを理解している場合にのみ、他の設定を使用してください。

5.1.4.1. 更新設定の変更

Web コンソールを使用して、OpenShift Virtualization Operator サブスクリプションの更新チャネルと承認ストラテジーを変更できます。

前提条件

  • OpenShift Virtualization Operator がインストールされている。
  • 管理者権限がある。

手順

  1. OperatorsInstalled Operators をクリックします。
  2. リストから OpenShift Virtualization を選択します。
  3. Subscription タブをクリックします。
  4. Subscription details セクションで、変更する設定をクリックします。たとえば、承認ストラテジーを Manual から Automatic に変更するには、Manual をクリックします。
  5. 開いたウィンドウで、新しい更新チャネルまたは承認ストラテジーを選択します。
  6. Save をクリックします。
5.1.4.2. 手動承認ストラテジー

Manual 承認ストラテジーを使用する場合は、すべての保留中の更新を手動で承認する必要があります。Red Hat OpenShift Service on AWS と OpenShift Virtualization の更新が同期していない場合、クラスターはサポートされなくなります。クラスターのサポート性と機能性を危険にさらさないようにするには、Automatic 承認ストラテジーを使用します。

Manual 承認ストラテジーを使用する必要がある場合は、保留中の Operator 更新が利用可能になり次第承認し、サポート可能なクラスターを維持します。

5.1.4.3. 保留中の Operator 更新の手動による承認

インストールされた Operator のサブスクリプションの承認ストラテジーが Manual に設定されている場合、新規の更新が現在の更新チャネルにリリースされると、インストールを開始する前に更新を手動で承認する必要があります。

前提条件

  • Operator Lifecycle Manager (OLM) を使用して以前にインストールされている Operator。

手順

  1. Red Hat OpenShift Service on AWS Web コンソールの Administrator パースペクティブで、Operators → Installed Operators に移動します。
  2. 更新が保留中の Operator は Upgrade available のステータスを表示します。更新する Operator の名前をクリックします。
  3. Subscription タブをクリックします。承認が必要な更新は、Upgrade status の横に表示されます。たとえば、1 requires approval が表示される可能性があります。
  4. 1 requires approval をクリックしてから、Preview Install Plan をクリックします。
  5. 更新に利用可能なリソースとして一覧表示されているリソースを確認します。問題がなければ、Approve をクリックします。
  6. Operators → Installed Operators ページに戻り、更新の進捗をモニターします。完了時に、ステータスは Succeeded および Up to date に変更されます。

5.1.5. 早期アクセスリリース

ご使用の OpenShift Virtualization バージョンの candidate 更新チャネルをサブスクライブすると、開発中のビルドにアクセスできます。早期アクセスリリースは、Red Hat によって完全にテストされておらず、サポート対象でもありませんが、そのバージョン用に開発している機能やバグ修正をテストするために、非実稼働クラスターで使用することができます。

stable チャネルは実稼働システムに適しています。このチャネルは基盤となる Red Hat OpenShift Service on AWS のバージョンと一致し、完全にテストされています。Operator Hub で stable チャネルと candidate チャネルを切り替えることができます。ただし、candidate チャネルリリースから stable チャネルリリースへの更新は Red Hat によってテストされていません。

一部の candidate リリースは stable チャネルに昇格されます。ただし、candidate チャネルにのみ存在するリリースには、一般提供 (GA) されるすべての機能が含まれていない可能性があります。また、candidate ビルドの一部の機能は GA の前に削除される可能性があります。さらに、candidate リリースには、後の GA リリースへの更新パスがない場合があります。

重要

candidate チャネルは、クラスターの破棄と再作成が許容されるテスト目的にのみ適しています。

第6章 仮想マシンの作成

6.1. インスタンスタイプからの仮想マシンの作成

Red Hat OpenShift Service on AWS Web コンソールまたは CLI を使用して仮想マシンを作成する場合でも、インスタンスタイプを使用することで仮想マシン (仮想マシン) の作成を簡素化できます。

注記

Red Hat OpenShift Service on AWS クラスターでは、OpenShift Virtualization 4.15 のインスタンスタイプから仮想マシンを作成することがサポートされています。OpenShift Virtualization 4.14 では、インスタンスタイプからの仮想マシンの作成はテクノロジープレビュー機能であり、Red Hat OpenShift Service on AWS クラスターでの使用はサポートされていません。

6.1.1. インスタンスタイプについて

インスタンスタイプは、新しい仮想マシンに適用するリソースと特性を定義できる再利用可能なオブジェクトです。カスタムインスタンスタイプを定義したり、OpenShift Virtualization のインストール時に含まれるさまざまなインスタンスタイプを使用したりできます。

新しいインスタンスタイプを作成するには、まず手動で、または virtctl CLI ツールを使用してマニフェストを作成する必要があります。次に、マニフェストをクラスターに適用してインスタンスタイプオブジェクトを作成します。

OpenShift Virtualization は、インスタンスタイプを設定するための 2 つの CRD を提供します。

  • namespace 付きのオブジェクト: VirtualMachineInstancetype
  • クラスター全体のオブジェクト: VirtualMachineClusterInstancetype

これらのオブジェクトは同じ VirtualMachineInstancetypeSpec を使用します。

6.1.1.1. 必須の属性

インスタンスタイプを設定するときは、cpu および memory 属性を定義する必要があります。その他の属性はオプションです。

注記

インスタンスタイプから仮想マシンを作成する場合は、インスタンスタイプで定義されているパラメーターをオーバーライドすることはできません。

インスタンスタイプには定義された CPU およびメモリー属性が必要であるため、OpenShift Virtualization は、インスタンスタイプから仮想マシンを作成するときに、これらのリソースに対する追加の要求を常に拒否します。

インスタンスタイプマニフェストを手動で作成できます。以下に例を示します。

必須フィールドを含む YAML ファイルの例

apiVersion: instancetype.kubevirt.io/v1beta1
kind: VirtualMachineInstancetype
metadata:
  name: example-instancetype
spec:
  cpu:
    guest: 1 
1

  memory:
    guest: 128Mi 
2
Copy to Clipboard Toggle word wrap

1
必須。ゲストに割り当てる仮想 CPU の数を指定します。
2
必須。ゲストに割り当てるメモリーの量を指定します。

virtctl CLI ユーティリティーを使用してインスタンスタイプマニフェストを作成できます。以下に例を示します。

必須フィールドを含む virtctl コマンドの例

$ virtctl create instancetype --cpu 2 --memory 256Mi
Copy to Clipboard Toggle word wrap

ここでは、以下のようになります。

--cpu <value>
ゲストに割り当てる仮想 CPU の数を指定します。必須。
--memory <value>
ゲストに割り当てるメモリーの量を指定します。必須。
ヒント

次のコマンドを実行すると、新しいマニフェストからオブジェクトをすぐに作成できます。

$ virtctl create instancetype --cpu 2 --memory 256Mi | oc apply -f -
Copy to Clipboard Toggle word wrap
6.1.1.2. オプション属性

必須の cpu および memory 属性に加えて、VirtualMachineInstancetypeSpec に次のオプション属性を含めることができます。

annotations
仮想マシンに適用するアノテーションをリスト表示します。
gpus
パススルー用の vGPU をリスト表示します。
hostDevices
パススルー用のホストデバイスをリスト表示します。
ioThreadsPolicy
専用ディスクアクセスを管理するための IO スレッドポリシーを定義します。
launchSecurity
セキュア暗号化仮想化 (SEV) を設定します。
nodeSelector
この仮想マシンがスケジュールされているノードを制御するためのノードセレクターを指定します。
schedulerName
デフォルトのスケジューラーの代わりに、この仮想マシンに使用するカスタムスケジューラーを定義します。

6.1.2. 定義済みのインスタンスタイプ

OpenShift Virtualization には、common-instancetypes と呼ばれる事前定義されたインスタンスタイプのセットが含まれています。特定のワークロードに特化したものもあれば、ワークロードに依存しないものもあります。

これらのインスタンスタイプリソースは、シリーズ、バージョン、サイズに応じて名前が付けられます。サイズの値は . 区切り文字に続き、範囲は nano から 8xlarge です。

Expand
表6.1 common-instancetypes シリーズの比較
ユースケースシリーズ特徴仮想 CPU とメモリーの比率リソースの例

ネットワーク

N

  • HugePages
  • 専用 CPU
  • 分離されたエミュレータースレッド
  • DPDK ワークロードを実行できるノードが必要

1:2

n1.medium
  • 仮想 CPU 4 個
  • 4GiB メモリー

過剰コミットメント

O

  • 過剰にコミットされたメモリー
  • バースト可能な CPU パフォーマンス

1:4

o1.small
  • 仮想 CPU 1 個
  • 2GiB メモリー

コンピュート専用

CX

  • HugePages
  • 専用 CPU
  • 分離されたエミュレータースレッド
  • vNUMA

1:2

cx1.2xlarge
  • 仮想 CPU 8 個
  • 16GiB メモリー

一般的用途

U

  • バースト可能な CPU パフォーマンス

1:4

u1.medium
  • 仮想 CPU 1 個
  • 4GiB メモリー

メモリー集約型

M

  • HugePages
  • バースト可能な CPU パフォーマンス

1:8

m1.large
  • 仮想 CPU 2 個
  • 16GiB メモリー

6.1.3. インスタンスタイプまたは設定の指定

インスタンスタイプまたは優先度、またはその両方を指定して、複数の仮想マシンで再利用するためのワークロードサイジングとランタイム特性を定義できます。

6.1.3.1. フラグを使用したインスタンスタイプと設定の指定

フラグを使用して、インスタンスタイプおよび設定を指定します。

前提条件

  • クラスターにインスタンスタイプ、プリファレンス、またはその両方がある。

手順

  1. 仮想マシンを作成するときにインスタンスタイプを指定するには、--instancetype フラグを使用します。設定を指定するには、--preference フラグを使用します。次の例には両方のフラグが含まれています。

    $ virtctl create vm --instancetype <my_instancetype> --preference <my_preference>
    Copy to Clipboard Toggle word wrap
  2. オプション: namespace 付きのインスタンスタイプまたは設定を指定するには、--instancetype または --preference フラグコマンドに渡される値に kind を含めます。namespace 付きのインスタンスタイプまたは設定は、仮想マシンを作成するのと同じ namespace に存在する必要があります。次の例には、namespace 付きインスタンスタイプと namespace 付き設定のフラグが含まれています。

    $ virtctl create vm --instancetype virtualmachineinstancetype/<my_instancetype> --preference virtualmachinepreference/<my_preference>
    Copy to Clipboard Toggle word wrap
6.1.3.2. インスタンスタイプまたは設定の推測

インスタンスタイプの推論、設定、またはその両方がデフォルトで有効になっており、inferFromVolume 属性の inferFromVolumeFailure ポリシーは Ignore に設定されています。ブートボリュームから推測する場合、エラーは無視され、インスタンスタイプと設定が未設定のままで仮想マシンが作成されます。

ただし、フラグが適用されると、inferFromVolumeFailure ポリシーはデフォルトで Reject に設定されます。ブートボリュームから推測する場合、エラーが発生すると、その仮想マシンの作成が拒否されます。

--infer-instancetype フラグと --infer-preference フラグを使用すると、仮想マシンのワークロードのサイズ設定と実行時特性を定義するために使用するインスタンスタイプ、設定、またはその両方を推測できます。

前提条件

  • virtctl ツールがインストールされている。

手順

  • 仮想マシンの起動に使用されるボリュームから明示的にインスタンスタイプを推測するには、--infer-instancetype フラグを使用します。設定を明示的に推測するには、--infer-preference フラグを使用します。次のコマンドには両方のフラグが含まれます。

    $ virtctl create vm --volume-import type:pvc,src:my-ns/my-pvc --infer-instancetype --infer-preference
    Copy to Clipboard Toggle word wrap
  • 仮想マシンのブートに使用されるボリューム以外のボリュームからインスタンスタイプまたは設定を推測するには、--infer-instancetype-from および --infer-preference-from フラグを使用して、仮想マシンのボリュームのいずれかを指定します。以下の例では、仮想マシンは volume-a から起動しますが、volume-b からインスタンスタイプと設定を推測しています。

    $ virtctl create vm \
      --volume-import=type:pvc,src:my-ns/my-pvc-a,name:volume-a \
      --volume-import=type:pvc,src:my-ns/my-pvc-b,name:volume-b \
      --infer-instancetype-from volume-b \
      --infer-preference-from volume-b
    Copy to Clipboard Toggle word wrap
6.1.3.3. inferFromVolume ラベルの設定

PVC、データソース、またはデータボリュームで次のラベルを使用して、ボリュームから起動するときに使用するインスタンスタイプ、設定、またはその両方を推論メカニズムに指示します。

  • クラスター全体のインスタンスのタイプ: instancetype.kubevirt.io/default-instancetype ラベル。
  • namespace 付きのインスタンスタイプ: instancetype.kubevirt.io/default-instancetype-kind ラベル。空のままにすると、デフォルトで VirtualMachineClusterInstancetype ラベルになります。
  • クラスター全体の設定: instancetype.kubevirt.io/default-preference ラベル。
  • namespace 付きの設定: instancetype.kubevirt.io/default-preference-kind ラベル。空のままにすると、デフォルトで VirtualMachineClusterPreference ラベルになります。

前提条件

  • クラスターにインスタンスタイプ、プリファレンス、またはその両方がある。
  • OpenShift CLI (oc) がインストールされている。

手順

  • データソースにラベルを適用するには、oc label を使用します。次のコマンドは、クラスター全体のインスタンスタイプを指すラベルを適用します。

    $ oc label DataSource foo instancetype.kubevirt.io/default-instancetype=<my_instancetype>
    Copy to Clipboard Toggle word wrap

6.1.4. Web コンソールを使用したインスタンスタイプからの仮想マシンの作成

Red Hat OpenShift Service on AWS Web コンソールを使用して、インスタンスタイプから仮想マシン (VM) を作成できます。Web コンソールを使用して、既存のスナップショットをコピーするか仮想マシンを複製して、仮想マシンを作成することもできます。

使用可能な起動可能なボリュームのリストから仮想マシンを作成できます。Linux ベースまたは Windows ベースのボリュームをリストに追加できます。

手順

  1. Web コンソールで、VirtualizationCatalog に移動します。

    InstanceTypes タブがデフォルトで開きます。

    注記

    仮想マシン設定を使用する IBM Z® システムで downward-metrics デバイスを設定する場合は、spec.preference.name 値を rhel.9.s390x に設定するか、*.s390x という形式の使用可能な別の設定を指定する必要があります。

  2. 次のオプションのいずれかを選択します。

    • リストから適切な起動可能なボリュームを選択します。リストが切り捨てられている場合は、Show all ボタンをクリックしてリスト全体を表示します。

      注記

      ブート可能ボリュームテーブルには、openshift-virtualization-os-images namespace 内の instancetype.kubevirt.io/default-preference ラベルを持つボリュームのみリストされます。

      • オプション: 星アイコンをクリックして、ブート可能ボリュームをお気に入りとして指定します。星付きのブート可能ボリュームは、ボリュームリストの最初に表示されます。
    • 新しいボリュームをアップロードするか、既存の永続ボリューム要求 (PVC)、ボリュームスナップショット、または containerDisk ボリュームを使用するには Add volume をクリックします。Save をクリックします。

      クラスターで使用できないオペレーティングシステムのロゴは、リストの下部に表示されます。Add volume リンクをクリックすると、必要なオペレーティングシステムのボリュームを追加できます。

      さらに、Windows の起動可能なボリュームを作成する クイックスタートへのリンクもあります。Select volume to boot from の横にある疑問符アイコンの上にポインターを置くと、ポップオーバーに同じリンクが表示されます。

      環境をインストールした直後、または環境が切断された直後は、起動元のボリュームのリストは空になります。その場合、Windows、RHEL、Linux の 3 つのオペレーティングシステムのロゴが表示されます。Add volume ボタンをクリックすると、要件を満たす新しいボリュームを追加できます。

  3. インスタンスタイプのタイルをクリックし、ワークロードに適したリソースサイズを選択します。
  4. オプション: 起動元のボリュームに適用される仮想マシンの詳細 (仮想マシンの名前を含む) を選択します。

    • Linux ベースのボリュームの場合は、次の手順に従って SSH を設定します。

      1. プロジェクトに SSH 公開鍵をまだ追加していない場合は、VirtualMachine details セクションの Authorized SSH key の横にある編集アイコンをクリックします。
      2. 以下のオプションのいずれかを選択します。

        • Use existing: シークレットリストからシークレットを選択します。
        • Add new: 以下の手順に従ってください。

          1. SSH 公開鍵ファイルを参照するか、ファイルを鍵のフィールドに貼り付けます。
          2. シークレット名を入力します。
          3. オプション: Automatically apply this key to any new VirtualMachine you create in this project を選択します。
      3. Save をクリックします。
    • Windows ボリュームの場合は、次のいずれかの手順に従って sysprep オプションを設定します。

      • Windows ボリュームに sysprep オプションをまだ追加していない場合は、次の手順に従います。

        1. VirtualMachine details セクションの Sysprep の横にある編集アイコンをクリックします。
        2. Autoattend.xml アンサーファイルを追加します。
        3. Unattend.xml アンサーファイルを追加します。
        4. Save をクリックします。
      • Windows ボリュームに既存の sysprep オプションを使用する場合は、次の手順に従います。

        1. 既存の sysprep を添付 をクリックします。
        2. 既存の sysprep Unattend.xml アンサーファイルの名前を入力します。
        3. Save をクリックします。
  5. オプション: Windows 仮想マシンを作成する場合は、Windows ドライバーディスクをマウントできます。

    1. Customize VirtualMachine ボタンをクリックします。
    2. VirtualMachine details ページで、Storage をクリックします。
    3. Mount Windows drivers disk チェックボックスを選択します。
  6. オプション: View YAML & CLI をクリックして YAML ファイルを表示します。CLI をクリックして CLI コマンドを表示します。YAML ファイルの内容または CLI コマンドをダウンロードまたはコピーすることもできます。
  7. Create VirtualMachine をクリックします。

仮想マシンの作成後、VirtualMachine details ページでステータスを監視できます。

6.1.5. 仮想マシンのインスタンスタイプの変更

Web コンソールを使用して、実行中の仮想マシン (VM) に関連付けられているインスタンスタイプを変更できます。変更は即座に有効になります。

前提条件

  • インスタンスタイプを使用して仮想マシンを作成している。

手順

  1. Red Hat OpenShift Service on AWS Web コンソールで、VirtualizationVirtualMachines をクリックします。
  2. 仮想マシンを選択して、VirtualMachine details ページを開きます。
  3. Configuration タブをクリックします。
  4. Details タブで、インスタンスタイプテキストをクリックして Edit Instancetype ダイアログを開きます。たとえば、1 CPU | 2 GiB Memory をクリックします。
  5. Series および Size リストを使用して、インスタンスタイプを編集します。

    1. Series リストからアイテムを選択して、そのシリーズに関連するサイズを表示します。たとえば、General Purpose を選択します。
    2. Size リストから仮想マシンの新しいインスタンスタイプを選択します。たとえば、medium: 1 CPUs, 4Gi Memory を選択します。これは、General Purpose シリーズで利用できます。
  6. Save をクリックします。

検証

  1. YAML タブをクリックします。
  2. Reload をクリックします。
  3. 仮想マシン YAML を確認し、インスタンスタイプが変更されたことを確認します。

6.2. テンプレートからの仮想マシンの作成

Red Hat OpenShift Service on AWS Web コンソールを使用して、Red Hat テンプレートから仮想マシン (VM) を作成できます。

6.2.1. 仮想マシンテンプレートについて

仮想マシンテンプレートを使用すると、仮想マシンを簡単に作成できます。

ブートソースを使用して作成を迅速化する

使用可能なブートソースが設定されているテンプレートを使用すると、仮想マシンの作成を効率化できます。ブートソースのあるテンプレートには、カスタムラベルがない場合、Available boot source ラベルが付けられます。

ブートソースのないテンプレートには、Boot source required というラベルが付けられます。詳細は、ブートソースの自動更新の管理 を参照してください。

仮想マシンを起動する前にカスタマイズする

仮想マシンを起動する前に、ディスクソースと仮想マシンパラメーターをカスタマイズできます。

注記

すべてのラベルとアノテーションとともに仮想マシンテンプレートをコピーすると、新しいバージョンの Scheduling、Scale、and Performance (SSP) Operator がデプロイされたときに、そのバージョンのテンプレートが非推奨に指定されます。この指定は削除できます。Web コンソールを使用してカスタマイズされた仮想マシンテンプレートから非推奨の指定を削除する を参照してください。

シングルノード OpenShift
ストレージの動作の違いにより、一部のテンプレートはシングルノード OpenShift と互換性がありません。互換性を確保するには、データボリュームまたはストレージプロファイルを使用するテンプレートまたは仮想マシンに evictionStrategy フィールドを設定しないでください。

6.2.2. テンプレートから仮想マシンを作成する

Red Hat OpenShift Service on AWS Web コンソールを使用すると、利用可能なブートソースを持つテンプレートから仮想マシン (VM) を作成できます。仮想マシンを起動する前に、データソース、Cloud-init、SSH 鍵などのテンプレートまたは仮想マシンパラメーターをカスタマイズできます。

仮想マシンを作成するには、Web コンソールで 2 つのビューから選択できます。

  • 仮想化に重点を置いたビュー。ビューの上部に仮想化関連のオプションを簡潔にまとめたリストが表示されます。
  • 仮想化 を含むさまざまな Web コンソールオプションにアクセスできる一般ビュー。

手順

  1. Red Hat OpenShift Service on AWS Web コンソールから、ビューを選択します。

    • 仮想化に重点を置いたビューの場合は、AdministratorVirtualizationCatalog を選択します。
    • 一般的なビューは、VirtualizationCatalog に移動します。
  2. Template catalog タブをクリックします。
  3. ブートソースのあるテンプレートをフィルタリングするには、Boot source available チェックボックスをクリックします。カタログにはデフォルトのテンプレートが表示されます。
  4. フィルターに使用可能なテンプレートを表示するには、All templates をクリックします。

    • 特定のテンプレートに焦点を合わせるには、Filter by keyword フィールドにキーワードを入力します。
    • All projects ドロップダウンメニューからテンプレートプロジェクトを選択するか、すべてのプロジェクトを表示します。
  5. テンプレートタイルをクリックして詳細を表示します。

    • オプション: Windows テンプレートを使用している場合は、Mount Windows drivers disk チェックボックスを選択することで、Windows ドライバーディスクをマウントできます。
    • テンプレートまたは仮想マシンパラメーターをカスタマイズする必要がない場合は、Quick create VirtualMachine をクリックして、テンプレートから仮想マシンを作成します。
    • テンプレートまたは仮想マシンパラメーターをカスタマイズする必要がある場合は、次の手順を実行します。

      1. Customize VirtualMachine をクリックします。Customize and create VirtualMachine ペインには、OverviewYAMLSchedulingEnvironmentNetwork interfacesDisksScripts、および Metadata タブが表示されます。
      2. Scripts タブをクリックして、Cloud-initSSH keySysprep (Windows 仮想マシンのみ) など、仮想マシンの起動前に設定する必要があるパラメーターを編集します。
      3. オプション: Start this virtualmachine after creation (Always) チェックボックスをクリックします。
      4. Create VirtualMachine をクリックします。

        VirtualMachine details ページには、プロビジョニングステータスが表示されます。

仮想マシンを起動する前に、データソース、cloud-init、SSH 鍵など、仮想マシンまたはテンプレートのパラメーターを変更することで、既存の仮想マシン (VM) テンプレートをカスタマイズできます。テンプレートをコピーし、すべてのラベルとアノテーションを含めてテンプレートをカスタマイズすると、新しいバージョンの Scheduling、Scale、and Performance (SSP) Operator がデプロイされたときに、カスタマイズしたテンプレートが非推奨に指定されます。

この非推奨の指定は、カスタマイズしたテンプレートから削除できます。

手順

  1. Web コンソールで VirtualizationTemplates に移動します。
  2. 仮想マシンテンプレートのリストから、非推奨とマークされているテンプレートをクリックします。
  3. Labels の近くにある鉛筆アイコンの横にある Edit をクリックします。
  4. 次の 2 つのラベルを削除します。

    • template.kubevirt.io/type: "base"
    • template.kubevirt.io/version: "version"
  5. Save をクリックします。
  6. 既存の Annotations の数の横にある鉛筆アイコンをクリックします。
  7. 次のアノテーションを削除します。

    • template.kubevirt.io/deprecated
  8. Save をクリックします。
6.2.2.2. Web コンソールでのカスタム仮想マシンテンプレートの作成

Red Hat OpenShift Service on AWS Web コンソールで YAML ファイルの例を編集して、仮想マシンテンプレートを作成します。

手順

  1. Web コンソールのサイドメニューで、VirtualizationTemplates をクリックします。
  2. オプション: Project ドロップダウンメニューを使用して、新しいテンプレートに関連付けられたプロジェクトを変更します。すべてのテンプレートは、デフォルトで openshift プロジェクトに保存されます。
  3. Create Template をクリックします。
  4. YAML ファイルを編集して、テンプレートパラメーターを指定します。
  5. Create をクリックします。

    テンプレートが Templates ページに表示されます。

  6. オプション: Download をクリックして、YAML ファイルをダウンロードして保存します。

第7章 高度な仮想マシンの作成

7.1. Web コンソールでの仮想マシンの作成

7.1.1. Red Hat イメージからの仮想マシン作成の概要

Red Hat イメージは ゴールデンイメージ です。これらは、安全なレジストリー内のコンテナーディスクとして公開されます。Containerized Data Importer (CDI) は、コンテナーディスクをポーリングしてクラスターにインポートし、スナップショットまたは永続ボリュームクレーム (PVC) として openshift-virtualization-os-images プロジェクトに保存します。必要に応じて、ゴールデンイメージに カスタム namespace を使用 できます。

Red Hat イメージは自動的に更新されます。これらのイメージの自動更新を無効にして再度有効にすることができます。Red Hat ブートソースの更新の管理 を参照してください。

クラスター管理者は、OpenShift Virtualization Web コンソール で Red Hat Enterprise Linux (RHEL) 仮想マシンの自動サブスクリプションを有効にできるようになりました。

次のいずれかの方法を使用して、Red Hat が提供するオペレーティングシステムイメージから仮想マシンを作成できます。

重要

デフォルトの openshift-* namespace に仮想マシンを作成しないでください。代わりに、openshift 接頭辞なしの新規 namespace を作成するか、既存 namespace を使用します。

7.1.1.1. ゴールデンイメージについて

ゴールデンイメージは、新しい仮想マシンをデプロイメントするためのリソースとして使用できる、仮想マシンの事前設定されたスナップショットです。たとえば、ゴールデンイメージを使用すると、同じシステム環境を一貫してプロビジョニングし、システムをより迅速かつ効率的にデプロイメントできます。

7.1.1.1.1. ゴールデンイメージはどのように機能しますか?

ゴールデンイメージは、リファレンスマシンまたは仮想マシンにオペレーティングシステムとソフトウェアアプリケーションをインストールして設定することによって作成されます。これには、システムのセットアップ、必要なドライバーのインストール、パッチと更新の適用、特定のオプションと設定の指定が含まれます。

ゴールデンイメージは、作成後、複数のクラスターに複製してデプロイできるテンプレートまたはイメージファイルとして保存されます。ゴールデンイメージは、メンテナーによって定期的に更新されて、必要なソフトウェア更新とパッチが組み込まれるため、イメージが最新かつ安全な状態に保たれ、新しく作成された仮想マシンはこの更新されたイメージに基づいています。

7.1.1.1.2. Red Hat のゴールデンイメージの実装

Red Hat は、Red Hat Enterprise Linux (RHEL) のバージョンのレジストリー内のコンテナーディスクとしてゴールデンイメージを公開します。コンテナーディスクは、コンテナーイメージレジストリーにコンテナーイメージとして保存される仮想マシンイメージです。公開されたイメージは、OpenShift Virtualization のインストール後に、接続されたクラスターで自動的に使用できるようになります。イメージがクラスター内で使用可能になると、仮想マシンの作成に使用できるようになります。

7.1.1.2. 仮想マシンブートソースについて

仮想マシンは、仮想マシン定義と、データボリュームによってバックアップされる 1 つ以上のディスクで構成されます。仮想マシンテンプレートを使用すると、事前定義された仕様を使用して仮想マシンを作成できます。

すべてのテンプレートにはブートソースが必要です。ブートソースは、設定されたドライバーを含む完全に設定されたディスクイメージです。各テンプレートには、ブートソースへのポインターを含む仮想マシン定義が含まれています。各ブートソースには、事前に定義された名前および namespace があります。オペレーティングシステムによっては、ブートソースは自動的に提供されます。これが提供されない場合、管理者はカスタムブートソースを準備する必要があります。

提供されたブートソースは、オペレーティングシステムの最新バージョンに自動的に更新されます。自動更新されるブートソースの場合、永続ボリュームクレーム (PVC) とボリュームスナップショットはクラスターのデフォルトストレージクラスで作成されます。設定後に別のデフォルトストレージクラスを選択した場合は、以前のデフォルトストレージクラスで設定されたクラスター namespace 内の既存のブートソースを削除する必要があります。

7.1.1.3. ゴールデンイメージのカスタム namespace の設定

ゴールデンイメージのデフォルトの namespace は openshift-virtualization-os-images ですが、カスタムの namespace を設定すると、デフォルトのブートソースへのユーザーアクセスを制限できます。

7.1.1.3.1. Web コンソールを使用したゴールデンイメージのカスタム namespace の設定

Red Hat OpenShift Service on AWS Web コンソールを使用して、クラスター内のゴールデンイメージのカスタム namespace を設定できます。

手順

  1. Web コンソールで、VirtualizationOverview を選択します。
  2. Settings タブを選択します。
  3. Cluster タブで、General settingsBootable volumes project を選択します。
  4. ゴールデンイメージに使用する namespace を選択します。

    1. すでに namespace を作成している場合は、Project リストから選択します。
    2. namespace を作成していない場合は、リストの一番下までスクロールして Create project をクリックします。

      1. Create project ダイアログの Name フィールドに新しい namespace の名前を入力します。
      2. Create をクリックします。
7.1.1.3.2. CLI を使用したゴールデンイメージのカスタム namespace の設定

HyperConverged カスタムリソース (CR) の spec.commonBootImageNamespace フィールドを設定することで、クラスター内のゴールデンイメージのカスタム namespace を設定できます。

前提条件

  • OpenShift CLI (oc) がインストールされている。
  • ゴールデンイメージに使用する namespace を作成した。

手順

  1. 以下のコマンドを実行して、デフォルトのエディターで HyperConverged CR を開きます。

    $ oc edit hyperconverged kubevirt-hyperconverged -n openshift-cnv
    Copy to Clipboard Toggle word wrap
  2. spec.commonBootImageNamespace フィールドの値を更新して、カスタム namespace を設定します。

    設定ファイルのサンプル

    apiVersion: hco.kubevirt.io/v1
    kind: HyperConverged
    metadata:
      name: kubevirt-hyperconverged
      namespace: openshift-cnv
    spec:
      commonBootImageNamespace: <custom_namespace> 
    1
    
    # ...
    Copy to Clipboard Toggle word wrap

    1
    ゴールデンイメージに使用する namespace。
  3. 変更を保存し、エディターを終了します。

7.1.2. Web ページからイメージをインポートして仮想マシンを作成する

Web ページからオペレーティングシステムイメージをインポートすることで、仮想マシンを作成できます。

重要

Red Hat が提供していないオペレーティングシステムイメージから作成された仮想マシンには、QEMU ゲストエージェント をインストールする必要があります。

7.1.2.1. Web コンソールを使用して Web ページ上のイメージから仮想マシンを作成する

Red Hat OpenShift Service on AWS Web コンソールを使用して Web ページからイメージをインポートすることで、仮想マシン (VM) を作成できます。

前提条件

  • イメージを含む Web ページにアクセスできる。

手順

  1. Web コンソールで VirtualizationCatalog に移動します。
  2. 使用可能なブートソースのないテンプレートタイルをクリックします。
  3. Customize VirtualMachine をクリックします。
  4. Customize template parameters ページで、Storage を展開し、Disk source リストから URL (creates PVC) を選択します。
  5. イメージの URL を入力します。例: https://access.redhat.com/downloads/content/69/ver=/rhel---7/7.9/x86_64/product-software
  6. ディスクサイズを設定します。
  7. Next をクリックします。
  8. Create VirtualMachine をクリックします。
7.1.2.2. CLI を使用して Web ページ上のイメージから仮想マシンを作成する

コマンドラインを使用して、Web ページ上のイメージから仮想マシンを作成できます。

仮想マシンが作成されると、イメージを含むデータボリュームが永続ストレージにインポートされます。

前提条件

  • イメージが含まれている Web ページへのアクセス認証情報を持っている。
  • virtctl CLI がインストールされている。
  • OpenShift CLI (oc) がインストールされている。

手順

  1. 仮想マシンの VirtualMachine マニフェストを作成し、YAML ファイルとして保存します。たとえば、Web ページ上のイメージから最小限の Red Hat Enterprise Linux (RHEL) 仮想マシンを作成するには、次のコマンドを実行します。

    $ virtctl create vm --name vm-rhel-9 --instancetype u1.small --preference rhel.9 --volume-import type:http,url:https://example.com/rhel9.qcow2,size:10Gi
    Copy to Clipboard Toggle word wrap
  2. 仮想マシンの VirtualMachine マニフェストを確認します。

    apiVersion: kubevirt.io/v1
    kind: VirtualMachine
    metadata:
      name: vm-rhel-9 
    1
    
    spec:
      dataVolumeTemplates:
      - metadata:
          name: imported-volume-6dcpf 
    2
    
        spec:
          source:
            http:
              url: https://example.com/rhel9.qcow2 
    3
    
          storage:
            resources:
              requests:
                storage: 10Gi 
    4
    
      instancetype:
        name: u1.small 
    5
    
      preference:
        name: rhel.9 
    6
    
      runStrategy: Always
      template:
        spec:
          domain:
            devices: {}
            resources: {}
          terminationGracePeriodSeconds: 180
          volumes:
          - dataVolume:
              name: imported-volume-6dcpf
            name: imported-volume-6dcpf
    Copy to Clipboard Toggle word wrap
    1
    仮想マシン名。
    2
    データボリューム名。
    3
    イメージの URL。
    4
    データボリュームに要求されるストレージのサイズ。
    5
    仮想マシンのリソースサイズを制御するために使用するインスタンスタイプ。
    6
    使用する設定。
  3. 次のコマンドを実行して VM を作成します。

    $ oc create -f <vm_manifest_file>.yaml
    Copy to Clipboard Toggle word wrap

    oc create コマンドは、データボリュームと仮想マシンを作成します。CDI コントローラーは適切なアノテーションを使用して基礎となる PVC を作成し、インポートプロセスが開始されます。インポートが完了すると、データボリュームのステータスが Succeeded に変わります。仮想マシンを起動できます。

    データボリュームのプロビジョニングはバックグランドで実行されるため、これをプロセスをモニターする必要はありません。

検証

  1. インポーター Pod は、指定された URL からイメージをダウンロードし、プロビジョニングされた永続ボリュームに保存します。インポーター Pod のステータスを表示します。

    $ oc get pods
    Copy to Clipboard Toggle word wrap
  2. データボリュームの状態を監視します。

    $ oc get dv <data_volume_name>
    Copy to Clipboard Toggle word wrap

    プロビジョニングが成功すると、データボリュームのフェーズが Succeeded になります。

    出力例

    NAME                    PHASE       PROGRESS   RESTARTS   AGE
    imported-volume-6dcpf   Succeeded   100.0%                18s
    Copy to Clipboard Toggle word wrap

  3. プロビジョニングが完了し、シリアルコンソールにアクセスして仮想マシンが起動したことを確認します。

    $ virtctl console <vm_name>
    Copy to Clipboard Toggle word wrap

    仮想マシンが実行中でシリアルコンソールにアクセスできる場合、出力は次のようになります。

    出力例

    Successfully connected to vm-rhel-9 console. The escape sequence is ^]
    Copy to Clipboard Toggle word wrap

7.1.3. イメージをアップロードして仮想マシンを作成する

ローカルマシンからオペレーティングシステムイメージをアップロードすることで、仮想マシンを作成できます。

Windows イメージを PVC にアップロードすることで、Windows 仮想マシンを作成できます。次に、仮想マシンの作成時に PVC のクローンを作成します。

重要

Red Hat が提供していないオペレーティングシステムイメージから作成された仮想マシンには、QEMU ゲストエージェント をインストールする必要があります。

Windows 仮想マシンにも VirtIO ドライバー をインストールする必要があります。

7.1.3.1. Web コンソールを使用して、アップロードされたイメージから仮想マシンを作成する

Red Hat OpenShift Service on AWS Web コンソールを使用して、アップロードされたオペレーティングシステムイメージから仮想マシン (VM) を作成できます。

前提条件

  • IMGISO、または QCOW2 イメージファイルが必要です。

手順

  1. Web コンソールで VirtualizationCatalog に移動します。
  2. 使用可能なブートソースのないテンプレートタイルをクリックします。
  3. Customize VirtualMachine をクリックします。
  4. Customize template parameters ページで、Storage を展開し、Disk source リストから Upload (Upload a new file to a PVC) を選択します。
  5. ローカルマシン上のイメージを参照し、ディスクサイズを設定します。
  6. Customize VirtualMachine をクリックします。
  7. Create VirtualMachine をクリックします。
7.1.3.1.1. 仮想マシンイメージの一般化

システム固有の設定データをすべて削除して Red Hat Enterprise Linux (RHEL) イメージを一般化してから、そのイメージを使用してゴールデンイメージ (仮想マシンの事前設定済みスナップショット) を作成できます。ゴールデンイメージを使用して新しい仮想マシンをデプロイできます。

virtctlguestfsvirt-sysprep ツールを使用して、RHEL 仮想マシンを一般化できます。

前提条件

  • ベースの仮想マシンとして使用する RHEL 仮想マシンがある。
  • OpenShift CLI (oc) がインストールされている。
  • virtctl ツールがインストールされている。

手順

  1. 実行中の RHEL 仮想マシンを停止するには、次のコマンドを入力します。

    $ virtctl stop <my_vm_name>
    Copy to Clipboard Toggle word wrap
  2. オプション: 元の仮想マシンのデータが失われないように、仮想マシンのクローンを作成します。その後、クローンの仮想マシンを一般化できます。
  3. 次のコマンドを実行して、仮想マシンのルートファイルシステムを格納する dataVolume を取得します。

    $ oc get vm <my_vm_name> -o jsonpath="{.spec.template.spec.volumes}{'\n'}"
    Copy to Clipboard Toggle word wrap

    出力例

    [{"dataVolume":{"name":"<my_vm_volume>"},"name":"rootdisk"},{"cloudInitNoCloud":{...}]
    Copy to Clipboard Toggle word wrap

  4. 次のコマンドを実行して、リストされた dataVolume に一致する永続ボリューム要求 (PVC) を取得します。

    $ oc get pvc
    Copy to Clipboard Toggle word wrap

    出力例

    NAME            STATUS   VOLUME  CAPACITY   ACCESS MODES  STORAGECLASS     AGE
    <my_vm_volume> Bound  …
    Copy to Clipboard Toggle word wrap

    注記

    クラスター設定により仮想マシンを複製できない場合は、元の仮想マシンのデータが失われないように、代わりに仮想マシン PVC をデータボリュームに複製できます。その後、複製した PVC を使用してゴールデンイメージを作成できます。

    PVC を複製してゴールデンイメージを作成する場合は、複製された PVC を使用して次の手順に進みます。

  5. libguestfs-tools を使用して新しいインタラクティブコンテナーをデプロイし、次のコマンドを実行して PVC をそれにアタッチします。

    $ virtctl guestfs <my-vm-volume> --uid 107
    Copy to Clipboard Toggle word wrap

    このコマンドは、次のコマンドを実行するためのシェルを開きます。

  6. 次のコマンドを実行して、システム固有のすべての設定を削除します。

    $ virt-sysprep -a disk.img
    Copy to Clipboard Toggle word wrap
  7. Red Hat OpenShift Service on AWS コンソールで、VirtualizationCatalog をクリックします。
  8. Add volume をクリックします。
  9. Add volume ウィンドウで、以下を実行します。

    1. Source type リストから、Use existing Volume を選択します。
    2. Volume project リストからプロジェクトを選択します。
    3. Volume name リストから正しい PVC を選択します。
    4. Volume name フィールドに、新しいゴールデンイメージの名前を入力します。
    5. Preference リストから、使用している RHEL バージョンを選択します。
    6. Default Instance Type リストから、以前に選択した RHEL バージョンに適した CPU とメモリーの要件を持つインスタンスタイプを選択します。
    7. Save をクリックします。

新しいボリュームが Select volume to boot from リストに表示されます。これが新しいゴールデンイメージです。このボリュームを使用して新しい仮想マシンを作成できます。

7.1.3.2. Windows 仮想マシンの作成

Windows 仮想マシン (VM) を作成するには、Windows イメージを永続ボリューム要求 (PVC) にアップロードし、Red Hat OpenShift Service on AWS Web コンソールを使用した仮想マシンの作成時に PVC のクローンを作成します。

前提条件

  • Windows Media Creation Tool を使用して Windows インストール DVD または USB が作成されている。Microsoft ドキュメントの Create Windows 10 installation media を参照してください。
  • autounattend.xml アンサーファイルを作成しました。Microsoft ドキュメントの Answer files (unattend.xml) を参照してください。

手順

  1. Windows イメージを新しい PVC としてアップロードします。

    1. Web コンソールで StoragePersistentVolumeClaims に移動します。
    2. Create PersistentVolumeClaimWith Data upload form をクリックします。
    3. Windows イメージを参照して選択します。
    4. PVC 名を入力し、ストレージクラスとサイズを選択して、Upload をクリックします。

      Windows イメージは PVC にアップロードされます。

  2. アップロードされた PVC のクローンを作成して、新しい仮想マシンを設定します。

    1. VirtualizationCatalog に移動します。
    2. Windows テンプレートタイルを選択し、Customize VirtualMachine をクリックします。
    3. Disk source リストから Clone (clone PVC) を選択します。
    4. PVC プロジェクト、Windows イメージ PVC、およびディスクサイズを選択します。
  3. アンサーファイルを仮想マシンに適用します。

    1. VirtualMachine パラメーターのカスタマイズ をクリックします。
    2. Scripts タブの Sysprep セクションで、Edit をクリックします。
    3. autounattend.xml 応答ファイルを参照し、Save をクリックします。
  4. 仮想マシンの実行ストラテジーを設定します。

    1. 仮想マシンがすぐに起動しないように、Start this VirtualMachine after creation をオフにします。
    2. Create VirtualMachine をクリックします。
    3. YAML タブで、running:falserunStrategy: RerunOnFailure に置き換え、Save をクリックします。
  5. Options メニュー kebab をクリックして Start を選択します。

    仮想マシンは、autounattend.xml アンサーファイルを含む sysprep ディスクから起動します。

7.1.3.2.1. Windows 仮想マシンイメージの一般化

Windows オペレーティングシステムイメージを一般化して、イメージを使用して新しい仮想マシンを作成する前に、システム固有の設定データをすべて削除できます。

仮想マシンを一般化する前に、Windows の無人インストール後に sysprep ツールが応答ファイルを検出できないことを確認する必要があります。

前提条件

  • QEMU ゲストエージェントがインストールされた実行中の Windows 仮想マシン。

手順

  1. Red Hat OpenShift Service on AWS コンソールで、VirtualizationVirtualMachines をクリックします。
  2. Windows 仮想マシンを選択して、VirtualMachine details ページを開きます。
  3. ConfigurationDisks をクリックします。
  4. sysprep ディスクの横にある Options メニュー kebab をクリックし、Detach を選択します。
  5. Detach をクリックします。
  6. sysprep ツールによる検出を回避するために、C:\Windows\Panther\unattend.xml の名前を変更します。
  7. 次のコマンドを実行して、sysprep プログラムを開始します。

    %WINDIR%\System32\Sysprep\sysprep.exe /generalize /shutdown /oobe /mode:vm
    Copy to Clipboard Toggle word wrap
  8. sysprep ツールが完了すると、Windows 仮想マシンがシャットダウンします。これで、仮想マシンのディスクイメージを Windows 仮想マシンのインストールイメージとして使用できるようになりました。

これで、仮想マシンを特殊化できます。

7.1.3.2.2. Windows 仮想マシンイメージの特殊化

Windows 仮想マシンを特殊化すると、一般化された Windows イメージから VM にコンピューター固有の情報が設定されます。

前提条件

  • 一般化された Windows ディスクイメージが必要です。
  • unattend.xml 応答ファイルを作成する必要があります。詳細は、Microsoft のドキュメント を参照してください。

手順

  1. Red Hat OpenShift Service on AWS コンソールで、VirtualizationCatalog をクリックします。
  2. Windows テンプレートを選択し、Customize VirtualMachine をクリックします。
  3. Disk source リストから PVC (clone PVC) を選択します。
  4. 一般化された Windows イメージの PVC プロジェクトと PVC 名を選択します。
  5. VirtualMachine パラメーターのカスタマイズ をクリックします。
  6. Scripts タブをクリックします。
  7. Sysprep セクションで、Edit をクリックし、unattend.xml 応答ファイルを参照して、Save をクリックします。
  8. Create VirtualMachine をクリックします。

Windows は初回起動時に、unattend.xml 応答ファイルを使用して VM を特殊化します。これで、仮想マシンを使用する準備が整いました。

7.1.3.3. CLI を使用してアップロードしたイメージから仮想マシンを作成する

virtctl コマンドラインツールを使用して、オペレーティングシステムイメージをアップロードできます。既存のデータボリュームを使用することも、イメージ用に新しいデータボリュームを作成することもできます。

前提条件

  • ISOIMG、または QCOW2 オペレーティングシステムイメージファイルがある。
  • 最高のパフォーマンスを得るには、virt-sparsify ツールまたは xz ユーティリティーまたは gzip ユーティリティーを使用してイメージファイルを圧縮しておく。
  • クライアントマシンは、Red Hat OpenShift Service on AWS ルーターの証明書を信頼するように設定する必要があります。
  • virtctl CLI がインストールされている。
  • OpenShift CLI (oc) がインストールされている。

手順

  1. virtctl image-upload コマンドを実行してイメージをアップロードします。

    $ virtctl image-upload dv <datavolume_name> \ 
    1
    
      --size=<datavolume_size> \ 
    2
    
      --image-path=</path/to/image> \ 
    3
    Copy to Clipboard Toggle word wrap
    1
    データボリュームの名前。
    2
    データボリュームのサイズ。例: --size=500Mi--size=1G
    3
    イメージのファイルパス。
    注記
    • 新規データボリュームを作成する必要がない場合は、--size パラメーターを省略し、--no-create フラグを含めます。
    • ディスクイメージを PVC にアップロードする場合、PVC サイズは圧縮されていない仮想ディスクのサイズよりも大きくなければなりません。
    • HTTPS を使用したセキュアでないサーバー接続を許可するには、--insecure パラメーターを使用します。--insecure フラグを使用する際に、アップロードエンドポイントの信頼性は検証 されない 点に注意してください。
  2. オプション: データボリュームが作成されたことを確認するには、以下のコマンドを実行してすべてのデータボリュームを表示します。

    $ oc get dvs
    Copy to Clipboard Toggle word wrap

7.1.4. 仮想マシンのクローン作成

仮想マシンのクローンを作成するか、スナップショットから新しい仮想マシンを作成できます。

重要

vTPM デバイスがアタッチされた仮想マシンのクローン作成や、そのスナップショットからの新しい仮想マシンの作成は、サポートされていません。

7.1.4.1. Web コンソールを使用して仮想マシンを複製する

Web コンソールを使用して、既存の仮想マシンを複製できます。

手順

  1. Web コンソールで VirtualizationVirtualMachines に移動します。
  2. 仮想マシンを選択して、VirtualMachine details ページを開きます。
  3. Actions をクリックします。

    または、仮想マシンを右クリックして、ツリービューで同じメニューにアクセスします。

  4. Clone を選択します。
  5. Clone VirtualMachine ページで、新しい仮想マシンの名前を入力します。
  6. (オプション) Start cloned VM チェックボックスを選択して、複製された仮想マシンを開始します。
  7. Clone をクリックします。
7.1.4.2. Web コンソールを使用して既存のスナップショットから仮想マシンを作成する

既存のスナップショットをコピーすることで、新しい仮想マシンを作成できます。

手順

  1. Web コンソールで VirtualizationVirtualMachines に移動します。
  2. 仮想マシンを選択して、VirtualMachine details ページを開きます。
  3. Snapshots タブをクリックします。
  4. コピーするスナップショットの Options メニュー kebab をクリックします。
  5. Create VirtualMachine を選択します。
  6. 仮想マシンの名前を入力します。
  7. (オプション) Start this VirtualMachine after creation チェックボックスを選択して、新しい仮想マシンを起動します。
  8. Create をクリックします。

7.2. CLI を使用した仮想マシンの作成

7.2.1. CLI からの仮想マシンの作成

VirtualMachine マニフェストを編集または作成することで、コマンドラインから仮想マシン (VM) を作成できます。仮想マシンマニフェストで インスタンスタイプ を使用すると、仮想マシン設定を簡素化できます。

注記
7.2.1.1. VirtualMachine マニフェストからの仮想マシンの作成

VirtualMachine マニフェストから仮想マシンを作成できます。これらのマニフェストの作成を簡素化するには、virtctl コマンドラインツールを使用できます。

前提条件

  • virtctl CLI がインストールされている。
  • OpenShift CLI (oc) がインストールされている。

手順

  1. 仮想マシンの VirtualMachine マニフェストを作成し、YAML ファイルとして保存します。たとえば、最小限の Red Hat Enterprise Linux (RHEL) 仮想マシンを作成するには、次のコマンドを実行します。

    $ virtctl create vm --name rhel-9-minimal --volume-import type:ds,src:openshift-virtualization-os-images/rhel9
    Copy to Clipboard Toggle word wrap
  2. 仮想マシンの VirtualMachine マニフェストを確認します。

    注記

    このサンプルマニフェストでは、仮想マシン認証は設定されません。

    RHEL 仮想マシンのマニフェストの例

    apiVersion: kubevirt.io/v1
    kind: VirtualMachine
    metadata:
      name: rhel-9-minimal 
    1
    
    spec:
      dataVolumeTemplates:
      - metadata:
          name: imported-volume-mk4lj
        spec:
          sourceRef:
            kind: DataSource
            name: rhel9 
    2
    
            namespace: openshift-virtualization-os-images 
    3
    
          storage:
            resources: {}
      instancetype:
        inferFromVolume: imported-volume-mk4lj 
    4
    
        inferFromVolumeFailurePolicy: Ignore
      preference:
        inferFromVolume: imported-volume-mk4lj 
    5
    
        inferFromVolumeFailurePolicy: Ignore
      runStrategy: Always
      template:
        spec:
          domain:
            devices: {}
            memory:
              guest: 512Mi
            resources: {}
          terminationGracePeriodSeconds: 180
          volumes:
          - dataVolume:
              name: imported-volume-mk4lj
            name: imported-volume-mk4lj
    Copy to Clipboard Toggle word wrap

    1
    仮想マシン名。
    2
    ゲストオペレーティングシステムのブートソース。
    3
    ブートソースの namespace。ゴールデンイメージは、openshift-virtualization-os-images namespace に保存されます。
    4
    インスタンスタイプは、選択した DataSource オブジェクトから推測されます。
    5
    設定は、選択した DataSource オブジェクトから推測されます。
  3. マニフェストファイルを使用して仮想マシンを作成します。

    $ oc create -f <vm_manifest_file>.yaml
    Copy to Clipboard Toggle word wrap
  4. オプション: 仮想マシンを起動します。

    $ virtctl start <vm_name>
    Copy to Clipboard Toggle word wrap

7.2.2. コンテナーディスクを使用した仮想マシンの作成

オペレーティングシステムイメージから構築されたコンテナーディスクを使用して、仮想マシンを作成できます。

コンテナーディスクの自動更新を有効にすることができます。詳細は、ブートソースの自動更新の管理 を参照してください。

重要

コンテナーディスクが大きい場合は、I/O トラフィックが増加し、ワーカーノードが使用できなくなる可能性があります。この問題を解決するには、DeploymentConfig オブジェクトを削除します。

次の手順を実行して、コンテナーディスクから仮想マシンを作成します。

  1. オペレーティングシステムイメージをコンテナーディスクに構築し、それをコンテナーレジストリーにアップロードします
  2. コンテナーレジストリーに TLS がない場合は、レジストリーの TLS を無効にするように環境を設定します
  3. Web コンソール または コマンドライン を使用して、コンテナーディスクをディスクソースとして使用する仮想マシンを作成します。
重要

Red Hat が提供していないオペレーティングシステムイメージから作成された仮想マシンには、QEMU ゲストエージェント をインストールする必要があります。

7.2.2.1. コンテナーディスクの構築とアップロード

仮想マシンイメージをコンテナーディスクに構築し、レジストリーにアップロードできます。

コンテナーディスクのサイズは、コンテナーディスクがホストされているレジストリーの最大レイヤーサイズによって制限されます。

注記

Red Hat Quay の場合、Red Hat Quay の初回デプロイ時に作成される YAML 設定ファイルを編集して、最大レイヤーサイズを変更できます。

前提条件

  • podman がインストールされている必要があります。
  • QCOW2 または RAW イメージファイルが必要です。

手順

  1. Dockerfile を作成して、仮想マシンイメージをコンテナーイメージにビルドします。仮想マシンイメージは、UID 107 を持つ QEMU によって所有され、コンテナー内の /disk/ ディレクトリーに配置される必要があります。次に、/disk/ ディレクトリーのパーミッションは 0440 に設定する必要があります。

    以下の例では、Red Hat Universal Base Image (UBI) を使用して最初の段階でこれらの設定変更を処理し、2 番目の段階で最小の scratch イメージを使用して結果を保存します。

    $ cat > Dockerfile << EOF
    FROM registry.access.redhat.com/ubi8/ubi:latest AS builder
    ADD --chown=107:107 <vm_image>.qcow2 /disk/ 
    1
    
    RUN chmod 0440 /disk/*
    
    FROM scratch
    COPY --from=builder /disk/* /disk/
    EOF
    Copy to Clipboard Toggle word wrap
    1
    <vm_image> は、QCOW2 または RAW 形式のイメージです。リモートイメージを使用する場合は、<vm_image>.qcow2 を完全な URL に置き換えます。
  2. コンテナーをビルドし、これにタグ付けします。

    $ podman build -t <registry>/<container_disk_name>:latest .
    Copy to Clipboard Toggle word wrap
  3. コンテナーイメージをレジストリーにプッシュします。

    $ podman push <registry>/<container_disk_name>:latest
    Copy to Clipboard Toggle word wrap
7.2.2.2. コンテナーレジストリーの TLS を無効にする

HyperConverged カスタムリソースの insecureRegistries フィールドを編集して、1 つ以上のコンテナーレジストリーの TLS(トランスポート層セキュリティー) を無効にできます。

前提条件

  • OpenShift CLI (oc) がインストールされている。

手順

  1. 以下のコマンドを実行して、デフォルトのエディターで HyperConverged CR を開きます。

    $ oc edit hyperconverged kubevirt-hyperconverged -n openshift-cnv
    Copy to Clipboard Toggle word wrap
  2. セキュアでないレジストリーのリストを spec.storageImport.insecureRegistries フィールドに追加します。

    HyperConverged カスタムリソースの例

    apiVersion: hco.kubevirt.io/v1beta1
    kind: HyperConverged
    metadata:
      name: kubevirt-hyperconverged
      namespace: openshift-cnv
    spec:
      storageImport:
        insecureRegistries: 
    1
    
          - "private-registry-example-1:5000"
          - "private-registry-example-2:5000"
    Copy to Clipboard Toggle word wrap

    1
    このリストのサンプルを、有効なレジストリーホスト名に置き換えます。
7.2.2.3. Web コンソールを使用してコンテナーディスクから仮想マシンを作成する

Red Hat OpenShift Service on AWS Web コンソールを使用して、コンテナーレジストリーからコンテナーディスクをインポートすることで、仮想マシン (VM) を作成できます。

手順

  1. Web コンソールで VirtualizationCatalog に移動します。
  2. 使用可能なブートソースのないテンプレートタイルをクリックします。
  3. Customize VirtualMachine をクリックします。
  4. Customize template parameters ページで、Storage を展開し、Disk source リストから Registry (creates PVC) を選択します。
  5. コンテナーイメージの URL を入力します。例: https://mirror.arizona.edu/fedora/linux/releases/38/Cloud/x86_64/images/Fedora-Cloud-Base-38-1.6.x86_64.qcow2
  6. ディスクサイズを設定します。
  7. Next をクリックします。
  8. Create VirtualMachine をクリックします。
7.2.2.4. CLI を使用してコンテナーディスクから仮想マシンを作成する

コマンドラインを使用して、コンテナーディスクから仮想マシンを作成できます。

前提条件

  • コンテナーディスクを含むコンテナーレジストリーへのアクセス認証情報が必要です。
  • virtctl CLI がインストールされている。
  • OpenShift CLI (oc) がインストールされている。

手順

  1. 仮想マシンの VirtualMachine マニフェストを作成し、YAML ファイルとして保存します。たとえば、コンテナーディスクから最小限の Red Hat Enterprise Linux (RHEL) 仮想マシンを作成するには、次のコマンドを実行します。

    $ virtctl create vm --name vm-rhel-9 --instancetype u1.small --preference rhel.9 --volume-containerdisk src:registry.redhat.io/rhel9/rhel-guest-image:9.5
    Copy to Clipboard Toggle word wrap
  2. 仮想マシンの VirtualMachine マニフェストを確認します。

    apiVersion: kubevirt.io/v1
    kind: VirtualMachine
    metadata:
      name: vm-rhel-9 
    1
    
    spec:
      instancetype:
        name: u1.small 
    2
    
      preference:
        name: rhel.9 
    3
    
      runStrategy: Always
      template:
        metadata:
          creationTimestamp: null
        spec:
          domain:
            devices: {}
            resources: {}
          terminationGracePeriodSeconds: 180
          volumes:
          - containerDisk:
              image: registry.redhat.io/rhel9/rhel-guest-image:9.5 
    4
    
            name: vm-rhel-9-containerdisk-0
    Copy to Clipboard Toggle word wrap
    1
    仮想マシン名。
    2
    仮想マシンのリソースサイズを制御するために使用するインスタンスタイプ。
    3
    使用する設定。
    4
    コンテナーディスクの URL。
  3. 次のコマンドを実行して VM を作成します。

    $ oc create -f <vm_manifest_file>.yaml
    Copy to Clipboard Toggle word wrap

検証

  1. 仮想マシンのステータスを監視します。

    $ oc get vm <vm_name>
    Copy to Clipboard Toggle word wrap

    プロビジョニングが成功すると、仮想マシンのステータスが Running になります。

    出力例

    NAME        AGE   STATUS    READY
    vm-rhel-9   18s   Running   True
    Copy to Clipboard Toggle word wrap

  2. プロビジョニングが完了し、シリアルコンソールにアクセスして仮想マシンが起動したことを確認します。

    $ virtctl console <vm_name>
    Copy to Clipboard Toggle word wrap

    仮想マシンが実行中でシリアルコンソールにアクセスできる場合、出力は次のようになります。

    出力例

    Successfully connected to vm-rhel-9 console. The escape sequence is ^]
    Copy to Clipboard Toggle word wrap

7.2.3. PVC のクローン作成による仮想マシンの作成

カスタムイメージを使用して既存の永続ボリューム要求 (PVC) のクローンを作成することで、仮想マシンを作成できます。

Red Hat が提供していないオペレーティングシステムイメージから作成された仮想マシンには、QEMU ゲストエージェント をインストールする必要があります。

PVC のクローンを作成するには、ソース PVC を参照するデータボリュームを作成します。

7.2.3.1. クローン作成について

データボリュームのクローンを作成する場合、Containerized Data Importer (CDI) は、次の Container Storage Interface (CSI) クローンメソッドのいずれかを選択します。

  • CSI ボリュームのクローン作成
  • スマートクローン作成

CSI ボリュームのクローン作成方法とスマートクローン作成方法はどちらも効率的ですが、使用するには特定の要件があります。要件が満たされていない場合、CDI はホスト支援型クローン作成を使用します。ホスト支援型クローン作成は、最も時間がかかり、最も効率の悪いクローン作成方法ですが、他の 2 つのクローン作成方法よりも要件の数が少ないです。

7.2.3.1.1. CSI ボリュームのクローン作成

Container Storage Interface (CSI) のクローン作成では、CSI ドライバー機能を使用して、ソースデータボリュームのクローンをより効率的に作成します。

CSI ボリュームのクローン作成には次の要件があります。

  • 永続ボリューム要求 (PVC) のストレージクラスをサポートする CSI ドライバーは、ボリュームのクローン作成をサポートする必要があります。
  • CDI によって認識されないプロビジョナーの場合、対応するストレージプロファイルの cloneStrategy が CSI Volume Cloning に設定されている必要があります。
  • ソース PVC とターゲット PVC は、同じストレージクラスとボリュームモードを持つ必要があります。
  • データボリュームを作成する場合は、ソース namespace に datavolumes/source リソースを作成するパーミッションが必要です。
  • ソースボリュームは使用されていない状態である必要があります。
7.2.3.1.2. スマートクローン作成

スナップショット機能を備えた Container Storage Interface (CSI) プラグインが使用可能な場合、Containerized Data Importer (CDI) はスナップショットから永続ボリューム要求 (PVC) を作成し、これにより、追加の PVC の効率的なクローン作成を可能にします。

スマートクローン作成には次の要件があります。

  • ストレージクラスに関連付けられたスナップショットクラスが存在する必要があります。
  • ソース PVC とターゲット PVC は、同じストレージクラスとボリュームモードを持つ必要があります。
  • データボリュームを作成する場合は、ソース namespace に datavolumes/source リソースを作成するパーミッションが必要です。
  • ソースボリュームは使用されていない状態である必要があります。
7.2.3.1.3. ホスト支援型クローン作成

Container Storage Interface (CSI) ボリュームのクローン作成もスマートクローン作成の要件も満たされていない場合、ホスト支援型クローン作成がフォールバック方法として使用されます。ホスト支援型クローン作成は、他の 2 つのクローン作成方法と比べると効率が悪いです。

ホスト支援型クローン作成では、ソース Pod とターゲット Pod を使用して、ソースボリュームからターゲットボリュームにデータをコピーします。ターゲットの永続ボリューム要求 (PVC) には、ホスト支援型クローン作成が使用された理由を説明するフォールバック理由のアノテーションが付けられ、イベントが作成されます。

PVC ターゲットアノテーションの例

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  annotations:
    cdi.kubevirt.io/cloneFallbackReason: The volume modes of source and target are incompatible
    cdi.kubevirt.io/clonePhase: Succeeded
    cdi.kubevirt.io/cloneType: copy
Copy to Clipboard Toggle word wrap

イベント例

NAMESPACE   LAST SEEN   TYPE      REASON                    OBJECT                              MESSAGE
test-ns     0s          Warning   IncompatibleVolumeModes   persistentvolumeclaim/test-target   The volume modes of source and target are incompatible
Copy to Clipboard Toggle word wrap

7.2.3.2. Web コンソールを使用した PVC からの仮想マシンの作成

Red Hat OpenShift Service on AWS Web コンソールを使用して永続ボリューム要求 (PVC) のクローンを作成し、仮想マシン (VM) を作成できます。

前提条件

  • ソース PVC を含む namespace にアクセスできる。

手順

  1. Web コンソールで VirtualizationCatalog に移動します。
  2. 使用可能なブートソースのないテンプレートタイルをクリックします。
  3. Customize VirtualMachine をクリックします。
  4. テンプレートパラメーターのカスタマイズ ページで、Storage を展開し、Disk source リストから PVC (clone PVC) を選択します。
  5. PVC プロジェクトと PVC 名を選択します。
  6. ディスクサイズを設定します。
  7. Next をクリックします。
  8. Create VirtualMachine をクリックします。
7.2.3.3. CLI を使用して PVC から仮想マシンを作成する

コマンドラインを使用して既存の仮想マシンの永続ボリューム要求 (PVC) のクローンを作成することで、仮想マシンを作成できます。

次のオプションのいずれかを使用して、PVC のクローンを作成できます。

  • PVC を新しいデータボリュームに複製します。

    この方法では、ライフサイクルが元の仮想マシンから独立したデータボリュームが作成されます。元の仮想マシンを削除しても、新しいデータボリュームやそれに関連付けられた PVC には影響しません。

  • dataVolumeTemplates スタンザを含む VirtualMachine マニフェストを作成して、PVC を複製します。

    この方法では、ライフサイクルが元の仮想マシンに依存するデータボリュームが作成されます。元の仮想マシンを削除すると、クローン作成されたデータボリュームとそれに関連付けられた PVC も削除されます。

7.2.3.3.1. OpenShift Data Foundation における大規模なクローンパフォーマンスの最適化

OpenShift Data Foundation を使用する場合、ストレージプロファイルはデフォルトのクローン作成ストラテジーを csi-clone として設定します。ただし、次のリンクに示すように、この方法には制限があります。永続ボリューム要求 (PVC) から一定数のクローンが作成されると、バックグラウンドでフラット化プロセスが開始され、大規模なクローン作成のパフォーマンスが大幅に低下する可能性があります。

単一のソース PVC から数百のクローンを作成する際のパフォーマンスを高めるためには、デフォルトの csi-clone ストラテジーの代わりに VolumeSnapshot クローン作成メソッドを使用します。

手順

次のコンテンツを使用して、ソースイメージの VolumeSnapshot カスタムリソース (CR) を作成します。

apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshot
metadata:
  name: golden-volumesnapshot
  namespace: golden-ns
spec:
  volumeSnapshotClassName: ocs-storagecluster-rbdplugin-snapclass
  source:
    persistentVolumeClaimName: golden-snap-source
Copy to Clipboard Toggle word wrap
  1. VolumeSnapshotDataVolume clone のソースとして参照するための spec.source.snapshot スタンザを追加します。
spec:
  source:
    snapshot:
      namespace: golden-ns
      name: golden-volumesnapshot
Copy to Clipboard Toggle word wrap
7.2.3.3.2. データボリュームへの PVC のクローン作成

コマンドラインを使用して、既存の仮想マシンディスクの永続ボリューム要求 (PVC) のクローンをデータボリュームに作成できます。

元のソース PVC を参照するデータボリュームを作成します。新しいデータボリュームのライフサイクルは、元の仮想マシンから独立しています。元の仮想マシンを削除しても、新しいデータボリュームやそれに関連付けられた PVC には影響しません。

異なるボリュームモード間のクローン作成は、ソース PV とターゲット PV が kubevirt コンテンツタイプに属している限り、ブロック永続ボリューム (PV) からファイルシステム PV へのクローン作成など、ホスト支援型クローン作成でサポートされます。

注記

スマートクローン作成は、スナップショットを使用して PVC のクローンを作成するため、ホスト支援型クローン作成よりも高速かつ効率的です。スマートクローン作成は、Red Hat OpenShift Data Foundation など、スナップショットをサポートするストレージプロバイダーによってサポートされています。

異なるボリュームモード間のクローン作成は、スマートクローン作成ではサポートされていません。

前提条件

  • OpenShift CLI (oc) がインストールされている。
  • ソース PVC を含む仮想マシンの電源をオフにする必要があります。
  • PVC を別の namespace に複製する場合は、ターゲットの namespace にリソースを作成するパーミッションが必要です。
  • スマートクローン作成の追加の前提条件:

    • ストレージプロバイダーはスナップショットをサポートする必要がある。
    • ソース PVC とターゲット PVC には、同じストレージプロバイダーとボリュームモードがある必要があります。
    • 次の例に示すように、VolumeSnapshotClass オブジェクトの driver キーの値は、StorageClass オブジェクトの provisioner キーの値と一致する必要があります。

      VolumeSnapshotClass オブジェクトの例

      kind: VolumeSnapshotClass
      apiVersion: snapshot.storage.k8s.io/v1
      driver: openshift-storage.rbd.csi.ceph.com
      # ...
      Copy to Clipboard Toggle word wrap

      StorageClass オブジェクトの例

      kind: StorageClass
      apiVersion: storage.k8s.io/v1
      # ...
      provisioner: openshift-storage.rbd.csi.ceph.com
      Copy to Clipboard Toggle word wrap

手順

  1. 次の例に示すように、DataVolume マニフェストを作成します。

    apiVersion: cdi.kubevirt.io/v1beta1
    kind: DataVolume
    metadata:
      name: <datavolume> 
    1
    
    spec:
      source:
        pvc:
          namespace: "<source_namespace>" 
    2
    
          name: "<my_vm_disk>" 
    3
    
      storage: {}
    Copy to Clipboard Toggle word wrap
    1
    新しいデータボリュームの名前を指定します。
    2
    ソース PVC の namespace を指定します。
    3
    ソース PVC の名前を指定します。
  2. 以下のコマンドを実行してデータボリュームを作成します。

    $ oc create -f <datavolume>.yaml
    Copy to Clipboard Toggle word wrap
    注記

    データ量により、PVC が準備される前に仮想マシンが起動できなくなります。PVC のクローン作成中に、新しいデータボリュームを参照する仮想マシンを作成できます。

7.2.3.3.3. データボリュームテンプレートを使用したクローン PVC からの仮想マシンの作成

データボリュームテンプレートを使用して、既存の仮想マシンの永続ボリューム要求 (PVC) のクローンを作成する仮想マシンを作成できます。この方法では、ライフサイクルが元の仮想マシンから独立したデータボリュームが作成されます。

前提条件

  • ソース PVC を含む仮想マシンの電源をオフにする必要があります。
  • virtctl CLI がインストールされている。
  • OpenShift CLI (oc) がインストールされている。

手順

  1. 仮想マシンの VirtualMachine マニフェストを作成し、YAML ファイルとして保存します。次に例を示します。

    $ virtctl create vm --name rhel-9-clone --volume-import type:pvc,src:my-project/imported-volume-q5pr9
    Copy to Clipboard Toggle word wrap
  2. 仮想マシンの VirtualMachine マニフェストを確認します。

    apiVersion: kubevirt.io/v1
    kind: VirtualMachine
    metadata:
      name: rhel-9-clone 
    1
    
    spec:
      dataVolumeTemplates:
      - metadata:
          name: imported-volume-h4qn8
        spec:
          source:
            pvc:
              name: imported-volume-q5pr9 
    2
    
              namespace: my-project 
    3
    
          storage:
            resources: {}
      instancetype:
        inferFromVolume: imported-volume-h4qn8 
    4
    
        inferFromVolumeFailurePolicy: Ignore
      preference:
        inferFromVolume: imported-volume-h4qn8 
    5
    
        inferFromVolumeFailurePolicy: Ignore
      runStrategy: Always
      template:
        spec:
          domain:
            devices: {}
            memory:
              guest: 512Mi
            resources: {}
          terminationGracePeriodSeconds: 180
          volumes:
          - dataVolume:
              name: imported-volume-h4qn8
            name: imported-volume-h4qn8
    Copy to Clipboard Toggle word wrap
    1
    仮想マシン名。
    2
    ソース PVC の名前。
    3
    ソース PVC の namespace。
    4
    PVC ソースに適切なラベルがある場合、選択した DataSource オブジェクトからインスタンスタイプが推測されます。
    5
    PVC ソースに適切なラベルがある場合、選択した DataSource オブジェクトから設定が推測されます。
  3. PVC のクローンが作成されたデータボリュームで仮想マシンを作成します。

    $ oc create -f <vm_manifest_file>.yaml
    Copy to Clipboard Toggle word wrap

第8章 仮想マシンの管理

8.1. 仮想マシンのリスト表示

Web コンソールまたは OpenShift CLI (oc) を使用して、利用可能な仮想マシン (VM) をリスト表示できます。

8.1.1. CLI を使用して仮想マシンをリスト表示する

OpenShift CLI (oc) を使用して、クラスター内のすべての仮想マシン (VM) をリスト表示することも、指定された namespace 内の仮想マシンにリストを制限することもできます。

前提条件

  • OpenShift CLI (oc) がインストールされている。

手順

  • 次のコマンドを実行して、クラスター内のすべての仮想マシンをリスト表示します。

    $ oc get vms -A
    Copy to Clipboard Toggle word wrap
  • 次のコマンドを実行して、特定の namespace 内のすべての仮想マシンをリスト表示します。

    $ oc get vms -n <namespace>
    Copy to Clipboard Toggle word wrap

8.1.2. Web コンソールを使用して仮想マシンをリスト表示する

Web コンソールを使用して、クラスター内のすべての仮想マシン (VM) をリスト表示できます。

手順

  1. サイドメニューから VirtualizationVirtualMachines をクリックして、クラスター内のすべてのプロジェクトと仮想マシンを含むツリービューにアクセスします。
  2. オプション: 表示されるプロジェクトを制限するには、ツリービューの上にある Show only projects with VirtualMachines オプションを有効にします。
  3. オプション: 検索バーの横にある Advanced search ボタンをクリックすると、名前、所属するプロジェクト、ラベル、割り当てられた仮想 CPU およびメモリーリソースのいずれかでさらにフィルタリングできます。

8.1.3. Web コンソールを使用して仮想マシンを整理する

さまざまなプロジェクトで仮想マシン (VM) を作成することに加え、ツリービューを使用してそれらをフォルダーに分類し、さらに整理することができます。

手順

  1. サイドメニューから VirtualizationVirtualMachines をクリックして、クラスター内のすべてのプロジェクトと仮想マシンを含むツリービューにアクセスします。
  2. ユースケースに応じて、次のいずれかのアクションを実行します。

    • 仮想マシンを同じプロジェクト内の新しいフォルダーに移動するには、以下を実行します。

      1. ツリービューで仮想マシンの名前を右クリックします。
      2. メニューから Move to folder を選択します。
      3. "Search folder" バーに作成するフォルダーの名前を入力します。
      4. ドロップダウンリストで Create folder をクリックします。
      5. Save をクリックします。
    • 仮想マシンを同じプロジェクト内の既存のフォルダーに移動するには、以下を実行します。

      • ツリービューで仮想マシンの名前をクリックし、同じプロジェクト内のフォルダーにドラッグします。操作が許可されている場合、仮想マシンをフォルダーの上にドラッグすると、フォルダーが緑色で強調表示されます。
    • 仮想マシンをフォルダーからプロジェクトに移動するには、以下を実行します。

      • ツリービューで仮想マシンの名前をクリックし、プロジェクト名にドラッグします。操作が許可されている場合、仮想マシンをプロジェクト上にドラッグすると、プロジェクト名が緑色で強調表示されます。

8.2. QEMU ゲストエージェントと VirtIO ドライバーのインストール

QEMU ゲストエージェントは、仮想マシンで実行され、仮想マシン、ユーザー、ファイルシステム、およびセカンダリーネットワークに関する情報をホストに渡すデーモンです。

Red Hat が提供していないオペレーティングシステムイメージから作成された仮想マシンには、QEMU ゲストエージェントをインストールする必要があります。

8.2.1. QEMU ゲストエージェントのインストール

8.2.1.1. Linux 仮想マシンへの QEMU ゲストエージェントのインストール

qemu-guest-agent は、Red Hat Enterprise Linux (RHEL) 仮想マシン (VM) でデフォルトで使用できます。

Running 状態の仮想マシンのスナップショットを最高の整合性で作成するには、QEMU ゲストエージェントをインストールします。

QEMU ゲストエージェントは、仮想マシンファイルシステムの静止を試みることで、一貫性のあるスナップショットを取得します。これにより、スナップショットの作成前にインフライトの I/O がディスクに書き込まれるようになります。ゲストエージェントが存在しない場合は、静止はできず、ベストエフォートスナップショットが作成されます。

スナップショットの作成条件は、Web コンソールまたは CLI に表示されるスナップショットの指示に反映されます。これらの条件が要件を満たさない場合は、スナップショットを再度作成するか、オフラインスナップショットを使用します。

前提条件

  • OpenShift CLI (oc) がインストールされている。

手順

  1. コンソールまたは SSH を使用して仮想マシンにログインします。
  2. 次のコマンドを実行して、QEMU ゲストエージェントをインストールします。

    $ yum install -y qemu-guest-agent
    Copy to Clipboard Toggle word wrap
  3. サービスに永続性があることを確認し、これを起動します。

    $ systemctl enable --now qemu-guest-agent
    Copy to Clipboard Toggle word wrap

検証

  • 次のコマンドを実行して、AgentConnected が仮想マシンの spec にリストされていることを確認します。

    $ oc get vm <vm_name>
    Copy to Clipboard Toggle word wrap
8.2.1.2. Windows 仮想マシンへの QEMU ゲストエージェントのインストール

Windows 仮想マシンの場合には、QEMU ゲストエージェントは VirtIO ドライバーに含まれます。ドライバーは、Windows のインストール中または既存の Windows 仮想マシンにインストールできます。

Running 状態の仮想マシンのスナップショットを最高の整合性で作成するには、QEMU ゲストエージェントをインストールします。

QEMU ゲストエージェントは、仮想マシンファイルシステムの静止を試みることで、一貫性のあるスナップショットを取得します。これにより、スナップショットの作成前にインフライトの I/O がディスクに書き込まれるようになります。ゲストエージェントが存在しない場合は、静止はできず、ベストエフォートスナップショットが作成されます。

Windows ゲストオペレーティングシステムでは、静止処理には Volume Shadow Copy Service (VSS) も必要である点に注意してください。したがって、スナップショットを作成する前に、仮想マシンでも VSS が有効になっていることを確認してください。

スナップショットの作成条件は、Web コンソールまたは CLI に表示されるスナップショットの指示に反映されます。これらの条件が要件を満たさない場合は、スナップショットを再度作成するか、オフラインスナップショットを使用します。

手順

  1. Windows ゲストオペレーティングシステムで、File Explorer を使用して、virtio-win CD ドライブの guest-agent ディレクトリーに移動します。
  2. qemu-ga-x86_64.msi インストーラーを実行します。

検証

  1. 次のコマンドを実行して、ネットワークサービスのリストを取得します。

    $ net start
    Copy to Clipboard Toggle word wrap
  2. 出力に QEMU Guest Agent が含まれていることを確認します。

8.2.2. Windows 仮想マシンへの VirtIO ドライバーのインストール

VirtIO ドライバーは、Microsoft Windows 仮想マシンが OpenShift Virtualization で実行されるために必要な準仮想化デバイスドライバーです。ドライバーは残りのイメージと同梱されるされるため、個別にダウンロードする必要はありません。

container-native-virtualization/virtio-win コンテナーディスクは、ドライバーのインストールを有効にするために SATA CD ドライブとして仮想マシンに割り当てられる必要があります。VirtIO ドライバーは、Windows のインストール中にインストールすることも、既存の Windows インストールに追加することもできます。

ドライバーのインストール後に、container-native-virtualization/virtio-win コンテナーディスクは仮想マシンから削除できます。

Expand
表8.1 サポートされているドライバー
ドライバー名ハードウェア ID説明

viostor

VEN_1AF4&DEV_1001
VEN_1AF4&DEV_1042

ブロックドライバー。Other devices グループの SCSI Controller としてラベル付けされる場合があります。

viorng

VEN_1AF4&DEV_1005
VEN_1AF4&DEV_1044

エントロピーソースドライバー。Other devices グループの PCI Device としてラベル付けされる場合があります。

NetKVM

VEN_1AF4&DEV_1000
VEN_1AF4&DEV_1041

ネットワークドライバー。Other devices グループの Ethernet Controller としてラベル付けされる場合があります。VirtIO NIC が設定されている場合にのみ利用できます。

8.2.2.1. インストール中に VirtIO コンテナーディスクを Windows 仮想マシンにアタッチする

必要な Windows ドライバーをインストールするには、VirtIO コンテナーディスクを Windows 仮想マシンにアタッチする必要があります。これは、仮想マシンの作成時に実行できます。

手順

  1. テンプレートから Windows 仮想マシンを作成する場合は、Customize VirtualMachine をクリックします。
  2. Mount Windows drivers disk を選択します。
  3. Customize VirtualMachine parameters をクリックします。
  4. Create VirtualMachine をクリックします。

仮想マシンの作成後、virtio-win SATA CD ディスクが仮想マシンにアタッチされます。

8.2.2.2. VirtIO コンテナーディスクを既存の Windows 仮想マシンにアタッチする

必要な Windows ドライバーをインストールするには、VirtIO コンテナーディスクを Windows 仮想マシンにアタッチする必要があります。これは既存の仮想マシンに対して実行できます。

手順

  1. 既存の Windows 仮想マシンに移動し、ActionsStop をクリックします。
  2. VM DetailsConfigurationDisks に移動し、Add disk をクリックします。
  3. コンテナーソースから windows-driver-disk を追加し、TypeCD-ROM に設定して、InterfaceSATA に設定します。
  4. Save をクリックします。
  5. 仮想マシンを起動し、グラフィカルコンソールに接続します。
8.2.2.3. Windows インストール時の VirtIO ドライバーのインストール

仮想マシンに Windows をインストールする際に VirtIO ドライバーをインストールできます。

注記

この手順では、Windows インストールの汎用的なアプローチを使用しますが、インストール方法は Windows のバージョンごとに異なる可能性があります。インストールする Windows のバージョンに関するドキュメントを参照してください。

前提条件

  • virtio ドライバーを含むストレージデバイスを仮想マシンに接続している。

手順

  1. Windows オペレーティングシステムでは、File Explorer を使用して virtio-win CD ドライブに移動します。
  2. ドライブをダブルクリックして、仮想マシンに適切なインストーラーを実行します。

    64 ビット仮想 CPU の場合は、virtio-win-gt-x64 インストーラーを選択します。32 ビット仮想 CPU はサポート対象外になりました。

  3. オプション: インストーラーの Custom Setup 手順で、インストールするデバイスドライバーを選択します。デフォルトでは、推奨ドライバーセットが選択されています。
  4. インストールが完了したら、Finish を選択します。
  5. 仮想マシンを再起動します。

検証

  1. PC でシステムディスクを開きます。通常は (C:) です。
  2. Program FilesVirtio-Win に移動します。

Virtio-Win ディレクトリーが存在し、各ドライバーのサブディレクトリーが含まれていればインストールは成功です。

8.2.2.4. 既存の Windows 仮想マシン上の SATA CD ドライブから VirtIO ドライバーのインストール

VirtIO ドライバーは、SATA CD ドライブから既存の Windows 仮想マシンにインストールできます。

注記

この手順では、ドライバーを Windows に追加するための汎用的なアプローチを使用しています。特定のインストール手順は、お使いの Windows バージョンに関するインストールドキュメントを参照してください。

前提条件

  • virtio ドライバーを含むストレージデバイスは、SATA CD ドライブとして仮想マシンに接続する必要があります。

手順

  1. 仮想マシンを起動し、グラフィカルコンソールに接続します。
  2. Windows ユーザーセッションにログインします。
  3. Device Manager を開き、Other devices を拡張して、Unknown device をリスト表示します。

    1. Device Properties を開いて、不明なデバイスを特定します。
    2. デバイスを右クリックし、Properties を選択します。
    3. Details タブをクリックし、Property リストで Hardware Ids を選択します。
    4. Hardware IdsValue をサポートされる VirtIO ドライバーと比較します。
  4. デバイスを右クリックし、Update Driver Software を選択します。
  5. Browse my computer for driver software をクリックし、VirtIO ドライバーが置かれている割り当て済みの SATA CD ドライブの場所に移動します。ドライバーは、ドライバーのタイプ、オペレーティングシステム、および CPU アーキテクチャー別に階層的に編成されます。
  6. Next をクリックしてドライバーをインストールします。
  7. 必要なすべての VirtIO ドライバーに対してこのプロセスを繰り返します。
  8. ドライバーのインストール後に、Close をクリックしてウィンドウを閉じます。
  9. 仮想マシンを再起動してドライバーのインストールを完了します。

Windows 仮想マシンに SATA CD ドライブとして追加するコンテナーディスクから VirtIO ドライバーをインストールできます。

ヒント

コンテナーディスクがクラスター内に存在しない場合、コンテナーディスクは Red Hat レジストリーからダウンロードされるため、Red Hat エコシステムカタログ からの container-native-virtualization/virtio-win コンテナーディスクのダウンロードは必須ではありません。ただし、ダウンロードするとインストール時間が短縮されます。

前提条件

  • 制限された環境では、Red Hat レジストリー、またはダウンロードされた container-native-virtualization/virtio-win コンテナーディスクにアクセスできる必要があります。
  • virtctl CLI がインストールされている。
  • OpenShift CLI (oc) がインストールされている。

手順

  1. VirtualMachine マニフェストを編集して、container-native-virtualization/virtio-win コンテナーディスクを CD ドライブとして追加します。

    # ...
    spec:
      domain:
        devices:
          disks:
            - name: virtiocontainerdisk
              bootOrder: 2 
    1
    
              cdrom:
                bus: sata
    volumes:
      - containerDisk:
          image: container-native-virtualization/virtio-win
        name: virtiocontainerdisk
    Copy to Clipboard Toggle word wrap
    1
    OpenShift Virtualization は、VirtualMachine マニフェストで定義された順序で仮想マシンディスクを起動します。container-native-virtualization/virtio-win コンテナーディスクの前に起動する他の仮想マシンディスクを定義するか、オプションの bootOrder パラメーターを使用して仮想マシンが正しいディスクから起動するようにすることができます。ディスクのブート順序を設定する場合は、他のディスクのブート順序も設定する必要があります。
  2. 変更を適用します。

    • 仮想マシンを実行していない場合は、次のコマンドを実行します。

      $ virtctl start <vm> -n <namespace>
      Copy to Clipboard Toggle word wrap
    • 仮想マシンが実行中の場合は、仮想マシンを再起動するか、次のコマンドを実行します。

      $ oc apply -f <vm.yaml>
      Copy to Clipboard Toggle word wrap
  3. 仮想マシンが起動したら、SATA CD ドライブから VirtIO ドライバーをインストールします。

8.2.3. VirtIO ドライバーの更新

8.2.3.1. Windows 仮想マシンでの VirtIO ドライバーの更新

Windows Update サービスを使用して、Windows 仮想マシン上の virtio ドライバーを更新します。

前提条件

  • クラスターはインターネットに接続されている必要があります。切断されたクラスターは Windows Update サービスにアクセスできません。

手順

  1. Windows ゲストオペレーティングシステムで、Windows キーをクリックし、Settings を選択します。
  2. Windows UpdateAdvanced OptionsOptional Updates に移動します。
  3. Red Hat, Inc. からのすべての更新をインストールします。
  4. 仮想マシンを再起動します。

検証

  1. Windows 仮想マシンで、Device Manager に移動します。
  2. デバイスを選択します。
  3. Driver タブを選択します。
  4. Driver Details をクリックし、virtio ドライバーの詳細に正しいバージョンが表示されていることを確認します。

8.3. 仮想マシンコンソールへの接続

次のコンソールに接続して、実行中の仮想マシンにアクセスできます。

8.3.1. VNC コンソールへの接続

Red Hat OpenShift Service on AWS Web コンソールまたは virtctl コマンドラインツールを使用して、仮想マシンの VNC コンソールに接続できます。

8.3.1.1. Web コンソールを使用した VNC コンソールへの接続

Red Hat OpenShift Service on AWS Web コンソールを使用して、仮想マシン (VM) の VNC コンソールに接続できます。

注記

vGPU が仲介デバイスとして割り当てられている Windows 仮想マシンに接続すると、デフォルトの表示と vGPU 表示を切り替えることができます。

手順

  1. VirtualizationVirtualMachines ページで仮想マシンをクリックして、VirtualMachine details ページを開きます。
  2. Console タブをクリックします。VNC コンソールセッションが自動的に開始します。
  3. オプション: Windows 仮想マシンの vGPU 表示に切り替えるには、Send key リストから Ctl + Alt + 2 を選択します。

    • デフォルトの表示に戻すには、Send key リストから Ctl + Alt + 1 を選択します。
  4. コンソールセッションを終了するには、コンソールペインの外側をクリックし、Disconnect をクリックします。
8.3.1.2. virtctl を使用した VNC コンソールへの接続

virtctl コマンドラインツールを使用して、実行中の仮想マシンの VNC コンソールに接続できます。

注記

SSH 接続経由でリモートマシン上で virtctl vnc コマンドを実行する場合は、-X フラグまたは -Y フラグを指定して ssh コマンドを実行して、X セッションをローカルマシンに転送する必要があります。

前提条件

  • virt-viewer パッケージをインストールする必要があります。

手順

  1. 次のコマンドを実行して、コンソールセッションを開始します。

    $ virtctl vnc <vm_name>
    Copy to Clipboard Toggle word wrap
  2. 接続に失敗した場合は、次のコマンドを実行してトラブルシューティング情報を収集します。

    $ virtctl vnc <vm_name> -v 4
    Copy to Clipboard Toggle word wrap
8.3.1.3. VNC コンソールの一時トークンの生成

Kubernetes API が仮想マシン (VM) の VNC にアクセスするための一時的な認証ベアラートークンを生成します。

注記

Kubernetes は、curl コマンドを変更することで、ベアラートークンの代わりにクライアント証明書を使用した認証もサポートします。

前提条件

  • OpenShift Virtualization 4.14 以降および ssp-operator 4.14 以降を搭載した実行中の仮想マシン。
  • OpenShift CLI (oc) がインストールされている。

手順

  1. HyperConverged (HCO) カスタムリソース (CR) の deployVmConsoleProxy フィールド値を true に設定します。

    $ oc patch hyperconverged kubevirt-hyperconverged -n openshift-cnv --type json -p '[{"op": "replace", "path": "/spec/deployVmConsoleProxy", "value": true}]'
    Copy to Clipboard Toggle word wrap
  2. 次のコマンドを入力してトークンを生成します。

    $ curl --header "Authorization: Bearer ${TOKEN}" \
         "https://api.<cluster_fqdn>/apis/token.kubevirt.io/v1alpha1/namespaces/<namespace>/virtualmachines/<vm_name>/vnc?duration=<duration>"
    Copy to Clipboard Toggle word wrap

    <duration> パラメーターは時間と分で設定でき、最小期間は 10 分です。たとえば、5h30m です。このパラメーターが設定されていない場合、トークンはデフォルトで 10 分間有効です。

    出力サンプル

    { "token": "eyJhb..." }
    Copy to Clipboard Toggle word wrap
  3. オプション: 出力で提供されたトークンを使用して変数を作成します。

    $ export VNC_TOKEN="<token>"
    Copy to Clipboard Toggle word wrap

これで、トークンを使用して、仮想マシンの VNC コンソールにアクセスできるようになります。

検証

  1. 次のコマンドを入力してクラスターにログインします。

    $ oc login --token ${VNC_TOKEN}
    Copy to Clipboard Toggle word wrap
  2. virtctl コマンドを使用して、仮想マシンの VNC コンソールへのアクセスをテストします。

    $ virtctl vnc <vm_name> -n <namespace>
    Copy to Clipboard Toggle word wrap
警告

現在、特定のトークンを取り消すことはできません。

トークンを取り消すには、トークンの作成に使用したサービスアカウントを削除する必要があります。ただし、これにより、サービスアカウントを使用して作成された他のすべてのトークンも取り消されます。次のコマンドは注意して使用してください。

$ virtctl delete serviceaccount --namespace "<namespace>" "<vm_name>-vnc-access"
Copy to Clipboard Toggle word wrap

クラスター管理者は、クラスターロールをインストールし、それをユーザーまたはサービスアカウントにバインドして、VNC コンソールのトークンを生成するエンドポイントへのアクセスを許可できます。

手順

  • クラスターロールをユーザーまたはサービスアカウントにバインドすることを選択します。

    • クラスターロールをユーザーにバインドするには、次のコマンドを実行します。

      $ kubectl create rolebinding "${ROLE_BINDING_NAME}" --clusterrole="token.kubevirt.io:generate" --user="${USER_NAME}"
      Copy to Clipboard Toggle word wrap
    • 以下のコマンドを実行してクラスターロールをサービスアカウントにバインドします。

      $ kubectl create rolebinding "${ROLE_BINDING_NAME}" --clusterrole="token.kubevirt.io:generate" --serviceaccount="${SERVICE_ACCOUNT_NAME}"
      Copy to Clipboard Toggle word wrap

8.3.2. シリアルコンソールへの接続

Red Hat OpenShift Service on AWS Web コンソールまたは virtctl コマンドラインツールを使用して、仮想マシンのシリアルコンソールに接続できます。

注記

単一の仮想マシンに対する同時 VNC 接続の実行は、現在サポートされていません。

8.3.2.1. Web コンソールを使用したシリアルコンソールへの接続

Red Hat OpenShift Service on AWS Web コンソールを使用して、仮想マシン (VM) のシリアルコンソールに接続できます。

注記

vGPU が仲介デバイスとして割り当てられている Windows 仮想マシンに接続すると、デフォルトの表示と vGPU 表示を切り替えることができます。

手順

  1. VirtualizationVirtualMachines ページで仮想マシンをクリックして、VirtualMachine details ページを開きます。
  2. Console タブをクリックします。VNC コンソールセッションが自動的に開始します。
  3. Disconnect をクリックして、VNC コンソールセッションを終了します。それ以外の場合、VNC コンソールセッションは引き続きバックグラウンドで実行されます。
  4. コンソールリストから Serial console を選択します。
  5. オプション: Windows 仮想マシンの vGPU 表示に切り替えるには、Send key リストから Ctl + Alt + 2 を選択します。

    • デフォルトの表示に戻すには、Send key リストから Ctl + Alt + 1 を選択します。
  6. コンソールセッションを終了するには、コンソールペインの外側をクリックし、Disconnect をクリックします。
8.3.2.2. virtctl を使用したシリアルコンソールへの接続

virtctl コマンドラインツールを使用して、実行中の仮想マシンのシリアルコンソールに接続できます。

注記

SSH 接続経由でリモートマシン上で virtctl vnc コマンドを実行する場合は、-X フラグまたは -Y フラグを指定して ssh コマンドを実行して、X セッションをローカルマシンに転送する必要があります。

前提条件

  • virt-viewer パッケージをインストールする必要があります。

手順

  1. 次のコマンドを実行して、コンソールセッションを開始します。

    $ virtctl console <vm_name>
    Copy to Clipboard Toggle word wrap
  2. Ctrl+] を押してコンソールセッションを終了します。

    $ virtctl vnc <vm_name>
    Copy to Clipboard Toggle word wrap
  3. 接続に失敗した場合は、次のコマンドを実行してトラブルシューティング情報を収集します。

    $ virtctl vnc <vm_name> -v 4
    Copy to Clipboard Toggle word wrap

8.3.3. デスクトップビューアーに接続する

デスクトップビューアーとリモートデスクトッププロトコル (RDP) を使用して、Windows 仮想マシンに接続できます。

8.3.3.1. Web コンソールを使用したデスクトップビューアーへの接続

Red Hat OpenShift Service on AWS Web コンソールを使用して、仮想マシン (VM) のデスクトップビューアーに接続できます。Red Hat OpenShift Service on AWS Web コンソールを使用して、Windows 仮想マシン (VM) のデスクトップビューアーに接続できます。

注記

vGPU が仲介デバイスとして割り当てられている Windows 仮想マシンに接続すると、デフォルトの表示と vGPU 表示を切り替えることができます。

前提条件

  • QEMU ゲストエージェントが Windows 仮想マシンにインストールされている。
  • RDP クライアントがインストールされている。

手順

  1. VirtualizationVirtualMachines ページで仮想マシンをクリックして、VirtualMachine details ページを開きます。
  2. Console タブをクリックします。VNC コンソールセッションが自動的に開始します。
  3. Disconnect をクリックして、VNC コンソールセッションを終了します。それ以外の場合、VNC コンソールセッションは引き続きバックグラウンドで実行されます。
  4. コンソールのリストから Desktop viewer を選択します。
  5. RDP サービスの作成 をクリックして、RDP サービス ダイアログを開きます。
  6. Expose RDP Service を選択し、Save をクリックしてノードポートサービスを作成します。
  7. Launch Remote Desktop をクリックして .rdp ファイルをダウンロードし、デスクトップビューアーを起動します。
  8. オプション: Windows 仮想マシンの vGPU 表示に切り替えるには、Send key リストから Ctl + Alt + 2 を選択します。

    • デフォルトの表示に戻すには、Send key リストから Ctl + Alt + 1 を選択します。
  9. コンソールセッションを終了するには、コンソールペインの外側をクリックし、Disconnect をクリックします。

8.4. 仮想マシンへの SSH アクセスの設定

次の方法を使用して、仮想マシンへの SSH アクセスを設定できます。

  • virtctl ssh コマンド

    SSH 鍵ペアを作成し、公開鍵を仮想マシンに追加し、秘密鍵を使用して virtctl ssh コマンドを実行して仮想マシンに接続します。

    cloud-init データソースを使用して設定できるゲストオペレーティングシステムを使用して、実行時または最初の起動時に Red Hat Enterprise Linux (RHEL) 9 仮想マシンに SSH 公開鍵を追加できます。

  • virtctl port-forward コマンド

    virtctl port-foward コマンドを .ssh/config ファイルに追加し、OpenSSH を使用して仮想マシンに接続します。

  • サービス

    サービスを作成し、そのサービスを仮想マシンに関連付け、サービスによって公開されている IP アドレスとポートに接続します。

  • セカンダリーネットワーク

    セカンダリーネットワークを設定し、仮想マシンをセカンダリーネットワークインターフェイスに接続し、DHCP によって割り当てられた IP アドレスに接続します。

8.4.1. アクセス設定の考慮事項

仮想マシンへのアクセスを設定する各方法には、トラフィックの負荷とクライアントの要件に応じて利点と制限があります。

サービスは優れたパフォーマンスを提供するため、クラスターの外部からアクセスされるアプリケーションに推奨されます。

内部クラスターネットワークがトラフィック負荷を処理できない場合は、セカンダリーネットワークを設定できます。

virtctl ssh および virtctl port-forwarding コマンド
  • 設定が簡単。
  • 仮想マシンのトラブルシューティングに推奨されます。
  • Ansible を使用した仮想マシンの自動設定には、virtctl port-forwarding が推奨されます。
  • 動的 SSH 公開鍵を使用して、Ansible で仮想マシンをプロビジョニングできます。
  • API サーバーに負担がかかるため、Rsync やリモートデスクトッププロトコルなどの高トラフィックのアプリケーションには推奨されません。
  • API サーバーはトラフィック負荷を処理できる必要があります。
  • クライアントは API サーバーにアクセスできる必要があります。
  • クライアントはクラスターへのアクセス認証情報を持っている必要があります。
クラスター IP サービス
  • 内部クラスターネットワークはトラフィック負荷を処理できる必要があります。
  • クライアントは内部クラスター IP アドレスにアクセスできる必要があります。
ノードポートサービス
  • 内部クラスターネットワークはトラフィック負荷を処理できる必要があります。
  • クライアントは少なくとも 1 つのノードにアクセスできる必要があります。
ロードバランサーサービス
  • ロードバランサーを設定する必要があります。
  • 各ノードは、1 つ以上のロードバランサーサービスのトラフィック負荷を処理できなければなりません。
セカンダリーネットワーク
  • トラフィックが内部クラスターネットワークを経由しないため、優れたパフォーマンスが得られます。
  • ネットワークトポロジーへの柔軟なアプローチを可能にします。
  • 仮想マシンはセカンダリーネットワークに直接公開されるため、ゲストオペレーティングシステムは適切なセキュリティーを備えて設定する必要があります。仮想マシンが侵害されると、侵入者がセカンダリーネットワークにアクセスする可能性があります。

8.4.2. virtctl ssh の使用

virtctl ssh コマンドを実行することで、仮想マシン (VM) に SSH 公開鍵を追加し、仮想マシンに接続できます。

この方法の設定は簡単です。ただし、API サーバーに負担がかかるため、トラフィック負荷が高い場合には推奨されません。

8.4.2.1. 静的および動的 SSH 鍵の管理について

SSH 公開鍵は、最初の起動時に静的に、または実行時に動的に仮想マシン (VM) に追加できます。

注記

Red Hat Enterprise Linux (RHEL) 9 のみが動的キーインジェクションをサポートしています。

静的 SSH 鍵の管理

cloud-init データソースを使用した設定をサポートするゲストオペレーティングシステムを搭載した仮想マシンに、静的に管理される SSH 鍵を追加できます。鍵は最初の起動時に仮想マシン (VM) に追加されます。

次のいずれかの方法を使用して鍵を追加できます。

  • Web コンソールまたはコマンドラインを使用して単一の仮想マシンを作成する場合は、その仮想マシンに鍵を追加します。
  • Web コンソールを使用してプロジェクトに鍵を追加します。その後、このプロジェクトで作成した仮想マシンに鍵が自動的に追加されます。

ユースケース

  • 仮想マシンの所有者は、新しく作成したすべての仮想マシンを 1 つの鍵でプロビジョニングできます。
動的 SSH 鍵の管理

Red Hat Enterprise Linux (RHEL) 9 がインストールされている仮想マシンに対して、動的 SSH 鍵の管理を有効にできます。その後、実行時に鍵を更新できます。鍵は、Red Hat ブートソースとともにインストールされる QEMU ゲストエージェントによって追加されます。

動的鍵の管理が無効になっている場合、仮想マシンのデフォルトの鍵管理設定は、その仮想マシンに使用されるイメージによって決まります。

ユースケース

  • 仮想マシンへのアクセスの付与または取り消し: クラスター管理者は、namespace 内のすべての仮想マシンに適用される Secret オブジェクトに個々のユーザーのキーを追加または削除することで、リモート仮想マシンアクセスを付与または取り消すことができます。
  • ユーザーアクセス: 作成および管理するすべての仮想マシンにアクセス認証情報を追加できます。
  • Ansible プロビジョニング:

    • 運用チームのメンバーは、Ansible プロビジョニングに使用されるすべてのキーを含む 1 つのシークレットを作成できます。
    • 仮想マシン所有者は、仮想マシンを作成し、Ansible プロビジョニングに使用されるキーをアタッチできます。
  • キーのローテーション:

    • クラスター管理者は、namespace 内の仮想マシンによって使用される Ansible プロビジョナーキーをローテーションできます。
    • ワークロード所有者は、管理する仮想マシンのキーをローテーションできます。
8.4.2.2. 静的キー管理

Red Hat OpenShift Service on AWS Web コンソールまたはコマンドラインを使用して仮想マシン (VM) を作成するときに、静的に管理される公開 SSH 鍵を追加できます。このキーは、仮想マシンが初めて起動するときに、cloud-init データソースとして追加されます。

Web コンソールを使用して仮想マシンを作成するときに、公開 SSH 鍵をプロジェクトに追加することもできます。鍵はシークレットとして保存され、作成するすべての仮想マシンに自動的に追加されます。

注記

シークレットは namespace リソースであるため、シークレットをプロジェクトに追加し、その後仮想マシンを削除しても、シークレットは保持されます。シークレットは、手動で削除する必要があります。

8.4.2.2.1. テンプレートから仮想マシンを作成するときにキーを追加する

Red Hat OpenShift Service on AWS Web コンソールを使用して仮想マシン (VM) を作成するときに、静的に管理される公開 SSH 鍵を追加できます。キーは、最初の起動時に cloud-init データソースとして仮想マシンに追加されます。この方法は、cloud-init ユーザーデータには影響しません。

オプション: プロジェクトにキーを追加できます。その後、このキーはプロジェクトで作成した仮想マシンに自動的に追加されます。

前提条件

  • ssh-keygen コマンドを実行して、SSH 鍵ペアを生成しました。

手順

  1. Web コンソールで VirtualizationCatalog に移動します。
  2. テンプレートタイルをクリックします。

    ゲストオペレーティングシステムは、cloud-init データソースからの設定をサポートする必要があります。

  3. Customize VirtualMachine をクリックします。
  4. Next をクリックします。
  5. Scripts タブをクリックします。
  6. プロジェクトに SSH 公開鍵をまだ追加していない場合は、Authorized SSH key の横にある編集アイコンをクリックし、次のいずれかのオプションを選択します。

    • Use existing: シークレットリストからシークレットを選択します。
    • Add new:

      1. SSH 鍵ファイルを参照するか、ファイルを鍵のフィールドに貼り付けます。
      2. シークレット名を入力します。
      3. オプション: Automatically apply this key to any new VirtualMachine you create in this project を選択します。
  7. Save をクリックします。
  8. Create VirtualMachine をクリックします。

    VirtualMachine details ページには、仮想マシン作成の進行状況が表示されます。

検証

  • Configuration タブの Scripts タブをクリックします。

    シークレット名は Authorized SSH key セクションに表示されます。

8.4.2.2.2. Web コンソールを使用したインスタンスタイプからの仮想マシンの作成

Red Hat OpenShift Service on AWS Web コンソールを使用して、インスタンスタイプから仮想マシン (VM) を作成できます。Web コンソールを使用して、既存のスナップショットをコピーするか仮想マシンを複製して、仮想マシンを作成することもできます。

使用可能な起動可能なボリュームのリストから仮想マシンを作成できます。Linux ベースまたは Windows ベースのボリュームをリストに追加できます。

Red Hat OpenShift Service on AWS Web コンソールを使用してインスタンスタイプから仮想マシン (VM) を作成するときに、静的に管理される SSH 鍵を追加できます。キーは、最初の起動時に cloud-init データソースとして仮想マシンに追加されます。この方法は、cloud-init ユーザーデータには影響しません。

手順

  1. Web コンソールで、VirtualizationCatalog に移動します。

    InstanceTypes タブがデフォルトで開きます。

    注記

    仮想マシン設定を使用する IBM Z® システムで downward-metrics デバイスを設定する場合は、spec.preference.name 値を rhel.9.s390x に設定するか、*.s390x という形式の使用可能な別の設定を指定する必要があります。

  2. 次のオプションのいずれかを選択します。

    • リストから適切な起動可能なボリュームを選択します。リストが切り捨てられている場合は、Show all ボタンをクリックしてリスト全体を表示します。

      注記

      ブート可能ボリュームテーブルには、openshift-virtualization-os-images namespace 内の instancetype.kubevirt.io/default-preference ラベルを持つボリュームのみリストされます。

      • オプション: 星アイコンをクリックして、ブート可能ボリュームをお気に入りとして指定します。星付きのブート可能ボリュームは、ボリュームリストの最初に表示されます。
    • 新しいボリュームをアップロードするか、既存の永続ボリューム要求 (PVC)、ボリュームスナップショット、または containerDisk ボリュームを使用するには Add volume をクリックします。Save をクリックします。

      クラスターで使用できないオペレーティングシステムのロゴは、リストの下部に表示されます。Add volume リンクをクリックすると、必要なオペレーティングシステムのボリュームを追加できます。

      さらに、Windows の起動可能なボリュームを作成する クイックスタートへのリンクもあります。Select volume to boot from の横にある疑問符アイコンの上にポインターを置くと、ポップオーバーに同じリンクが表示されます。

      環境をインストールした直後、または環境が切断された直後は、起動元のボリュームのリストは空になります。その場合、Windows、RHEL、Linux の 3 つのオペレーティングシステムのロゴが表示されます。Add volume ボタンをクリックすると、要件を満たす新しいボリュームを追加できます。

  3. インスタンスタイプのタイルをクリックし、ワークロードに適したリソースサイズを選択します。
  4. オプション: 起動元のボリュームに適用される仮想マシンの詳細 (仮想マシンの名前を含む) を選択します。

    • Linux ベースのボリュームの場合は、次の手順に従って SSH を設定します。

      1. プロジェクトに SSH 公開鍵をまだ追加していない場合は、VirtualMachine details セクションの Authorized SSH key の横にある編集アイコンをクリックします。
      2. 以下のオプションのいずれかを選択します。

        • Use existing: シークレットリストからシークレットを選択します。
        • Add new: 以下の手順に従ってください。

          1. SSH 公開鍵ファイルを参照するか、ファイルを鍵のフィールドに貼り付けます。
          2. シークレット名を入力します。
          3. オプション: Automatically apply this key to any new VirtualMachine you create in this project を選択します。
      3. Save をクリックします。
    • Windows ボリュームの場合は、次のいずれかの手順に従って sysprep オプションを設定します。

      • Windows ボリュームに sysprep オプションをまだ追加していない場合は、次の手順に従います。

        1. VirtualMachine details セクションの Sysprep の横にある編集アイコンをクリックします。
        2. Autoattend.xml アンサーファイルを追加します。
        3. Unattend.xml アンサーファイルを追加します。
        4. Save をクリックします。
      • Windows ボリュームに既存の sysprep オプションを使用する場合は、次の手順に従います。

        1. 既存の sysprep を添付 をクリックします。
        2. 既存の sysprep Unattend.xml アンサーファイルの名前を入力します。
        3. Save をクリックします。
  5. オプション: Windows 仮想マシンを作成する場合は、Windows ドライバーディスクをマウントできます。

    1. Customize VirtualMachine ボタンをクリックします。
    2. VirtualMachine details ページで、Storage をクリックします。
    3. Mount Windows drivers disk チェックボックスを選択します。
  6. オプション: View YAML & CLI をクリックして YAML ファイルを表示します。CLI をクリックして CLI コマンドを表示します。YAML ファイルの内容または CLI コマンドをダウンロードまたはコピーすることもできます。
  7. Create VirtualMachine をクリックします。

仮想マシンの作成後、VirtualMachine details ページでステータスを監視できます。

8.4.2.2.3. CLI を使用して仮想マシンを作成するときに鍵を追加する

コマンドラインを使用して仮想マシン (VM) を作成するときに、静的に管理される SSH 公開鍵を追加できます。鍵は最初の起動時に仮想マシンに追加されます。

鍵は、cloud-init データソースとして仮想マシンに追加されます。この方法では、cloud-init ユーザーデータ内のアプリケーションデータからアクセス認証情報が分離されます。この方法は、cloud-init ユーザーデータには影響しません。

前提条件

  • ssh-keygen コマンドを実行して、SSH 鍵ペアを生成しました。
  • OpenShift CLI (oc) がインストールされている。

手順

  1. VirtualMachine オブジェクトと Secret オブジェクトのマニフェストファイルを作成します。

    マニフェストの例

    apiVersion: kubevirt.io/v1
    kind: VirtualMachine
    metadata:
      name: example-vm
      namespace: example-namespace
    spec:
      dataVolumeTemplates:
        - metadata:
            name: example-vm-volume
          spec:
            sourceRef:
              kind: DataSource
              name: rhel9
              namespace: openshift-virtualization-os-images
            storage:
              resources: {}
      instancetype:
        name: u1.medium
      preference:
        name: rhel.9
      runStrategy: Always
      template:
        spec:
          domain:
            devices: {}
          volumes:
            - dataVolume:
                name: example-vm-volume
              name: rootdisk
            - cloudInitNoCloud: 
    1
    
                userData: |-
                  #cloud-config
                  user: cloud-user
              name: cloudinitdisk
          accessCredentials:
            - sshPublicKey:
                propagationMethod:
                  noCloud: {}
                source:
                  secret:
                    secretName: authorized-keys 
    2
    
    ---
    apiVersion: v1
    kind: Secret
    metadata:
      name: authorized-keys
    data:
      key: c3NoLXJzYSB... 
    3
    Copy to Clipboard Toggle word wrap

    1
    cloudInitNoCloud データソースを指定します。
    2
    Secret オブジェクト名を指定します。
    3
    SSH 公開鍵を貼り付けます。
  2. 次のコマンドを実行して、VirtualMachine オブジェクトと Secret オブジェクトを作成します。

    $ oc create -f <manifest_file>.yaml
    Copy to Clipboard Toggle word wrap
  3. 次のコマンドを実行して仮想マシンを起動します。

    $ virtctl start vm example-vm -n example-namespace
    Copy to Clipboard Toggle word wrap

検証

  • 仮想マシン設定を取得します。

    $ oc describe vm example-vm -n example-namespace
    Copy to Clipboard Toggle word wrap

    出力例

    apiVersion: kubevirt.io/v1
    kind: VirtualMachine
    metadata:
      name: example-vm
      namespace: example-namespace
    spec:
      template:
        spec:
          accessCredentials:
            - sshPublicKey:
                propagationMethod:
                  noCloud: {}
                source:
                  secret:
                    secretName: authorized-keys
    # ...
    Copy to Clipboard Toggle word wrap

8.4.2.3. 動的なキー管理

Red Hat OpenShift Service on AWS Web コンソールまたはコマンドラインを使用して、仮想マシン (VM) の動的キーインジェクションを有効にできます。その後、実行時にキーを更新できます。

注記

Red Hat Enterprise Linux (RHEL) 9 のみが動的キーインジェクションをサポートしています。

動的キーインジェクションを無効にすると、仮想マシンは作成元のイメージのキー管理方法を継承します。

Red Hat OpenShift Service on AWS Web コンソールを使用してテンプレートから仮想マシン (VM) を作成するときに、動的な公開 SSH 鍵インジェクションを有効化できます。その後、実行時にキーを更新できます。

注記

Red Hat Enterprise Linux (RHEL) 9 のみが動的キーインジェクションをサポートしています。

鍵は、RHEL 9 とともにインストールされる QEMU ゲストエージェントによって仮想マシンに追加されます。

前提条件

  • ssh-keygen コマンドを実行して、SSH 鍵ペアを生成しました。

手順

  1. Web コンソールで VirtualizationCatalog に移動します。
  2. Red Hat Enterprise Linux 9 VM タイルをクリックします。
  3. Customize VirtualMachine をクリックします。
  4. Next をクリックします。
  5. Scripts タブをクリックします。
  6. プロジェクトに SSH 公開鍵をまだ追加していない場合は、Authorized SSH key の横にある編集アイコンをクリックし、次のいずれかのオプションを選択します。

    • Use existing: シークレットリストからシークレットを選択します。
    • Add new:

      1. SSH 鍵ファイルを参照するか、ファイルを鍵のフィールドに貼り付けます。
      2. シークレット名を入力します。
      3. オプション: Automatically apply this key to any new VirtualMachine you create in this project を選択します。
  7. Dynamic SSH key injection をオンに設定します。
  8. Save をクリックします。
  9. Create VirtualMachine をクリックします。

    VirtualMachine details ページには、仮想マシン作成の進行状況が表示されます。

検証

  • Configuration タブの Scripts タブをクリックします。

    シークレット名は Authorized SSH key セクションに表示されます。

8.4.2.3.2. Web コンソールを使用したインスタンスタイプからの仮想マシンの作成

Red Hat OpenShift Service on AWS Web コンソールを使用して、インスタンスタイプから仮想マシン (VM) を作成できます。Web コンソールを使用して、既存のスナップショットをコピーするか仮想マシンを複製して、仮想マシンを作成することもできます。

使用可能な起動可能なボリュームのリストから仮想マシンを作成できます。Linux ベースまたは Windows ベースのボリュームをリストに追加できます。

Red Hat OpenShift Service on AWS Web コンソールを使用して、インスタンスタイプから仮想マシン (VM) を作成するときに、動的 SSH 鍵インジェクションを有効化できます。その後、実行時にキーを追加または取り消すことができます。

注記

Red Hat Enterprise Linux (RHEL) 9 のみが動的キーインジェクションをサポートしています。

鍵は、RHEL 9 とともにインストールされる QEMU ゲストエージェントによって仮想マシンに追加されます。

手順

  1. Web コンソールで、VirtualizationCatalog に移動します。

    InstanceTypes タブがデフォルトで開きます。

    注記

    仮想マシン設定を使用する IBM Z® システムで downward-metrics デバイスを設定する場合は、spec.preference.name 値を rhel.9.s390x に設定するか、*.s390x という形式の使用可能な別の設定を指定する必要があります。

  2. 次のオプションのいずれかを選択します。

    • リストから適切な起動可能なボリュームを選択します。リストが切り捨てられている場合は、Show all ボタンをクリックしてリスト全体を表示します。

      注記

      ブート可能ボリュームテーブルには、openshift-virtualization-os-images namespace 内の instancetype.kubevirt.io/default-preference ラベルを持つボリュームのみリストされます。

      • オプション: 星アイコンをクリックして、ブート可能ボリュームをお気に入りとして指定します。星付きのブート可能ボリュームは、ボリュームリストの最初に表示されます。
    • 新しいボリュームをアップロードするか、既存の永続ボリューム要求 (PVC)、ボリュームスナップショット、または containerDisk ボリュームを使用するには Add volume をクリックします。Save をクリックします。

      クラスターで使用できないオペレーティングシステムのロゴは、リストの下部に表示されます。Add volume リンクをクリックすると、必要なオペレーティングシステムのボリュームを追加できます。

      さらに、Windows の起動可能なボリュームを作成する クイックスタートへのリンクもあります。Select volume to boot from の横にある疑問符アイコンの上にポインターを置くと、ポップオーバーに同じリンクが表示されます。

      環境をインストールした直後、または環境が切断された直後は、起動元のボリュームのリストは空になります。その場合、Windows、RHEL、Linux の 3 つのオペレーティングシステムのロゴが表示されます。Add volume ボタンをクリックすると、要件を満たす新しいボリュームを追加できます。

  3. インスタンスタイプのタイルをクリックし、ワークロードに適したリソースサイズを選択します。
  4. Red Hat Enterprise Linux 9 VM タイルをクリックします。
  5. オプション: 起動元のボリュームに適用される仮想マシンの詳細 (仮想マシンの名前を含む) を選択します。

    • Linux ベースのボリュームの場合は、次の手順に従って SSH を設定します。

      1. プロジェクトに SSH 公開鍵をまだ追加していない場合は、VirtualMachine details セクションの Authorized SSH key の横にある編集アイコンをクリックします。
      2. 以下のオプションのいずれかを選択します。

        • Use existing: シークレットリストからシークレットを選択します。
        • Add new: 以下の手順に従ってください。

          1. SSH 公開鍵ファイルを参照するか、ファイルを鍵のフィールドに貼り付けます。
          2. シークレット名を入力します。
          3. オプション: Automatically apply this key to any new VirtualMachine you create in this project を選択します。
      3. Save をクリックします。
    • Windows ボリュームの場合は、次のいずれかの手順に従って sysprep オプションを設定します。

      • Windows ボリュームに sysprep オプションをまだ追加していない場合は、次の手順に従います。

        1. VirtualMachine details セクションの Sysprep の横にある編集アイコンをクリックします。
        2. Autoattend.xml アンサーファイルを追加します。
        3. Unattend.xml アンサーファイルを追加します。
        4. Save をクリックします。
      • Windows ボリュームに既存の sysprep オプションを使用する場合は、次の手順に従います。

        1. 既存の sysprep を添付 をクリックします。
        2. 既存の sysprep Unattend.xml アンサーファイルの名前を入力します。
        3. Save をクリックします。
  6. VirtualMachine details セクションで Dynamic SSH key injection をオンに設定します。
  7. オプション: Windows 仮想マシンを作成する場合は、Windows ドライバーディスクをマウントできます。

    1. Customize VirtualMachine ボタンをクリックします。
    2. VirtualMachine details ページで、Storage をクリックします。
    3. Mount Windows drivers disk チェックボックスを選択します。
  8. オプション: View YAML & CLI をクリックして YAML ファイルを表示します。CLI をクリックして CLI コマンドを表示します。YAML ファイルの内容または CLI コマンドをダウンロードまたはコピーすることもできます。
  9. Create VirtualMachine をクリックします。

仮想マシンの作成後、VirtualMachine details ページでステータスを監視できます。

8.4.2.3.3. Web コンソールを使用した動的 SSH キーインジェクションの有効化

Red Hat OpenShift Service on AWS Web コンソールを使用して、仮想マシン (VM) の動的キーインジェクションを有効にできます。その後、実行時に SSH 公開鍵を更新できます。

鍵は、Red Hat Enterprise Linux (RHEL) 9 とともにインストールされる QEMU ゲストエージェントによって仮想マシンに追加されます。

前提条件

  • ゲストオペレーティングシステムは RHEL 9 です。

手順

  1. Web コンソールで VirtualizationVirtualMachines に移動します。
  2. 仮想マシンを選択して、VirtualMachine details ページを開きます。
  3. Configuration タブで、Scripts をクリックします。
  4. プロジェクトに SSH 公開鍵をまだ追加していない場合は、Authorized SSH key の横にある編集アイコンをクリックし、次のいずれかのオプションを選択します。

    • Use existing: シークレットリストからシークレットを選択します。
    • Add new:

      1. SSH 鍵ファイルを参照するか、ファイルを鍵のフィールドに貼り付けます。
      2. シークレット名を入力します。
      3. オプション: Automatically apply this key to any new VirtualMachine you create in this project を選択します。
  5. Dynamic SSH key injection をオンに設定します。
  6. Save をクリックします。
8.4.2.3.4. CLI を使用して動的キーインジェクションを有効にする

コマンドラインを使用して、仮想マシンの動的キーインジェクションを有効にすることができます。その後、実行時に SSH 公開鍵を更新できます。

注記

Red Hat Enterprise Linux (RHEL) 9 のみが動的キーインジェクションをサポートしています。

キーは QEMU ゲストエージェントによって仮想マシンに追加され、RHEL 9 とともに自動的にインストールされます。

前提条件

  • ssh-keygen コマンドを実行して、SSH 鍵ペアを生成しました。
  • OpenShift CLI (oc) がインストールされている。

手順

  1. VirtualMachine オブジェクトと Secret オブジェクトのマニフェストファイルを作成します。

    マニフェストの例

    apiVersion: kubevirt.io/v1
    kind: VirtualMachine
    metadata:
      name: example-vm
      namespace: example-namespace
    spec:
      dataVolumeTemplates:
        - metadata:
            name: example-vm-volume
          spec:
            sourceRef:
              kind: DataSource
              name: rhel9
              namespace: openshift-virtualization-os-images
            storage:
              resources: {}
      instancetype:
        name: u1.medium
      preference:
        name: rhel.9
      runStrategy: Always
      template:
        spec:
          domain:
            devices: {}
          volumes:
            - dataVolume:
                name: example-vm-volume
              name: rootdisk
            - cloudInitNoCloud: 
    1
    
                userData: |-
                  #cloud-config
                  runcmd:
                  - [ setsebool, -P, virt_qemu_ga_manage_ssh, on ]
              name: cloudinitdisk
          accessCredentials:
            - sshPublicKey:
                propagationMethod:
                  qemuGuestAgent:
                    users: ["cloud-user"]
                source:
                  secret:
                    secretName: authorized-keys 
    2
    
    ---
    apiVersion: v1
    kind: Secret
    metadata:
      name: authorized-keys
    data:
      key: c3NoLXJzYSB... 
    3
    Copy to Clipboard Toggle word wrap

    1
    cloudInitNoCloud データソースを指定します。
    2
    Secret オブジェクト名を指定します。
    3
    SSH 公開鍵を貼り付けます。
  2. 次のコマンドを実行して、VirtualMachine オブジェクトと Secret オブジェクトを作成します。

    $ oc create -f <manifest_file>.yaml
    Copy to Clipboard Toggle word wrap
  3. 次のコマンドを実行して仮想マシンを起動します。

    $ virtctl start vm example-vm -n example-namespace
    Copy to Clipboard Toggle word wrap

検証

  • 仮想マシン設定を取得します。

    $ oc describe vm example-vm -n example-namespace
    Copy to Clipboard Toggle word wrap

    出力例

    apiVersion: kubevirt.io/v1
    kind: VirtualMachine
    metadata:
      name: example-vm
      namespace: example-namespace
    spec:
      template:
        spec:
          accessCredentials:
            - sshPublicKey:
                propagationMethod:
                  qemuGuestAgent:
                    users: ["cloud-user"]
                source:
                  secret:
                    secretName: authorized-keys
    # ...
    Copy to Clipboard Toggle word wrap

8.4.2.4. virtctl ssh コマンドの使用

virtcl ssh コマンドを使用して、実行中の仮想マシンにアクセスできます。

前提条件

  • virtctl コマンドラインツールがインストールされている。
  • 仮想マシンに SSH 公開鍵が追加されている。
  • SSH クライアントがインストールされている。
  • virtctl ツールをインストールした環境に、仮想マシンにアクセスするために必要なクラスター権限がある。たとえば、oc login を実行するか、KUBECONFIG 環境変数を設定します。

手順

  • virtctl ssh コマンドを実行します。

    $ virtctl -n <namespace> ssh <username>@example-vm -i <ssh_key> 
    1
    Copy to Clipboard Toggle word wrap
    1
    namespace、ユーザー名、SSH 秘密鍵を指定します。デフォルトの SSH 鍵の場所は /home/user/.ssh です。キーを別の場所に保存する場合は、パスを指定する必要があります。

    $ virtctl -n my-namespace ssh cloud-user@example-vm -i my-key
    Copy to Clipboard Toggle word wrap

ヒント

VirtualMachines ページの仮想マシンの横にあるオプション kebab メニューから、Copy SSH command を選択すると、Web コンソールで virtctl ssh コマンドをコピーできます。

または、ツリービューで仮想マシンを右クリックし、ポップアップメニューから Copy SSH command を選択して、virtctl ssh コマンドをコピーします。

8.4.3. virtctl port-forward コマンドの使用

ローカルの OpenSSH クライアントと virtctl port-forward コマンドを使用して、実行中の仮想マシン (VM) に接続できます。Ansible でこの方法を使用すると、VM の設定を自動化できます。

ポート転送トラフィックはコントロールプレーン経由で送信されるため、この方法はトラフィックの少ないアプリケーションに推奨されます。ただし、API サーバーに負荷が大きいため、Rsync や Remote Desktop Protocol などのトラフィックの高いアプリケーションには推奨されません。

前提条件

  • virtctl クライアントをインストールしている。
  • アクセスする仮想マシンが実行されている。
  • virtctl ツールをインストールした環境に、仮想マシンにアクセスするために必要なクラスター権限がある。たとえば、oc login を実行するか、KUBECONFIG 環境変数を設定します。

手順

  1. 以下のテキストをクライアントマシンの ~/.ssh/config ファイルに追加します。

    Host vm/*
      ProxyCommand virtctl port-forward --stdio=true %h %p
    Copy to Clipboard Toggle word wrap
  2. 次のコマンドを実行して、仮想マシンに接続します。

    $ ssh <user>@vm/<vm_name>.<namespace>
    Copy to Clipboard Toggle word wrap

8.4.4. SSH アクセス用のサービスを使用する

仮想マシンのサービスを作成し、サービスによって公開される IP アドレスとポートに接続できます。

サービスは優れたパフォーマンスを提供するため、クラスターの外部またはクラスター内からアクセスされるアプリケーションに推奨されます。受信トラフィックはファイアウォールによって保護されます。

クラスターネットワークがトラフィック負荷を処理できない場合は、仮想マシンアクセスにセカンダリーネットワークを使用することを検討してください。

8.4.4.1. サービスについて

Kubernetes サービスは一連の Pod で実行されているアプリケーションへのクライアントのネットワークアクセスを公開します。サービスは抽象化、負荷分散を提供し、タイプ NodePortLoadBalancer の場合は外部世界への露出を提供します。

ClusterIP
内部 IP アドレスでサービスを公開し、クラスター内の他のアプリケーションに DNS 名として公開します。1 つのサービスを複数の仮想マシンにマッピングできます。クライアントがサービスに接続しようとすると、クライアントのリクエストは使用可能なバックエンド間で負荷分散されます。ClusterIP はデフォルトのサービスタイプです。
NodePort
クラスター内の選択した各ノードの同じポートでサービスを公開します。NodePort は、ノード自体がクライアントから外部にアクセスできる限り、クラスターの外部からポートにアクセスできるようにします。
LoadBalancer
現在のクラウドに外部ロードバランサーを作成し (サポートされている場合)、固定の外部 IP アドレスをサービスに割り当てます。
注記

Red Hat OpenShift Service on AWS では、ライブマイグレーション中のネットワークのダウンタイムを最小限に抑えるために、負荷分散サービスを設定するときに externalTrafficPolicy: Cluster を使用する必要があります。

8.4.4.2. サービスの作成

Red Hat OpenShift Service on AWS Web コンソール、virtctl コマンドラインツール、または YAML ファイルを使用して、仮想マシン (VM) を公開するサービスを作成できます。

8.4.4.2.1. Web コンソールを使用したロードバランサーサービスの作成の有効化

Red Hat OpenShift Service on AWS Web コンソールを使用して、仮想マシン (VM) のロードバランサーサービスの作成を有効にできます。

前提条件

  • クラスターのロードバランサーが設定されました。
  • cluster-admin ロールを持つユーザーとしてログインしている。
  • ネットワークの Network Attachment Definition を作成している。

手順

  1. VirtualizationOverview に移動します。
  2. Settings タブで、Cluster をクリックします。
  3. Expand General settingsSSH configuration を展開します。
  4. SSH over LoadBalancer service をオンに設定します。
8.4.4.2.2. Web コンソールを使用したサービスの作成

Red Hat OpenShift Service on AWS Web コンソールを使用して、仮想マシン (VM) のノードポートまたはロードバランサーサービスを作成できます。

前提条件

  • ロードバランサーまたはノードポートをサポートするようにクラスターネットワークが設定されている。
  • ロードバランサーサービスを作成するためにロードバランサーサービスの作成が有効化されている。

手順

  1. VirtualMachines に移動し、仮想マシンを選択して、VirtualMachine details ページを表示します。
  2. Details タブで、SSH service type リストから SSH over LoadBalancer を選択します。
  3. オプション: コピーアイコンをクリックして、SSH コマンドをクリップボードにコピーします。

検証

  • Details タブの Services ペインをチェックして、新しいサービスを表示します。
8.4.4.2.3. virtctl を使用したサービスの作成

virtctl コマンドラインツールを使用して、仮想マシン (VM) のサービスを作成できます。

前提条件

  • virtctl コマンドラインツールがインストールされている。
  • サービスをサポートするようにクラスターネットワークを設定しました。
  • virtctl をインストールした環境には、仮想マシンにアクセスするために必要なクラスター権限があります。たとえば、oc login を実行するか、KUBECONFIG 環境変数を設定します。

手順

  • 次のコマンドを実行してサービスを作成します。

    $ virtctl expose vm <vm_name> --name <service_name> --type <service_type> --port <port> 
    1
    Copy to Clipboard Toggle word wrap
    1
    ClusterIPNodePort、または LoadBalancer サービスタイプを指定します。

    $ virtctl expose vm example-vm --name example-service --type NodePort --port 22
    Copy to Clipboard Toggle word wrap

検証

  • 以下のコマンドを実行してサービスを確認します。

    $ oc get service
    Copy to Clipboard Toggle word wrap

次のステップ

virtctl を使用してサービスを作成した後、VirtualMachine マニフェストの spec.template.metadata.labels スタンザに special: key を追加する必要があります。コマンドラインを使用したサービスの作成 を参照してください。

8.4.4.2.4. CLI を使用したサービスの作成

コマンドラインを使用して、サービスを作成し、それを仮想マシンに関連付けることができます。

前提条件

  • サービスをサポートするようにクラスターネットワークを設定しました。
  • OpenShift CLI (oc) がインストールされている。

手順

  1. VirtualMachine マニフェストを編集して、サービス作成のラベルを追加します。

    apiVersion: kubevirt.io/v1
    kind: VirtualMachine
    metadata:
      name: example-vm
      namespace: example-namespace
    spec:
      runStrategy: Halted
      template:
        metadata:
          labels:
            special: key 
    1
    
    # ...
    Copy to Clipboard Toggle word wrap
    1
    special: keyspec.template.metadata.labels スタンザに追加します。
    注記

    仮想マシンのラベルは Pod に渡されます。special: キー ラベルは、Service マニフェストの spec.selector 属性のラベルと一致する必要があります。

  2. VirtualMachine マニフェストファイルを保存して変更を適用します。
  3. 仮想マシンを公開するための Service マニフェストを作成します。

    apiVersion: v1
    kind: Service
    metadata:
      name: example-service
      namespace: example-namespace
    spec:
    # ...
      selector:
        special: key 
    1
    
      type: NodePort 
    2
    
      ports: 
    3
    
        protocol: TCP
        port: 80
        targetPort: 9376
        nodePort: 30000
    Copy to Clipboard Toggle word wrap
    1
    VirtualMachine マニフェストの spec.template.metadata.labels スタンザに追加したラベルを指定します。
    2
    ClusterIPNodePort、または LoadBalancer を指定します。
    3
    仮想マシンから公開するネットワークポートとプロトコルのコレクションを指定します。
  4. Service マニフェストファイルを保存します。
  5. 以下のコマンドを実行してサービスを作成します。

    $ oc create -f example-service.yaml
    Copy to Clipboard Toggle word wrap
  6. 仮想マシンを再起動して変更を適用します。

検証

  • Service オブジェクトをクエリーし、これが利用可能であることを確認します。

    $ oc get service -n example-namespace
    Copy to Clipboard Toggle word wrap
8.4.4.3. SSH を使用してサービスによって公開される仮想マシンに接続する

SSH を使用して、サービスによって公開されている仮想マシンに接続できます。

前提条件

  • 仮想マシンを公開するサービスを作成しました。
  • SSH クライアントがインストールされている。
  • クラスターにログインしている。

手順

  • 次のコマンドを実行して仮想マシンにアクセスします。

    $ ssh <user_name>@<ip_address> -p <port> 
    1
    Copy to Clipboard Toggle word wrap
    1
    クラスター IP サービスの場合はクラスター IP、ノードポートサービスの場合はノード IP、またはロードバランサーサービスの場合は外部 IP アドレスを指定します。

8.4.5. SSH アクセスにセカンダリーネットワークを使用する

SSH を使用して、セカンダリーネットワークを設定し、仮想マシンをセカンダリーネットワークインターフェイスに接続し、DHCP によって割り当てられた IP アドレスに接続できます。

重要

セカンダリーネットワークは、トラフィックがクラスターネットワークスタックによって処理されないため、優れたパフォーマンスを提供します。ただし、仮想マシンはセカンダリーネットワークに直接公開されており、ファイアウォールによって保護されません。仮想マシンが侵害されると、侵入者がセカンダリーネットワークにアクセスする可能性があります。この方法を使用する場合は、仮想マシンのオペレーティングシステム内で適切なセキュリティーを設定する必要があります。

ネットワークオプションの詳細は OpenShift Virtualization Tuning & Scaling GuideMultus および SR-IOV ドキュメントを参照してください。

8.4.5.1. Web コンソールを使用した仮想マシンネットワークインターフェイスの設定

Red Hat OpenShift Service on AWS Web コンソールを使用して、仮想マシン (VM) のネットワークインターフェイスを設定できます。

前提条件

  • ネットワークの Network Attachment Definition を作成している。

手順

  1. VirtualizationVirtualMachines に移動します。
  2. 仮想マシンをクリックして、VirtualMachine details ページを表示します。
  3. Configuration タブで、Network interfaces タブをクリックします。
  4. Add network interface をクリックします。
  5. インターフェイス名を入力し、Network リストから Network Attachment Definition を選択します。
  6. Save をクリックします。
  7. 仮想マシンを再起動またはライブマイグレーションして、変更を適用します。
8.4.5.2. SSH を使用したセカンダリーネットワークに接続された仮想マシンへの接続

SSH を使用して、セカンダリーネットワークに接続されている仮想マシンに接続できます。

前提条件

  • DHCP サーバーを使用して仮想マシンをセカンダリーネットワークに接続しました。
  • SSH クライアントがインストールされている。
  • OpenShift CLI (oc) がインストールされている。

手順

  1. 次のコマンドを実行して、仮想マシンの IP アドレスを取得します。

    $ oc describe vm <vm_name> -n <namespace>
    Copy to Clipboard Toggle word wrap

    出力例

    # ...
    Interfaces:
      Interface Name:  eth0
      Ip Address:      10.244.0.37/24
      Ip Addresses:
        10.244.0.37/24
        fe80::858:aff:fef4:25/64
      Mac:             0a:58:0a:f4:00:25
      Name:            default
    # ...
    Copy to Clipboard Toggle word wrap

  2. 次のコマンドを実行して、仮想マシンに接続します。

    $ ssh <user_name>@<ip_address> -i <ssh_key>
    Copy to Clipboard Toggle word wrap

    $ ssh cloud-user@10.244.0.37 -i ~/.ssh/id_rsa_cloud-user
    Copy to Clipboard Toggle word wrap

8.5. 仮想マシンの編集

Red Hat OpenShift Service on AWS Web コンソールを使用して、仮想マシン (VM) 設定を更新できます。YAML ファイルまたは VirtualMachine details ページを更新できます。

コマンドラインを使用して仮想マシンを編集することもできます。

8.5.1. 仮想マシンのインスタンスタイプの変更

Web コンソールを使用して、実行中の仮想マシン (VM) に関連付けられているインスタンスタイプを変更できます。変更は即座に有効になります。

前提条件

  • インスタンスタイプを使用して仮想マシンを作成している。

手順

  1. Red Hat OpenShift Service on AWS Web コンソールで、VirtualizationVirtualMachines をクリックします。
  2. 仮想マシンを選択して、VirtualMachine details ページを開きます。
  3. Configuration タブをクリックします。
  4. Details タブで、インスタンスタイプテキストをクリックして Edit Instancetype ダイアログを開きます。たとえば、1 CPU | 2 GiB Memory をクリックします。
  5. Series および Size リストを使用して、インスタンスタイプを編集します。

    1. Series リストからアイテムを選択して、そのシリーズに関連するサイズを表示します。たとえば、General Purpose を選択します。
    2. Size リストから仮想マシンの新しいインスタンスタイプを選択します。たとえば、medium: 1 CPUs, 4Gi Memory を選択します。これは、General Purpose シリーズで利用できます。
  6. Save をクリックします。

検証

  1. YAML タブをクリックします。
  2. Reload をクリックします。
  3. 仮想マシン YAML を確認し、インスタンスタイプが変更されたことを確認します。

8.5.2. 仮想マシン上でのメモリーのホットプラグ

Red Hat OpenShift Service on AWS Web コンソールを使用して、仮想マシン (VM) を再起動することなく、仮想マシンに割り当てられるメモリーの量を追加または削除できます。

手順

  1. VirtualizationVirtualMachines に移動します。
  2. 目的の仮想マシンを選択して、VirtualMachine details ページを開きます。
  3. Configuration タブで、Edit CPU|Memory をクリックします。
  4. 必要なメモリー量を入力し、Save をクリックします。

    注記

    仮想マシンのデフォルトの初期メモリー量の最大 3 倍までホットプラグできます。この制限を超えると再起動が必要になります。

    システムはこれらの変更をすぐに適用します。仮想マシンが移行可能な場合は、ライブマイグレーションがトリガーされます。そうでない場合、または変更をライブ更新できない場合は、RestartRequired 条件が仮想マシンに追加されます。

注記

仮想マシンのメモリーのホットプラグを実行するには、virtio-mem ドライバーに対するゲストオペレーティングシステムのサポートが必要です。このサポートは、特定のアップストリームのカーネルバージョンではなく、ゲストオペレーティングシステム内に含まれる有効なドライバーに依存します。

サポートされているゲストオペレーティングシステム:

  • RHEL 9.4 以降
  • RHEL 8.10 以降 (ホットアンプラグはデフォルトで無効)
  • その他の Linux ゲストには、カーネルバージョン 5.16 以降と virtio-mem カーネルモジュールが必要です。
  • Windows ゲストには、virtio-mem ドライバーバージョン 100.95.104.26200 以降が必要です。

8.5.3. 仮想マシン上での CPU のホットプラグ

Red Hat OpenShift Service on AWS Web コンソールを使用して、仮想マシン (VM) を再起動することなく、仮想マシンに割り当てられる CPU ソケットの数を増減できます。

手順

  1. VirtualizationVirtualMachines に移動します。
  2. 目的の仮想マシンを選択して、VirtualMachine details ページを開きます。
  3. Configuration タブで、Edit CPU|Memory をクリックします。
  4. vCPU ラジオボタンを選択します。
  5. 必要な仮想 CPU ソケットの数を入力し、Save をクリックします。

    注記

    仮想マシンの仮想 CPU ソケットのデフォルトの初期数の最大 3 倍までホットプラグできます。この制限を超えると再起動が必要になります。

    仮想マシンが移行可能な場合は、ライブマイグレーションがトリガーされます。そうでない場合、または変更をライブ更新できない場合は、RestartRequired 条件が仮想マシンに追加されます。

注記

仮想マシンで spec.template.spec.domain.devices.networkInterfaceMultiQueue フィールドが有効になっていて、CPU がホットプラグされている場合、次の動作が発生します。

  • CPU のホットプラグ前に割り当てた既存のネットワークインターフェイスは、仮想 CPU (vCPU) を追加した後でも元のキューカウントを保持します。この動作は正常なものであり、基盤となる仮想化テクノロジーによって発生します。
  • 新しい仮想 CPU 設定に合わせて既存のインターフェイスのキュー数を更新するには、仮想マシンを再起動します。再起動は、更新によってパフォーマンスが向上する場合にのみ必要です。
  • CPU のホットプラグ後にホットプラグした新しい VirtIO ネットワークインターフェイスには、新しい仮想 CPU 設定と同じキューカウントが自動的に反映されます。

8.5.4. CLI を使用した仮想マシンの編集

コマンドラインを使用して仮想マシンを編集できます。

前提条件

  • oc CLI がインストールされている。

手順

  1. 次のコマンドを実行して、仮想マシンの設定を取得します。

    $ oc edit vm <vm_name>
    Copy to Clipboard Toggle word wrap
  2. YAML 設定を編集します。
  3. 実行中の仮想マシンを編集する場合は、以下のいずれかを実行する必要があります。

    • 仮想マシンを再起動します。
    • 新規の設定を有効にするために、以下のコマンドを実行します。

      $ oc apply vm <vm_name> -n <namespace>
      Copy to Clipboard Toggle word wrap

8.5.5. 仮想マシンへのディスクの追加

Red Hat OpenShift Service on AWS Web コンソールを使用して、仮想ディスクを仮想マシン (VM) に追加できます。

手順

  1. Web コンソールで VirtualizationVirtualMachines に移動します。
  2. 仮想マシンを選択して、VirtualMachine details ページを開きます。
  3. Disks タブで、Add disk をクリックします。
  4. SourceNameSizeTypeInterface、および Storage Class を指定します。

    1. オプション: 空のディスクソースを使用し、データボリュームの作成時に最大の書き込みパフォーマンスが必要な場合に、事前割り当てを有効にできます。そのためには、Enable preallocation チェックボックスをオンにします。
    2. オプション: Apply optimized StorageProfile settings をクリアして、仮想ディスクの Volume ModeAccess Mode を変更できます。これらのパラメーターを指定しない場合、システムは kubevirt-storage-class-defaults config map のデフォルト値を使用します。
  5. Add をクリックします。
注記

仮想マシンが実行中の場合は、仮想マシンを再起動して変更を適用する必要があります。

8.5.5.1. ストレージフィールド
Expand
フィールド説明

空白 (PVC の作成)

空のディスクを作成します。

URL を使用したインポート (PVC の作成)

URL (HTTP または HTTPS エンドポイント) を介してコンテンツをインポートします。

既存 PVC の使用

クラスターですでに利用可能な PVC を使用します。

既存の PVC のクローン作成 (PVC の作成)

クラスターで利用可能な既存の PVC を選択し、このクローンを作成します。

レジストリーを使用したインポート (PVC の作成)

コンテナーレジストリーを使用してコンテンツをインポートします。

コンテナー (一時的)

クラスターからアクセスできるレジストリーにあるコンテナーからコンテンツをアップロードします。コンテナーディスクは、CD-ROM や一時的な仮想マシンなどの読み取り専用ファイルシステムにのみ使用する必要があります。

Name

ディスクの名前。この名前には、小文字 (a-z)、数字 (0-9)、ハイフン (-) およびピリオド (.) を含めることができ、最大 253 文字を使用できます。最初と最後の文字は英数字にする必要があります。この名前には、大文字、スペース、または特殊文字を使用できません。

Size

ディスクのサイズ (GiB 単位)。

ディスクのタイプ。例: Disk または CD-ROM

Interface

ディスクデバイスのタイプ。サポートされるインターフェイスは、virtIOSATA、および SCSI です。

Storage Class

ディスクの作成に使用されるストレージクラス。

ストレージの詳細設定

以下のストレージの詳細設定はオプションであり、BlankImport via URL、および Clone existing PVC ディスクで利用できます。

これらのパラメーターを指定しない場合、システムはデフォルトのストレージプロファイル値を使用します。

Expand
パラメーターオプションパラメーターの説明

ボリュームモード

Filesystem

ファイルシステムベースのボリュームで仮想ディスクを保存します。

Block

ブロックボリュームで仮想ディスクを直接保存します。基礎となるストレージがサポートしている場合は、Block を使用します。

アクセスモード

ReadWriteOnce (RWO)

ボリュームはシングルノードで読み取り/書き込みとしてマウントできます。

ReadWriteMany (RWX)

ボリュームは、一度に多くのノードで読み取り/書き込みとしてマウントできます。

注記

このモードはライブマイグレーションに必要です。

8.5.6. 仮想マシンに Windows ドライバーディスクをマウントする

Red Hat OpenShift Service on AWS Web コンソールを使用して、Windows ドライバーディスクを仮想マシンにマウントできます。

手順

  1. VirtualizationVirtualMachines に移動します。
  2. 目的の仮想マシンを選択して、VirtualMachine details ページを開きます。
  3. Configuration タブで、Storage をクリックします。
  4. Mount Windows drivers disk チェックボックスを選択します。

    マウント済みディスクのリストに、Windows ドライバーディスクが表示されます。

8.5.7. シークレット、設定マップ、またはサービスアカウントの仮想マシンへの追加

Red Hat OpenShift Service on AWS Web コンソールを使用して、シークレット、config map、またはサービスアカウントを仮想マシンに追加します。

これらのリソースは、ディスクとして仮想マシンに追加されます。他のディスクをマウントするように、シークレット、設定マップ、またはサービスアカウントをマウントします。

仮想マシンが実行中の場合、仮想マシンを再起動するまで、変更は有効になりません。新しく追加されたリソースは、ページの上部で保留中の変更としてマークされます。

前提条件

  • 追加するシークレット、設定マップ、またはサービスアカウントは、ターゲット仮想マシンと同じ namespace に存在する必要がある。

手順

  1. サイドメニューから VirtualizationVirtualMachines をクリックします。
  2. 仮想マシンを選択して、VirtualMachine details ページを開きます。
  3. ConfigurationEnvironment をクリックします。
  4. Add Config Map, Secret or Service Account をクリックします。
  5. Select a resource をクリックし、リストから resource を選択します。6 文字のシリアル番号が、選択したリソースに対して自動的に生成されます。
  6. オプション: Reload をクリックして、環境を最後に保存した状態に戻します。
  7. Save をクリックします。

検証

  1. VirtualMachine details ページで、ConfigurationDisks をクリックし、リソースがディスクのリストに表示されていることを確認します。
  2. ActionsRestart をクリックして、仮想マシンを再起動します。

他のディスクをマウントするように、シークレット、設定マップ、またはサービスアカウントをマウントできるようになりました。

8.5.8. 複数の仮想マシンを更新する

コマンドラインインターフェイス (CLI) を使用して、複数の仮想マシンを同時に更新できます。

前提条件

  • oc CLI がインストールされている。
  • Red Hat OpenShift Service on AWS クラスターにアクセスでき、cluster-admin 権限を持っている。

手順

  1. 次のコマンドを実行して、特権付きサービスアカウントを作成します。

    $ oc adm new-project kubevirt-api-lifecycle-automation
    Copy to Clipboard Toggle word wrap
    $ oc create sa kubevirt-api-lifecycle-automation -n kubevirt-api-lifecycle-automation
    Copy to Clipboard Toggle word wrap
    $ oc create clusterrolebinding kubevirt-api-lifecycle-automation --clusterrole=cluster-admin --serviceaccount=kubevirt-api-lifecycle-automation:kubevirt-api-lifecycle-automation
    Copy to Clipboard Toggle word wrap
  2. 次のコマンドを実行して、kubevirt-api-lifecycle イメージのプル URL を決定します。

    $ oc get csv -n openshift-cnv -l=operators.coreos.com/kubevirt-hyperconverged.openshift-cnv -ojson | jq '.items[0].spec.relatedImages[] | select(.name|test(".*kubevirt-api-lifecycle-automation.*")) | .image'
    Copy to Clipboard Toggle word wrap
  3. 次の例に示すように、ジョブオブジェクトを作成して Kubevirt-Api-Lifecycle-Automation をデプロイします。

    apiVersion: batch/v1
    kind: Job
    metadata:
     name: kubevirt-api-lifecycle-automation
     namespace: kubevirt-api-lifecycle-automation
    spec:
     template:
      spec:
       containers:
       - name: kubevirt-api-lifecycle-automation
         image: quay.io/openshift-virtualization/kubevirt-api-lifecycle-automation:v4.19 
    1
    
         imagePullPolicy: Always
         env:
         - name: MACHINE_TYPE_GLOB 
    2
    
           value: smth-glob9.10.0
         - name: RESTART_REQUIRED 
    3
    
           value: "true"
         - name: NAMESPACE 
    4
    
           value: "default"
         - name: LABEL_SELECTOR 
    5
    
           value: my-vm
         securityContext:
          allowPrivilegeEscalation: false
          capabilities:
           drop:
           - ALL
          privileged: false
          runAsNonRoot: true
          seccompProfile:
           type: RuntimeDefault
       restartPolicy: Never
       serviceAccountName: kubevirt-api-lifecycle-automation
    Copy to Clipboard Toggle word wrap
1
イメージの値は、イメージのプル URL に置き換えます。
2
MACHINE_TYPE_GLOB 値は、独自のパターンに置き換えます。このパターンは、アップグレードが必要な非推奨のマシンタイプを検出するために使用されます。
3
RESTART_REQUIRED 環境変数が true に設定されている場合、マシンタイプの更新後に仮想マシンが再起動されます。仮想マシンを再起動したくない場合は、値を false に設定します。
4
namespace 環境値は、仮想マシンを検索する namespace を示します。ジョブがクラスター内のすべての namespace を調べるようにするには、パラメーターを空のままにします。
5
LABEL_SELECTOR 環境変数を使用して、ジョブアクションを受信する仮想マシンを選択できます。ジョブをクラスター内のすべての仮想マシンに適用する場合は、パラメーターに値を割り当てないでください。
8.5.8.1. 仮想マシンでの一括操作の実行

Web コンソールの VirtualMachines リストビューを使用して、複数の仮想マシン (VM) に対して同時に一括操作を実行できます。これにより、最小限の手間で仮想マシンのグループを効率的に管理できます。

利用可能な一括操作

  • Label VMs - 選択した仮想マシン全体に適用されるラベルを追加、編集、または削除します。
  • Delete VMs - 削除する複数の仮想マシンを選択します。確認ダイアログに、削除対象として選択した仮想マシンの数が表示されます。
  • Move VMs to folder - 選択した仮想マシンをフォルダーに移動します。すべての仮想マシンは同じ namespace に属している必要があります。

8.5.9. 高速ストレージアクセス用の複数の IOThreads の設定

ソリッドステートドライブ (SSD) や不揮発性メモリーエクスプレス (NVMe) などの高速ストレージを使用する仮想マシン (VM) に対して複数の IOThreads を設定することで、ストレージパフォーマンスを向上させることができます。この設定オプションは、仮想マシンの YAML を編集することによってのみ使用できます。

注記

複数の IOThreads は、blockMultiQueue が有効になっていて、ディスクバスが virtio に設定されている場合にのみサポートされます。この構成を正しく機能させるには、この設定を行う必要があります。

手順

  1. サイドメニューから VirtualizationVirtualMachines をクリックします。
  2. 仮想マシンを選択して、VirtualMachine details ページを開きます。
  3. YAML タブをクリックして、仮想マシンマニフェストを開きます。
  4. YAML エディターで、spec.template.spec.domain セクションを見つけて、次のフィールドを追加または変更します。

    domain:
      ioThreadsPolicy: supplementalPool
      ioThreads:
        supplementalPoolThreadCount: 4
      devices:
        blockMultiQueue: true
        disks:
        - name: datavolume
          disk:
            bus: virtio
    # ...
    Copy to Clipboard Toggle word wrap
  5. Save をクリックします。
重要

仮想マシンの実行中は、spec.template.spec.domain 設定を変更できません。変更を適用するには、仮想マシンを停止してから、新しい設定を有効にするために仮想マシンを再起動する必要があります。

config map、シークレット、サービスアカウントの追加リソース

8.6. ブート順序の編集

Web コンソールまたは CLI を使用して、ブート順序リストの値を更新できます。

Virtual Machine Overview ページの Boot Order で、以下を実行できます。

  • ディスクまたはネットワークインターフェイスコントローラー (NIC) を選択し、これをブート順序のリストに追加します。
  • ブート順序の一覧でディスクまたは NIC の順序を編集します。
  • ブート順序のリストからディスクまたは NIC を削除して、起動可能なソースのインベントリーに戻します。

8.6.1. Web コンソールでのブート順序リストへの項目の追加

Web コンソールを使用して、ブート順序リストに項目を追加します。

手順

  1. サイドメニューから VirtualizationVirtualMachines をクリックします。
  2. 仮想マシンを選択して、VirtualMachine details ページを開きます。
  3. Details タブをクリックします。
  4. Boot Order の右側にある鉛筆アイコンをクリックします。YAML 設定が存在しない場合や、これがブート順序リストの初回作成時の場合、以下のメッセージが表示されます。No resource selected.仮想マシンは、YAML ファイルでの出現順にディスクからの起動を試行します。
  5. Add Source をクリックして、仮想マシンのブート可能なディスクまたはネットワークインターフェイスコントローラー (NIC) を選択します。
  6. 追加のディスクまたは NIC をブート順序一覧に追加します。
  7. Save をクリックします。
注記

仮想マシンが実行されている場合、Boot Order への変更は仮想マシンを再起動するまで反映されません。

Boot Order フィールドの右側にある View Pending Changes をクリックして、保留中の変更を表示できます。ページ上部の Pending Changes バナーには、仮想マシンの再起動時に適用されるすべての変更のリストが表示されます。

8.6.2. Web コンソールでのブート順序リストの編集

Web コンソールで起動順序リストを編集します。

手順

  1. サイドメニューから VirtualizationVirtualMachines をクリックします。
  2. 仮想マシンを選択して、VirtualMachine details ページを開きます。
  3. Details タブをクリックします。
  4. Boot Order の右側にある鉛筆アイコンをクリックします。
  5. ブート順序リストで項目を移動するのに適した方法を選択します。

    • スクリーンリーダーを使用しない場合、移動する項目の横にある矢印アイコンにカーソルを合わせ、項目を上下にドラッグし、選択した場所にドロップします。
    • スクリーンリーダーを使用する場合は、上矢印キーまたは下矢印を押して、ブート順序リストで項目を移動します。次に Tab キーを押して、選択した場所に項目をドロップします。
  6. Save をクリックします。
注記

仮想マシンが実行されている場合、ブート順序の変更は仮想マシンが再起動されるまで反映されません。

Boot Order フィールドの右側にある View Pending Changes をクリックして、保留中の変更を表示できます。ページ上部の Pending Changes バナーには、仮想マシンの再起動時に適用されるすべての変更のリストが表示されます。

8.6.3. YAML 設定ファイルでのブート順序リストの編集

CLI を使用して、YAML 設定ファイルのブート順序のリストを編集します。

前提条件

  • OpenShift CLI (oc) がインストールされている。

手順

  1. 以下のコマンドを実行して、仮想マシンの YAML 設定ファイルを開きます。

    $ oc edit vm <vm_name> -n <namespace>
    Copy to Clipboard Toggle word wrap
  2. 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
    Copy to Clipboard Toggle word wrap
    1
    ディスクに指定されたブート順序の値。
    2
    ネットワークインターフェイスコントローラーに指定されたブート順序の値。
  3. YAML ファイルを保存します。

8.6.4. Web コンソールでのブート順序リストからの項目の削除

Web コンソールを使用して、ブート順序のリストから項目を削除します。

手順

  1. サイドメニューから VirtualizationVirtualMachines をクリックします。
  2. 仮想マシンを選択して、VirtualMachine details ページを開きます。
  3. Details タブをクリックします。
  4. Boot Order の右側にある鉛筆アイコンをクリックします。
  5. 項目の横にある Remove アイコン delete をクリックします。この項目はブート順序のリストから削除され、使用可能なブートソースのリストに保存されます。ブート順序リストからすべての項目を削除する場合、以下のメッセージが表示されます。No resource selected.仮想マシンは、YAML ファイルでの出現順にディスクからの起動を試行します。
注記

仮想マシンが実行されている場合、Boot Order への変更は仮想マシンを再起動するまで反映されません。

Boot Order フィールドの右側にある View Pending Changes をクリックして、保留中の変更を表示できます。ページ上部の Pending Changes バナーには、仮想マシンの再起動時に適用されるすべての変更のリストが表示されます。

8.7. 仮想マシンの削除

Web コンソールまたは oc コマンドラインインターフェイスを使用して、仮想マシンを削除できます。

8.7.1. Web コンソールの使用による仮想マシンの削除

仮想マシン (VM) を削除すると、クラスターから完全に削除されます。

仮想マシンが削除保護されている場合、仮想マシンの Actions メニューで Delete 操作は無効化されます。

前提条件

  • 仮想マシンを削除するには、まず仮想マシンの削除保護設定 (有効になっている場合) を無効にする必要があります。

手順

  1. Red Hat OpenShift Service on AWS Web コンソールから、ビューを選択します。

    • 仮想化に重点を置いたビューの場合は、AdministratorVirtualizationVirtualMachines を選択します。
    • 一般的なビューは、VirtualizationVirtualMachines に移動します。
  2. 仮想マシンの横にある オプション メニュー kebab をクリックし、Delete を選択します。

    または、仮想マシンの名前をクリックして VirtualMachine details ページを開き、ActionsDelete をクリックします。

    ツリービューで仮想マシンを右クリックし、ポップアップメニューから Delete を選択することもできます。

  3. オプション: With grace period を選択するか、Delete disks をクリアします。
  4. 仮想マシンを完全に削除するには、Delete をクリックします。

8.7.2. CLI の使用による仮想マシンの削除

oc コマンドラインインターフェイス (CLI) を使用して仮想マシン (VM) を削除できます。oc クライアントを使用すると、複数の仮想マシンに対してアクションを実行できます。

前提条件

  • 仮想マシンを削除するには、まず仮想マシンの削除保護設定 (有効になっている場合) を無効にする必要があります。
  • OpenShift CLI (oc) がインストールされている。

手順

  • 次のコマンドを実行して仮想マシンを削除します。

    $ oc delete vm <vm_name>
    Copy to Clipboard Toggle word wrap
    注記

    このコマンドは、現在のプロジェクト内の VM のみを削除します。削除する仮想マシンが別のプロジェクトまたは namespace にある場合は、-n <project_name> オプションを指定します。

8.8. 仮想マシンのエクスポート

仮想マシンを別のクラスターにインポートしたり、フォレンジック目的でボリュームを分析したりするために、仮想マシン (VM) とそれに関連付けられたディスクをエクスポートできます。

コマンドラインインターフェイスを使用して、VirtualMachineExport カスタムリソース (CR) を作成します。

または、virtctl vmexport コマンド を使用して VirtualMachineExport CR を作成し、エクスポートされたボリュームをダウンロードすることもできます。

注記

Migration Toolkit for Virtualization を使用して、OpenShift Virtualization クラスター間で仮想マシンを移行できます。

8.8.1. VirtualMachineExport カスタムリソースの作成

VirtualMachineExport カスタムリソース (CR) を作成して、次のオブジェクトをエクスポートできます。

  • 仮想マシン (VM): 指定された仮想マシンの永続ボリューム要求 (PVC) をエクスポートします。
  • VM スナップショット: VirtualMachineSnapshot CR に含まれる PVC をエクスポートします。
  • PVC: PVC をエクスポートします。PVC が virt-launcher Pod などの別の Pod で使用されている場合、エクスポートは PVC が使用されなくなるまで Pending 状態のままになります。

VirtualMachineExport CR は、エクスポートされたボリュームの内部および外部リンクを作成します。内部リンクはクラスター内で有効です。外部リンクには、Ingress または Route を使用してアクセスできます。

エクスポートサーバーは、次のファイル形式をサポートしています。

  • raw: raw ディスクイメージファイル。
  • gzip: 圧縮されたディスクイメージファイル。
  • dir: PVC ディレクトリーとファイル。
  • tar.gz: 圧縮された PVC ファイル。

前提条件

  • 仮想マシンをエクスポートするために、仮想マシンがシャットダウンされている。
  • OpenShift CLI (oc) がインストールされている。

手順

  1. 次の例に従って VirtualMachineExport マニフェストを作成し、VirtualMachineVirtualMachineSnapshot、または PersistentVolumeClaim CR からボリュームをエクスポートし、example-export.yaml として保存します。

    VirtualMachineExport の例

    apiVersion: export.kubevirt.io/v1beta1
    kind: VirtualMachineExport
    metadata:
      name: example-export
    spec:
      source:
        apiGroup: "kubevirt.io" 
    1
    
        kind: VirtualMachine 
    2
    
        name: example-vm
      ttlDuration: 1h 
    3
    Copy to Clipboard Toggle word wrap

    1
    適切な API グループを指定します。
    • VirtualMachine"kubevirt.io"
    • VirtualMachineSnapshot"snapshot.kubevirt.io"
    • PersistentVolumeClaim""
    2
    VirtualMachineVirtualMachineSnapshot、または PersistentVolumeClaim を指定します。
    3
    オプション: デフォルトの期間は 2 時間です。
  2. VirtualMachineExport CR を作成します。

    $ oc create -f example-export.yaml
    Copy to Clipboard Toggle word wrap
  3. VirtualMachineExport CR を取得します。

    $ oc get vmexport example-export -o yaml
    Copy to Clipboard Toggle word wrap

    エクスポートされたボリュームの内部および外部リンクは、status スタンザに表示されます。

    出力例

    apiVersion: export.kubevirt.io/v1beta1
    kind: VirtualMachineExport
    metadata:
      name: example-export
      namespace: example
    spec:
      source:
        apiGroup: ""
        kind: PersistentVolumeClaim
        name: example-pvc
      tokenSecretRef: example-token
    status:
      conditions:
      - lastProbeTime: null
        lastTransitionTime: "2022-06-21T14:10:09Z"
        reason: podReady
        status: "True"
        type: Ready
      - lastProbeTime: null
        lastTransitionTime: "2022-06-21T14:09:02Z"
        reason: pvcBound
        status: "True"
        type: PVCReady
      links:
        external: 
    1
    
          cert: |-
            -----BEGIN CERTIFICATE-----
            ...
            -----END CERTIFICATE-----
          volumes:
          - formats:
            - format: raw
              url: https://vmexport-proxy.test.net/api/export.kubevirt.io/v1beta1/namespaces/example/virtualmachineexports/example-export/volumes/example-disk/disk.img
            - format: gzip
              url: https://vmexport-proxy.test.net/api/export.kubevirt.io/v1beta1/namespaces/example/virtualmachineexports/example-export/volumes/example-disk/disk.img.gz
            name: example-disk
        internal:  
    2
    
          cert: |-
            -----BEGIN CERTIFICATE-----
            ...
            -----END CERTIFICATE-----
          volumes:
          - formats:
            - format: raw
              url: https://virt-export-example-export.example.svc/volumes/example-disk/disk.img
            - format: gzip
              url: https://virt-export-example-export.example.svc/volumes/example-disk/disk.img.gz
            name: example-disk
      phase: Ready
      serviceName: virt-export-example-export
    Copy to Clipboard Toggle word wrap

    1
    外部リンクは、Ingress または Route を使用してクラスターの外部からアクセスできます。
    2
    内部リンクは、クラスター内でのみ有効です。

8.8.2. エクスポートされた仮想マシンマニフェストへのアクセス

仮想マシン (VM) またはスナップショットをエクスポートすると、エクスポートサーバーから VirtualMachine マニフェストと関連情報を取得できます。

前提条件

  • OpenShift CLI (oc) がインストールされている。
  • VirtualMachineExport カスタムリソース (CR) を作成して、仮想マシンまたは VM スナップショットをエクスポートしている。

    注記

    spec.source.kind: PersistentVolumeClaim パラメーターを持つ VirtualMachineExport オブジェクトは、仮想マシンマニフェストを生成しません。

手順

  1. マニフェストにアクセスするには、まず証明書をソースクラスターからターゲットクラスターにコピーする必要があります。

    1. ソースクラスターにログインします。
    2. 次のコマンドを実行して、証明書を cacert.crt ファイルに保存します。

      $ oc get vmexport <export_name> -o jsonpath={.status.links.external.cert} > cacert.crt 
      1
      Copy to Clipboard Toggle word wrap
      1
      <export_name> を、VirtualMachineExport オブジェクトの metadata.name 値に置き換えます。
    3. cacert.crt ファイルをターゲットクラスターにコピーします。
  2. 次のコマンドを実行して、ソースクラスター内のトークンをデコードし、token_decode ファイルに保存します。

    $ oc get secret export-token-<export_name> -o jsonpath={.data.token} | base64 --decode > token_decode 
    1
    Copy to Clipboard Toggle word wrap
    1
    <export_name> を、VirtualMachineExport オブジェクトの metadata.name 値に置き換えます。
  3. token_decode ファイルをターゲットクラスターにコピーします。
  4. 次のコマンドを実行して、VirtualMachineExport カスタムリソースを取得します。

    $ oc get vmexport <export_name> -o yaml
    Copy to Clipboard Toggle word wrap
  5. status.links スタンザを確認します。このスタンザは external セクションと internal セクションに分かれています。各セクション内の manifests.url フィールドに注意してください。

    出力例

    apiVersion: export.kubevirt.io/v1beta1
    kind: VirtualMachineExport
    metadata:
      name: example-export
    spec:
      source:
        apiGroup: "kubevirt.io"
        kind: VirtualMachine
        name: example-vm
      tokenSecretRef: example-token
    status:
    #...
      links:
        external:
    #...
          manifests:
          - type: all
            url: https://vmexport-proxy.test.net/api/export.kubevirt.io/v1beta1/namespaces/example/virtualmachineexports/example-export/external/manifests/all 
    1
    
          - type: auth-header-secret
            url: https://vmexport-proxy.test.net/api/export.kubevirt.io/v1beta1/namespaces/example/virtualmachineexports/example-export/external/manifests/secret 
    2
    
        internal:
    #...
          manifests:
          - type: all
            url: https://virt-export-export-pvc.default.svc/internal/manifests/all 
    3
    
          - type: auth-header-secret
            url: https://virt-export-export-pvc.default.svc/internal/manifests/secret
      phase: Ready
      serviceName: virt-export-example-export
    Copy to Clipboard Toggle word wrap

    1
    VirtualMachine マニフェスト、存在する場合は DataVolume マニフェスト、外部 URL の Ingress またはルートの公開証明書を含む ConfigMap マニフェストが含まれます。
    2
    Containerized Data Importer (CDI) と互換性のあるヘッダーを含むシークレットが含まれます。ヘッダーには、エクスポートトークンのテキストバージョンが含まれています。
    3
    VirtualMachine マニフェスト、存在する場合は DataVolume マニフェスト、および内部 URL のエクスポートサーバーの証明書を含む ConfigMap マニフェストが含まれます。
  6. ターゲットクラスターにログインします。
  7. 次のコマンドを実行して Secret マニフェストを取得します。

    $ curl --cacert cacert.crt <secret_manifest_url> -H \ 
    1
    
    "x-kubevirt-export-token:token_decode" -H \ 
    2
    
    "Accept:application/yaml"
    Copy to Clipboard Toggle word wrap
    1
    <secret_manifest_url> を、VirtualMachineExport YAML 出力の auth-header-secret URL に置き換えます。
    2
    前に作成した token_decode ファイルを参照します。

    以下に例を示します。

    $ curl --cacert cacert.crt https://vmexport-proxy.test.net/api/export.kubevirt.io/v1beta1/namespaces/example/virtualmachineexports/example-export/external/manifests/secret -H "x-kubevirt-export-token:token_decode" -H "Accept:application/yaml"
    Copy to Clipboard Toggle word wrap
  8. 次のコマンドを実行して、ConfigMap マニフェストや VirtualMachine マニフェストなどの type: all マニフェストを取得します。

    $ curl --cacert cacert.crt <all_manifest_url> -H \ 
    1
    
    "x-kubevirt-export-token:token_decode" -H \ 
    2
    
    "Accept:application/yaml"
    Copy to Clipboard Toggle word wrap
    1
    <all_manifest_url> を、VirtualMachineExport YAML 出力の URL に置き換えます。
    2
    前に作成した token_decode ファイルを参照します。

    以下に例を示します。

    $ curl --cacert cacert.crt https://vmexport-proxy.test.net/api/export.kubevirt.io/v1beta1/namespaces/example/virtualmachineexports/example-export/external/manifests/all -H "x-kubevirt-export-token:token_decode" -H "Accept:application/yaml"
    Copy to Clipboard Toggle word wrap

次のステップ

  • エクスポートしたマニフェストを使用して、ターゲットクラスター上に ConfigMap オブジェクトと VirtualMachine オブジェクトを作成できます。

8.9. 仮想マシンインスタンスの管理

OpenShift Virtualization 環境の外部で独立して作成されたスタンドアロン仮想マシンインスタンス (VMI) がある場合、Web コンソールを使用するか、コマンドラインインターフェイス (CLI) から oc または virtctl コマンドを使用してそれらを管理できます。

virtctl コマンドは、oc コマンドよりも多くの仮想化オプションを提供します。たとえば、virtctl を使用して仮想マシンを一時停止したり、ポートを公開したりできます。

8.9.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 を削除します。

仮想マシンを編集すると、一部の設定が再起動なしで VMI に動的に適用される場合があります。VMI に動的に適用できない仮想マシンオブジェクトを変更すると、RestartRequired 仮想マシン条件がトリガーされます。変更は次回の再起動時に有効になり、条件は削除されます。

8.9.2. CLI を使用した仮想マシンインスタンスのリスト表示

oc コマンドラインインターフェイス (CLI) を使用して、スタンドアロンおよび仮想マシンによって所有されている VMI を含むすべての仮想マシンのリストを表示できます。

前提条件

  • OpenShift CLI (oc) がインストールされている。

手順

  • 以下のコマンドを実行して、すべての VMI のリストを表示します。

    $ oc get vmis -A
    Copy to Clipboard Toggle word wrap

8.9.3. Web コンソールを使用したスタンドアロン仮想マシンインスタンスのリスト表示

Web コンソールを使用して、仮想マシンによって所有されていないクラスター内のスタンドアロンの仮想マシンインスタンス (VMI) のリストを表示できます。

注記

仮想マシンまたは他のオブジェクトが所有する VMI は、Web コンソールには表示されません。Web コンソールは、スタンドアロンの VMI のみを表示します。クラスター内のすべての VMI をリスト表示するには、CLI を使用する必要があります。

手順

  • サイドメニューから VirtualizationVirtualMachines をクリックします。

    スタンドアロン VMI は、名前の横にある濃い色のバッジで識別できます。

8.9.4. Web コンソールを使用してスタンドアロン仮想マシンインスタンスを検索する

VirtualMachines ページの検索バーを使用して、仮想マシンインスタンス (VMI) を検索できます。追加のフィルターを適用するには、詳細検索を使用します。

手順

  1. Red Hat OpenShift Service on AWS コンソールで、サイドメニューから VirtualizationVirtualMachines をクリックします。
  2. ページ上部の検索バーに、仮想マシン名、ラベル、または IP アドレスを入力します。
  3. 候補リストで、次のいずれかのオプションを選択します。

    • 仮想マシン名をクリックすると詳細ページが開きます。
    • 専用ページで結果を表示するには All search results found for …​ をクリックします。
    • 関連する提案をクリックすると、検索フィルターが事前に入力されます。
  4. オプション: 詳細な検索オプションを開くには、検索バーの横にあるスライダーアイコンをクリックします。Details セクションを展開し、使用可能なフィルター (NameProjectDescriptionLabelsDate createdvCPUMemory) を 1 つ以上指定します。
  5. オプション: Network セクションを展開し、フィルタリングする IP アドレスを入力します。
  6. Search をクリックします。
  7. オプション: Advanced Cluster Management (ACM) がインストールされている場合は、Cluster ドロップダウンを使用して複数のクラスターを検索します。
  8. オプション: Save search アイコンをクリックして、検索を kubevirt-user-settings ConfigMap に保存します。

8.9.5. Web コンソールを使用したスタンドアロン仮想マシンインスタンスの編集

Web コンソールを使用して、スタンドアロン仮想マシンインスタンスのアノテーションおよびラベルを編集できます。他のフィールドは編集できません。

手順

  1. Red Hat OpenShift Service on AWS コンソールで、サイドメニューから VirtualizationVirtualMachines をクリックします。
  2. スタンドアロン VMI を選択して、VirtualMachineInstance details ページを開きます。
  3. Details タブで、Annotations または Labels の横にある鉛筆アイコンをクリックします。
  4. 関連する変更を加え、Save をクリックします。

8.9.6. CLI を使用したスタンドアロン仮想マシンインスタンスの削除

oc コマンドラインインターフェイス (CLI) を使用してスタンドアロン仮想マシンインスタンス (VMI) を削除できます。

前提条件

  • 削除する必要のある VMI の名前を特定している。
  • OpenShift CLI (oc) がインストールされている。

手順

  • 以下のコマンドを実行して VMI を削除します。

    $ oc delete vmi <vmi_name>
    Copy to Clipboard Toggle word wrap

8.9.7. Web コンソールを使用したスタンドアロン仮想マシンインスタンスの削除

Web コンソールからスタンドアロン仮想マシンインスタンス (VMI) を削除します。

手順

  1. Red Hat OpenShift Service on AWS Web コンソールで、サイドメニューから VirtualizationVirtualMachines をクリックします。
  2. ActionsDelete VirtualMachineInstance をクリックします。
  3. 確認のポップアップウィンドウで、Delete をクリックし、スタンドアロン VMI を永続的に削除します。

8.10. 仮想マシンの状態の制御

virtctl を使用して仮想マシンの状態を管理し、CLI から他のアクションを実行できます。たとえば、virtctl を使用して仮想マシンを強制停止したり、ポートを公開したりできます。

Web コンソールから仮想マシンを停止、起動、再起動、一時停止、一時停止解除できます。

8.10.1. 仮想マシンの動作の確認を有効にする

確認が有効になっている場合、StopRestartPause のアクションで確認ダイアログを表示できます。デフォルトでは、確認は無効になっています。

手順

  1. Red Hat OpenShift Service on AWS Web コンソールの Virtualization セクションで、OverviewSettingsClusterGeneral settings に移動します。
  2. VirtualMachine actions confirmation 設定をオンに切り替えます。

8.10.2. 仮想マシンの起動

Web コンソールから仮想マシン (VM) を起動できます。

手順

  1. サイドメニューから VirtualizationVirtualMachines をクリックします。
  2. ツリービューで、起動する仮想マシンを含むプロジェクトを選択します。
  3. ユースケースに応じて適切なメニューに移動します。

    • このページに留まり、複数の仮想マシンに対してアクションを実行するには、次の手順を実行します。

      1. 行の右端にある Options メニュー kebab をクリックして、Start VirtualMachine をクリックします。
    • ツリービューから仮想マシンを起動するには、以下を実行します。

      1. プロジェクト名の横にある > アイコンをクリックして、仮想マシンのリストを開きます。
      2. 仮想マシンの名前を右クリックし、Start を選択します。
    • 選択した仮想マシンを起動する前に、その仮想マシンに関する包括的な情報を表示するには、以下を実行します。

      1. 仮想マシンの名前をクリックして、VirtualMachine details ページにアクセスします。
      2. ActionsStart をクリックします。
注記

URL ソースからプロビジョニングされた仮想マシンを初めて起動すると、OpenShift Virtualization が URL エンドポイントからコンテナーをインポートする間、仮想マシンのステータスは Importing になります。このプロセスは、イメージのサイズによって数分の時間がかかる可能性があります。

8.10.3. 仮想マシンの停止

Web コンソールから仮想マシン (VM) を停止できます。

手順

  1. サイドメニューから VirtualizationVirtualMachines をクリックします。
  2. ツリービューで、停止する仮想マシンを含むプロジェクトを選択します。
  3. ユースケースに応じて適切なメニューに移動します。

    • このページに留まり、複数の仮想マシンに対してアクションを実行するには、次の手順を実行します。

      1. 行の右端にある Options メニュー kebab をクリックして、Stop VirtualMachine をクリックします。
      2. アクションの確認が有効になっている場合は、確認ダイアログで Stop をクリックします。
    • ツリービューから仮想マシンを停止するには、以下を実行します。

      1. プロジェクト名の横にある > アイコンをクリックして、仮想マシンのリストを開きます。
      2. 仮想マシンの名前を右クリックし、Stop を選択します。
      3. アクションの確認が有効になっている場合は、確認ダイアログで Stop をクリックします。
    • 選択した仮想マシンを停止する前にその包括的な情報を表示するには、以下を実行します。

      1. 仮想マシンの名前をクリックして、VirtualMachine details ページにアクセスします。
      2. ActionsStop をクリックします。
      3. アクションの確認が有効になっている場合は、確認ダイアログで Stop をクリックします。

8.10.4. 仮想マシンの再起動

実行中の仮想マシン (VM) を Web コンソールから再起動できます。

重要

エラーを回避するには、ステータスが Importing の間は仮想マシンを再起動しないでください。

手順

  1. サイドメニューから VirtualizationVirtualMachines をクリックします。
  2. ツリービューで、再起動する仮想マシンを含むプロジェクトを選択します。
  3. ユースケースに応じて適切なメニューに移動します。

    • このページに留まり、複数の仮想マシンに対してアクションを実行するには、次の手順を実行します。

      1. 行の右端にある Options メニュー kebab をクリックして、Restart をクリックします。
      2. アクションの確認が有効になっている場合は、確認ダイアログで Restart をクリックします。
    • ツリービューから仮想マシンを再起動するには、以下を実行します。

      1. プロジェクト名の横にある > アイコンをクリックして、仮想マシンのリストを開きます。
      2. 仮想マシンの名前を右クリックし、Restart を選択します。
      3. アクションの確認が有効になっている場合は、確認ダイアログで Restart をクリックします。
    • 選択した仮想マシンを再起動する前に、その仮想マシンに関する包括的な情報を表示するには、以下を実行します。

      1. 仮想マシンの名前をクリックして、VirtualMachine details ページにアクセスします。
      2. ActionsRestart をクリックします。
      3. アクションの確認が有効になっている場合は、確認ダイアログで Restart をクリックします。

8.10.5. 仮想マシンの一時停止

Web コンソールから仮想マシン (VM) を一時停止できます。

手順

  1. サイドメニューから VirtualizationVirtualMachines をクリックします。
  2. ツリービューで、一時停止する仮想マシンを含むプロジェクトを選択します。
  3. ユースケースに応じて適切なメニューに移動します。

    • このページに留まり、複数の仮想マシンに対してアクションを実行するには、次の手順を実行します。

      1. 行の右端にある Options メニュー kebab をクリックして、Pause VirtualMachine をクリックします。
      2. アクションの確認が有効になっている場合は、確認ダイアログで Pause をクリックします。
    • ツリービューから仮想マシンを一時停止するには、以下を実行します。

      1. プロジェクト名の横にある > アイコンをクリックして、仮想マシンのリストを開きます。
      2. 仮想マシンの名前を右クリックし、Pause を選択します。
      3. アクションの確認が有効になっている場合は、確認ダイアログで Pause をクリックします。
    • 選択した仮想マシンを一時停止する前に、その仮想マシンに関する包括的な情報を表示するには、以下を実行します。

      1. 仮想マシンの名前をクリックして、VirtualMachine details ページにアクセスします。
      2. ActionsPause をクリックします。
      3. アクションの確認が有効になっている場合は、確認ダイアログで Pause をクリックします。

8.10.6. 仮想マシンの一時停止の解除

一時停止中の仮想マシン (VM) を Web コンソールから一時停止解除できます。

前提条件

  • 少なくとも 1 つの仮想マシンのステータスが Paused である必要があります。

手順

  1. サイドメニューから VirtualizationVirtualMachines をクリックします。
  2. ツリービューで、一時停止を解除する仮想マシンを含むプロジェクトを選択します。
  3. ユースケースに応じて適切なメニューに移動します。

    • このページに留まり、複数の仮想マシンに対してアクションを実行するには、次の手順を実行します。

      1. 行の右端にある Options メニュー kebab をクリックして、Unpause VirtualMachine をクリックします。
    • ツリービューから仮想マシンの一時停止を解除するには、以下を実行します。

      1. プロジェクト名の横にある > アイコンをクリックして、仮想マシンのリストを開きます。
      2. 仮想マシンの名前を右クリックし、Unpause を選択します。
    • 選択した仮想マシンの一時停止を解除する前に、その仮想マシンに関する包括的な情報を表示するには、以下を実行します。

      1. 仮想マシンの名前をクリックして、VirtualMachine details ページにアクセスします。
      2. ActionsUnpause をクリックします。

8.10.7. 複数の仮想マシンの状態を制御する

Web コンソールから複数の仮想マシン (VM) を起動、停止、再起動、一時停止、一時停止解除できます。

手順

  1. Web コンソールで VirtualizationVirtualMachines に移動します。
  2. オプション: 表示されるプロジェクトを制限するには、ツリービューの上にある Show only projects with VirtualMachines オプションを有効にします。
  3. ツリービューから関連するプロジェクトを選択します。
  4. ユースケースに応じて適切なメニューに移動します。

    • 選択したプロジェクト内のすべての仮想マシンの状態を変更するには、以下を実行します。

      1. ツリービューでプロジェクトの名前を右クリックし、メニューから目的のアクションを選択します。
      2. アクションの確認が有効になっている場合は、確認ダイアログでアクションを確認します。
    • 特定の仮想マシンの状態を変更するには、以下を実行します。

      1. 使用する仮想マシンの横にあるチェックボックスを選択します。すべての仮想マシンを選択するには、VirtualMachines テーブルヘッダーのチェックボックスをクリックします。
      2. Actions をクリックし、メニューから目的のアクションを選択します。
      3. アクションの確認が有効になっている場合は、確認ダイアログでアクションを確認します。

8.11. 仮想 Trusted Platform Module デバイスの使用

VirtualMachine (VM) または VirtualMachineInstance (VMI) マニフェストを編集して、仮想 Trusted Platform Module (vTPM) デバイスを新規または既存の仮想マシンに追加します。

重要

OpenShift Virtualization 4.18 以降では、vTPM デバイスがアタッチされた 仮想マシン (VM) をエクスポート し、これらの仮想マシンのスナップショットを作成 して、これらのスナップショットから仮想マシンを復元 できます。ただし、vTPM デバイスがアタッチされた仮想マシンのクローン作成や、そのスナップショットからの新しい仮想マシンの作成はサポートされていません。

8.11.1. vTPM デバイスについて

仮想トラステッドプラットフォームモジュール (vTPM) デバイスは、物理トラステッドプラットフォームモジュール (TPM) ハードウェアチップのように機能します。vTPM デバイスはどのオペレーティングシステムでも使用できますが、Windows 11 をインストールまたは起動するには TPM チップが必要です。vTPM デバイスを使用すると、Windows 11 イメージから作成された VM を物理 TPM チップなしで機能させることができます。

OpenShift Virtualization は、仮想マシンの永続ボリューム要求 (PVC) を使用して、vTPM デバイス状態の永続化をサポートします。この PVC のストレージクラスを指定しない場合、OpenShift Virtualization は仮想化ワークロードのデフォルトのストレージクラスを使用します。仮想化ワークロードのデフォルトのストレージクラスが設定されていない場合、OpenShift Virtualization はクラスターのデフォルトのストレージクラスを使用します。

注記

仮想化ワークロードのデフォルトとしてマークされているストレージクラスには、storageclass.kubevirt.io/is-default-virt-class のアノテーションが "true" に設定されています。このストレージクラスは、次のコマンドを実行すると見つかります。

$ oc get sc -o jsonpath='{range .items[?(.metadata.annotations.storageclass\.kubevirt\.io/is-default-virt-class=="true")]}{.metadata.name}{"\n"}{end}'
Copy to Clipboard Toggle word wrap

同様に、クラスターのデフォルトのストレージクラスでは、storageclass.kubernetes.io/is-default-class のアノテーションが "true" に設定されています。このストレージクラスを見つけるには、次のコマンドを実行します。

$ oc get sc -o jsonpath='{range .items[?(.metadata.annotations.storageclass\.kubernetes\.io/is-default-class=="true")]}{.metadata.name}{"\n"}{end}'
Copy to Clipboard Toggle word wrap

一貫した動作を確保するには、仮想化ワークロードとクラスターに対して、デフォルトのストレージクラスをそれぞれ 1 つずつ設定します。

HyperConverged カスタムリソース (CR) で vmStateStorageClass 属性を設定することで、ストレージクラスを明示的に指定することが推奨されます。

kind: HyperConverged
metadata:
  name: kubevirt-hyperconverged
spec:
  vmStateStorageClass: <storage_class_name>

# ...
Copy to Clipboard Toggle word wrap

vTPM を有効にしないと、ノードに TPM デバイスがある場合でも、VM は TPM デバイスを認識しません。

8.11.2. 仮想マシンへの vTPM デバイスの追加

仮想トラステッドプラットフォームモジュール (vTPM) デバイスを仮想マシン (VM) に追加すると、物理 TPM デバイスなしで Windows 11 イメージから作成された仮想マシンを実行できます。vTPM デバイスには、その仮想マシンのシークレットも保存されます。

前提条件

  • OpenShift CLI (oc) がインストールされている。

手順

  1. 次のコマンドを実行して、仮想マシン設定を更新します。

    $ oc edit vm <vm_name> -n <namespace>
    Copy to Clipboard Toggle word wrap
  2. 仮想マシン仕様を編集して vTPM デバイスを追加します。以下に例を示します。

    apiVersion: kubevirt.io/v1
    kind: VirtualMachine
    metadata:
        name: example-vm
    spec:
      template:
        spec:
          domain:
            devices:
              tpm:  
    1
    
                persistent: true 
    2
    
    # ...
    Copy to Clipboard Toggle word wrap
    1
    vTPM デバイスを仮想マシンに追加します。
    2
    仮想マシンがシャットダウンされた後も vTPM デバイスの状態が維持されるように指定します。デフォルト値は false です。
  3. 変更を適用するには、エディターを保存し、終了します。
  4. オプション: 実行中の仮想マシンを編集している場合は、変更を有効にするためにこれを再起動する必要があります。

8.12. OpenShift Pipelines を使用した仮想マシンの管理

Red Hat OpenShift Pipelines は、開発者が独自のコンテナーで CI/CD パイプラインの各ステップを設計および実行できるようにする、Kubernetes ネイティブの CI/CD フレームワークです。

OpenShift Pipelines タスクとサンプルパイプラインを使用すると、以下を実行できます。

  • 仮想マシン (VM)、永続ボリューム要求 (PVC)、データボリューム、およびデータソースを作成および管理する。
  • 仮想マシンでコマンドを実行する。
  • libguestfs ツールを使用してディスクイメージを操作する。

タスクは タスクカタログ (ArtifactHub) にあります。

サンプルの Windows パイプラインは、パイプラインカタログ (ArtifactHub) にあります。

8.12.1. 前提条件

8.12.2. サポートされている仮想マシンタスク

次の表に、サポートされているタスクを示します。

Expand
表8.2 サポートされている仮想マシンタスク
タスク説明

create-vm-from-manifest

提供されたマニフェストから、または virtctl を使用して仮想マシンを作成します。

create-vm-from-template

テンプレートからの仮想マシンの作成

copy-template

仮想マシンテンプレートをコピーします。

modify-vm-template

仮想マシンテンプレートを変更します。

modify-data-object

データボリュームまたはデータソースを作成または削除します。

cleanup-vm

仮想マシンでスクリプトまたはコマンドを実行し、後で仮想マシンを停止または削除します。

disk-virt-customize

virt-customize ツールを使用して、ターゲット PVC でカスタマイズスクリプトを実行します。

disk-virt-sysprep

virt-sysprep ツールを使用して、ターゲット PVC で sysprep スクリプトを実行します。

wait-for-vmi-status

仮想マシンインスタンスの特定のステータスを待機し、ステータスに基づいて失敗または成功します。

注記

パイプラインでの仮想マシンの作成では、非推奨になったテンプレートベースのタスクではなく、ClusterInstanceTypeClusterPreference が使用されるようになりました。create-vm-from-templatecopy-template、および modify-vm-template コマンドは引き続き使用できますが、デフォルトのパイプラインタスクでは使用されません。

8.12.3. Windows EFI インストーラーパイプライン

Web コンソールまたは CLI を使用して、Windows EFI installer pipeline を実行できます。

Windows EFI インストーラーパイプラインは、Windows インストールイメージ (ISO ファイル) から Windows 10、Windows 11、または Windows Server 2022 を新しいデータボリュームにインストールします。インストールプロセスの実行には、カスタムアンサーファイルが使用されます。

注記

Windows EFI インストーラーパイプラインは、Red Hat OpenShift Service on AWS によって事前定義され、Microsoft ISO ファイルに適した sysprep を含む config map ファイルを使用します。さまざまな Windows エディションに関連する ISO ファイルの場合は、システム固有の sysprep 定義を使用して新しい config map ファイルを作成することが必要になる場合があります。

8.12.3.1. Web コンソールを使用してサンプルパイプラインを実行する

サンプルパイプラインは、Web コンソールの Pipelines メニューから実行できます。

手順

  1. サイドメニューの PipelinesPipelines をクリックします。
  2. パイプラインを選択して、Pipeline details ページを開きます。
  3. Actions リストから、Start を選択します。Start Pipeline ダイアログが表示されます。
  4. パラメーターのデフォルト値を保持し、Start をクリックしてパイプラインを実行します。Details タブでは、各タスクの進行状況が追跡され、パイプラインのステータスが表示されます。
8.12.3.2. CLI を使用してサンプルパイプラインを実行する

PipelineRun リソースを使用して、サンプルパイプラインを実行します。PipelineRun オブジェクトは、パイプラインの実行中のインスタンスです。これは、クラスター上の特定の入力、出力、および実行パラメーターで実行されるパイプラインをインスタンス化します。また、パイプライン内のタスクごとに TaskRun オブジェクトを作成します。

前提条件

  • OpenShift CLI (oc) がインストールされている。

手順

  1. Microsoft Windows 11 インストーラーパイプラインを実行するには、次の PipelineRun マニフェストを作成します。

    apiVersion: tekton.dev/v1
    kind: PipelineRun
    metadata:
      generateName: windows11-installer-run-
      labels:
        pipelinerun: windows11-installer-run
    spec:
        params:
        -   name: winImageDownloadURL
            value: <windows_image_download_url> 
    1
    
        -   name: acceptEula
            value: false 
    2
    
        pipelineRef:
            params:
            -   name: catalog
                value: redhat-pipelines
            -   name: type
                value: artifact
            -   name: kind
                value: pipeline
            -   name: name
                value: windows-efi-installer
            -   name: version
                value: 4
            resolver: hub
        taskRunSpecs:
        -   pipelineTaskName: modify-windows-iso-file
            PodTemplate:
                securityContext:
                    fsGroup: 107
                    runAsUser: 107
    Copy to Clipboard Toggle word wrap
    1
    Windows 11 64 ビット ISO ファイルの URL を指定します。製品の言語は英語 (米国) である必要があります。
    2
    サンプルの PipelineRun オブジェクトには、特別なパラメーター acceptEula があります。このパラメーターを設定すると、Microsoft 製品の各デプロイメントまたはインストールに適用される Microsoft ユーザーライセンス契約に同意したことになります。false に設定すると、パイプラインが最初のタスクで終了します。
  2. PipelineRun マニフェストを適用します。

    $ oc apply -f windows11-customize-run.yaml
    Copy to Clipboard Toggle word wrap

8.12.4. 非推奨または未使用のリソースの削除

Red Hat OpenShift Pipelines Operator に関連付けられた非推奨または未使用のリソースをクリーンアップできます。

手順

  • 次のコマンドを実行して、クラスターから残っている OpenShift Pipelines リソースをすべて削除します。

    $ oc delete clusterroles,rolebindings,serviceaccounts,configmaps,pipelines,tasks \
      --selector 'app.kubernetes.io/managed-by=ssp-operator' \
      --selector 'app.kubernetes.io/component in (tektonPipelines,tektonTasks)' \
      --selector 'app.kubernetes.io/name in (tekton-pipelines,tekton-tasks)' \
      --ignore-not-found \
      --all-namespaces
    Copy to Clipboard Toggle word wrap

    Red Hat OpenShift Pipelines Operator のカスタムリソース定義 (CRD) がすでに削除されている場合、コマンドはエラーを返す可能性があります。他の一致するリソースは引き続きすべて削除されるため、これを無視しても問題ありません。

8.13. 高度な仮想マシン管理

8.13.1. 仮想マシンのリソースクォータの使用

仮想マシンのリソースクォータの作成および管理

8.13.1.1. 仮想マシンのリソースクォータ制限の設定

デフォルトでは、OpenShift Virtualization は、制限を設定する必要があるリソースクォータを namespace が強制する場合、仮想マシン (VM) の CPU およびメモリー制限を自動的に管理します。メモリー制限は要求されたメモリーの 2 倍に自動的に設定され、CPU 制限は仮想 CPU ごとに 1 に設定されます。

alpha.kubevirt.io/auto-memory-limits-ratio ラベルを namespace に追加することで、特定の namespace のメモリー制限比率をカスタマイズできます。たとえば、次のコマンドはメモリー制限比率を 1.2 に設定します。

$ oc label ns/my-virtualization-project  alpha.kubevirt.io/auto-memory-limits-ratio=1.2
Copy to Clipboard Toggle word wrap
警告

リソースクォータ制限を手動で管理することは避けてください。誤った設定やスケジュールの問題を防ぐには、デフォルトをオーバーライドする必要がある場合を除き、OpenShift Virtualization が提供する自動リソース制限管理を利用してください。

requests のみを使用するリソースクォータは、仮想マシンで自動的に機能します。リソースクォータで制限を使用する場合は、仮想マシンに手動でリソース制限を設定する必要があります。リソース limits は、リソース requests より少なくとも 100 MiB 大きくする必要があります。

手順

  1. VirtualMachine マニフェストを編集して、VM の制限を設定します。以下に例を示します。

    apiVersion: kubevirt.io/v1
    kind: VirtualMachine
    metadata:
      name: with-limits
    spec:
      runStrategy: Halted
      template:
        spec:
          domain:
    # ...
            resources:
              requests:
                memory: 128Mi
              limits:
                memory: 256Mi  
    1
    Copy to Clipboard Toggle word wrap
    1
    この設定がサポートされるのは、limits.memory 値が requests.memory 値より少なくとも 100Mi 大きいためです。
  2. VirtualMachine マニフェストを保存します。

8.13.2. 仮想マシンのノードの指定

ノードの配置ルールを使用して、仮想マシン (VM) を特定のノードに配置することができます。

8.13.2.1. 仮想マシンのノード配置について

仮想マシン (VM) が適切なノードで実行されるようにするには、ノードの配置ルールを設定できます。以下の場合にこれを行うことができます。

  • 仮想マシンが複数ある。フォールトトレランスを確保するために、これらを異なるノードで実行する必要がある。
  • 2 つの相互間のネットワークトラフィックの多い chatty VM がある。冗長なノード間のルーティングを回避するには、仮想マシンを同じノードで実行します。
  • 仮想マシンには、利用可能なすべてのノードにない特定のハードウェア機能が必要です。
  • 機能をノードに追加する Pod があり、それらの機能を使用できるように仮想マシンをそのノードに配置する必要があります。
注記

仮想マシンの配置は、ワークロードの既存のノードの配置ルールに基づきます。ワークロードがコンポーネントレベルの特定のノードから除外される場合、仮想マシンはそれらのノードに配置できません。

以下のルールタイプは、VirtualMachine マニフェストの spec フィールドで使用できます。

nodeSelector
このフィールドで指定したキーと値のペアでラベル付けされたノード上で仮想マシンをスケジュールできるようにします。ノードには、リスト表示されたすべてのペアに一致するラベルがなければなりません。
affinity
より表現的な構文を使用して、ノードと仮想マシンに一致するルールを設定できます。たとえば、ルールがハード要件ではなく基本設定になるように指定し、ルールの条件が満たされない場合も仮想マシンがスケジュールされるようにすることができます。Pod のアフィニティー、Pod の非アフィニティー、およびノードのアフィニティーは仮想マシンの配置でサポートされます。Pod のアフィニティーは仮想マシンに対して動作します。VirtualMachine ワークロードタイプは Pod オブジェクトに基づくためです。
tolerations

一致する taint を持つノードに仮想マシンをスケジュールすることを許容します。ノードに taint が適用されると、そのノードはその taint を許容する仮想マシンのみを受け入れます。

注記

アフィニティールールは、スケジューリング時にのみ適用されます。Red Hat OpenShift Service on AWS は、制約が満たされなくなった場合、実行中のワークロードを再スケジュールしません。

8.13.2.2. ノード配置の例

以下の YAML スニペットの例では、nodePlacementaffinity、および tolerations フィールドを使用して仮想マシンのノード配置をカスタマイズします。

8.13.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
# ...
Copy to Clipboard Toggle word wrap

この例では、仮想マシンはラベル 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:
  template:
    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
# ...
Copy to Clipboard Toggle word wrap

1
requiredDuringSchedulingIgnoredDuringExecution ルールタイプを使用する場合、制約を満たさない場合には仮想マシンはスケジュールされません。
2
preferredDuringSchedulingIgnoredDuringExecution ルールタイプを使用する場合、この制約を満たさない場合でも、必要なすべての制約を満たす場合に仮想マシンは依然としてスケジュールされます。
8.13.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:
  template:
    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
# ...
Copy to Clipboard Toggle word wrap

1
requiredDuringSchedulingIgnoredDuringExecution ルールタイプを使用する場合、制約を満たさない場合には仮想マシンはスケジュールされません。
2
preferredDuringSchedulingIgnoredDuringExecution ルールタイプを使用する場合、この制約を満たさない場合でも、必要なすべての制約を満たす場合に仮想マシンは依然としてスケジュールされます。
8.13.2.2.4. 例: toleration を使用した仮想マシンノードの配置

この例では、仮想マシン用に予約されているノードに、すでに key=virtualization:NoSchedule taint のラベルが付けられています。この仮想マシンには一致する tolerations があるため、この仮想マシンを taint を持つノードにスケジュールできます。

注記

taint を許容する仮想マシンを、その taint を持つノードにスケジュールする必要はありません。

仮想マシンマニフェストの例

metadata:
  name: example-vm-tolerations
apiVersion: kubevirt.io/v1
kind: VirtualMachine
spec:
  tolerations:
  - key: "key"
    operator: "Equal"
    value: "virtualization"
    effect: "NoSchedule"
# ...
Copy to Clipboard Toggle word wrap

8.13.3. デフォルトの CPU モデルの設定

HyperConverged カスタムリソース (CR) の defaultCPUModel 設定を使用して、クラスター全体のデフォルト CPU モデルを定義します。

仮想マシン (VM) の CPU モデルは、仮想マシンおよびクラスター内の CPU モデルの可用性によって異なります。

  • 仮想マシンに定義された CPU モデルがない場合:

    • defaultCPUModel は、クラスター全体のレベルで定義された CPU モデルを使用して自動的に設定されます。
  • 仮想マシンとクラスターの両方に CPU モデルが定義されている場合:

    • 仮想マシンの CPU モデルが優先されます。
  • 仮想マシンにもクラスターにも CPU モデルが定義されていない場合:

    • ホストモデルは、ホストレベルで定義された CPU モデルを使用して自動的に設定されます。
8.13.3.1. デフォルトの CPU モデルの設定

HyperConverged カスタムリソース (CR) を更新して、defaultCPUModel を設定します。OpenShift Virtualization の実行中に、defaultCPUModel を変更できます。

注記

defaultCPUModel では、大文字と小文字が区別されます。

前提条件

  • OpenShift CLI (oc) のインストール。

手順

  1. 以下のコマンドを実行して HyperConverged CR を開きます。

    $ oc edit hyperconverged kubevirt-hyperconverged -n openshift-cnv
    Copy to Clipboard Toggle word wrap
  2. CR に defaultCPUModel フィールドを追加し、値をクラスター内に存在する CPU モデルの名前に設定します。

    apiVersion: hco.kubevirt.io/v1beta1
    kind: HyperConverged
    metadata:
     name: kubevirt-hyperconverged
     namespace: openshift-cnv
    spec:
      defaultCPUModel: "EPYC"
    Copy to Clipboard Toggle word wrap
  3. YAML ファイルをクラスターに適用します。

8.13.4. 仮想マシンに UEFI モードを使用する

Unified Extensible Firmware Interface (UEFI) モードで仮想マシン (VM) を起動できます。

8.13.4.1. 仮想マシンの UEFI モードについて

レガシー BIOS などの Unified Extensible Firmware Interface (UEFI) は、コンピューターの起動時にハードウェアコンポーネントやオペレーティングシステムのイメージファイルを初期化します。UEFI は BIOS よりも最新の機能とカスタマイズオプションをサポートするため、起動時間を短縮できます。

これは、.efi 拡張子を持つファイルに初期化と起動に関する情報をすべて保存します。このファイルは、EFI System Partition (ESP) と呼ばれる特別なパーティションに保管されます。ESP には、コンピューターにインストールされるオペレーティングシステムのブートローダープログラムも含まれます。

8.13.4.2. UEFI モードでの仮想マシンの起動

VirtualMachine マニフェストを編集して、UEFI モードで起動するように仮想マシンを設定できます。

前提条件

  • OpenShift CLI (oc) がインストールされている。

手順

  1. 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
    
    # ...
    Copy to Clipboard Toggle word wrap

    1
    OpenShift Virtualization では、UEFI モードでセキュアブートを実行するために SMM (System Management Mode) を有効にする必要があります。
    2
    OpenShift Virtualization は、UEFI モードを使用する場合に、セキュアブートの有無に関わらず、仮想マシンをサポートします。セキュアブートが有効な場合には、UEFI モードが必要です。ただし、セキュアブートを使用せずに UEFI モードを有効にできます。
  2. 以下のコマンドを実行して、マニフェストをクラスターに適用します。

    $ oc create -f <file_name>.yaml
    Copy to Clipboard Toggle word wrap
8.13.4.3. 永続的な EFI の有効化

クラスターレベルで RWX ストレージクラスを設定し、仮想マシンの EFI セクションで設定を調整することで、仮想マシンで EFI 永続性を有効にできます。

前提条件

  • クラスター管理者の権限がある。
  • RWX アクセスモードと FS ボリュームモードをサポートするストレージクラスが必要です。
  • OpenShift CLI (oc) がインストールされている。

手順

  • 次のコマンドを実行して、VMPersistentState フィーチャーゲートを有効にします。

    $ oc patch hyperconverged kubevirt-hyperconverged -n openshift-cnv \
      --type json -p '[{"op":"replace","path":"/spec/featureGates/VMPersistentState", "value": true}]'
    Copy to Clipboard Toggle word wrap
8.13.4.4. 永続的な EFI を使用した仮想マシンの設定

マニフェストファイルを編集して、EFI の永続性を有効にするように仮想マシンを設定できます。

前提条件

  • VMPersistentState フィーチャーゲートが有効になっている。

手順

  • 仮想マシンマニフェストファイルを編集して保存し、設定を適用します。

    apiVersion: kubevirt.io/v1
    kind: VirtualMachine
    metadata:
      name: vm
    spec:
      template:
        spec:
          domain:
            firmware:
              bootloader:
                efi:
                  persistent: true
    # ...
    Copy to Clipboard Toggle word wrap

8.13.5. 仮想マシンの PXE ブートの設定

PXE ブートまたはネットワークブートは OpenShift Virtualization で利用できます。ネットワークブートにより、ローカルに割り当てられたストレージデバイスなしにコンピューターを起動し、オペレーティングシステムまたは他のプログラムを起動し、ロードすることができます。たとえば、これにより、新規ホストのデプロイ時に PXE サーバーから必要な OS イメージを選択できます。

8.13.5.1. MAC アドレスを指定した PXE ブート

まず、管理者は PXE ネットワークの NetworkAttachmentDefinition オブジェクトを作成し、ネットワーク経由でクライアントを起動できます。次に、仮想マシンインスタンスの設定ファイルで Network Attachment Definition を参照して仮想マシンインスタンスを起動します。また PXE サーバーで必要な場合には、仮想マシンインスタンスの設定ファイルで MAC アドレスを指定することもできます。

前提条件

  • Linux ブリッジが接続されている。
  • PXE サーバーがブリッジとして同じ VLAN に接続されている。
  • OpenShift CLI (oc) がインストールされている。

手順

  1. クラスターに PXE ネットワークを設定します。

    1. PXE ネットワーク pxe-net-conf の Network Attachment Definition ファイルを作成します。

      apiVersion: "k8s.cni.cncf.io/v1"
      kind: NetworkAttachmentDefinition
      metadata:
        name: pxe-net-conf 
      1
      
      spec:
        config: |
          {
            "cniVersion": "0.3.1",
            "name": "pxe-net-conf", 
      2
      
            "type": "bridge", 
      3
      
            "bridge": "bridge-interface", 
      4
      
            "macspoofchk": false, 
      5
      
            "vlan": 100, 
      6
      
            "disableContainerInterface": true,
            "preserveDefaultVlan": false 
      7
      
          }
      Copy to Clipboard Toggle word wrap
      1
      NetworkAttachmentDefinition オブジェクトの名前。
      2
      設定の名前。設定名を Network Attachment Definition の name 値に一致させることが推奨されます。
      3
      この Network Attachment Definition のネットワークを提供する Container Network Interface (CNI) プラグインの実際の名前。この例では、Linux bridge CNI プラグインを使用します。OVN-Kubernetes localnet または SR-IOV CNI プラグインを使用することもできます。
      4
      ノードに設定される Linux ブリッジの名前。
      5
      オプション: MAC スプーフィングチェックを有効にするフラグ。true に設定すると、Pod またはゲストインターフェイスの MAC アドレスを変更できません。この属性により、Pod から出ることができる MAC アドレスは 1 つだけになり、MAC スプーフィング攻撃に対するセキュリティーが確保されます。
      6
      オプション: VLAN タグ。Node Network Configuration Policy では、追加の VLAN 設定は必要ありません。
      7
      オプション: 仮想マシンがデフォルト VLAN 経由でブリッジに接続するかどうかを示します。デフォルト値は true です。
  2. 直前の手順で作成したファイルを使用して Network Attachment Definition を作成します。

    $ oc create -f pxe-net-conf.yaml
    Copy to Clipboard Toggle word wrap
  3. 仮想マシンインスタンス設定ファイルを、インターフェイスおよびネットワークの詳細を含めるように編集します。

    1. PXE サーバーで必要な場合には、ネットワークおよび MAC アドレスを指定します。MAC アドレスが指定されていない場合、値は自動的に割り当てられます。

      bootOrder1 に設定されており、インターフェイスが最初に起動することを確認します。この例では、インターフェイスは <pxe-net> というネットワークに接続されています。

      interfaces:
      - masquerade: {}
        name: default
      - bridge: {}
        name: pxe-net
        macAddress: de:00:00:00:00:de
        bootOrder: 1
      Copy to Clipboard Toggle word wrap
      注記

      複数のインターフェイスおよびディスクのブートの順序はグローバル順序になります。

    2. オペレーティングシステムのプロビジョニング後に起動が適切に実行されるよう、ブートデバイス番号をディスクに割り当てます。

      ディスク bootOrder の値を 2 に設定します。

      devices:
        disks:
        - disk:
            bus: virtio
          name: containerdisk
          bootOrder: 2
      Copy to Clipboard Toggle word wrap
    3. 直前に作成された Network Attachment Definition に接続されるネットワークを指定します。このシナリオでは、<pxe-net><pxe-net-conf> という Network Attachment Definition に接続されます。

      networks:
      - name: default
        pod: {}
      - name: pxe-net
        multus:
          networkName: pxe-net-conf
      Copy to Clipboard Toggle word wrap
  4. 仮想マシンインスタンスを作成します。

    $ oc create -f vmi-pxe-boot.yaml
    Copy to Clipboard Toggle word wrap

    出力例

      virtualmachineinstance.kubevirt.io "vmi-pxe-boot" created
    Copy to Clipboard Toggle word wrap

  5. 仮想マシンインスタンスの実行を待機します。

    $ oc get vmi vmi-pxe-boot -o yaml | grep -i phase
      phase: Running
    Copy to Clipboard Toggle word wrap
  6. VNC を使用して仮想マシンインスタンスを表示します。

    $ virtctl vnc vmi-pxe-boot
    Copy to Clipboard Toggle word wrap
  7. ブート画面で、PXE ブートが正常に実行されていることを確認します。
  8. 仮想マシンインスタンスにログインします。

    $ virtctl console vmi-pxe-boot
    Copy to Clipboard Toggle word wrap

検証

  1. 仮想マシンのインターフェイスおよび MAC アドレスを確認し、ブリッジに接続されたインターフェイスに MAC アドレスが指定されていることを確認します。この場合、PXE ブートには IP アドレスなしに eth1 を使用しています。もう 1 つのインターフェイス eth0 は、Red Hat OpenShift Service on AWS から IP アドレスを取得しています。

    $ ip addr
    Copy to Clipboard Toggle word wrap

    出力例

    ...
    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
    Copy to Clipboard Toggle word wrap

8.13.5.2. OpenShift Virtualization ネットワークの用語集

以下の用語は、OpenShift Virtualization ドキュメント全体で使用されています。

Container Network Interface (CNI)
コンテナーのネットワーク接続に重点を置く Cloud Native Computing Foundation プロジェクト。OpenShift Virtualization は CNI プラグインを使用して基本的な Kubernetes ネットワーク機能を強化します。
Multus
複数の CNI の存在を可能にし、Pod または仮想マシンが必要なインターフェイスを使用できるようにする "メタ" CNI プラグイン。
カスタムリソース定義 (CRD)
カスタムリソースの定義を可能にする Kubernetes API リソース、または CRD API リソースを使用して定義されるオブジェクト。
Network Attachment Definition (NAD)
Multus プロジェクトによって導入された CRD。Pod、仮想マシン、および仮想マシンインスタンスを 1 つ以上のネットワークに接続できるようにします。
UserDefinedNetwork (UDN)
ユーザー定義ネットワーク API によって導入された namespace スコープの CRD。これを使用して、テナント namespace を他の namespace から分離するテナントネットワークを作成できます。
ClusterUserDefinedNetwork (CUDN)
ユーザー定義ネットワーク API によって導入されたクラスタースコープの CRD。これは、クラスター管理者が複数の namespace 全体で共有ネットワークを作成するために使用できます。
Node Network Configuration Policy (NNCP)
nmstate プロジェクトによって導入された CRD。ノード上で要求されるネットワーク設定を表します。NodeNetworkConfigurationPolicy マニフェストをクラスターに適用して、インターフェイスの追加および削除など、ノードネットワーク設定を更新します。

8.13.6. 仮想マシンのスケジュール

仮想マシンの CPU モデルとポリシー属性が、ノードがサポートする CPU モデルおよびポリシー属性との互換性に対して一致することを確認して、ノードで仮想マシン (VM) をスケジュールできます。

8.13.6.1. ポリシー属性

仮想マシン (VM) をスケジュールするには、ポリシー属性と、仮想マシンがノードでスケジュールされる際の互換性について一致する CPU 機能を指定します。仮想マシンに指定されるポリシー属性は、その仮想マシンをノードにスケジュールする方法を決定します。

Expand
ポリシー属性説明

force

仮想マシンは強制的にノードでスケジュールされます。これは、ホストの CPU が仮想マシンの CPU に対応していない場合でも該当します。

require

仮想マシンが特定の CPU モデルおよび機能仕様で設定されていない場合に仮想マシンに適用されるデフォルトのポリシー。このデフォルトポリシー属性または他のポリシー属性のいずれかを持つ CPU ノードの検出をサポートするようにノードが設定されていない場合、仮想マシンはそのノードでスケジュールされません。ホストの CPU が仮想マシンの CPU をサポートしているか、ハイパーバイザーが対応している CPU モデルをエミュレートできる必要があります。

optional

仮想マシンがホストの物理マシンの CPU でサポートされている場合は、仮想マシンがノードに追加されます。

disable

仮想マシンは CPU ノードの検出機能と共にスケジュールすることはできません。

forbid

この機能がホストの CPU でサポートされ、CPU ノード検出が有効になっている場合でも、仮想マシンはスケジュールされません。

8.13.6.2. ポリシー属性および CPU 機能の設定

それぞれの仮想マシン (VM) にポリシー属性および CPU 機能を設定して、これがポリシーおよび機能に従ってノードでスケジュールされるようにすることができます。設定する CPU 機能は、ホストの CPU によってサポートされ、またはハイパーバイザーがエミュレートされることを確認するために検証されます。

手順

  • 仮想マシン設定ファイルの domain spec を編集します。以下の例では、仮想マシン (VM) の CPU 機能および require ポリシーを設定します。

    apiVersion: kubevirt.io/v1
    kind: VirtualMachine
    metadata:
      name: myvm
    spec:
      template:
        spec:
          domain:
            cpu:
              features:
                - name: apic 
    1
    
                  policy: require 
    2
    Copy to Clipboard Toggle word wrap
    1
    仮想マシンの名前。
    2
    仮想マシンのポリシー属性。
8.13.6.3. サポートされている CPU モデルでの仮想マシンのスケジューリング

仮想マシン (VM) の CPU モデルを設定して、CPU モデルがサポートされるノードにこれをスケジュールできます。

手順

  • 仮想マシン設定ファイルの domain spec を編集します。以下の例は、VM 向けに定義された特定の CPU モデルを示しています。

    apiVersion: kubevirt.io/v1
    kind: VirtualMachine
    metadata:
      name: myvm
    spec:
      template:
        spec:
          domain:
            cpu:
              model: Conroe 
    1
    Copy to Clipboard Toggle word wrap
    1
    VM の CPU モデル。
8.13.6.4. ホストモデルでの仮想マシンのスケジューリング

仮想マシン (VM) の CPU モデルが host-model に設定されている場合、仮想マシンはスケジュールされているノードの CPU モデルを継承します。

手順

  • 仮想マシン設定ファイルの domain spec を編集します。以下の例は、仮想マシンに指定される host-model を示しています。

    apiVersion: kubevirt/v1alpha3
    kind: VirtualMachine
    metadata:
      name: myvm
    spec:
      template:
        spec:
          domain:
            cpu:
              model: host-model 
    1
    Copy to Clipboard Toggle word wrap
    1
    スケジュールされるノードの CPU モデルを継承する仮想マシン。
8.13.6.5. カスタムスケジューラーを使用した仮想マシンのスケジュール設定

カスタムスケジューラーを使用して、ノード上の仮想マシンをスケジュールできます。

前提条件

  • セカンダリースケジューラーがクラスター用に設定されています。
  • OpenShift CLI (oc) がインストールされている。

手順

  • VirtualMachine マニフェストを編集して、カスタムスケジューラーを仮想マシン設定に追加します。以下に例を示します。

    apiVersion: kubevirt.io/v1
    kind: VirtualMachine
    metadata:
      name: vm-fedora
    spec:
      runStrategy: Always
      template:
        spec:
          schedulerName: my-scheduler 
    1
    
          domain:
            devices:
              disks:
                - name: containerdisk
                  disk:
                    bus: virtio
    # ...
    Copy to Clipboard Toggle word wrap
    1
    カスタムスケジューラーの名前。schedulerName 値が既存のスケジューラーと一致しない場合、virt-launcher Pod は、指定されたスケジューラーが見つかるまで Pending 状態のままになります。

検証

  • virt-launcher Pod イベントをチェックして、仮想マシンが VirtualMachine マニフェストで指定されたカスタムスケジューラーを使用していることを確認します。

    1. 次のコマンドを入力して、クラスター内の Pod のリストを表示します。

      $ oc get pods
      Copy to Clipboard Toggle word wrap

      出力例

      NAME                             READY   STATUS    RESTARTS   AGE
      virt-launcher-vm-fedora-dpc87    2/2     Running   0          24m
      Copy to Clipboard Toggle word wrap

    2. 次のコマンドを実行して Pod イベントを表示します。

      $ oc describe pod virt-launcher-vm-fedora-dpc87
      Copy to Clipboard Toggle word wrap

      出力の From フィールドの値により、スケジューラー名が VirtualMachine マニフェストで指定されたカスタムスケジューラーと一致することが検証されます。

      出力例

      [...]
      Events:
        Type    Reason     Age   From              Message
        ----    ------     ----  ----              -------
        Normal  Scheduled  21m   my-scheduler  Successfully assigned default/virt-launcher-vm-fedora-dpc87 to node01
      [...]
      Copy to Clipboard Toggle word wrap

8.13.7. 仮想マシンの高可用性について

修復ノードを設定することで、仮想マシン (VM) の高可用性を有効化できます。

OperatorHub から Self Node Remediation Operator または Fence Agents Remediation Operator をインストールし、マシンのヘルスチェックまたはノードの修復チェックを有効にすることで、修復ノードを設定できます。

ノードの修復、フェンシング、メンテナンスの詳細は、Red Hat OpenShift のワークロードの可用性 を参照してください。

8.13.8. 仮想マシンのコントロールプレーンのチューニング

OpenShift Virtualization は、コントロールプレーンレベルで次のチューニングオプションを提供します。

  • highBurst プロファイルは、固定 QPSburst レートを使用して、1 つのバッチで数百の仮想マシンを作成します。
  • ワークロードの種類に基づいた移行設定の調整
8.13.8.1. highBurst プロファイルの設定

highBurst プロファイルを使用して、1 つのクラスター内に多数の仮想マシンを作成および維持します。

前提条件

  • OpenShift CLI (oc) がインストールされている。

手順

  • 次のパッチを適用して、highBurst チューニングポリシープロファイルを有効にします。

    $ oc patch hyperconverged kubevirt-hyperconverged -n openshift-cnv \
      --type=json -p='[{"op": "add", "path": "/spec/tuningPolicy", \
      "value": "highBurst"}]'
    Copy to Clipboard Toggle word wrap

検証

  • 次のコマンドを実行して、highBurst チューニングポリシープロファイルが有効になっていることを確認します。

    $ oc get kubevirt.kubevirt.io/kubevirt-kubevirt-hyperconverged \
      -n openshift-cnv -o go-template --template='{{range $config, \
      $value := .spec.configuration}} {{if eq $config "apiConfiguration" \
      "webhookConfiguration" "controllerConfiguration" "handlerConfiguration"}} \
      {{"\n"}} {{$config}} = {{$value}} {{end}} {{end}} {{"\n"}}
    Copy to Clipboard Toggle word wrap

8.14. 仮想マシンディスク

8.14.1. 仮想マシンディスクのホットプラグ

仮想マシン (VM) または仮想マシンインスタンス (VMI) を停止することなく、仮想ディスクを追加または削除できます。

データボリュームおよび永続ボリューム要求 (PVC) のみをホットプラグおよびホットアンプラグできます。コンテナーディスクのホットプラグおよびホットアンプラグはできません。

ホットプラグされたディスクは、再起動後も仮想マシンに接続されたままになります。仮想マシンからディスクを削除するには、ディスクを切断する必要があります。

ホットプラグされたディスクを永続的に作成して、仮想マシンに永続的にマウントできます。

注記

各仮想マシンには virtio-scsi コントローラーがあり、ホットプラグされたディスクが SCSI バスを使用できるようになります。virtio-scsi コントローラーは、パフォーマンス上の利点を維持しながら、virtio の制限を克服します。スケーラビリティーが高く、400 万台を超えるディスクのホットプラグをサポートします。

通常の virtio はスケーラブルではないため、ホットプラグされたディスクには使用できません。各 virtio ディスクは、仮想マシン内の限られた PCI Express (PCIe) スロットの 1 つを使用します。PCIe スロットは他のデバイスでも使用されるため、事前に予約する必要があります。したがって、スロットはオンデマンドで利用できない場合があります。

8.14.1.1. Web コンソールを使用したディスクのホットプラグとホットアンプラグ

Red Hat OpenShift Service on AWS Web コンソールを使用して、仮想マシン (VM) の実行中にディスクを仮想マシンに接続して、ディスクをホットプラグできます。

ホットプラグされたディスクは、アンプラグするまで仮想マシンに接続されたままになります。

ホットプラグされたディスクを永続的に作成して、仮想マシンに永続的にマウントできます。

前提条件

  • ホットプラグに使用できるデータボリュームまたは永続ボリュームクレーム (PVC) が必要です。

手順

  1. Web コンソールで VirtualizationVirtualMachines に移動します。
  2. 実行中の仮想マシンを選択して、その詳細を表示します。
  3. VirtualMachine details ページで、ConfigurationDisks をクリックします。
  4. ホットプラグされたディスクを追加します。

    1. Add disk をクリックします。
    2. Add disk (hot plugged) ウィンドウで、Source リストからディスクを選択し、Save をクリックします。
  5. オプション: ホットプラグされたディスクを取り外します。

    1. ディスクの横にある Options メニュー kebab をクリックし、Detach を選択します。
    2. Detach をクリックします。
  6. オプション: ホットプラグされたディスクを永続的にします。

    1. ディスクの横にある Options メニュー kebab をクリックし、Make persistent を選択します。
    2. 仮想マシンを再起動して変更を適用します。
8.14.1.2. CLI を使用したディスクのホットプラグとホットアンプラグ

コマンドラインを使用して、仮想マシンの実行中にディスクのホットプラグおよびホットアンプラグを行うことができます。

ホットプラグされたディスクを永続的に作成して、仮想マシンに永続的にマウントできます。

前提条件

  • ホットプラグ用に 1 つ以上のデータボリュームまたは永続ボリューム要求 (PVC) が利用可能である必要があります。

手順

  • 次のコマンドを実行して、ディスクをホットプラグします。

    $ virtctl addvolume <virtual-machine|virtual-machine-instance> \
      --volume-name=<datavolume|PVC> \
      [--persist] [--serial=<label-name>]
    Copy to Clipboard Toggle word wrap
    • オプションの --persist フラグを使用して、ホットプラグされたディスクを、永続的にマウントされた仮想ディスクとして仮想マシン仕様に追加します。仮想ディスクを永続的にマウントするために、仮想マシンを停止、再開または再起動します。--persist フラグを指定しても、仮想ディスクをホットプラグしたり、ホットアンプラグしたりできなくなります。--persist フラグは仮想マシンに適用され、仮想マシンインスタンスには適用されません。
    • オプションの --serial フラグを使用すると、選択した英数字の文字列ラベルを追加できます。これは、ゲスト仮想マシンでホットプラグされたディスクを特定するのに役立ちます。このオプションを指定しない場合、ラベルはデフォルトでホットプラグされたデータボリュームまたは PVC の名前に設定されます。
  • 次のコマンドを実行して、ディスクをホットアンプラグします。

    $ virtctl removevolume <virtual-machine|virtual-machine-instance> \
      --volume-name=<datavolume|PVC>
    Copy to Clipboard Toggle word wrap

8.14.2. 仮想マシンディスクの拡張

ディスクの永続ボリューム要求 (PVC) を拡張することで、仮想マシンディスクのサイズを増やすことができます。

ストレージプロバイダーがボリューム拡張をサポートしていない場合は、空のデータボリュームを追加することで、仮想マシンの利用可能な仮想ストレージを拡張できます。

仮想マシンディスクのサイズを減らすことはできません。

8.14.2.1. ディスクの PVC を拡張して仮想マシンディスクサイズを増やす

ディスクの永続ボリューム要求 (PVC) を拡張することで、仮想マシンディスクのサイズを増やすことができます。増加した PVC ボリュームを指定するには、仮想マシンを実行した状態で Web コンソールを使用できます。または、CLI で PVC マニフェストを編集することもできます。

注記

PVC がファイルシステムボリュームモードを使用する場合、ディスクイメージファイルは、ファイルシステムのオーバーヘッド用にスペースを確保しながら、利用可能なサイズまで拡張されます。

8.14.2.1.1. Web コンソールで仮想マシンディスク PVC を拡張する

VirtualMachines ページを離れずに仮想マシンを実行している状態でも、Web コンソールで仮想マシンディスク PVC のサイズを増やすことができます。

手順

  1. Administrator または Virtualization パースペクティブで、VirtualMachines ページを開きます。
  2. 実行中の仮想マシンを選択して、Details ページを開きます。
  3. Configuration タブを選択し、Storage をクリックします。
  4. 拡張したいディスクの横にあるオプションメニュー kebab をクリックします。Edit オプションを選択します。

    Edit disk ダイアログが開きます。

  5. PersistentVolumeClaim size フィールドに、希望のサイズを入力します。
  6. Save をクリックします。
注記

現在の値より大きい任意の値を入力できます。ただし、新しい値が使用可能なサイズを超える場合は、エラーが表示されます。

8.14.2.1.2. マニフェストを編集して仮想マシンディスク PVC を拡張する

前提条件

  • OpenShift CLI (oc) がインストールされている。

手順

  1. 拡張する必要のある仮想マシンディスクの PersistentVolumeClaim マニフェストを編集します。

    $ oc edit pvc <pvc_name>
    Copy to Clipboard Toggle word wrap
  2. ディスクサイズを更新します。

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
       name: vm-disk-expand
    spec:
      accessModes:
         - ReadWriteMany
      resources:
        requests:
           storage: 3Gi 
    1
    
    # ...
    Copy to Clipboard Toggle word wrap
    1
    新しいディスクサイズを指定します。
8.14.2.2. 空のデータボリュームを追加して利用可能な仮想ストレージを拡張する

空のデータボリュームを追加することで、仮想マシンの利用可能なストレージを拡張できます。

前提条件

  • 少なくとも 1 つの永続ボリュームが必要です。
  • OpenShift CLI (oc) がインストールされている。

手順

  1. 次の例に示すように、DataVolume マニフェストを作成します。

    DataVolume マニフェストの例

    apiVersion: cdi.kubevirt.io/v1beta1
    kind: DataVolume
    metadata:
      name: blank-image-datavolume
    spec:
      source:
        blank: {}
      storage:
        resources:
          requests:
            storage: <2Gi> 
    1
    
      storageClassName: "<storage_class>" 
    2
    Copy to Clipboard Toggle word wrap

    1
    データボリュームに要求される利用可能なスペースの量を指定します。
    2
    オプション: ストレージクラスを指定しない場合は、デフォルトのストレージクラスが適用されます。
  2. 以下のコマンドを実行してデータボリュームを作成します。

    $ oc create -f <blank-image-datavolume>.yaml
    Copy to Clipboard Toggle word wrap

8.14.3. 仮想マシンディスクを別のストレージクラスに移行する

仮想マシン (VM) または仮想マシンインスタンス (VMI) を停止せずに、1 つ以上の仮想ディスクを別のストレージクラスに移行できます。

8.14.3.1. Web コンソールを使用して仮想マシンディスクを別のストレージクラスに移行する

Red Hat OpenShift Service on AWS Web コンソールを使用して、仮想マシン (VM) に接続された 1 つ以上のディスクを別のストレージクラスに移行できます。実行中の仮想マシンでこのアクションを実行すると、仮想マシンの操作は中断されず、移行されたディスク上のデータに引き続きアクセスできます。

注記

OpenShift Virtualization Operator では、一度に 1 つの仮想マシンのストレージクラスの移行のみを開始でき、その仮想マシンは実行中である必要があります。一度に複数の仮想マシンを移行する必要がある場合、または実行中の仮想マシンと停止中の仮想マシンを混在して移行する必要がある場合は、Migration Toolkit for Containers (MTC) の使用を検討してください。

Migration Toolkit for Containers は OpenShift Virtualization には含まれていないため、別途インストールする必要があります。

重要

ストレージクラスの移行は、テクノロジープレビュー機能としてのみご利用いただけます。テクノロジープレビュー機能は、Red Hat 製品のサービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではないことがあります。Red Hat は、実稼働環境でこれらを使用することを推奨していません。テクノロジープレビュー機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行い、フィードバックを提供していただくことを目的としています。

Red Hat のテクノロジープレビュー機能のサポート範囲に関する詳細は、テクノロジープレビュー機能のサポート範囲 を参照してください。

前提条件

  • ストレージクラスの移行には、データボリュームまたは永続ボリューム要求 (PVC) が使用可能である必要がある。
  • クラスターにはライブマイグレーションに使用できるノードが必要である。ストレージクラスの移行の一環として、仮想マシンが別のノードにライブマイグレーションされている。
  • 仮想マシンが実行されている必要がある。

手順

  1. Web コンソールで VirtualizationVirtualMachines に移動します。
  2. 仮想マシンの横にあるオプションメニュー kebab をクリックし、MigrationStorage を選択します。

    このオプションには、VirtualMachine details ページで ActionsMigrationStorage を選択してアクセスすることもできます。

    または、ツリービューで仮想マシンを右クリックし、ポップアップメニューから Migration を選択します。

  3. Migration details ページで、仮想マシンストレージ全体を移行するか、選択したボリュームのみを移行するかを選択します。Selected volumes をクリックする場合は、移行するディスクを選択します。Next をクリックして先に進みます。
  4. Destination StorageClass ページの利用可能なオプションのリストから、移行先のストレージクラスを選択します。Next をクリックして先に進みます。
  5. Review ページで、影響を受けるディスクのリストとターゲットストレージクラスを確認します。移行を開始するには、Migrate VirtualMachine storage をクリックします。
  6. Migrate VirtualMachine storage ページに留まり、進行状況を監視し、移行が正常に完了したことの確認を待ちます。

検証

  1. VirtualMachine details ページから、ConfigurationStorage に移動します。
  2. すべてのディスクに Storage class 列にリストされている必要なストレージクラスがあることを確認します。

第9章 ネットワーク

9.1. ネットワークの概要

OpenShift Virtualization は、カスタムリソースおよびプラグインを使用して高度なネットワーク機能を提供します。仮想マシン (VM) は、Red Hat OpenShift Service on AWS ネットワークおよびそのエコシステムと統合されています。

シングルスタック IPv6 クラスターに対する OpenShift Virtualization のサポートは、OVN-Kubernetes localnet および Linux ブリッジ Container Network Interface (CNI) プラグインに限定されています。

重要

シングルスタック IPv6 クラスターへの OpenShift Virtualization のデプロイは、テクノロジープレビュー機能です。テクノロジープレビュー機能は、Red Hat 製品のサービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではないことがあります。Red Hat は、実稼働環境でこれらを使用することを推奨していません。テクノロジープレビュー機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行い、フィードバックを提供していただくことを目的としています。

Red Hat のテクノロジープレビュー機能のサポート範囲に関する詳細は、テクノロジープレビュー機能のサポート範囲 を参照してください。

次の図は、OpenShift Virtualization の一般的なネットワーク設定を示しています。他の設定も可能です。

図9.1 OpenShift Virtualization ネットワークの概要

20 Pod と仮想マシンは同じネットワークインフラストラクチャー上で実行するため、コンテナー化されたワークロードと仮想化されたワークロードを簡単に接続できます。

20 仮想マシンをデフォルトの Pod ネットワークおよび任意の数のセカンダリーネットワークに接続できます。

20 デフォルトの Pod ネットワークは、すべてのメンバー間の接続、サービス抽象化、IP 管理、マイクロセグメンテーション、およびその他の機能を提供します。

20 Multus は、互換性のある他の CNI プラグインを使用して、Pod または仮想マシンが追加のネットワークインターフェイスに接続できるようにする "メタ" CNI プラグインです。

20 デフォルトの Pod ネットワークはオーバーレイベースであり、基盤となるマシンネットワークを介してトンネリングされます。

20 マシンネットワークは、選択したネットワークインターフェイスコントローラー (NIC) のセットを介して定義できます。

20 セカンダリー仮想マシンネットワークは通常、VLAN カプセル化の有無にかかわらず、物理ネットワークに直接ブリッジされます。セカンダリーネットワーク用の仮想オーバーレイネットワークを作成することも可能です。

重要

仮想マシンをアンダーレイネットワークに直接接続することは、Red Hat OpenShift Service on AWS、Azure for Red Hat OpenShift Service on AWS、または Oracle® Cloud Infrastructure (OCI) ではサポートされていません。

注記

パブリッククラウドでは、layer2 トポロジーを使用して仮想マシンをユーザー定義ネットワークに接続することを推奨します。

20 セカンダリー仮想マシンネットワークは、図 1 に示すように専用の NIC セットで定義することも、マシンネットワークを使用することもできます。

9.1.1. OpenShift Virtualization ネットワークの用語集

以下の用語は、OpenShift Virtualization ドキュメント全体で使用されています。

Container Network Interface (CNI)
コンテナーのネットワーク接続に重点を置く Cloud Native Computing Foundation プロジェクト。OpenShift Virtualization は CNI プラグインを使用して基本的な Kubernetes ネットワーク機能を強化します。
Multus
複数の CNI の存在を可能にし、Pod または仮想マシンが必要なインターフェイスを使用できるようにする "メタ" CNI プラグイン。
カスタムリソース定義 (CRD)
カスタムリソースの定義を可能にする Kubernetes API リソース、または CRD API リソースを使用して定義されるオブジェクト。
Network Attachment Definition (NAD)
Multus プロジェクトによって導入された CRD。Pod、仮想マシン、および仮想マシンインスタンスを 1 つ以上のネットワークに接続できるようにします。
UserDefinedNetwork (UDN)
ユーザー定義ネットワーク API によって導入された namespace スコープの CRD。これを使用して、テナント namespace を他の namespace から分離するテナントネットワークを作成できます。
ClusterUserDefinedNetwork (CUDN)
ユーザー定義ネットワーク API によって導入されたクラスタースコープの CRD。これは、クラスター管理者が複数の namespace 全体で共有ネットワークを作成するために使用できます。
Node Network Configuration Policy (NNCP)
nmstate プロジェクトによって導入された CRD。ノード上で要求されるネットワーク設定を表します。NodeNetworkConfigurationPolicy マニフェストをクラスターに適用して、インターフェイスの追加および削除など、ノードネットワーク設定を更新します。

9.1.2. デフォルトの Pod ネットワークの使用

仮想マシンをデフォルトの Pod ネットワークに接続する
各仮想マシンは、デフォルトの内部 Pod ネットワークにデフォルトで接続されます。仮想マシン仕様を編集することで、ネットワークインターフェイスを追加または削除できます。
仮想マシンをサービスとして公開する
Service オブジェクトを作成することで、クラスター内またはクラスター外に仮想マシンを公開できます。

9.1.3. プライマリーユーザー定義ネットワークの設定

仮想マシンをプライマリーユーザー定義ネットワークに接続する

仮想マシン (VM) を、仮想マシンのプライマリーインターフェイス上のユーザー定義ネットワーク (UDN) に接続できます。プライマリー UDN は、デフォルトの Pod ネットワークを置き換えて、選択した namespace 内の Pod と仮想マシンを接続します。

クラスター管理者は、プライマリー UserDefinedNetwork CRD を設定して、ネットワークポリシーを必要とせずに、テナント namespace を他の namespace から分離するテナントネットワークを作成できます。さらに、クラスター管理者は ClusterUserDefinedNetwork CRD を使用して、複数の namespace にわたって共有 OVN layer2 ネットワークを作成できます。

layer2 オーバーレイトポロジーを使用したユーザー定義ネットワークは、仮想マシンのワークロードに役立ち、物理ネットワークアクセスが制限されている環境 (例: パブリッククラウド) では、セカンダリーネットワークの適切な代替手段となります。layer2 トポロジーにより、ネットワークアドレス変換 (NAT) を必要とせずに仮想マシンをシームレスに移行できるほか、再起動後やライブマイグレーション中に保持される永続的な IP アドレスも提供されます。

9.1.4. 仮想マシンのセカンダリーネットワークインターフェイスの設定

OVN-Kubernetes Container Network Interface (CNI) プラグインを使用して、仮想マシンをセカンダリーネットワークに接続できます。セカンダリーネットワークインターフェイスに接続する場合、仮想マシン仕様でプライマリー Pod ネットワークを指定する必要はありません。

OVN-Kubernetes セカンダリーネットワークへの仮想マシンの接続

仮想マシンは Open Virtual Network (OVN)-Kubernetes セカンダリーネットワークに接続できます。OpenShift Virtualization は、OVN-Kubernetes の layer2 トポロジーをサポートします。

layer2 トポロジーは、クラスター全体の論理スイッチによってワークロードを接続します。OVN-Kubernetes CNI プラグインは、Geneve (Generic Network Virtualization Encapsulation) プロトコルを使用して、ノード間にオーバーレイネットワークを作成します。このオーバーレイネットワークを使用すると、追加の物理ネットワークインフラストラクチャーを設定することなく、さまざまなノード上の仮想マシンを接続できます。

OVN-Kubernetes セカンダリーネットワークを設定し、そのネットワークに仮想マシンを接続するには、次の手順を実行します。

  1. ネットワークアタッチメント定義 (NAD) を作成して、OVN-Kubernetes セカンダリーネットワークの設定 を行います。
  2. ネットワークの詳細を仮想マシン仕様に追加して、仮想マシンを OVN-Kubernetes セカンダリーネットワークに接続 します。
ホットプラグ対応のセカンダリーネットワークインターフェイス
仮想マシンを停止せずに、セカンダリーネットワークインターフェイスを追加または削除できます。OpenShift Virtualization は、ブリッジバインディングおよび OVN-Kubernetes layer2 トポロジーを使用するセカンダリーインターフェイスのホットプラグとホットアンプラグをサポートしています。
IP アドレスの設定と表示
仮想マシンを作成するときに、セカンダリーネットワークインターフェイスの IP アドレスを設定できます。IP アドレスは、cloud-init でプロビジョニングされます。仮想マシンの IP アドレスは、Red Hat OpenShift Service on AWS Web コンソールまたはコマンドラインを使用して表示できます。ネットワーク情報は QEMU ゲストエージェントによって収集されます。

9.1.5. OpenShift Service Mesh との統合

仮想マシンのサービスメッシュへの接続
OpenShift Virtualization は OpenShift Service Mesh と統合されています。Pod と仮想マシン間のトラフィックを監視、視覚化、制御できます。

9.1.6. MAC アドレスプールの管理

ネットワークインターフェイスの MAC アドレスプールの管理
KubeMacPool コンポーネントは、共有 MAC アドレスプールから仮想マシンネットワークインターフェイスの MAC アドレスを割り当てます。これにより、各ネットワークインターフェイスに一意の MAC アドレスが確実に割り当てられます。その仮想マシンから作成された仮想マシンインスタンスは、再起動後も割り当てられた MAC アドレスを保持します。

9.1.7. SSH アクセスの設定

仮想マシンへの SSH アクセスの設定

次の方法を使用して、仮想マシンへの SSH アクセスを設定できます。

  • virtctl ssh コマンド

    SSH 鍵ペアを作成し、公開鍵を仮想マシンに追加し、秘密鍵を使用して virtctl ssh コマンドを実行して仮想マシンに接続します。

    cloud-init データソースを使用して設定できるゲストオペレーティングシステムを使用して、実行時または最初の起動時に Red Hat Enterprise Linux (RHEL) 9 仮想マシンに SSH 公開鍵を追加できます。

  • virtctl port-forward コマンド

    virtctl port-foward コマンドを .ssh/config ファイルに追加し、OpenSSH を使用して仮想マシンに接続します。

  • サービス

    サービスを作成し、そのサービスを仮想マシンに関連付け、サービスによって公開されている IP アドレスとポートに接続します。

  • セカンダリーネットワーク

    セカンダリーネットワークを設定し、仮想マシンをセカンダリーネットワークインターフェイスに接続し、割り当てられた IP アドレスに接続します。

9.2. 仮想マシンをデフォルトの Pod ネットワークに接続する

masquerade バインディングモードを使用するようにネットワークインターフェイスを設定することで、仮想マシンをデフォルトの内部 Pod ネットワークに接続できます。

注記

ネットワークインターフェイスを通過してデフォルトの Pod ネットワークに到達するトラフィックは、ライブマイグレーション中に中断されます。

9.2.1. CLI でのマスカレードモードの設定

マスカレードモードを使用し、仮想マシンの送信トラフィックを Pod IP アドレスの背後で非表示にすることができます。マスカレードモードは、ネットワークアドレス変換 (NAT) を使用して仮想マシンを Linux ブリッジ経由で Pod ネットワークバックエンドに接続します。

仮想マシンの設定ファイルを編集して、マスカレードモードを有効にし、トラフィックが仮想マシンに到達できるようにします。

前提条件

  • OpenShift CLI (oc) がインストールされている。
  • 仮想マシンは、IPv4 アドレスを取得するために DHCP を使用できるように設定される必要がある。

手順

  1. 仮想マシン設定ファイルの interfaces spec を編集します。

    apiVersion: kubevirt.io/v1
    kind: VirtualMachine
    metadata:
      name: example-vm
    spec:
      template:
        spec:
          domain:
            devices:
              interfaces:
                - name: default
                  masquerade: {} 
    1
    
                  ports: 
    2
    
                    - port: 80
    # ...
          networks:
          - name: default
            pod: {}
    Copy to Clipboard Toggle word wrap
    1
    マスカレードモードを使用した接続
    2
    オプション: 仮想マシンから公開するポートを、port フィールドで指定して一覧表示します。port の値は 0 から 65536 の間の数字である必要があります。ports 配列を使用しない場合、有効な範囲内の全ポートが受信トラフィックに対して開きます。この例では、着信トラフィックはポート 80 で許可されます。
    注記

    ポート 49152 および 49153 は libvirt プラットフォームで使用するために予約され、これらのポートへの他のすべての受信トラフィックは破棄されます。

  2. 仮想マシンを作成します。

    $ oc create -f <vm-name>.yaml
    Copy to Clipboard Toggle word wrap

9.2.2. デュアルスタック (IPv4 および IPv6) でのマスカレードモードの設定

cloud-init を使用して、新規仮想マシン (VM) を、デフォルトの Pod ネットワークで IPv6 と IPv4 の両方を使用するように設定できます。

仮想マシンインスタンス設定の Network.pod.vmIPv6NetworkCIDR フィールドは、VM の静的 IPv6 アドレスとゲートウェイ IP アドレスを決定します。これらは IPv6 トラフィックを仮想マシンにルーティングするために virt-launcher Pod で使用され、外部では使用されません。Network.pod.vmIPv6NetworkCIDR フィールドは、Classless Inter-Domain Routing (CIDR) 表記で IPv6 アドレスブロックを指定します。デフォルト値は fd10:0:2::2/120 です。この値は、ネットワーク要件に基づいて編集できます。

仮想マシンが実行されている場合、仮想マシンの送受信トラフィックは、virt-launcher Pod の IPv4 アドレスと固有の IPv6 アドレスの両方にルーティングされます。次に、virt-launcher Pod は IPv4 トラフィックを仮想マシンの DHCP アドレスにルーティングし、IPv6 トラフィックを仮想マシンの静的に設定された IPv6 アドレスにルーティングします。

前提条件

  • Red Hat OpenShift Service on AWS クラスターで、デュアルスタック用に設定された OVN-Kubernetes Container Network Interface (CNI) ネットワークプラグインを使用する。
  • OpenShift CLI (oc) がインストールされている。

手順

  1. 新規の仮想マシン設定では、masquerade を指定したインターフェイスを追加し、cloud-init を使用して IPv6 アドレスとデフォルトゲートウェイを設定します。

    apiVersion: kubevirt.io/v1
    kind: VirtualMachine
    metadata:
      name: example-vm-ipv6
    spec:
      template:
        spec:
          domain:
            devices:
              interfaces:
                - name: default
                  masquerade: {} 
    1
    
                  ports:
                    - port: 80 
    2
    
    # ...
          networks:
          - name: default
            pod: {}
          volumes:
          - cloudInitNoCloud:
              networkData: |
                version: 2
                ethernets:
                  eth0:
                    dhcp4: true
                    addresses: [ fd10:0:2::2/120 ] 
    3
    
                    gateway6: fd10:0:2::1 
    4
    Copy to Clipboard Toggle word wrap
    1
    マスカレードモードを使用した接続
    2
    ポート 80 の受信トラフィックを仮想マシンに対して許可します。
    3
    仮想マシンインスタンス設定の Network.pod.vmIPv6NetworkCIDR フィールドによって決定される静的 IPv6 アドレス。デフォルト値は fd10:0:2::2/120 です。
    4
    仮想マシンインスタンス設定の Network.pod.vmIPv6NetworkCIDR フィールドによって決定されるゲートウェイ IP アドレス。デフォルト値は fd10:0:2::1 です。
  2. namespace で仮想マシンインスタンスを作成します。

    $ oc create -f example-vm-ipv6.yaml
    Copy to Clipboard Toggle word wrap

検証

  • IPv6 が設定されていることを確認するには、仮想マシンを起動し、仮想マシンインスタンスのインターフェイスステータスを表示して、これに IPv6 アドレスがあることを確認します。
$ oc get vmi <vmi-name> -o jsonpath="{.status.interfaces[*].ipAddresses}"
Copy to Clipboard Toggle word wrap

9.2.3. ジャンボフレームのサポートについて

OVN-Kubernetes CNI プラグインを使用すると、デフォルトの Pod ネットワークに接続されている 2 つの仮想マシン (VM) 間でフラグメント化されていないジャンボフレームパケットを送信できます。ジャンボフレームの最大伝送単位 (MTU) 値は 1500 バイトを超えています。

VM は、クラスター管理者が設定したクラスターネットワークの MTU 値を、次のいずれかの方法で自動的に取得します。

  • libvirt: ゲスト OS に VirtIO ドライバーの最新バージョンがあり、エミュレーションされたデバイスの Peripheral Component Interconnect (PCI) 設定レジスターを介して着信データを解釈できる場合。
  • DHCP: ゲスト DHCP クライアントが DHCP サーバーの応答から MTU 値を読み取ることができる場合。
注記

VirtIO ドライバーを持たない Windows VM の場合、netsh または同様のツールを使用して MTU を手動で設定する必要があります。これは、Windows DHCP クライアントが MTU 値を読み取らないためです。

9.3. 仮想マシンをプライマリーユーザー定義ネットワークに接続する

Red Hat OpenShift Service on AWS Web コンソールまたは CLI を使用して、仮想マシン (VM) を仮想マシンのプライマリーインターフェイス上のユーザー定義ネットワーク (UDN) に接続できます。プライマリーのユーザー定義ネットワークは、指定された namespace 内のデフォルトの Pod ネットワークを置き換えます。Pod ネットワークとは異なり、プロジェクトごとにプライマリー UDN を定義でき、各プロジェクトは特定のサブネットとトポロジーを使用できます。

OpenShift Virtualization は、namespace スコープの UserDefinedNetwork とクラスタースコープの ClusterUserDefinedNetwork カスタムリソース定義 (CRD) をサポートします。

クラスター管理者は、プライマリー UserDefinedNetwork CRD を設定して、ネットワークポリシーを必要とせずに、テナント namespace を他の namespace から分離するテナントネットワークを作成できます。さらに、クラスター管理者は ClusterUserDefinedNetwork CRD を使用して、複数の namespace にわたる共有 OVN ネットワークを作成できます。

注記

ユーザー定義ネットワークで使用する namespace を作成する場合は、k8s.ovn.org/ primary-user-defined-network ラベルを追加する必要があります。

レイヤー 2 トポロジーでは、OVN-Kubernetes はノード間にオーバーレイネットワークを作成します。このオーバーレイネットワークを使用すると、追加の物理ネットワークインフラストラクチャーを設定することなく、さまざまなノード上の仮想マシンを接続できます。

レイヤー 2 トポロジーでは、ライブマイグレーション中に永続的な IP アドレスがクラスターノード間で保持されるため、ネットワークアドレス変換 (NAT) を必要とせずに仮想マシンをシームレスに移行できます。

プライマリー UDN を実装する前に、次の制限を考慮する必要があります。

  • virtctl ssh コマンドを使用して仮想マシンへの SSH アクセスを設定できません。
  • oc port-forward コマンドを使用してポートを仮想マシンに転送できません。
  • ヘッドレスサービスを使用して仮想マシンにアクセスできません。
  • 仮想マシンヘルスチェックを設定するために readiness プローブと liveness プローブを定義できません。

9.3.1. Web コンソールを使用したプライマリーユーザー定義ネットワークの作成

Red Hat OpenShift Service on AWS Web コンソールを使用して、プライマリー namespace スコープの UserDefinedNetwork またはクラスタースコープの ClusterUserDefinedNetwork CRD を作成できます。UDN は、ネットワークに関連付けられた namespace で作成する Pod と仮想マシンのデフォルトのプライマリーネットワークとして機能します。

9.3.1.1. Web コンソールを使用したユーザー定義ネットワークの namespace の作成

Red Hat OpenShift Service on AWS Web コンソールを使用して、プライマリーユーザー定義ネットワーク (UDN) で使用する namespace を作成できます。

前提条件

  • cluster-admin 権限を持つユーザーとして、Red Hat OpenShift Service on AWS Web コンソールにログインする。

手順

  1. Administrator パースペクティブから、AdministrationNamespaces をクリックします。
  2. Create Namespace をクリックします。
  3. Name フィールドに、namespace の名前を指定します。名前は、小文字の英数字または '-' で構成される必要があり、先頭と末尾は英数字でなければなりません。
  4. Labels フィールドに、k8s.ovn.org/primary-user-defined-network ラベルを追加します。
  5. オプション: namespace を既存のクラスタースコープ UDN で使用する場合は、ClusterUserDefinedNetwork カスタムリソースの spec.namespaceSelector フィールドで定義されている適切なラベルを追加します。
  6. オプション: デフォルトのネットワークポリシーを指定します。
  7. namespace を作成するには、Create をクリックします。

Red Hat OpenShift Service on AWS Web コンソールで UserDefinedNetwork カスタムリソースを作成することにより、プロジェクト namespace に分離されたプライマリーネットワークを作成できます。

前提条件

  • cluster-admin 権限を持つユーザーとして Red Hat OpenShift Service on AWS Web コンソールにアクセスできる。
  • namespace を作成し、k8s.ovn.org/primary-user-defined-network ラベルを適用している。詳細は、「Web コンソールを使用したユーザー定義ネットワークの namespace の作成」を参照してください。

手順

  1. Administrator パースペクティブから、NetworkingUserDefinedNetworks をクリックします。
  2. Create UserDefinedNetwork をクリックします。
  3. Project name リストから、以前に作成した namespace を選択します。
  4. Subnet フィールドに値を指定します。
  5. Create をクリックします。ユーザー定義ネットワークは、この namespace で作成する Pod と仮想マシンのデフォルトのプライマリーネットワークとして機能します。

Red Hat OpenShift Service on AWS Web コンソールで ClusterUserDefinedNetwork カスタムリソースを作成することで、複数の namespace を同じプライマリーユーザー定義ネットワーク (UDN) に接続できます。

前提条件

  • cluster-admin 権限を持つユーザーとして Red Hat OpenShift Service on AWS Web コンソールにアクセスできる。

手順

  1. Administrator パースペクティブから、NetworkingUserDefinedNetworks をクリックします。
  2. Create リストから、ClusterUserDefinedNetwork を選択します。
  3. Name フィールドで、クラスタースコープの UDN の名前を指定します。
  4. Subnet フィールドに値を指定します。
  5. Project(s) Match Labels フィールドに適切なラベルを追加して、クラスター UDN が適用される namespace を選択します。
  6. Create をクリックします。クラスタースコープの UDN は、ステップ 5 で指定したラベルが含まれる namespace にある Pod および仮想マシンのデフォルトのプライマリーネットワークとして機能します。

9.3.2. CLI を使用したプライマリーユーザー定義ネットワークの作成

CLI を使用して、プライマリー UserDefinedNetwork または ClusterUserDefinedNetwork CRD を作成できます。

9.3.2.1. CLI を使用したユーザー定義ネットワークの namespace の作成

CLI を使用して、プライマリーユーザー定義ネットワーク (UDN) で使用する namespace を作成できます。

前提条件

  • cluster-admin 権限を持つユーザーとしてクラスターにアクセスできる。
  • OpenShift CLI (oc) がインストールされている。

手順

  1. 次の例のような YAML ファイルとして Namespace オブジェクトを作成します。

    apiVersion: v1
    kind: Namespace
    metadata:
      name: udn_namespace
      labels:
        k8s.ovn.org/primary-user-defined-network: "" 
    1
    
    # ...
    Copy to Clipboard Toggle word wrap
    1
    namespace を UDN に関連付けるには、このラベルが必要です。namespace を既存のクラスター UDN で使用する場合は、ClusterUserDefinedNetwork カスタムリソースの spec.namespaceSelector フィールドで定義されている適切なラベルも追加する必要があります。
  2. 次のコマンドを実行して、Namespace マニフェストを適用します。

    oc apply -f <filename>.yaml
    Copy to Clipboard Toggle word wrap
9.3.2.2. CLI を使用したプライマリー namespace スコープのユーザー定義ネットワークの作成

CLI を使用して、プロジェクト namespace に分離されたプライマリーネットワークを作成できます。仮想マシンライブマイグレーションのサポートを確保にするには、OVN-Kubernetes レイヤー 2 トポロジーを使用し、ユーザー定義ネットワーク (UDN) 設定で永続的な IP アドレスの割り当てを有効にする必要があります。

前提条件

  • OpenShift CLI (oc) がインストールされている。
  • namespace を作成し、k8s.ovn.org/primary-user-defined-network ラベルを適用している。

手順

  1. カスタムネットワーク設定を指定するには、UserDefinedNetwork オブジェクトを作成します。

    UserDefinedNetwork マニフェストの例

    apiVersion: k8s.ovn.org/v1
    kind: UserDefinedNetwork
    metadata:
      name: udn-l2-net 
    1
    
      namespace: my-namespace 
    2
    
    spec:
      topology: Layer2 
    3
    
      layer2:
        role: Primary 
    4
    
        subnets:
          - "10.0.0.0/24"
          - "2001:db8::/60"
      ipam:
        lifecycle: Persistent 
    5
    Copy to Clipboard Toggle word wrap

    1
    UserDefinedNetwork カスタムリソースの名前を指定します。
    2
    仮想マシンが配置されている namespace を指定します。namespace には k8s.ovn.org/primary-user-defined-network ラベルが必要です。namespace として defaultopenshift-* namespace は使用できません。また Cluster Network Operator (CNO) によって定義されたグローバル namespace と同じにすることはできません。
    3
    ネットワークのトポロジー設定を指定します。必要な値は Layer2 です。レイヤー 2 トポロジーは、すべてのノードで共有される論理スイッチを作成します。
    4
    UDN がプライマリーかセカンダリーかを指定します。Primary ロールとは、UDN が仮想マシンのプライマリーネットワークとして機能し、すべてのデフォルトトラフィックがこのネットワークを通過することを意味します。
    5
    仮想ワークロードが再起動および移行後も、同じ IP アドレスが使用されるように指定します。ipam.lifecycle: Persistent が指定されている場合は、spec.layer2.subnets フィールドが必須です。
  2. 次のコマンドを実行して、UserDefinedNetwork マニフェストを適用します。

    $ oc apply -f --validate=true <filename>.yaml
    Copy to Clipboard Toggle word wrap
9.3.2.3. CLI を使用したプライマリークラスタースコープのユーザー定義ネットワークの作成

CLI を使用して、複数の namespace を同じプライマリーユーザー定義ネットワーク (UDN) に接続して、ネイティブテナント分離を実現できます。

前提条件

  • cluster-admin 権限を持つユーザーとしてクラスターにアクセスできる。
  • OpenShift CLI (oc) がインストールされている。

手順

  1. カスタムネットワーク設定を指定するには、ClusterUserDefinedNetwork オブジェクトを作成します。

    ClusterUserDefinedNetwork マニフェストの例

    kind: ClusterUserDefinedNetwork
    metadata:
      name: cudn-l2-net 
    1
    
    spec:
      namespaceSelector: 
    2
    
        matchExpressions: 
    3
    
        - key: kubernetes.io/metadata.name
          operator: In 
    4
    
          values: ["red-namespace", "blue-namespace"]
      network:
        topology: Layer2 
    5
    
        layer2:
          role: Primary 
    6
    
          ipam:
            lifecycle: Persistent
          subnets:
            - 203.203.0.0/16
    Copy to Clipboard Toggle word wrap

    1
    ClusterUserDefinedNetwork カスタムリソースの名前を指定します。
    2
    クラスター UDN が適用される namespace のセットを指定します。namespace セレクターは、defaultopenshift-* namespace、または Cluster Network Operator (CNO) によって定義されたグローバル namespace を参照できません。
    3
    セレクターのタイプを指定します。この例では、matchExpressions セレクターは、kubernetes.io/metadata.name ラベルと、値が red-namespace または blue-namespace のオブジェクトを選択します。
    4
    Operator の種類を指定します。可能な値は InNotInExists です。
    5
    ネットワークのトポロジー設定を指定します。必要な値は Layer2 です。レイヤー 2 トポロジーは、すべてのノードで共有される論理スイッチを作成します。
    6
    UDN がプライマリーかセカンダリーかを指定します。Primary ロールとは、UDN が仮想マシンのプライマリーネットワークとして機能し、すべてのデフォルトトラフィックがこのネットワークを通過することを意味します。
  2. 次のコマンドを実行して、ClusterUserDefinedNetwork マニフェストを適用します。

    $ oc apply -f --validate=true <filename>.yaml
    Copy to Clipboard Toggle word wrap

9.3.3. CLI を使用して仮想マシンをプライマリーユーザー定義ネットワークにアタッチする

Pod ネットワークの割り当てを要求し、インターフェイスバインディングを設定することで、仮想マシン (VM) をプライマリーユーザー定義ネットワーク (UDN) に接続できます。

前提条件

  • OpenShift CLI (oc) がインストールされている。

手順

  1. 次の例のように、VirtualMachine マニフェストを編集して UDN インターフェイスの詳細を追加します。

    VirtualMachine マニフェストの例

    apiVersion: kubevirt.io/v1
    kind: VirtualMachine
    metadata:
      name: example-vm
      namespace: my-namespace 
    1
    
    spec:
      template:
        spec:
          domain:
            devices:
              interfaces:
                - name: udn-l2-net 
    2
    
                  binding:
                    name: l2bridge 
    3
    
    # ...
          networks:
          - name: udn-l2-net 
    4
    
            pod: {}
    # ...
    Copy to Clipboard Toggle word wrap

    1
    仮想マシンが配置されている namespace。この値は、UDN が定義されている namespace と一致する必要があります。
    2
    ユーザー定義ネットワークインターフェイスの名前。
    3
    インターフェイスを仮想マシンに接続するために使用されるバインディングプラグインの名前。必要な値は l2bridge です。
    4
    ネットワークの名前。これは、spec.template.spec.domain.devices.interfaces.name フィールドの値と一致する必要があります。
  2. 次のコマンドを実行して、VirtualMachine マニフェストを適用します。

    $ oc apply -f <filename>.yaml
    Copy to Clipboard Toggle word wrap

9.4. サービスを使用して仮想マシンを公開する

Service オブジェクトを作成して、クラスター内またはクラスターの外部に仮想マシンを公開することができます。

9.4.1. サービスについて

Kubernetes サービスは一連の Pod で実行されているアプリケーションへのクライアントのネットワークアクセスを公開します。サービスは抽象化、負荷分散を提供し、タイプ NodePortLoadBalancer の場合は外部世界への露出を提供します。

ClusterIP
内部 IP アドレスでサービスを公開し、クラスター内の他のアプリケーションに DNS 名として公開します。1 つのサービスを複数の仮想マシンにマッピングできます。クライアントがサービスに接続しようとすると、クライアントのリクエストは使用可能なバックエンド間で負荷分散されます。ClusterIP はデフォルトのサービスタイプです。
NodePort
クラスター内の選択した各ノードの同じポートでサービスを公開します。NodePort は、ノード自体がクライアントから外部にアクセスできる限り、クラスターの外部からポートにアクセスできるようにします。
LoadBalancer
現在のクラウドに外部ロードバランサーを作成し (サポートされている場合)、固定の外部 IP アドレスをサービスに割り当てます。
注記

Red Hat OpenShift Service on AWS では、ライブマイグレーション中のネットワークのダウンタイムを最小限に抑えるために、負荷分散サービスを設定するときに externalTrafficPolicy: Cluster を使用する必要があります。

9.4.2. デュアルスタックサポート

IPv4 および IPv6 のデュアルスタックネットワークがクラスターに対して有効にされている場合、Service オブジェクトに spec.ipFamilyPolicy および spec.ipFamilies フィールドを定義して、IPv4、IPv6、またはそれら両方を使用するサービスを作成できます。

spec.ipFamilyPolicy フィールドは以下の値のいずれかに設定できます。

SingleStack
コントロールプレーンは、最初に設定されたサービスクラスターの IP 範囲に基づいて、サービスのクラスター IP アドレスを割り当てます。
PreferDualStack
コントロールプレーンは、デュアルスタックが設定されたクラスターのサービス用に IPv4 および IPv6 クラスター IP アドレスの両方を割り当てます。
RequireDualStack
このオプションは、デュアルスタックネットワークが有効にされていないクラスターの場合には失敗します。デュアルスタックが設定されたクラスターの場合、その値が PreferDualStack に設定されている場合と同じになります。コントロールプレーンは、IPv4 アドレスと IPv6 アドレス範囲の両方からクラスター IP アドレスを割り当てます。

単一スタックに使用する IP ファミリーや、デュアルスタック用の IP ファミリーの順序は、spec.ipFamilies を以下のアレイ値のいずれかに設定して定義できます。

  • [IPv4]
  • [IPv6]
  • [IPv4, IPv6]
  • [IPv6, IPv4]

9.4.3. CLI を使用したサービスの作成

コマンドラインを使用して、サービスを作成し、それを仮想マシンに関連付けることができます。

前提条件

  • サービスをサポートするようにクラスターネットワークを設定しました。
  • OpenShift CLI (oc) がインストールされている。

手順

  1. VirtualMachine マニフェストを編集して、サービス作成のラベルを追加します。

    apiVersion: kubevirt.io/v1
    kind: VirtualMachine
    metadata:
      name: example-vm
      namespace: example-namespace
    spec:
      runStrategy: Halted
      template:
        metadata:
          labels:
            special: key 
    1
    
    # ...
    Copy to Clipboard Toggle word wrap
    1
    special: keyspec.template.metadata.labels スタンザに追加します。
    注記

    仮想マシンのラベルは Pod に渡されます。special: キー ラベルは、Service マニフェストの spec.selector 属性のラベルと一致する必要があります。

  2. VirtualMachine マニフェストファイルを保存して変更を適用します。
  3. 仮想マシンを公開するための Service マニフェストを作成します。

    apiVersion: v1
    kind: Service
    metadata:
      name: example-service
      namespace: example-namespace
    spec:
    # ...
      selector:
        special: key 
    1
    
      type: NodePort 
    2
    
      ports: 
    3
    
        protocol: TCP
        port: 80
        targetPort: 9376
        nodePort: 30000
    Copy to Clipboard Toggle word wrap
    1
    VirtualMachine マニフェストの spec.template.metadata.labels スタンザに追加したラベルを指定します。
    2
    ClusterIPNodePort、または LoadBalancer を指定します。
    3
    仮想マシンから公開するネットワークポートとプロトコルのコレクションを指定します。
  4. Service マニフェストファイルを保存します。
  5. 以下のコマンドを実行してサービスを作成します。

    $ oc create -f example-service.yaml
    Copy to Clipboard Toggle word wrap
  6. 仮想マシンを再起動して変更を適用します。

検証

  • Service オブジェクトをクエリーし、これが利用可能であることを確認します。

    $ oc get service -n example-namespace
    Copy to Clipboard Toggle word wrap

9.5. 仮想マシンを OVN-Kubernetes レイヤー 2 セカンダリーネットワークに接続する

仮想マシンは Open Virtual Network (OVN)-Kubernetes セカンダリーネットワークに接続できます。OpenShift Virtualization は、OVN-Kubernetes の layer2 トポロジーをサポートします。

layer2 トポロジーは、クラスター全体の論理スイッチによってワークロードを接続します。OVN-Kubernetes Container Network Interface (CNI) プラグインは、Geneve (Generic Network Virtualization Encapsulation) プロトコルを使用して、ノード間にオーバーレイネットワークを作成します。このオーバーレイネットワークを使用すると、追加の物理ネットワークインフラストラクチャーを設定することなく、さまざまなノード上の仮想マシンを接続できます。

OVN-Kubernetes layer2 セカンダリーネットワークを設定し、そのネットワークに仮想マシンを接続するには、次の手順を実行します。

9.5.1. OVN-Kubernetes レイヤー 2 NAD の作成

Red Hat OpenShift Service on AWS Web コンソールまたは CLI を使用して、レイヤー 2 ネットワークトポロジーの OVN-Kubernetes ネットワークアタッチメント定義 (NAD) を作成できます。

注記

仮想マシンのネットワークアタッチメント定義で spec.config.ipam.subnet 属性を指定して IP アドレス管理 (IPAM) を設定することはサポートされていません。

9.5.1.1. CLI を使用してレイヤー 2 トポロジー用の NAD を作成する

Pod をレイヤー 2 オーバーレイネットワークに接続する方法を説明する Network Attachment Definition (NAD) を作成できます。

前提条件

  • cluster-admin 権限を持つユーザーとしてクラスターにアクセスできる。
  • OpenShift CLI (oc) がインストールされている。

手順

  1. NetworkAttachmentDefinition オブジェクトを作成します。

    apiVersion: k8s.cni.cncf.io/v1
    kind: NetworkAttachmentDefinition
    metadata:
      name: l2-network
      namespace: my-namespace
    spec:
      config: |-
        {
                "cniVersion": "0.3.1", 
    1
    
                "name": "my-namespace-l2-network", 
    2
    
                "type": "ovn-k8s-cni-overlay", 
    3
    
                "topology":"layer2", 
    4
    
                "mtu": 1400, 
    5
    
                "netAttachDefName": "my-namespace/l2-network" 
    6
    
        }
    Copy to Clipboard Toggle word wrap
    1
    Container Network Interface (CNI) 仕様のバージョン。必要な値は 0.3.1 です。
    2
    ネットワークの名前。この属性には namespace がありません。たとえば、l2-network という名前のネットワークを、2 つの異なる namespace に存在する 2 つの異なる NetworkAttachmentDefinition オブジェクトから参照させることができます。この機能は、異なる namespace の仮想マシンを接続する場合に役立ちます。
    3
    CNI プラグインの名前。必要な値は ovn-k8s-cni-overlay です。
    4
    ネットワークのトポロジー設定。必要な値は layer2 です。
    5
    オプション: 最大伝送単位 (MTU) の値。この値を設定しなかった場合、Cluster Network Operator (CNO) が、プライマリーネットワークインターフェイスのアンダーレイ MTU、Geneve (Generic Network Virtualization Encapsulation) などの Pod ネットワークのオーバーレイ MTU、および IPsec などの有効な機能のバイト容量の差を計算して、デフォルトの MTU 値を設定します。
    6
    NetworkAttachmentDefinition オブジェクトの metadata スタンザ内の namespace および name フィールドの値。
    注記

    前の例では、サブネットを定義せずにクラスター全体のオーバーレイを設定します。これは、ネットワークを実装する論理スイッチがレイヤー 2 通信のみを提供することを意味します。仮想マシンの作成時に、静的 IP アドレスを設定するか、動的 IP アドレス用にネットワーク上に DHCP サーバーをデプロイすることによって、IP アドレスを設定する必要があります。

  2. 次のコマンドを実行してマニフェストを適用します。

    $ oc apply -f <filename>.yaml
    Copy to Clipboard Toggle word wrap
9.5.1.2. Web コンソールを使用してレイヤー 2 トポロジーの NAD を作成する

Pod をレイヤー 2 オーバーレイネットワークに接続する方法を記述した Network Attachment Definition (NAD) を作成できます。

前提条件

  • cluster-admin 権限を持つユーザーとしてクラスターにアクセスできる。

手順

  1. Web コンソールで、NetworkingNetworkAttachmentDefinitions に移動します。
  2. Create Network Attachment Definition をクリックします。Network Attachment Definition は、それを使用する Pod または仮想マシンと同じ namespace にある必要があります。
  3. 一意の Name およびオプションの Description を入力します。
  4. Network Type リストで OVN Kubernetes L2 overlay network を選択します。
  5. Create をクリックします。

9.5.2. OVN-Kubernetes レイヤー 2 セカンダリーネットワークに仮想マシンを接続する

Red Hat OpenShift Service on AWS Web コンソールまたは CLI を使用して、仮想マシン (VM) を OVN-Kubernetes レイヤー 2 セカンダリーネットワークインターフェイスに接続できます。

9.5.2.1. CLI を使用した OVN-Kubernetes セカンダリーネットワークへの仮想マシンの接続

仮想マシン設定にネットワークの詳細を含めることで、仮想マシンを OVN-Kubernetes セカンダリーネットワークに接続できます。

前提条件

  • cluster-admin 権限を持つユーザーとしてクラスターにアクセスできる。
  • OpenShift CLI (oc) がインストールされている。

手順

  1. 次の例のように、VirtualMachine マニフェストを編集して OVN-Kubernetes セカンダリーネットワークインターフェイスの詳細を追加します。

    apiVersion: kubevirt.io/v1
    kind: VirtualMachine
    metadata:
      name: vm-server
    spec:
      runStrategy: Always
      template:
        spec:
          domain:
            devices:
              interfaces:
              - name: secondary 
    1
    
                bridge: {}
            resources:
              requests:
                memory: 1024Mi
          networks:
          - name: secondary  
    2
    
            multus:
              networkName: <nad_name> 
    3
    
          nodeSelector:
            node-role.kubernetes.io/worker: '' 
    4
    
    # ...
    Copy to Clipboard Toggle word wrap
    1
    OVN-Kubernetes セカンダリーインターフェイスの名前。
    2
    ネットワークの名前。これは、spec.template.spec.domain.devices.interfaces.name フィールドの値と一致する必要があります。
    3
    NetworkAttachmentDefinition オブジェクトの名前。
    4
    仮想マシンをスケジュールできるノードを指定します。推奨されるノードセレクター値は node-role.kubernetes.io/worker: '' です。
  2. VirtualMachine マニフェストを適用します。

    $ oc apply -f <filename>.yaml
    Copy to Clipboard Toggle word wrap
  3. オプション: 実行中の仮想マシンを編集している場合は、変更を有効にするためにこれを再起動する必要があります。

9.6. ホットプラグ対応のセカンダリーネットワークインターフェイス

仮想マシンを停止せずに、セカンダリーネットワークインターフェイスを追加または削除できます。OpenShift Virtualization は、ブリッジバインディングおよび VirtIO デバイスドライバーを使用するセカンダリーインターフェイスのホットプラグとホットアンプラグをサポートしています。

9.6.1. VirtIO の制限事項

各 VirtIO インターフェイスは、仮想マシン内の限られたペリフェラル接続インターフェイス (PCI) スロットの 1 つを使用します。合計 32 個のスロットが利用可能です。PCI スロットは他のデバイスでも使用され、事前に予約する必要があるため、オンデマンドでスロットを利用できない場合があります。OpenShift Virtualization は、ホットプラグインターフェイス用に最大 4 つのスロットを予約します。これには、接続されている既存のネットワークインターフェイスが含まれます。たとえば、仮想マシンにプラグインされた既存のインターフェイスが 2 つある場合は、さらに 2 つのネットワークインターフェイスをホットプラグできます。

注記

ホットプラグに使用できる実際のスロット数もマシンのタイプによって異なります。たとえば、q35 マシンタイプのデフォルトの PCI トポロジーは、1 台の追加 PCIe デバイスのホットプラグをサポートしています。PCI トポロジーとホットプラグのサポートの詳細は、libvirt のドキュメント を参照してください。

インターフェイスをホットプラグした後に仮想マシンを再起動すると、そのインターフェイスは標準ネットワークインターフェイスの一部になります。

9.6.2. CLI を使用したセカンダリーネットワークインターフェイスのホットプラグ

仮想マシンの実行中に、セカンダリーネットワークインターフェイスを仮想マシンにホットプラグします。

前提条件

  • ネットワークアタッチメント定義が、仮想マシンと同じ namespace に設定されている。
  • ネットワークインターフェイスをホットプラグする仮想マシンが実行中です。
  • virtctl ツールがインストールされている。
  • VirtualMachineInstanceMigration オブジェクトを作成およびリスト表示するパーミッションがある。
  • OpenShift CLI (oc) がインストールされている。

手順

  1. 次の例に示すように、好みのテキストエディターを使用して VirtualMachine マニフェストを編集します。

    仮想マシン設定の例

    apiVersion: kubevirt.io/v1
    kind: VirtualMachine
    metadata:
      name: vm-fedora
    template:
      spec:
        domain:
          devices:
            interfaces:
            - name: defaultnetwork
              masquerade: {}
            # new interface
            - name: <secondary_nic> 
    1
    
              bridge: {}
        networks:
        - name: defaultnetwork
          pod: {}
        # new network
        - name: <secondary_nic> 
    2
    
          multus:
            networkName: <nad_name> 
    3
    
    # ...
    Copy to Clipboard Toggle word wrap

    1
    新しいネットワークインターフェイスの名前を指定します。
    2
    ネットワークの名前を指定します。これは、template.spec.domain.devices.interfaces リストで定義した新しいネットワークインターフェイスの name と同じである必要があります。
    3
    NetworkAttachmentDefinition オブジェクトの名前を指定します。
  2. 実行中の仮想マシンにネットワークインターフェイスを接続するには、次のコマンドを実行して仮想マシンのライブマイグレーションを行います。

    $ virtctl migrate <vm_name>
    Copy to Clipboard Toggle word wrap

検証

  1. 次のコマンドを使用して、仮想マシンのライブマイグレーションが成功したことを確認します。

    $ oc get VirtualMachineInstanceMigration -w
    Copy to Clipboard Toggle word wrap

    出力例

    NAME                        PHASE             VMI
    kubevirt-migrate-vm-lj62q   Scheduling        vm-fedora
    kubevirt-migrate-vm-lj62q   Scheduled         vm-fedora
    kubevirt-migrate-vm-lj62q   PreparingTarget   vm-fedora
    kubevirt-migrate-vm-lj62q   TargetReady       vm-fedora
    kubevirt-migrate-vm-lj62q   Running           vm-fedora
    kubevirt-migrate-vm-lj62q   Succeeded         vm-fedora
    Copy to Clipboard Toggle word wrap

  2. VMI ステータスをチェックして、新しいインターフェイスが仮想マシンに追加されていることを確認します。

    $ oc get vmi vm-fedora -ojsonpath="{ @.status.interfaces }"
    Copy to Clipboard Toggle word wrap

    出力例

    [
      {
        "infoSource": "domain, guest-agent",
        "interfaceName": "eth0",
        "ipAddress": "10.130.0.195",
        "ipAddresses": [
          "10.130.0.195",
          "fd02:0:0:3::43c"
        ],
        "mac": "52:54:00:0e:ab:25",
        "name": "default",
        "queueCount": 1
      },
      {
        "infoSource": "domain, guest-agent, multus-status",
        "interfaceName": "eth1",
        "mac": "02:d8:b8:00:00:2a",
        "name": "bridge-interface", 
    1
    
        "queueCount": 1
      }
    ]
    Copy to Clipboard Toggle word wrap

    1
    ホットプラグされたインターフェイスが VMI ステータスに表示されます。

9.6.3. CLI を使用したセカンダリーネットワークインターフェイスのホットアンプラグ

実行中の仮想マシンから、セカンダリーネットワークインターフェイスを削除できます。

注記

ホットアンプラグは、Single Root I/O Virtualization (SR-IOV) インターフェイスではサポートされていません。

前提条件

  • 仮想マシンが実行している必要があります。
  • 仮想マシンは、OpenShift Virtualization 4.14 以降を実行しているクラスター上に作成する必要があります。
  • 仮想マシンにはブリッジネットワークインターフェイスが接続されている必要があります。
  • VirtualMachineInstanceMigration オブジェクトを作成およびリスト表示するパーミッションがある。
  • OpenShift CLI (oc) がインストールされている。

手順

  1. 仮想マシン仕様を編集して、セカンダリーネットワークインターフェイスをホットアンプラグします。インターフェイスの状態を absent に設定すると、ネットワークインターフェイスがゲストから切り離されますが、そのインターフェイスは Pod 内にまだ存在しています。

    $ oc edit vm <vm_name>
    Copy to Clipboard Toggle word wrap

    仮想マシン設定の例

    apiVersion: kubevirt.io/v1
    kind: VirtualMachine
    metadata:
      name: vm-fedora
    template:
      spec:
        domain:
          devices:
            interfaces:
              - name: defaultnetwork
                masquerade: {}
              # set the interface state to absent
              - name: <secondary_nic>
                state: absent 
    1
    
                bridge: {}
        networks:
          - name: defaultnetwork
            pod: {}
          - name: <secondary_nic>
            multus:
              networkName: <nad_name>
    # ...
    Copy to Clipboard Toggle word wrap

    1
    インターフェイスの状態を absent に設定して、実行中の仮想マシンから切り離します。仮想マシン仕様からインターフェイスの詳細を削除しても、セカンダリーネットワークインターフェイスはホットアンプラグされません。
  2. 仮想マシンを移行して、Pod からインターフェイスを削除します。

    $ virtctl migrate <vm_name>
    Copy to Clipboard Toggle word wrap

9.7. 仮想マシンのサービスメッシュへの接続

OpenShift Virtualization が OpenShift Service Mesh に統合されるようになりました。IPv4 を使用してデフォルトの Pod ネットワークで仮想マシンのワークロードを実行する Pod 間のトラフィックのモニター、可視化、制御が可能です。

9.7.1. サービスメッシュへの仮想マシンの追加

仮想マシン (VM) ワークロードをサービスメッシュに追加するには、sidecar.istio.io/inject アノテーションを true に設定して、仮想マシン設定ファイルでサイドカーの自動注入を有効にします。次に、仮想マシンをサービスとして公開し、メッシュでアプリケーションを表示します。

重要

ポートの競合を回避するには、Istio サイドカープロキシーが使用するポートを使用しないでください。これには、ポート 15000、15001、15006、15008、15020、15021、および 15090 が含まれます。

前提条件

  • OpenShift CLI (oc) がインストールされている。
  • Service Mesh Operators がインストールされました。
  • Service Mesh コントロールプレーンを作成しました。
  • 仮想マシンプロジェクトを Service Mesh メンバーロールに追加しました。

手順

  1. 仮想マシン設定ファイルを編集し、sidecar.istio.io/inject: "true" アノテーションを追加します。

    設定ファイルのサンプル

    apiVersion: kubevirt.io/v1
    kind: VirtualMachine
    metadata:
      labels:
        kubevirt.io/vm: vm-istio
      name: vm-istio
    spec:
      runStrategy: Always
      template:
        metadata:
          labels:
            kubevirt.io/vm: vm-istio
            app: vm-istio 
    1
    
          annotations:
            sidecar.istio.io/inject: "true" 
    2
    
        spec:
          domain:
            devices:
              interfaces:
              - name: default
                masquerade: {} 
    3
    
              disks:
              - disk:
                  bus: virtio
                name: containerdisk
              - disk:
                  bus: virtio
                name: cloudinitdisk
            resources:
              requests:
                memory: 1024M
          networks:
          - name: default
            pod: {}
          terminationGracePeriodSeconds: 180
          volumes:
          - containerDisk:
              image: registry:5000/kubevirt/fedora-cloud-container-disk-demo:devel
            name: containerdisk
    Copy to Clipboard Toggle word wrap

    1
    サービスセレクターの属性と同じにする必要があるキー/値のペア (ラベル) です。
    2
    サイドカーの自動注入を有効にするためのアノテーションです。
    3
    デフォルトの Pod ネットワークで使用するバインディングメソッド (マスカレードモード) です。
  2. 仮想マシン設定を適用します。

    $ oc apply -f <vm_name>.yaml 
    1
    Copy to Clipboard Toggle word wrap
    1
    仮想マシン YAML ファイルの名前。
  3. Service オブジェクトを作成し、仮想マシンをサービスメッシュに公開します。

    apiVersion: v1
    kind: Service
    metadata:
      name: vm-istio
    spec:
      selector:
        app: vm-istio 
    1
    
      ports:
        - port: 8080
          name: http
          protocol: TCP
    Copy to Clipboard Toggle word wrap
    1
    サービスの対象となる Pod セットを判別するサービスセレクターです。この属性は、仮想マシン設定ファイルの spec.metadata.labels フィールドに対応します。上記の例では、vm-istio という名前の Service オブジェクトは、ラベルが app=vm-istio の Pod の TCP ポート 8080 をターゲットにします。
  4. サービスを作成します。

    $ oc create -f <service_name>.yaml 
    1
    Copy to Clipboard Toggle word wrap
    1
    サービス YAML ファイルの名前。

9.8. ライブマイグレーション用の専用ネットワークの設定

ライブマイグレーション用に専用の セカンダリーネットワーク を設定できます。専用ネットワークは、ライブマイグレーション中のテナントワークロードに対するネットワークの飽和状態の影響を最小限に抑えます。

9.8.1. ライブマイグレーション用の専用セカンダリーネットワークの設定

ライブマイグレーション用に専用のセカンダリーネットワークを設定するには、まず CLI を使用してブリッジ Network Attachment Definition (NAD) を作成する必要があります。次に、NetworkAttachmentDefinition オブジェクトの名前を HyperConverged カスタムリソース (CR) に追加します。

前提条件

  • OpenShift CLI (oc) がインストールされている。
  • cluster-admin ロールを持つユーザーとしてクラスターにログインしている。
  • 各ノードには少なくとも 2 つのネットワークインターフェイスカード (NIC) があります。
  • ライブマイグレーション用の NIC は同じ VLAN に接続されます。

手順

  1. 次の例に従って、NetworkAttachmentDefinition マニフェストを作成します。

    設定ファイルのサンプル

    apiVersion: "k8s.cni.cncf.io/v1"
    kind: NetworkAttachmentDefinition
    metadata:
      name: my-secondary-network 
    1
    
      namespace: openshift-cnv
    spec:
      config: '{
        "cniVersion": "0.3.1",
        "name": "migration-bridge",
        "type": "macvlan",
        "master": "eth1", 
    2
    
        "mode": "bridge",
        "ipam": {
          "type": "whereabouts", 
    3
    
          "range": "10.200.5.0/24" 
    4
    
        }
      }'
    Copy to Clipboard Toggle word wrap

    1
    NetworkAttachmentDefinition オブジェクトの名前を指定します。
    2
    ライブマイグレーションに使用する NIC の名前を指定します。
    3
    NAD にネットワークを提供する CNI プラグインの名前を指定します。
    4
    セカンダリーネットワークの IP アドレス範囲を指定します。この範囲は、メインネットワークの IP アドレスと重複してはなりません。
  2. 以下のコマンドを実行して、デフォルトのエディターで HyperConverged CR を開きます。

    $ oc edit hyperconverged kubevirt-hyperconverged -n openshift-cnv
    Copy to Clipboard Toggle word wrap
  3. NetworkAttachmentDefinition オブジェクトの名前を HyperConverged CR の spec.liveMigrationConfig スタンザに追加します。

    HyperConverged マニフェストの例

    apiVersion: hco.kubevirt.io/v1beta1
    kind: HyperConverged
    metadata:
      name: kubevirt-hyperconverged
      namespace: openshift-cnv
    spec:
      liveMigrationConfig:
        completionTimeoutPerGiB: 800
        network: <network> 
    1
    
        parallelMigrationsPerCluster: 5
        parallelOutboundMigrationsPerNode: 2
        progressTimeout: 150
    # ...
    Copy to Clipboard Toggle word wrap

    1
    ライブマイグレーションに使用される Multus NetworkAttachmentDefinition オブジェクトの名前を指定します。
  4. 変更を保存し、エディターを終了します。virt-handler Pod が再起動し、セカンダリーネットワークに接続されます。

検証

  • 仮想マシンが実行されるノードがメンテナンスモードに切り替えられると、仮想マシンは自動的にクラスター内の別のノードに移行します。仮想マシンインスタンス (VMI) メタデータのターゲット IP アドレスを確認して、デフォルトの Pod ネットワークではなく、セカンダリーネットワーク上で移行が発生したことを確認できます。

    $ oc get vmi <vmi_name> -o jsonpath='{.status.migrationState.targetNodeAddress}'
    Copy to Clipboard Toggle word wrap

9.8.2. Web コンソールを使用して専用ネットワークを選択する

Red Hat OpenShift Service on AWS Web コンソールを使用して、ライブマイグレーション用の専用ネットワークを選択できます。

前提条件

  • ライブマイグレーション用に Multus ネットワークが設定されている。
  • ネットワークの Network Attachment Definition を作成している。

手順

  1. Red Hat OpenShift Service on AWS Web コンソールで Virtualization > Overview に移動します。
  2. Settings タブをクリックし、Live migration をクリックします。
  3. Live migration network リストからネットワークを選択します。

9.9. IP アドレスの設定と表示

仮想マシンを作成するときに IP アドレスを設定できます。IP アドレスは、cloud-init でプロビジョニングされます。

仮想マシンの IP アドレスは、Red Hat OpenShift Service on AWS Web コンソールまたはコマンドラインを使用して表示できます。ネットワーク情報は QEMU ゲストエージェントによって収集されます。

9.9.1. 仮想マシンの IP アドレスの設定

Web コンソールまたはコマンドラインを使用して仮想マシンを作成するときに、静的 IP アドレスを設定できます。

コマンドラインを使用して仮想マシンを作成するときに、動的 IP アドレスを設定できます。

IP アドレスは、cloud-init でプロビジョニングされます。

9.9.1.1. CLI を使用して仮想マシンを作成するときに IP アドレスを設定する

仮想マシンを作成するときに、静的または動的 IP アドレスを設定できます。IP アドレスは、cloud-init でプロビジョニングされます。

注記

VM が Pod ネットワークに接続されている場合、更新しない限り、Pod ネットワークインターフェイスがデフォルトルートになります。

前提条件

  • 仮想マシンはセカンダリーネットワークに接続されている。
  • 仮想マシンの動的 IP を設定するために、セカンダリーネットワーク上で使用できる DHCP サーバーがある。

手順

  • 仮想マシン設定の spec.template.spec.volumes.cloudInitNoCloud.networkData スタンザを編集します。

    • 動的 IP アドレスを設定するには、インターフェイス名を指定し、DHCP を有効にします。

      kind: VirtualMachine
      spec:
      # ...
        template:
        # ...
          spec:
            volumes:
            - cloudInitNoCloud:
                networkData: |
                  version: 2
                  ethernets:
                    eth1: 
      1
      
                      dhcp4: true
      Copy to Clipboard Toggle word wrap
      1
      インターフェイス名を指定します。
    • 静的 IP を設定するには、インターフェイス名と IP アドレスを指定します。

      kind: VirtualMachine
      spec:
      # ...
        template:
        # ...
          spec:
            volumes:
            - cloudInitNoCloud:
                networkData: |
                  version: 2
                  ethernets:
                    eth1: 
      1
      
                      addresses:
                      - 10.10.10.14/24 
      2
      Copy to Clipboard Toggle word wrap
      1
      インターフェイス名を指定します。
      2
      静的 IP アドレスを指定します。

9.9.2. 仮想マシンの IP アドレスの表示

仮想マシンの IP アドレスは、Red Hat OpenShift Service on AWS Web コンソールまたはコマンドラインを使用して表示できます。

ネットワーク情報は QEMU ゲストエージェントによって収集されます。

9.9.2.1. Web コンソールを使用した仮想マシンの IP アドレスの表示

Red Hat OpenShift Service on AWS Web コンソールを使用して、仮想マシン (VM) の IP アドレスを表示できます。

注記

セカンダリーネットワークインターフェイスの IP アドレスを表示するには、仮想マシンに QEMU ゲストエージェントをインストールする必要があります。Pod ネットワークインターフェイスには QEMU ゲストエージェントは必要ありません。

手順

  1. Red Hat OpenShift Service on AWS コンソールで、サイドメニューから VirtualizationVirtualMachines をクリックします。
  2. 仮想マシンを選択して、VirtualMachine details ページを開きます。
  3. Details タブをクリックして IP アドレスを表示します。
9.9.2.2. CLI を使用した仮想マシンの IP アドレスの表示

コマンドラインを使用して、仮想マシンの IP アドレスを表示できます。

注記

セカンダリーネットワークインターフェイスの IP アドレスを表示するには、仮想マシンに QEMU ゲストエージェントをインストールする必要があります。Pod ネットワークインターフェイスには QEMU ゲストエージェントは必要ありません。

前提条件

  • OpenShift CLI (oc) がインストールされている。

手順

  • 次のコマンドを実行して、仮想マシンインスタンスの設定を取得します。

    $ oc describe vmi <vmi_name>
    Copy to Clipboard Toggle word wrap

    出力例

    # ...
    Interfaces:
       Interface Name:  eth0
       Ip Address:      10.244.0.37/24
       Ip Addresses:
         10.244.0.37/24
         fe80::858:aff:fef4:25/64
       Mac:             0a:58:0a:f4:00:25
       Name:            default
       Interface Name:  v2
       Ip Address:      1.1.1.7/24
       Ip Addresses:
         1.1.1.7/24
         fe80::f4d9:70ff:fe13:9089/64
       Mac:             f6:d9:70:13:90:89
       Interface Name:  v1
       Ip Address:      1.1.1.1/24
       Ip Addresses:
         1.1.1.1/24
         1.1.1.2/24
         1.1.1.4/24
         2001:de7:0:f101::1/64
         2001:db8:0:f101::1/64
         fe80::1420:84ff:fe10:17aa/64
       Mac:             16:20:84:10:17:aa
    Copy to Clipboard Toggle word wrap

9.10. ネットワークインターフェイスの MAC アドレスプールの管理

KubeMacPool コンポーネントは、共有 MAC アドレスプールから仮想マシンネットワークインターフェイスの MAC アドレスを割り当てます。これにより、各ネットワークインターフェイスに一意の MAC アドレスが確実に割り当てられます。

その仮想マシンから作成された仮想マシンインスタンスは、再起動後も割り当てられた MAC アドレスを保持します。

注記

KubeMacPool は、仮想マシンから独立して作成される仮想マシンインスタンスを処理しません。

9.10.1. CLI を使用した KubeMacPool の管理

コマンドラインを使用して、KubeMacPool を無効にしたり、再度有効にしたりできます。

KubeMacPool はデフォルトで有効になっています。

前提条件

  • OpenShift CLI (oc) がインストールされている。

手順

  • 2 つの namespace で KubeMacPool を無効にするには、次のコマンドを実行します。

    $ oc label namespace <namespace1> <namespace2> mutatevirtualmachines.kubemacpool.io=ignore
    Copy to Clipboard Toggle word wrap
  • 2 つの namespace で KubeMacPool を再度有効にするには、次のコマンドを実行します。

    $ oc label namespace <namespace1> <namespace2> mutatevirtualmachines.kubemacpool.io-
    Copy to Clipboard Toggle word wrap

第10章 ストレージ

10.1. ストレージ設定の概要

デフォルトのストレージクラス、ストレージプロファイル、Containerized Data Importer (CDI)、データボリューム、および自動ブートソース更新を設定できます。

10.1.1. ストレージ

次のストレージ設定タスクは必須です。

ストレージプロファイルを設定する
ストレージプロバイダーが CDI によって認識されない場合は、ストレージプロファイルを設定する必要があります。ストレージプロファイルは、関連付けられたストレージクラスに基づいて推奨されるストレージ設定を提供します。

次のストレージ設定タスクはオプションです。

ファイルシステムのオーバーヘッドのために追加の PVC スペースを予約する
デフォルトでは、ファイルシステム PVC の 5.5% がオーバーヘッド用に予約されており、その分仮想マシンディスクに使用できるスペースが減少します。別のオーバーヘッド値を設定できます。
ホストパスプロビジョナーを使用してローカルストレージを設定する
ホストパスプロビジョナー (HPP) を使用して、仮想マシンのローカルストレージを設定できます。OpenShift Virtualization Operator をインストールすると、HPP Operator が自動的にインストールされます。
namespace 間でデータボリュームのクローンを作成するためのユーザー権限を設定する
RBAC ロールを設定して、ユーザーが namespace 間でデータボリュームのクローンを作成できるようにすることができます。

10.1.2. コンテナー化されたデータインポーター

次の Containerized Data Importer (CDI) 設定タスクを実行できます。

namespace のリソース要求制限をオーバーライドする
CPU およびメモリーリソースの制限を受ける namespace に仮想マシンディスクをインポート、アップロード、およびクローン作成するように CDI を設定できます。
CDI スクラッチスペースを設定する
CDI では、仮想マシンイメージのインポートやアップロードなどの一部の操作を完了するためにスクラッチスペース (一時ストレージ) が必要です。このプロセスで、CDI は、宛先データボリューム (DV) をサポートする PVC のサイズと同じサイズのスクラッチ領域 PVC をプロビジョニングします。

10.1.3. データボリューム

次のデータボリューム設定タスクを実行できます。

データボリュームの事前割り当てを有効にする
CDI は、データボリュームの作成時の書き込みパフォーマンスを向上させるために、ディスク領域を事前に割り当てることができます。特定のデータボリュームの事前割り当てを有効にできます。
データボリュームのアノテーションを管理する
データボリュームアノテーションを使用して Pod の動作を管理できます。1 つ以上のアノテーションをデータボリュームに追加してから、作成されたインポーター Pod に伝播できます。

10.1.4. ブートソースの更新

次のブートソース更新設定タスクを実行できます。

ブートソースの自動更新を管理する
ブートソースにより、ユーザーは仮想マシン (VM) をよりアクセスしやすく効率的に作成できるようになります。ブートソースの自動更新が有効になっている場合、CDI はイメージをインポート、ポーリング、更新して、新しい仮想マシン用にクローンを作成できるようにします。デフォルトでは、CDI は Red Hat ブートソースを自動的に更新します。次に、カスタムブートソースの自動更新を有効にできます。

10.2. ストレージプロファイルの設定

ストレージプロファイルは、関連付けられたストレージクラスに基づいて推奨されるストレージ設定を提供します。ストレージクラスごとにストレージクラスが割り当てられます。

Containerized Data Importer (CDI) は、ストレージプロバイダーの機能を識別し、対話するように設定されている場合はストレージプロバイダーを認識します。

認識されたストレージタイプの場合、CDI は PVC の作成を最適化する値を提供します。ストレージプロファイルをカスタマイズして、ストレージクラスの自動設定を行うこともできます。CDI がストレージプロバイダーを認識しない場合は、ユーザーがストレージプロファイルを設定する必要があります。

10.2.1. ストレージプロファイルのカスタマイズ

プロビジョナーのストレージクラスの StorageProfile オブジェクトを編集してデフォルトパラメーターを指定できます。これらのデフォルトパラメーターは、DataVolume オブジェクトで設定されていない場合にのみ永続ボリューム要求 (PVC) に適用されます。

ストレージクラスのパラメーターは変更できません。変更する必要がある場合は、ストレージクラスを削除して再作成します。その後、ストレージプロファイルに適用していたカスタマイズを再適用する必要があります。

ストレージプロファイルの空の status セクションは、ストレージプロビジョナーが Containerized Data Importer (CDI) によって認識されないことを示します。CDI で認識されないストレージプロビジョナーがある場合、ストレージプロファイルをカスタマイズする必要があります。この場合、管理者はストレージプロファイルに適切な値を設定し、割り当てが正常に実行されるようにします。

仮想マシンのスナップショットを作成する場合、ディスクのストレージクラスに複数の VolumeSnapshotClass が関連付けられていると警告が表示されます。その場合、ボリュームスナップショットクラスを 1 つ指定する必要があります。そうしないと、複数のボリュームスナップショットクラスを持つディスクはスナップショットリストから除外されます。

警告

データボリュームを作成し、YAML 属性を省略し、これらの属性がストレージプロファイルで定義されていない場合は、要求されたストレージは割り当てられず、基礎となる永続ボリューム要求 (PVC) は作成されません。

前提条件

  • OpenShift CLI (oc) がインストールされている。
  • 計画した設定がストレージクラスとそのプロバイダーでサポートされていることを確認してください。ストレージプロファイルに互換性のない設定を指定すると、ボリュームのプロビジョニングに失敗します。

手順

  1. ストレージプロファイルを編集します。この例では、プロビジョナーは CDI によって認識されません。

    $ oc edit storageprofile <storage_class>
    Copy to Clipboard Toggle word wrap
  2. ストレージプロファイルに設定する accessModes および volumeMode の値を指定します。以下に例を示します。

    ストレージプロファイルの例

    apiVersion: cdi.kubevirt.io/v1beta1
    kind: StorageProfile
    metadata:
      name: <unknown_provisioner_class>
    # ...
    spec:
      claimPropertySets:
      - accessModes:
        - ReadWriteOnce 
    1
    
        volumeMode: Filesystem 
    2
    
    status:
      provisioner: <unknown_provisioner>
      storageClass: <unknown_provisioner_class>
    Copy to Clipboard Toggle word wrap

    1
    accessModes を指定します。
    2
    volumeMode を指定します。
10.2.1.1. Web コンソールを使用してボリュームスナップショットクラスを指定する

仮想マシンのスナップショットを作成する場合、ディスクのストレージクラスに複数のボリュームスナップショットクラスが関連付けられていると警告が表示されます。その場合、ボリュームスナップショットクラスを 1 つ指定する必要があります。そうしないと、複数のボリュームスナップショットクラスを持つディスクはスナップショットリストから除外されます。

Red Hat OpenShift Service on AWS の Web コンソールで、デフォルトのボリュームスナップショットクラスを指定できます。

手順

  1. Virtualization に重点を置いたビューから、Storage を選択します。
  2. VolumeSnapshotClasses をクリックします。
  3. リストからボリュームスナップショットクラスを選択します。
  4. Annotations の鉛筆アイコンをクリックします。
  5. 次の キー を入力します: snapshot.storage.kubernetes.io/is-default-class
  6. 次の を入力します: true
  7. Save をクリックします。
10.2.1.2. CLI を使用してボリュームスナップショットクラスを指定する

仮想マシンのスナップショットを作成する場合、ディスクのストレージクラスに複数のボリュームスナップショットクラスが関連付けられていると警告が表示されます。その場合、ボリュームスナップショットクラスを 1 つ指定する必要があります。そうしないと、複数のボリュームスナップショットクラスを持つディスクはスナップショットリストから除外されます。

使用するボリュームスナップショットクラスは、次のいずれかの方法で選択できます。

  • ストレージプロファイルの spec.snapshotClass を設定します。
  • デフォルトのボリュームスナップショットクラスを設定します。

前提条件

  • OpenShift CLI (oc) がインストールされている。

手順

  • 使用する VolumeSnapshotClass を設定します。以下に例を示します。

    apiVersion: cdi.kubevirt.io/v1beta1
    kind: StorageProfile
    metadata:
      name: ocs-storagecluster-ceph-rbd-virtualization
    spec:
      snapshotClass: ocs-storagecluster-rbdplugin-snapclass
    Copy to Clipboard Toggle word wrap
  • または、次のコマンドを実行して、デフォルトのボリュームスナップショットクラスを設定します。

    # oc patch VolumeSnapshotClass ocs-storagecluster-cephfsplugin-snapclass --type=merge -p '{"metadata":{"annotations":{"snapshot.storage.kubernetes.io/is-default-class":"true"}}}'
    Copy to Clipboard Toggle word wrap
10.2.1.3. 自動的に作成されたストレージプロファイルの表示

システムは、各ストレージクラスのストレージプロファイルを自動的に作成します。

前提条件

  • OpenShift CLI (oc) がインストールされている。

手順

  1. ストレージプロファイルのリストを表示するには、次のコマンドを実行します。

    $ oc get storageprofile
    Copy to Clipboard Toggle word wrap
  2. 特定のストレージプロファイルの詳細を取得するには、次のコマンドを実行します。

    $ oc describe storageprofile <name>
    Copy to Clipboard Toggle word wrap

    ストレージプロファイルの詳細例

    Name:         ocs-storagecluster-ceph-rbd-virtualization
    Namespace:
    Labels:       app=containerized-data-importer
                  app.kubernetes.io/component=storage
                  app.kubernetes.io/managed-by=cdi-controller
                  app.kubernetes.io/part-of=hyperconverged-cluster
                  app.kubernetes.io/version=4.17.2
                  cdi.kubevirt.io=
    Annotations:  <none>
    API Version:  cdi.kubevirt.io/v1beta1
    Kind:         StorageProfile
    Metadata:
      Creation Timestamp:  2023-11-13T07:58:02Z
      Generation:          2
      Owner References:
        API Version:           cdi.kubevirt.io/v1beta1
        Block Owner Deletion:  true
        Controller:            true
        Kind:                  CDI
        Name:                  cdi-kubevirt-hyperconverged
        UID:                   2d6f169a-382c-4caf-b614-a640f2ef8abb
      Resource Version:        4186799537
      UID:                     14aef804-6688-4f2e-986b-0297fd3aaa68
    Spec:
    Status:
      Claim Property Sets: 
    1
    
        accessModes:
          ReadWriteMany
        volumeMode:  Block
        accessModes:
          ReadWriteOnce
        volumeMode:  Block
        accessModes:
          ReadWriteOnce
        volumeMode:                   Filesystem
      Clone Strategy:                  csi-clone 
    2
    
      Data Import Cron Source Format:  snapshot 
    3
    
      Provisioner:                     openshift-storage.rbd.csi.ceph.com
      Snapshot Class:                  ocs-storagecluster-rbdplugin-snapclass
      Storage Class:                   ocs-storagecluster-ceph-rbd-virtualization
    Events:                            <none>
    Copy to Clipboard Toggle word wrap

    1
    Claim Property Sets は、仮想マシンディスクのプロビジョニングに使用される PVC モードを記述する AccessMode/VolumeMode ペアの順序付きリストです。
    2
    Clone Strategy 行は、使用するクローンストラテジーを示します。
    3
    Data Import Cron Source Format は、このストレージ上のゴールデンイメージが PVC として保存されるか、ボリュームスナップショットとして保存されるかを示します。

ストレージプロファイルを使用してストレージクラスのデフォルトクローン作成メソッドを設定して、クローンストラテジーを作成できます。ストレージベンダーが特定のクローン作成方法のみをサポートする場合などに、クローン作成ストラテジーを設定すると便利です。また、リソースの使用の制限やパフォーマンスの最大化を実現する手法を選択することもできます。

クローン作成ストラテジーは、ストレージプロファイルの cloneStrategy 属性を以下の値のいずれかに設定して指定できます。

  • snapshot が設定されている場合、デフォルトでスナップショットが使用されます。Containerized Data Importer (CDI) がストレージプロバイダーを認識し、プロバイダーが Container Storage Interface (CSI) スナップショットをサポートする場合、CDI はスナップショットメソッドを使用します。このクローン作成ストラテジーは、一時的なボリュームスナップショットを使用してボリュームのクローンを作成します。
  • copy は、ソース Pod とターゲット Pod を使用して、ソースボリュームからターゲットボリュームにデータをコピーします。ホスト支援型でのクローン作成は、最も効率的な方法です。
  • csi-clone は、CSI クローン API を使用して、中間ボリュームスナップショットを使用せずに、既存のボリュームのクローンを効率的に作成します。ストレージプロファイルが定義されていない場合にデフォルトで使用される snapshot または copy とは異なり、CSI ボリュームのクローンは、プロビジョナーのストレージクラスの StorageProfile オブジェクトに指定した場合にだけ使用されます。
注記

YAML spec セクションのデフォルトの claimPropertySets を変更せずに、CLI でクローン作成ストラテジーを設定できます。

ストレージプロファイルの例

apiVersion: cdi.kubevirt.io/v1beta1
kind: StorageProfile
metadata:
  name: <provisioner_class>
# ...
spec:
  claimPropertySets:
  - accessModes:
    - ReadWriteOnce 
1

    volumeMode:  Filesystem 
2

  cloneStrategy: csi-clone 
3

status:
  provisioner: <provisioner>
  storageClass: <provisioner_class>
Copy to Clipboard Toggle word wrap

1
accessModes を指定します。
2
volumeMode を指定します。
3
デフォルトの cloneStrategy を指定します。

10.3. ブートソースの自動更新の管理

次のブートソースの自動更新を管理できます。

ブートソースにより、ユーザーは仮想マシン (VM) をよりアクセスしやすく効率的に作成できるようになります。ブートソースの自動更新が有効になっている場合、コンテナー化データインポーター (CDI) はイメージをインポート、ポーリング、更新して、新しい仮想マシン用にクローンを作成できるようにします。デフォルトでは、CDI は Red Hat ブートソースを自動的に更新します。

10.3.1. Red Hat ブートソースの更新の管理

enableCommonBootImageImport フィールドの値を false に設定することで、すべてのシステム定義のブートソースの自動更新をオプトアウトできます。値を false に設定すると、すべての DataImportCron オブジェクトが削除されます。ただし、これによって、オペレーティングシステムイメージを格納する、以前にインポートされたブートソースオブジェクトが削除されるわけではありません。管理者は、これらを手動で削除できます。

enableCommonBootImageImport フィールドの値が false に設定されている場合、DataSource オブジェクトはリセットされ、元のブートソースをポイントしなくなります。管理者は、DataSource オブジェクトの新しい永続ボリューム要求 (PVC) またはボリュームスナップショットを作成し、それにオペレーティングシステムイメージを設定することで、ブートソースを手動で提供できます。

10.3.1.1. すべてのシステム定義のブートソースの自動更新の管理

ブートソースの自動インポートと更新を無効にすると、リソースの使用量が削減される可能性があります。切断された環境では、ブートソースの自動更新を無効にすると、CDIDataImportCronOutdated アラートがログをいっぱいにするのを防ぎます。

すべてのシステム定義のブートソースの自動更新を無効にするには、enableCommonBootImageImport フィールドの値を false に設定します。この値を true に設定すると、自動更新が再びオンになります。

注記

カスタムブートソースは、この設定の影響を受けません。

前提条件

  • OpenShift CLI (oc) がインストールされている。

手順

  • HyperConverged カスタムリソース (CR) を編集して、自動ブートソース更新を有効または無効にします。

    • 自動ブートソース更新を無効にするには、HyperConverged CR の spec.enableCommonBootImageImport フィールド値を false に設定します。以下に例を示します。

      $ oc patch hyperconverged kubevirt-hyperconverged -n openshift-cnv \
        --type json -p '[{"op": "replace", "path": \
        "/spec/enableCommonBootImageImport", \
        "value": false}]'
      Copy to Clipboard Toggle word wrap
    • 自動ブートソース更新を再度有効にするには、HyperConverged CR の spec.enableCommonBootImageImport フィールド値を true に設定します。以下に例を示します。

      $ oc patch hyperconverged kubevirt-hyperconverged -n openshift-cnv \
        --type json -p '[{"op": "replace", "path": \
        "/spec/enableCommonBootImageImport", \
        "value": true}]'
      Copy to Clipboard Toggle word wrap

10.3.2. カスタムブートソースの更新の管理

OpenShift Virtualization によって提供されていない カスタム ブートソースは、機能ゲートによって制御されません。HyperConverged カスタムリソース (CR) を編集して、それらを個別に管理する必要があります。

重要

ストレージプロファイルを設定する必要があります。そうしないと、クラスターはカスタムブートソースの自動更新を受信できません。詳細は、ストレージプロファイルの設定 を参照してください。

10.3.2.1. デフォルトおよび virt-default ストレージクラスの設定

ストレージクラスは、ワークロードに対して永続ストレージをプロビジョニングする方法を決定します。OpenShift Virtualization では、virt-default ストレージクラスがクラスターのデフォルトストレージクラスよりも優先され、仮想化ワークロード専用に使用されます。virt-default またはクラスターのデフォルトとして一度に設定できるストレージクラスは 1 つだけです。複数のストレージクラスがデフォルトとしてマークされている場合、virt-default ストレージクラスがクラスターのデフォルトをオーバーライドします。一貫した動作を確保するには、仮想化ワークロードのデフォルトとして 1 つのストレージクラスのみを設定します。

重要

ブートソースは、デフォルトのストレージクラスを使用して作成されます。デフォルトのストレージクラスが変更されると、古いブートソースは新しいデフォルトのストレージクラスを使用して自動的に更新されます。クラスターにデフォルトのストレージクラスがない場合は、定義する必要があります。

ブートソースイメージがボリュームスナップショットとして保存され、クラスターのデフォルトと virt-default ストレージクラスの両方が設定解除されている場合、ボリュームスナップショットはクリーンアップされ、新しいデータボリュームが作成されます。ただし、新しく作成されたデータボリュームは、デフォルトのストレージクラスが設定されるまでインポートを開始しません。

前提条件

  • OpenShift CLI (oc) がインストールされている。

手順

  1. 現在の virt-default またはクラスターのデフォルトストレージクラスを false にパッチします。

    1. 次のコマンドを実行して、現在 virt-default としてマークされているすべてのストレージクラスを識別します。

      $ oc get sc -o json| jq '.items[].metadata|select(.annotations."storageclass.kubevirt.io/is-default-virt-class"=="true")|.name'
      Copy to Clipboard Toggle word wrap
    2. 返されたストレージクラスごとに、次のコマンドを実行して virt-default アノテーションを削除します。

      $ oc patch storageclass <storage_class_name> -p '{"metadata": {"annotations": {"storageclass.kubevirt.io/is-default-virt-class": "false"}}}'
      Copy to Clipboard Toggle word wrap
    3. 次のコマンドを実行して、現在クラスターのデフォルトとしてマークされているすべてのストレージクラスを識別します。

      $ oc get sc -o json| jq '.items[].metadata|select(.annotations."storageclass.kubernetes.io/is-default-class"=="true")|.name'
      Copy to Clipboard Toggle word wrap
    4. 返されたストレージクラスごとに、次のコマンドを実行してクラスターのデフォルトアノテーションを削除します。

      $ oc patch storageclass <storage_class_name> -p '{"metadata": {"annotations": {"storageclass.kubernetes.io/is-default-class": "false"}}}'
      Copy to Clipboard Toggle word wrap
  2. 新しいデフォルトのストレージクラスを設定します。

    1. 次のコマンドを実行して、virt-default ロールをストレージクラスに割り当てます。

      $ oc patch storageclass <storage_class_name> -p '{"metadata": {"annotations": {"storageclass.kubevirt.io/is-default-virt-class": "true"}}}'
      Copy to Clipboard Toggle word wrap
    2. または、次のコマンドを実行して、クラスターのデフォルトロールをストレージクラスに割り当てます。

      $ oc patch storageclass <storage_class_name> -p '{"metadata": {"annotations": {"storageclass.kubernetes.io/is-default-class": "true"}}}'
      Copy to Clipboard Toggle word wrap
10.3.2.2. ブートソースイメージのストレージクラスの設定

HyperConverged リソースで特定のストレージクラスを設定できます。

重要

安定した動作を確保し、不要な再インポートを回避するには、HyperConverged リソースの dataImportCronTemplates セクションで storageClassName を指定します。

前提条件

  • OpenShift CLI (oc) がインストールされている。

手順

  1. 以下のコマンドを実行して、デフォルトのエディターで HyperConverged CR を開きます。

    $ oc edit hyperconverged kubevirt-hyperconverged -n openshift-cnv
    Copy to Clipboard Toggle word wrap
  2. HyperConverged リソースの spec セクションに dataImportCronTemplate を追加し、storageClassName を設定します。

    apiVersion: hco.kubevirt.io/v1beta1
    kind: HyperConverged
    metadata:
      name: kubevirt-hyperconverged
    spec:
      dataImportCronTemplates:
      - metadata:
          name: rhel9-image-cron
        spec:
          template:
            spec:
              storage:
                storageClassName: <storage_class> 
    1
    
          schedule: "0 */12 * * *" 
    2
    
          managedDataSource: <data_source> 
    3
    
    # ...
    Copy to Clipboard Toggle word wrap
    1
    ストレージクラスを定義します。
    2
    必須: cron 形式で指定したジョブのスケジュール。
    3
    必須: 使用するデータソース。
    For the custom image to be detected as an available boot source, the value of the `spec.dataVolumeTemplates.spec.sourceRef.name` parameter in the VM template must match this value.
    Copy to Clipboard Toggle word wrap
  3. HyperConverged Operator (HCO) と Scheduling、Scale、および Performance (SSP) リソースのリコンシリエーションが完了するまで待ちます。
  4. 次のコマンドを実行して、openshift-virtualization-os-images namespace から古くなった DataVolume および VolumeSnapshot オブジェクトを削除します。

    $ oc delete DataVolume,VolumeSnapshot -n openshift-virtualization-os-images --selector=cdi.kubevirt.io/dataImportCron
    Copy to Clipboard Toggle word wrap
  5. すべての DataSource オブジェクトが "Ready - True" ステータスに達するまで待機します。データソースは、PersistentVolumeClaim (PVC) または VolumeSnapshot のいずれかを参照できます。予想されるソース形式を確認するには、次のコマンドを実行します。

    $ oc get storageprofile <storage_class_name> -o json | jq .status.dataImportCronSourceFormat
    Copy to Clipboard Toggle word wrap
10.3.2.3. カスタムブートソースの自動更新を有効にする

OpenShift Virtualization は、デフォルトでシステム定義のブートソースを自動的に更新しますが、カスタムブートソースは自動的に更新しません。HyperConverged カスタムリソース (CR) を編集して、自動更新を手動で有効にする必要があります。

前提条件

  • クラスターにはデフォルトのストレージクラスがあります。
  • OpenShift CLI (oc) がインストールされている。

手順

  1. 以下のコマンドを実行して、デフォルトのエディターで HyperConverged CR を開きます。

    $ oc edit hyperconverged kubevirt-hyperconverged -n openshift-cnv
    Copy to Clipboard Toggle word wrap
  2. 適切なテンプレートおよびブートソースを dataImportCronTemplates セクションで追加して、HyperConverged CR を編集します。以下に例を示します。

    カスタムリソースの例

    apiVersion: hco.kubevirt.io/v1beta1
    kind: HyperConverged
    metadata:
      name: kubevirt-hyperconverged
    spec:
      dataImportCronTemplates:
      - metadata:
          name: centos-stream9-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-stream:9
              storage:
                resources:
                  requests:
                    storage: 30Gi
          garbageCollect: Outdated
          managedDataSource: centos-stream9 
    4
    Copy to Clipboard Toggle word wrap

    1
    このアノテーションは、volumeBindingModeWaitForFirstConsumer に設定されたストレージクラスに必要です。
    2
    cron 形式で指定されるジョブのスケジュール。
    3
    レジストリーソースからデータボリュームを作成するのに使用します。node docker キャッシュに基づくデフォルトの node pullMethod ではなく、デフォルトの pod pullMethod を使用します。node docker キャッシュはレジストリーイメージが Container.Image で利用可能な場合に便利ですが、CDI インポーターはこれにアクセスすることは許可されていません。
    4
    利用可能なブートソースとして検出するカスタムイメージの場合、イメージの managedDataSource の名前が、仮想マシンテンプレート YAML ファイルの spec.dataVolumeTemplates.spec.sourceRef.name にあるテンプレートの DataSource の名前に一致する必要があります。
  3. ファイルを保存します。
10.3.2.4. ボリュームスナップショットのブートソースを有効にする

オペレーティングシステムのベースイメージを保存するストレージクラスに関連付けられた StorageProfile のパラメーターを設定して、ボリュームスナップショットのブートソースを有効にします。DataImportCron は、元々 PVC ソースのみを維持するように設計されていましたが、特定のストレージタイプでは VolumeSnapshot ソースの方が PVC ソースよりも拡張性に優れています。

注記

ストレージプロファイルでは、単一のスナップショットからクローンを作成する場合により適切に拡張できることが証明されているボリュームスナップショットを使用してください。

前提条件

  • オペレーティングシステムイメージを含むボリュームスナップショットにアクセスできる。
  • ストレージはスナップショットをサポートしている。
  • OpenShift CLI (oc) がインストールされている。

手順

  1. 次のコマンドを実行して、ブートソースのプロビジョニングに使用されるストレージクラスに対応するストレージプロファイルオブジェクトを開きます。

    $ oc edit storageprofile <storage_class>
    Copy to Clipboard Toggle word wrap
  2. StorageProfiledataImportCronSourceFormat 仕様を確認して、仮想マシンがデフォルトで PVC またはボリュームスナップショットを使用しているか確認します。
  3. 必要に応じて、dataImportCronSourceFormat 仕様を snapshot に更新して、ストレージプロファイルを編集します。

    ストレージプロファイルの例

    apiVersion: cdi.kubevirt.io/v1beta1
    kind: StorageProfile
    metadata:
    # ...
    spec:
      dataImportCronSourceFormat: snapshot
    Copy to Clipboard Toggle word wrap

検証

  1. ブートソースのプロビジョニングに使用されるストレージクラスに対応するストレージプロファイルオブジェクトを開きます。

    $ oc get storageprofile <storage_class>  -oyaml
    Copy to Clipboard Toggle word wrap
  2. StorageProfiledataImportCronSourceFormat 仕様が 'snapshot' に設定されていること、および DataImportCron が指す DataSource オブジェクトがボリュームスナップショットを参照していることを確認します。

これで、これらのブートソースを使用して仮想マシンを作成できるようになりました。

10.3.3. 単一ブートソースの自動更新を無効にする

HyperConverged カスタムリソース (CR) を編集することで、カスタムブートソースかシステム定義ブートソースかに関係なく、個々のブートソースの自動更新を無効にできます。

前提条件

  • OpenShift CLI (oc) がインストールされている。

手順

  1. 以下のコマンドを実行して、デフォルトのエディターで HyperConverged CR を開きます。

    $ oc edit hyperconverged kubevirt-hyperconverged -n openshift-cnv
    Copy to Clipboard Toggle word wrap
  2. spec.dataImportCronTemplates フィールドを編集して、個々のブートソースの自動更新を無効にします。

    カスタムブートソース
    • spec.dataImportCronTemplates フィールドからブートソースを削除します。カスタムブートソースの自動更新はデフォルトで無効になっています。
    システム定義のブートソース
    1. ブートソースを spec.dataImportCronTemplates に追加します。

      注記

      システム定義のブートソースの自動更新はデフォルトで有効になっていますが、これらのブートソースは追加しない限り CR にリストされません。

    2. 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
      # ...
      Copy to Clipboard Toggle word wrap
  3. ファイルを保存します。

10.3.4. ブートソースのステータスの確認

HyperConverged カスタムリソース (CR) を表示することで、ブートソースがシステム定義であるかカスタムであるかを判断できます。

前提条件

  • OpenShift CLI (oc) がインストールされている。

手順

  1. 次のコマンドを実行して、HyperConverged CR の内容を表示します。

    $ oc get hyperconverged kubevirt-hyperconverged -n openshift-cnv -o yaml
    Copy to Clipboard Toggle word wrap

    出力例

    apiVersion: hco.kubevirt.io/v1beta1
    kind: HyperConverged
    metadata:
      name: kubevirt-hyperconverged
    spec:
    # ...
    status:
    # ...
      dataImportCronTemplates:
      - metadata:
          annotations:
            cdi.kubevirt.io/storage.bind.immediate.requested: "true"
          name: centos-9-image-cron
        spec:
          garbageCollect: Outdated
          managedDataSource: centos-stream9
          schedule: 55 8/12 * * *
          template:
            metadata: {}
            spec:
              source:
                registry:
                  url: docker://quay.io/containerdisks/centos-stream:9
              storage:
                resources:
                  requests:
                    storage: 30Gi
            status: {}
        status:
          commonTemplate: true 
    1
    
    # ...
      - metadata:
          annotations:
            cdi.kubevirt.io/storage.bind.immediate.requested: "true"
          name: user-defined-dic
        spec:
          garbageCollect: Outdated
          managedDataSource: user-defined-centos-stream9
          schedule: 55 8/12 * * *
          template:
            metadata: {}
            spec:
              source:
                registry:
                  pullMethod: node
                  url: docker://quay.io/containerdisks/centos-stream:9
              storage:
                resources:
                  requests:
                    storage: 30Gi
            status: {}
        status: {} 
    2
    
    # ...
    Copy to Clipboard Toggle word wrap

    1
    システム定義のブートソースを示します。
    2
    カスタムブートソースを示します。
  2. status.dataImportCronTemplates.status フィールドを確認して、ブートソースのステータスを確認します。

    • フィールドに commonTemplate: true が含まれている場合、それはシステム定義のブートソースです。
    • status.dataImportCronTemplates.status フィールドの値が {} の場合、それはカスタムブートソースです。

10.4. ファイルシステムオーバーヘッドの PVC 領域の確保

Filesystem ボリュームモードを使用する永続ボリューム要求 (PVC) に仮想マシンディスクを追加する場合は、仮想マシンディスクおよびファイルシステムのオーバーヘッド (メタデータなど) 用に十分なスペースが PVC 上にあることを確認する必要があります。

デフォルトでは、OpenShift Virtualization は PVC 領域の 5.5% をオーバーヘッド用に予約し、その分、仮想マシンディスクに使用できる領域を縮小します。

HCO オブジェクトを編集して、別のオーバーヘッド値を設定できます。値はグローバルに変更でき、特定のストレージクラスの値を指定できます。

10.4.1. デフォルトのファイルシステムオーバーヘッド値のオーバーライド

HCO オブジェクトの spec.filesystemOverhead 属性を編集することで、OpenShift Virtualization がファイルシステムオーバーヘッド用に予約する永続ボリューム要求 (PVC) 領域の量を変更します。

前提条件

  • OpenShift CLI (oc) がインストールされている。

手順

  1. 次のコマンドを実行して、HCO オブジェクトを編集用に開きます。

    $ oc edit hyperconverged kubevirt-hyperconverged -n openshift-cnv
    Copy to Clipboard Toggle word wrap
  2. spec.filesystemOverhead フィールドを編集して、選択した値でデータを設定します。

    # ...
    spec:
      filesystemOverhead:
        global: "<new_global_value>" 
    1
    
        storageClass:
          <storage_class_name>: "<new_value_for_this_storage_class>" 
    2
    Copy to Clipboard Toggle word wrap
    1
    まだ値が設定されていないストレージクラスに使用されるデフォルトのファイルシステムオーバーヘッドの割合。たとえば、global: "0.07" は、ファイルシステムのオーバーヘッド用に PVC の 7% を確保します。
    2
    指定されたストレージクラスのファイルシステムのオーバーヘッドの割合 (パーセンテージ)。たとえば、mystorageclass: "0.04" は、mystorageclass ストレージクラスの PVC のデフォルトオーバーヘッド値を 4% に変更します。
  3. エディターを保存して終了し、HCO オブジェクトを更新します。

検証

  • 次のいずれかのコマンドを実行して、CDIConfig ステータスを表示し、変更を確認します。

    一般的に CDIConfig への変更を確認するには以下を実行します。

    $ oc get cdiconfig -o yaml
    Copy to Clipboard Toggle word wrap

    CDIConfig に対する 特定の変更を表示するには以下を実行します。

    $ oc get cdiconfig -o jsonpath='{.items..status.filesystemOverhead}'
    Copy to Clipboard Toggle word wrap

10.5. ホストパスプロビジョナーを使用したローカルストレージの設定

ホストパスプロビジョナー (HPP) を使用して、仮想マシンのローカルストレージを設定できます。

OpenShift Virtualization Operator のインストール時に、Hostpath Provisioner Operator は自動的にインストールされます。HPP は、Hostpath Provisioner Operator によって作成される OpenShift Virtualization 用に設計されたローカルストレージプロビジョナーです。HPP を使用するには、基本ストレージプールを使用して HPP カスタムリソース (CR) を作成します。

10.5.1. 基本ストレージプールを使用したホストパスプロビジョナーの作成

storagePools スタンザを使用して HPP カスタムリソース (CR) を作成することにより、基本ストレージプールを使用してホストパスプロビジョナー (HPP) を設定します。ストレージプールは、CSI ドライバーが使用する名前とパスを指定します。

重要

オペレーティングシステムと同じパーティションにストレージプールを作成しないでください。そうしないと、オペレーティングシステムのパーティションがいっぱいになり、パフォーマンスに影響を与えたり、ノードが不安定になったり、使用できなくなったりする可能性があります。

前提条件

  • spec.storagePools.path で指定されたディレクトリーには、読み取り/書き込みアクセス権が必要です。
  • OpenShift CLI (oc) がインストールされている。

手順

  1. 次の例のように、storagePools スタンザを含む hpp_cr.yaml ファイルを作成します。

    apiVersion: hostpathprovisioner.kubevirt.io/v1beta1
    kind: HostPathProvisioner
    metadata:
      name: hostpath-provisioner
    spec:
      imagePullPolicy: IfNotPresent
      storagePools:
      - name: any_name 
    1
    
        path: "/var/myvolumes" 
    2
    
      workload:
        nodeSelector:
          kubernetes.io/os: linux
    Copy to Clipboard Toggle word wrap
    1
    使用するソースを識別するための名前を指定します。StorageClass.yamlstoragePools 名と同じである必要があります。たとえば、local などです。
    2
    このノードパスの下のストレージプールディレクトリーを指定します。各ワーカーノードにパス /var/myvolumes が作成されていることを確認します。
  2. ファイルを保存して終了します。
  3. 次のコマンドを実行して HPP を作成します。

    $ oc create -f hpp_cr.yaml
    Copy to Clipboard Toggle word wrap
10.5.1.1. ストレージクラスの作成について

ストレージクラスの作成時に、ストレージクラスに属する永続ボリューム (PV) の動的プロビジョニングに影響するパラメーターを設定します。StorageClass オブジェクトの作成後には、このオブジェクトのパラメーターを更新できません。

ホストパスプロビジョナー (HPP) を使用するには、storagePools スタンザで CSI ドライバーの関連付けられたストレージクラスを作成する必要があります。

注記

仮想マシンは、ローカル PV に基づくデータボリュームを使用します。ローカル PV は特定のノードにバインドされます。ディスクイメージは仮想マシンで使用するために準備されますが、ローカルストレージ PV がすでに固定されたノードに仮想マシンをスケジュールすることができない可能性があります。

この問題を解決するには、Kubernetes Pod スケジューラーを使用して、永続ボリューム要求 (PVC) を正しいノードの PV にバインドします。volumeBindingMode パラメーターが WaitForFirstConsumer に設定された StorageClass 値を使用することにより、PV のバインディングおよびプロビジョニングは、Pod が PVC を使用して作成されるまで遅延します。

10.5.1.2. storagePools スタンザを使用した CSI ドライバーのストレージクラスの作成

ホストパスプロビジョナー (HPP) を使用するには、コンテナーストレージインターフェイス (CSI) ドライバーに関連するストレージクラスを作成する必要があります。

ストレージクラスの作成時に、ストレージクラスに属する永続ボリューム (PV) の動的プロビジョニングに影響するパラメーターを設定します。StorageClass オブジェクトの作成後には、このオブジェクトのパラメーターを更新できません。

注記

仮想マシンは、ローカル PV に基づくデータボリュームを使用します。ローカル PV は特定のノードにバインドされます。ディスクイメージは仮想マシンで使用するために準備されますが、ローカルストレージ PV がすでに固定されたノードに仮想マシンをスケジュールすることができない可能性があります。

この問題を解決するには、Kubernetes Pod スケジューラーを使用して、永続ボリューム要求 (PVC) を正しいノードの PV にバインドします。volumeBindingMode パラメーターが WaitForFirstConsumer に設定された StorageClass 値を使用することにより、PV のバインディングおよびプロビジョニングは、Pod が PVC を使用して作成されるまで遅延します。

手順

  1. storageclass_csi.yaml ファイルを作成して、ストレージクラスを定義します。

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: hostpath-csi
    provisioner: kubevirt.io.hostpath-provisioner
    reclaimPolicy: Delete 
    1
    
    volumeBindingMode: WaitForFirstConsumer 
    2
    
    parameters:
      storagePool: my-storage-pool 
    3
    Copy to Clipboard Toggle word wrap
    1
    reclaimPolicy には、Delete および Retain の 2 つの値があります。値を指定しない場合、デフォルト値は Delete です。
    2
    volumeBindingMode パラメーターは、動的プロビジョニングとボリュームのバインディングが実行されるタイミングを決定します。WaitForFirstConsumer を指定して、永続ボリューム要求 (PVC) を使用する Pod が作成されるまで PV のバインディングおよびプロビジョニングを遅延させます。これにより、PV が Pod のスケジュール要件を満たすようになります。
    3
    HPP CR で定義されているストレージプールの名前を指定します。
  2. ファイルを保存して終了します。
  3. 次のコマンドを実行して、StorageClass オブジェクトを作成します。

    $ oc create -f storageclass_csi.yaml
    Copy to Clipboard Toggle word wrap

10.5.2. PVC テンプレートで作成されたストレージプールについて

単一の大きな永続ボリューム (PV) がある場合は、ホストパスプロビジョナー (HPP) カスタムリソース (CR) で PVC テンプレートを定義することにより、ストレージプールを作成できます。

PVC テンプレートで作成されたストレージプールには、複数の HPP ボリュームを含めることができます。PV を小さなボリュームに分割すると、データ割り当ての柔軟性が向上します。

PVC テンプレートは、PersistentVolumeClaim オブジェクトの spec スタンザに基づいています。

PersistentVolumeClaim オブジェクトの例

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: iso-pvc
spec:
  volumeMode: Block 
1

  storageClassName: my-storage-class
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 5Gi
Copy to Clipboard Toggle word wrap

1
この値は、ブロックボリュームモードの PV にのみ必要です。

HPP CR の pvcTemplate 仕様を使用してストレージプールを定義します。Operator は、HPP CSI ドライバーを含む各ノードの pvcTemplate 仕様から PVC を作成します。PVC テンプレートから作成される PVC は単一の大きな PV を消費するため、HPP は小規模な動的ボリュームを作成できます。

基本的なストレージプールを、PVC テンプレートから作成されたストレージプールと組み合わせることができます。

10.5.2.1. PVC テンプレートを使用したストレージプールの作成

HPP カスタムリソース (CR) で PVC テンプレートを指定することにより、複数のホストパスプロビジョナー (HPP) ボリューム用のストレージプールを作成できます。

重要

オペレーティングシステムと同じパーティションにストレージプールを作成しないでください。そうしないと、オペレーティングシステムのパーティションがいっぱいになり、パフォーマンスに影響を与えたり、ノードが不安定になったり、使用できなくなったりする可能性があります。

前提条件

  • spec.storagePools.path で指定されたディレクトリーには、読み取り/書き込みアクセス権が必要です。
  • OpenShift CLI (oc) がインストールされている。

手順

  1. 次の例に従って、storagePools スタンザで永続ボリューム (PVC) テンプレートを指定する HPP CR の hpp_pvc_template_pool.yaml ファイルを作成します。

    apiVersion: hostpathprovisioner.kubevirt.io/v1beta1
    kind: HostPathProvisioner
    metadata:
      name: hostpath-provisioner
    spec:
      imagePullPolicy: IfNotPresent
      storagePools: 
    1
    
      - name: my-storage-pool
        path: "/var/myvolumes" 
    2
    
        pvcTemplate:
          volumeMode: Block 
    3
    
          storageClassName: my-storage-class 
    4
    
          accessModes:
          - ReadWriteOnce
          resources:
            requests:
              storage: 5Gi 
    5
    
      workload:
        nodeSelector:
          kubernetes.io/os: linux
    Copy to Clipboard Toggle word wrap
    1
    storagePools スタンザは、基本ストレージプールと PVC テンプレートストレージプールの両方を含むことができるアレイです。
    2
    このノードパスの下にストレージプールディレクトリーを指定します。
    3
    オプション: volumeMode パラメーターは、プロビジョニングされたボリューム形式と一致する限り、Block または Filesystem のいずれかにすることができます。値が指定されていない場合、デフォルトは Filesystem です。volumeModeBlock の場合、Pod をマウントする前にブロックボリュームに XFS ファイルシステムが作成されます。
    4
    storageClassName パラメーターを省略すると、デフォルトのストレージクラスを使用して PVC を作成します。storageClassName を省略する場合、HPP ストレージクラスがデフォルトのストレージクラスではないことを確認してください。
    5
    静的または動的にプロビジョニングされるストレージを指定できます。いずれの場合も、要求されたストレージサイズが仮想的に分割する必要のあるボリュームに対して適切になるようにしてください。そうしないと、PVC を大規模な PV にバインドすることができません。使用しているストレージクラスが動的にプロビジョニングされるストレージを使用する場合、典型的な要求のサイズに一致する割り当てサイズを選択します。
  2. ファイルを保存して終了します。
  3. 次のコマンドを実行して、ストレージプールを使用して HPP を作成します。

    $ oc create -f hpp_pvc_template_pool.yaml
    Copy to Clipboard Toggle word wrap

namespace には相互に分離する性質があるため、ユーザーはデフォルトでは namespace をまたがってリソースのクローンを作成することができません。

ユーザーが仮想マシンのクローンを別の namespace に作成できるようにするには、cluster-admin ロールを持つユーザーが新規のクラスターロールを作成する必要があります。このクラスターロールをユーザーにバインドし、それらのユーザーが仮想マシンのクローンを宛先 namespace に対して作成できるようにします。

10.6.1. データボリュームのクローン作成のための RBAC リソースの作成

datavolumes リソースのすべてのアクションのパーミッションを有効にする新規のくスターロールを作成します。

前提条件

  • OpenShift CLI (oc) がインストールされている。
  • クラスター管理者権限がある。
注記

ソース namespace とターゲット namespace の両方の管理者である非管理者ユーザーの場合は、必要に応じて ClusterRole の代わりに Role を作成できます。

手順

  1. ClusterRole マニフェストを作成します。

    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRole
    metadata:
      name: <datavolume-cloner> 
    1
    
    rules:
    - apiGroups: ["cdi.kubevirt.io"]
      resources: ["datavolumes/source"]
      verbs: ["*"]
    Copy to Clipboard Toggle word wrap
    1
    クラスターロールの一意の名前。
  2. クラスターにクラスターロールを作成します。

    $ oc create -f <datavolume-cloner.yaml> 
    1
    Copy to Clipboard Toggle word wrap
    1
    直前の手順で作成された ClusterRole マニフェストのファイル名です。
  3. 移行元および宛先 namespace の両方に適用される RoleBinding マニフェストを作成し、直前の手順で作成したクラスターロールを参照します。

    apiVersion: rbac.authorization.k8s.io/v1
    kind: RoleBinding
    metadata:
      name: <allow-clone-to-user> 
    1
    
      namespace: <Source namespace> 
    2
    
    subjects:
    - kind: ServiceAccount
      name: default
      namespace: <Destination namespace> 
    3
    
    roleRef:
      kind: ClusterRole
      name: datavolume-cloner 
    4
    
      apiGroup: rbac.authorization.k8s.io
    Copy to Clipboard Toggle word wrap
    1
    ロールバインディングの一意の名前。
    2
    ソースデータボリュームの namespace。
    3
    データボリュームのクローンが作成される namespace。
    4
    直前の手順で作成したクラスターロールの名前。
  4. クラスターにロールバインディングを作成します。

    $ oc create -f <datavolume-cloner.yaml> 
    1
    Copy to Clipboard Toggle word wrap
    1
    直前の手順で作成された RoleBinding マニフェストのファイル名です。

10.7. CPU およびメモリークォータをオーバーライドするための CDI の設定

Containerized Data Importer (CDI) を設定して、CPU およびメモリーリソースの制限が適用される namespace に仮想マシンディスクをインポートし、アップロードし、そのクローンを作成できるようになりました。

10.7.1. namespace の CPU およびメモリークォータについて

ResourceQuota オブジェクトで定義される リソースクォータ は、その namespace 内のリソースが消費できるコンピュートリソースの全体量を制限する制限を namespace に課します。

HyperConverged カスタムリソース (CR) は、Containerized Data Importer (CDI) のユーザー設定を定義します。CPU とメモリーの要求値と制限値は、デフォルト値の 0 に設定されています。これにより、コンピュートリソース要件を指定しない CDI によって作成される Pod にデフォルト値が付与され、クォータで制限される namespace での実行が許可されます。

10.7.2. CPU およびメモリーのデフォルトのオーバーライド

ユースケースに合わせて CPU とメモリーの requests および limits のデフォルト設定を変更するには、spec.resourceRequirements.storageWorkloads スタンザを HyperConverged カスタムリソース (CR) に追加します。

前提条件

  • OpenShift CLI (oc) がインストールされている。

手順

  1. 以下のコマンドを実行して、HyperConverged CR を編集します。

    $ oc edit hyperconverged kubevirt-hyperconverged -n openshift-cnv
    Copy to Clipboard Toggle word wrap
  2. spec.resourceRequirements.storageWorkloads スタンザを CR に追加し、ユースケースに基づいて値を設定します。以下に例を示します。

    apiVersion: hco.kubevirt.io/v1beta1
    kind: HyperConverged
    metadata:
      name: kubevirt-hyperconverged
    spec:
      resourceRequirements:
        storageWorkloads:
          limits:
            cpu: "500m"
            memory: "2Gi"
          requests:
            cpu: "250m"
            memory: "1Gi"
    Copy to Clipboard Toggle word wrap
  3. エディターを保存して終了し、HyperConverged CR を更新します。

10.8. CDI のスクラッチ領域の用意

10.8.1. スクラッチ領域について

Containerized Data Importer (CDI) では、仮想マシンイメージのインポートやアップロードなどの、一部の操作を実行するためにスクラッチ領域 (一時ストレージ) が必要になります。このプロセスで、CDI は、宛先データボリューム (DV) をサポートする PVC のサイズと同じサイズのスクラッチ領域 PVC をプロビジョニングします。スクラッチ領域 PVC は操作の完了または中止後に削除されます。

HyperConverged カスタムリソースの spec.scratchSpaceStorageClass フィールドで、スクラッチ領域 PVC をバインドするために使用されるストレージクラスを定義できます。

定義されたストレージクラスがクラスターのストレージクラスに一致しない場合、クラスターに定義されたデフォルトのストレージクラスが使用されます。クラスターで定義されたデフォルトのストレージクラスがない場合、元の DV または PVC のプロビジョニングに使用されるストレージクラスが使用されます。

注記

CDI では、元のデータボリュームをサポートする PVC の種類を問わず、file ボリュームモードが設定されているスクラッチ領域が必要です。元の PVC が block ボリュームモードでサポートされる場合、file ボリュームモード PVC をプロビジョニングできるストレージクラスを定義する必要があります。

手動プロビジョニング

ストレージクラスがない場合、CDI はイメージのサイズ要件に一致するプロジェクトの PVC を使用します。これらの要件に一致する PVC がない場合、CDI インポート Pod は適切な PVC が利用可能になるまで、またはタイムアウト機能が Pod を強制終了するまで Pending 状態になります。

10.8.2. スクラッチ領域を必要とする CDI 操作

Expand
理由

レジストリーのインポート

CDI はイメージをスクラッチ領域にダウンロードし、イメージファイルを見つけるためにレイヤーを抽出する必要があります。その後、raw ディスクに変換するためにイメージファイルが QEMU-IMG に渡されます。

イメージのアップロード

QEMU-IMG は STDIN の入力を受け入れません。代わりに、アップロードするイメージは、変換のために QEMU-IMG に渡される前にスクラッチ領域に保存されます。

アーカイブされたイメージの HTTP インポート

QEMU-IMG は、CDI がサポートするアーカイブ形式の処理方法を認識しません。イメージが QEMU-IMG に渡される前にアーカイブは解除され、スクラッチ領域に保存されます。

認証されたイメージの HTTP インポート

QEMU-IMG が認証を適切に処理しません。イメージが QEMU-IMG に渡される前にスクラッチ領域に保存され、認証されます。

カスタム証明書の HTTP インポート

QEMU-IMG は HTTPS エンドポイントのカスタム証明書を適切に処理しません。代わりに CDI は、ファイルを QEMU-IMG に渡す前にイメージをスクラッチ領域にダウンロードします。

10.8.3. ストレージクラスの定義

spec.scratchSpaceStorageClass フィールドを HyperConverged カスタムリソース (CR) に追加することにより、スクラッチ領域を割り当てる際に、Containerized Data Importer (CDI) が使用するストレージクラスを定義できます。

前提条件

  • OpenShift CLI (oc) がインストールされている。

手順

  1. 以下のコマンドを実行して、HyperConverged CR を編集します。

    $ oc edit hyperconverged kubevirt-hyperconverged -n openshift-cnv
    Copy to Clipboard Toggle word wrap
  2. spec.scratchSpaceStorageClass フィールドを CR に追加し、値をクラスターに存在するストレージクラスの名前に設定します。

    apiVersion: hco.kubevirt.io/v1beta1
    kind: HyperConverged
    metadata:
      name: kubevirt-hyperconverged
    spec:
      scratchSpaceStorageClass: "<storage_class>" 
    1
    Copy to Clipboard Toggle word wrap
    1
    ストレージクラスを指定しない場合、CDI は設定されている永続ボリューム要求のストレージクラスを使用します。
  3. デフォルトのエディターを保存して終了し、HyperConverged CR を更新します。

10.8.4. CDI がサポートする操作マトリックス

このマトリックスにはエンドポイントに対してコンテンツタイプのサポートされる CDI 操作が表示されます。これらの操作にはスクラッチ領域が必要です。

Expand
コンテンツタイプHTTPHTTPSHTTP Basic 認証レジストリーアップロード

KubeVirt (QCOW2)

✓ QCOW2
✓ GZ*
✓ XZ*

✓ QCOW2**
✓ GZ*
✓ XZ*

✓ QCOW2
✓ GZ*
✓ XZ*

✓ QCOW2*
□ GZ
□ XZ

✓ QCOW2*
✓ GZ*
✓ XZ*

KubeVirt (RAW)

✓ RAW
✓ GZ
✓ XZ

✓ RAW
✓ GZ
✓ XZ

✓ RAW
✓ GZ
✓ XZ

✓ RAW*
□ GZ
□ XZ

✓ RAW*
✓ GZ*
✓ XZ*

✓ サポートされる操作

□ サポートされない操作

* スクラッチ領域が必要

**カスタム認証局が必要な場合にスクラッチ領域が必要

10.9. データボリュームの事前割り当ての使用

Containerized Data Importer は、データボリュームの作成時に書き込みパフォーマンスを向上させるために、ディスク領域を事前に割り当てることができます。

特定のデータボリュームの事前割り当てを有効にできます。

10.9.1. 事前割り当てについて

Containerized Data Importer (CDI) は、データボリュームに QEMU 事前割り当てモードを使用し、書き込みパフォーマンスを向上できます。操作のインポートおよびアップロードには、事前割り当てモードを使用できます。また、空のデータボリュームを作成する際にも使用できます。

事前割り当てが有効化されている場合、CDI は基礎となるファイルシステムおよびデバイスタイプに応じて、より適切な事前割り当て方法を使用します。

fallocate
ファイルシステムがこれをサポートする場合、CDI は posix_fallocate 関数を使用して領域を事前に割り当てるためにオペレーティングシステムの fallocate 呼び出しを使用します。これは、ブロックを割り当て、それらを未初期化としてマークします。
full
fallocate モードを使用できない場合は、基礎となるストレージにデータを書き込むことで、full モードがイメージの領域を割り当てます。ストレージの場所によっては、空の割り当て領域がすべてゼロになる場合があります。

10.9.2. データボリュームの事前割り当ての有効化

データボリュームマニフェストに spec.preallocation フィールドを含めることにより、特定のデータボリュームの事前割り当てを有効にできます。Web コンソールで、または OpenShift CLI (oc) を使用して、事前割り当てモードを有効化することができます。

事前割り当てモードは、すべての CDI ソースタイプでサポートされます。

手順

  • データボリュームマニフェストの spec.preallocation フィールドを指定します。

    apiVersion: cdi.kubevirt.io/v1beta1
    kind: DataVolume
    metadata:
      name: preallocated-datavolume
    spec:
      source: 
    1
    
        registry:
          url: <image_url> 
    2
    
      storage:
        resources:
          requests:
            storage: 1Gi
      preallocation: true
    # ...
    Copy to Clipboard Toggle word wrap
    1
    すべての CDI ソースタイプは事前割り当てをサポートしています。ただし、クローン作成操作では事前割り当ては無視されます。
    2
    レジストリー内のデータソースの URL を指定します。

10.10. データボリュームアノテーションの管理

データボリューム (DV) アノテーションを使用して Pod の動作を管理できます。1 つ以上のアノテーションをデータボリュームに追加してから、作成されたインポーター Pod に伝播できます。

10.10.1. 例: データボリュームアノテーション

以下の例は、インポーター Pod が使用するネットワークを制御するためにデータボリューム (DV) アノテーションを設定する方法を示しています。v1.multus-cni.io/default-network: bridge-network アノテーションにより、Pod は bridge-network という名前の multus ネットワークをデフォルトネットワークとして使用します。インポーター Pod にクラスターからのデフォルトネットワークとセカンダリー multus ネットワークの両方を使用させる必要がある場合は、k8s.v1.cni.cncf.io/networks: <network_name> アノテーションを使用します。

Multus ネットワークアノテーションの例

apiVersion: cdi.kubevirt.io/v1beta1
kind: DataVolume
metadata:
  name: datavolume-example
  annotations:
    v1.multus-cni.io/default-network: bridge-network 
1

# ...
Copy to Clipboard Toggle word wrap

1
Multus ネットワークアノテーション

第11章 ライブマイグレーション

11.1. ライブマイグレーションについて

ライブマイグレーションは、仮想ワークロードに支障を与えることなく、実行中の仮想マシンをクラスター内の別のノードに移行するプロセスです。ライブマイグレーションにより、クラスターのアップグレード中や、メンテナンスや設定の変更のためにノードをドレインする必要があるときに、スムーズな移行が可能になります。

デフォルトでは、ライブマイグレーショントラフィックは Transport Layer Security (TLS) を使用して暗号化されます。

11.1.1. ライブマイグレーションの要件

ライブマイグレーションには次の要件があります。

  • クラスターには、ReadWriteMany (RWX) アクセスモードの共有ストレージが必要です。
  • クラスターには十分な RAM とネットワーク帯域幅が必要です。

    注記

    ノードのドレインに伴うライブマイグレーションを実行できるように、クラスター内に十分なメモリーリクエスト容量があることを確認する必要があります。以下の計算を使用して、必要な予備のメモリーを把握できます。

    Product of (Maximum number of nodes that can drain in parallel) and (Highest total VM memory request allocations across nodes)
    Copy to Clipboard Toggle word wrap

    クラスターで並行して実行できるデフォルトの移行数は 5 です。

  • 仮想マシンがホストモデル CPU を使用する場合、ノードはその CPU をサポートする必要があります。
  • ライブマイグレーション用に 専用の Multus ネットワークを設定すること を強く推奨します。専用ネットワークは、移行中のテナントワークロードに対するネットワークの飽和状態の影響を最小限に抑えます。

11.1.2. ライブマイグレーションのパーミッションについて

OpenShift Virtualization 4.19 以降では、ライブマイグレーション操作は、kubevirt.io:migrate クラスターロールが明示的に付与されたユーザーに制限されています。このロールを持つユーザーは、VirtualMachineInstanceMigration (VMIM) カスタムリソースによって表される仮想マシン (VM) ライブマイグレーション要求を作成、削除、更新できます。

クラスター管理者は、namespace またはクラスターレベルのいずれかで、信頼できるユーザーまたはグループに kubevirt.io:migrate ロールをバインドできます。

OpenShift Virtualization 4.19 より前では、namespace 管理者にはデフォルトでライブマイグレーションのパーミッションが与えられていました。これは、インフラストラクチャーにとって重要な移行操作に対する意図しない、または悪意のある中断を防ぐために、バージョン 4.19 で変更されました。

クラスター管理者は、更新前に一時的なクラスターロールを作成することで、古い動作を維持できます。新しいロールをユーザーに割り当てた後、より制限の厳しいパーミッションを適用するために一時的なロールを削除します。すでに更新している場合でも、kubevirt.io:migrate ロールを admin クラスターロールに集約することで、以前の動作に戻すことができます。

11.1.3. 更新中に 4.19 より前のライブマイグレーションのパーミッションを保持する

OpenShift Virtualization 4.19 へ更新する前に、より制限の厳しいデフォルトのパーミッションを有効にする準備ができるまで、以前のライブマイグレーションのパーミッションを保持するための一時的なクラスターロールを作成できます。

前提条件

  • OpenShift CLI (oc) がインストールされている。
  • クラスター管理者パーミッションがある。

手順

  1. OpenShift Virtualization 4.19 に更新する前に、一時的な ClusterRole オブジェクトを作成します。以下に例を示します。

    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRole
    metadata:
      labels:
        rbac.authorization.k8s.io/aggregate-to-admin=true 
    1
    
      name: kubevirt.io:upgrademigrate
    rules:
    - apiGroups:
      - subresources.kubevirt.io
      resources:
      - virtualmachines/migrate
      verbs:
      - update
    - apiGroups:
      - kubevirt.io
      resources:
      - virtualmachineinstancemigrations
      verbs:
      - get
      - delete
      - create
      - update
      - patch
      - list
      - watch
      - deletecollection
    Copy to Clipboard Toggle word wrap
    1
    OpenShift Virtualization を更新する前に、このクラスターロールは admin ロールに集約されます。更新プロセスでは変更されず、以前の動作が維持されます。
  2. 次のコマンドを実行して、クラスターロールマニフェストをクラスターに追加します。

    $ oc apply -f <cluster_role_file_name>.yaml
    Copy to Clipboard Toggle word wrap
  3. OpenShift Virtualization をバージョン 4.19 に更新します。
  4. 次のコマンドのいずれかを実行し、kubevirt.io:migrate クラスターロールを信頼できるユーザーまたはグループにバインドし、<namespace><first_user><second_user>、および <group_name> を独自の値に置き換えます。

    • namespace レベルでロールをバインドするには、次のコマンドを実行します。

      $ oc create -n <namespace> rolebinding kvmigrate --clusterrole=kubevirt.io:migrate --user=<first_user> --user=<second_user> --group=<group_name>
      Copy to Clipboard Toggle word wrap
    • クラスターレベルでロールをバインドするには、次のコマンドを実行します。

      $ oc create clusterrolebinding kvmigrate --clusterrole=kubevirt.io:migrate --user=<first_user> --user=<second_user> --group=<group_name>
      Copy to Clipboard Toggle word wrap
  5. kubevirt.io:migrate ロールを必要なすべてのユーザーにバインドしたら、次のコマンドを実行して、一時的な ClusterRole オブジェクトを削除します。

    $ oc delete clusterrole kubevirt.io:upgrademigrate
    Copy to Clipboard Toggle word wrap

    一時的なクラスターロールを削除すると、kubevirt.io:migrate ロールを持つユーザーのみがライブマイグレーション要求を作成、削除、更新できるようになります。

11.1.4. ライブマイグレーションのパーミッションの付与

信頼できるユーザーまたはグループに、ライブマイグレーションインスタンスを作成、削除、更新するパーミッションを付与します。

前提条件

  • OpenShift CLI (oc) がインストールされている。
  • クラスター管理者パーミッションがある。

手順

  • (オプション) namespace 管理者が常にライブマイグレーションを作成、削除、更新するパーミッションを持つようにデフォルトの動作を変更するには、次のコマンドを実行して、kubevirt.io:migrate ロールを admin クラスターロールに集約します。

    $ oc label --overwrite clusterrole kubevirt.io:migrate rbac.authorization.k8s.io/aggregate-to-admin=true
    Copy to Clipboard Toggle word wrap
  • 次のコマンドのいずれかを実行し、kubevirt.io:migrate クラスターロールを信頼できるユーザーまたはグループにバインドし、<namespace><first_user><second_user>、および <group_name> を独自の値に置き換えます。

    • namespace レベルでロールをバインドするには、次のコマンドを実行します。

      $ oc create -n <namespace> rolebinding kvmigrate --clusterrole=kubevirt.io:migrate --user=<first_user> --user=<second_user> --group=<group_name>
      Copy to Clipboard Toggle word wrap
    • クラスターレベルでロールをバインドするには、次のコマンドを実行します。

      $ oc create clusterrolebinding kvmigrate --clusterrole=kubevirt.io:migrate --user=<first_user> --user=<second_user> --group=<group_name>
      Copy to Clipboard Toggle word wrap

11.1.5. 仮想マシン移行のチューニング

ワークロードのタイプと移行シナリオに基づき、クラスター全体のライブマイグレーション設定を調整できます。これにより、同時に移行する仮想マシンの数、各移行に使用するネットワーク帯域幅、プロセスをキャンセルするまでに OpenShift Virtualization が移行を完了しようと試みる時間を制御できます。これらの設定は、HyperConverged カスタムリソース (CR) で行います。

ノードごとに複数の仮想マシンを同時に移行する場合は、bandwidthPerMigration 制限を設定して、大規模またはビジー状態の仮想マシンがノードのネットワーク帯域幅の大部分を使用しないようにします。デフォルトでは、bandwidthPerMigration の値は 0 で、無制限を意味します。

メモリーのダーティー率が高く、負荷の高いワークロード (データベース処理など) を実行する大規模な仮想マシンでは、移行を完了するためにより高い帯域幅が必要になります。

注記

ポストコピーモードを有効にすると、定義されたタイムアウト内に最初のプレコピーフェーズが完了しない場合にトリガーされます。ポストコピーの期間において、必要最小限のメモリーページの転送中に仮想マシン CPU はソースホスト上で一時停止します。その後、仮想マシン CPU が宛先ホスト上でアクティブになり、実行時に残りのメモリーページが宛先ノードに転送されます。これにより、転送中のパフォーマンスに影響が出る可能性があります。

ポストコピーモードは、重要なデータや不安定なネットワークで使用しないでください。

11.1.6. 一般的なライブマイグレーションタスク

次のライブマイグレーションタスクを実行できます。

11.1.7. 関連情報

11.2. ライブマイグレーションの設定

ライブマイグレーション設定を行い、移行プロセスがクラスターに負荷を与えないようにすることができます。

ライブマイグレーションポリシーを設定して、さまざまな移行設定を仮想マシンのグループに適用できます。

11.2.1. ライブマイグレーションの制限およびタイムアウトの設定

openshift-cnv namespace にある HyperConverged カスタムリソース (CR) を更新して、クラスターのライブマイグレーションの制限およびタイムアウトを設定します。

前提条件

  • OpenShift CLI (oc) がインストールされている。

手順

  • HyperConverged CR を編集し、必要なライブマイグレーションパラメーターを追加します。

    $ oc edit hyperconverged kubevirt-hyperconverged -n openshift-cnv
    Copy to Clipboard Toggle word wrap

    設定ファイルのサンプル

    apiVersion: hco.kubevirt.io/v1beta1
    kind: HyperConverged
    metadata:
      name: kubevirt-hyperconverged
      namespace: openshift-cnv
    spec:
      liveMigrationConfig:
        bandwidthPerMigration: 64Mi 
    1
    
        completionTimeoutPerGiB: 800 
    2
    
        parallelMigrationsPerCluster: 5 
    3
    
        parallelOutboundMigrationsPerNode: 2 
    4
    
        progressTimeout: 150 
    5
    
        allowPostCopy: false 
    6
    Copy to Clipboard Toggle word wrap

    1
    各マイグレーションの帯域幅制限。値は 1 秒あたりのバイト数です。たとえば、値 2048Mi は 2048 MiB/s を意味します。デフォルト: 0 (無制限)。
    2
    移行がこの時間内に終了しない場合 (単位はメモリーの GiB あたりの秒数)、移行は取り消されます。たとえば、6 GiB メモリーを搭載した仮想マシンは、4800 秒以内に移行が完了しないとタイムアウトになります。Migration MethodBlockMigration の場合、移行するディスクのサイズは計算に含められます。
    3
    クラスターで並行して実行される移行の数。デフォルトは 5 です。
    4
    ノードごとのアウトバウンド移行の最大数。デフォルトは 2 です。
    5
    メモリーのコピーの進捗がこの時間内 (秒単位) に見られない場合に、移行は取り消されます。デフォルトは 150 です。
    6
    仮想マシンが負荷の高いワークロードを実行しており、メモリーのダーティー率が高すぎる場合、あるノードから別のノードへの移行が収束しない可能性があります。これを防ぐには、ポストコピーモードを有効にします。デフォルトでは、allowPostCopyfalse に設定されています。
注記

キー/値のペアを削除し、ファイルを保存して、spec.liveMigrationConfig フィールドのデフォルト値を復元できます。たとえば、progressTimeout: <value> を削除してデフォルトの progressTimeout: 150 を復元します。

11.2.2. 負荷の高いワークロード向けのライブマイグレーション設定

メモリーのダーティー率が高く、負荷の高いワークロード (データベース処理など) を実行している仮想マシンを移行する場合、移行を完了するにはより高い帯域幅が必要です。

ダーティー率が高すぎる場合、あるノードから別のノードへの移行は収束しません。これを防ぐには、ポストコピーモードを有効にします。

ポストコピーモードは、定義されたタイムアウト内に最初のプレコピーフェーズが完了しない場合にトリガーされます。ポストコピーの期間において、必要最小限のメモリーページの転送中に仮想マシン CPU はソースホスト上で一時停止します。その後、仮想マシン CPU が宛先ホスト上でアクティブになり、実行時に残りのメモリーページが宛先ノードに転送されます。

openshift-cnv namespace にある HyperConverged カスタムリソース (CR) を更新して、負荷の高いワークロードのライブマイグレーションを設定します。

前提条件

  • OpenShift CLI (oc) がインストールされている。

手順

  1. HyperConverged CR を編集し、負荷の高いワークロードを移行するために必要なパラメーターを追加します。

    $ oc edit hyperconverged kubevirt-hyperconverged -n openshift-cnv
    Copy to Clipboard Toggle word wrap

    設定ファイルのサンプル

    apiVersion: hco.kubevirt.io/v1beta1
    kind: HyperConverged
    metadata:
      name: kubevirt-hyperconverged
      namespace: openshift-cnv
    spec:
      liveMigrationConfig:
        bandwidthPerMigration: 0Mi 
    1
    
        completionTimeoutPerGiB: 150 
    2
    
        parallelMigrationsPerCluster: 5 
    3
    
        parallelOutboundMigrationsPerNode: 1 
    4
    
        progressTimeout: 150 
    5
    
        allowPostCopy: true 
    6
    Copy to Clipboard Toggle word wrap

    1
    各マイグレーションの帯域幅制限。値は 1 秒あたりのバイト数です。デフォルトは 0 で、無制限です。
    2
    この時間内に完了しない移行はキャンセルされ、ポストコピーが有効な場合はポストコピーモードがトリガーされます。この値は、メモリー 1 GiB あたりの秒数で測定されます。移行プロセスの早い段階でポストコピーモードをトリガーするには、completionTimeoutPerGiB を減らします。また、移行プロセスの後半でポストコピーモードをトリガーするには、completionTimeoutPerGiB を増やします。
    3
    クラスターで並行して実行される移行の数。デフォルトは 5 です。負荷の高いワークロードを移行する場合は、parallelMigrationsPerCluster 設定を低くします。
    4
    ノードごとのアウトバウンド移行の最大数。負荷の高いワークロード用に、ノードごとに仮想マシンを 1 つ設定します。
    5
    この時間内 (秒単位) にメモリーコピーが進捗しない場合、移行は取り消されます。この値は秒単位で測定されます。大きなメモリーサイズで負荷の高いワークロードを実行する場合は、このパラメーターを増やします。
    6
    メモリーのダーティー率が高い場合は、移行が確実に収束するように、ポストコピーモードを使用します。ポストコピーモードを有効にするには、allowPostCopytrue に設定します。
  2. オプション: メインネットワークがビジー状態で移行できない場合は、移行専用のセカンダリーネットワークを設定します。
注記

ポストコピーモードは転送中のパフォーマンスに影響を与える可能性があるため、重要なデータや不安定なネットワークでは使用しないでください。

11.2.4. ライブマイグレーションポリシー

ライブマイグレーションポリシーを作成して、仮想マシンまたはプロジェクトラベルによって定義された仮想マシンのグループにさまざまな移行設定を適用できます。

ヒント

Red Hat OpenShift Service on AWS Web コンソールを使用してライブマイグレーションポリシーを作成できます。

11.2.4.1. CLI を使用したライブマイグレーションポリシーの作成

コマンドラインを使用してライブマイグレーションポリシーを作成できます。KubeVirt は、任意のラベルの組み合わせを使用して、選択した仮想マシン (VM) にライブマイグレーションポリシーを適用します。

  • sizeosgpu などの仮想マシンラベル
  • prioritybandwidth、または hpc-workload などのプロジェクトラベル

ポリシーを特定の仮想マシングループに適用するには、仮想マシングループのすべてのラベルがポリシーのラベルと一致する必要があります。

注記

複数のライブマイグレーションポリシーが仮想マシンに適用される場合は、一致するラベルの数が最も多いポリシーが優先されます。

複数のポリシーがこの基準を満たす場合、ポリシーは一致するラベルキーのアルファベット順に並べ替えられ、その順序の最初のポリシーが優先されます。

前提条件

  • OpenShift CLI (oc) がインストールされている。

手順

  1. ライブマイグレーションポリシーを適用する仮想マシンオブジェクトを編集し、対応する仮想マシンラベルを追加します。

    1. リソースの YAML 設定を開きます。

      $ oc edit vm <vm_name>
      Copy to Clipboard Toggle word wrap
    2. 設定の .spec.template.metadata.labels セクションで必要なラベル値を調整します。たとえば、移行ポリシーの目的で仮想マシンを production 仮想マシンとしてマークするには、kubevirt.io/environment: production 行を追加します。

      apiVersion: migrations.kubevirt.io/v1alpha1
      kind: VirtualMachine
      metadata:
        name: <vm_name>
        namespace: default
        labels:
          app: my-app
          environment: production
      spec:
        template:
          metadata:
            labels:
              kubevirt.io/domain: <vm_name>
              kubevirt.io/size: large
              kubevirt.io/environment: production
      # ...
      Copy to Clipboard Toggle word wrap
    3. 設定を保存して終了します。
  2. 対応するラベルを使用して MigrationPolicy オブジェクトを設定します。次の例では、production というラベルが付けられたすべての仮想マシンに適用されるポリシーを設定します。

    apiVersion: migrations.kubevirt.io/v1alpha1
    kind: MigrationPolicy
    metadata:
      name: <migration_policy>
    spec:
      selectors:
        namespaceSelector: 
    1
    
          hpc-workloads: "True"
          xyz-workloads-type: ""
        virtualMachineInstanceSelector: 
    2
    
          kubevirt.io/environment: "production"
    Copy to Clipboard Toggle word wrap
    1
    プロジェクトラベルを指定します。
    2
    仮想マシンラベルを指定します。
  3. 次のコマンドを実行して、移行ポリシーを作成します。

    $ oc create -f <migration_policy>.yaml
    Copy to Clipboard Toggle word wrap

11.3. ライブマイグレーションの開始とキャンセル

Red Hat OpenShift Service on AWS Web コンソール または コマンドライン を使用して、仮想マシン (VM) の別のノードへのライブマイグレーションを開始できます。

ライブマイグレーションは、Web コンソール または コマンドライン を使用してキャンセルできます。仮想マシンは元のノードに残ります。

ヒント

virtctl migrate <vm_name> コマンドおよび virtctl migrate-cancel <vm_name> コマンドを使用して、ライブマイグレーションを開始およびキャンセルすることもできます。

11.3.1. ライブマイグレーションの開始

11.3.1.1. Web コンソールを使用したライブマイグレーションの開始

Red Hat OpenShift Service on AWS Web コンソールを使用して、実行中の仮想マシン (VM) をクラスター内の別のノードにライブマイグレーションできます。

注記

Migrate アクションはすべてのユーザーに表示されますが、ライブマイグレーションを開始できるのはクラスター管理者のみです。

前提条件

  • kubevirt.io:migrate RBAC ロールを持っているか、クラスター管理者である。
  • 仮想マシンが移行可能である。
  • 仮想マシンがホストモデル CPU で設定されている場合、クラスターには CPU モデルをサポートする使用可能なノードがある。

手順

  1. Web コンソールで VirtualizationVirtualMachines に移動します。
  2. 仮想マシンの横にあるオプションメニュー kebab から 移行 を選択します。
  3. Migrate をクリックします。
11.3.1.2. CLI を使用したライブマイグレーションの開始

コマンドラインを使用して仮想マシンの VirtualMachineInstanceMigration オブジェクトを作成することで、実行中の仮想マシンのライブマイグレーションを開始できます。

前提条件

  • OpenShift CLI (oc) がインストールされている。
  • kubevirt.io:migrate RBAC ロールを持っているか、クラスター管理者である。

手順

  1. 移行する仮想マシンの VirtualMachineInstanceMigration マニフェストを作成します。

    apiVersion: kubevirt.io/v1
    kind: VirtualMachineInstanceMigration
    metadata:
      name: <migration_name>
    spec:
      vmiName: <vm_name>
    Copy to Clipboard Toggle word wrap
  2. 以下のコマンドを実行してオブジェクトを作成します。

    $ oc create -f <migration_name>.yaml
    Copy to Clipboard Toggle word wrap

    VirtualMachineInstanceMigration オブジェクトは、仮想マシンのライブマイグレーションをトリガーします。このオブジェクトは、手動で削除されない場合、仮想マシンインスタンスが実行中である限りクラスターに存在します。

検証

  • 次のコマンドを実行して、仮想マシンのステータスを取得します。

    $ oc describe vmi <vm_name> -n <namespace>
    Copy to Clipboard Toggle word wrap

    出力例

    # ...
    Status:
      Conditions:
        Last Probe Time:       <nil>
        Last Transition Time:  <nil>
        Status:                True
        Type:                  LiveMigratable
      Migration Method:  LiveMigration
      Migration State:
        Completed:                    true
        End Timestamp:                2018-12-24T06:19:42Z
        Migration UID:                d78c8962-0743-11e9-a540-fa163e0c69f1
        Source Node:                  node2.example.com
        Start Timestamp:              2018-12-24T06:19:35Z
        Target Node:                  node1.example.com
        Target Node Address:          10.9.0.18:43891
        Target Node Domain Detected:  true
    Copy to Clipboard Toggle word wrap

11.3.2. ライブマイグレーションのキャンセル

11.3.2.1. Web コンソールを使用したライブマイグレーションのキャンセル

Red Hat OpenShift Service on AWS Web コンソールを使用して、仮想マシン (VM) のライブマイグレーションをキャンセルできます。

前提条件

  • kubevirt.io:migrate RBAC ロールを持っているか、クラスター管理者である。

手順

  1. Web コンソールで VirtualizationVirtualMachines に移動します。
  2. 仮想マシンの横にあるオプションメニュー kebabCancel Migration を選択します。
11.3.2.2. CLI を使用したライブマイグレーションのキャンセル

移行に関連付けられた VirtualMachineInstanceMigration オブジェクトを削除して、仮想マシンのライブマイグレーションを取り消します。

前提条件

  • OpenShift CLI (oc) がインストールされている。
  • kubevirt.io:migrate RBAC ロールを持っているか、クラスター管理者である。

手順

  • ライブマイグレーションをトリガーした VirtualMachineInstanceMigration オブジェクトを削除します。この例では、migration-job が使用されています。

    $ oc delete vmim migration-job
    Copy to Clipboard Toggle word wrap

第12章 Nodes

12.1. ノードのメンテナンス

oc adm ユーティリティーまたは NodeMaintenance カスタムリソース (CR) を使用してノードをメンテナンスモードにすることができます。

注記

node-maintenance-operator (NMO) は OpenShift Virtualization に同梱されなくなりました。Red Hat OpenShift Service on AWS Web コンソールの OperatorHub から、または OpenShift CLI (oc) を使用して、スタンドアロン Operator としてデプロイされます。

ノードの修復、フェンシング、メンテナンスの詳細は、Red Hat OpenShift のワークロードの可用性 を参照してください。

重要

仮想マシンでは、共有 ReadWriteMany (RWX) アクセスモードを持つ永続ボリューム要求 (PVC) のライブマイグレーションが必要です。

Node Maintenance Operator は、新規または削除された NodeMaintenance CR をモニタリングします。新規の NodeMaintenance CR が検出されると、新規ワークロードはスケジュールされず、ノードは残りのクラスターから遮断されます。エビクトできるすべての Pod はノードからエビクトされます。NodeMaintenance CR が削除されると、CR で参照されるノードは新規ワークロードで利用可能になります。

注記

ノードメンテナンスタスクに NodeMaintenance CR を使用すると、標準の Red Hat OpenShift Service on AWS カスタムリソース処理を使用した oc adm cordon および oc adm drain コマンドと同じ結果が得られます。

12.1.1. エビクションストラテジー

ノードがメンテナンス状態になると、ノードにはスケジュール対象外のマークが付けられ、ノードからすべての仮想マシンおよび Pod がドレインされます。

仮想マシン (VM) またはクラスターのエビクションストラテジーを設定できます。

仮想マシンエビクションストラテジー

仮想マシンの LiveMigrate エビクションストラテジーは、ノードがメンテナンス状態になるか、ドレイン (解放) される場合に仮想マシンインスタンスが中断されないようにします。このエビクションストラテジーを持つ VMI は、別のノードにライブマイグレーションされます。

Red Hat OpenShift Service on AWS Web コンソールまたは コマンドライン を使用して、仮想マシン (VM) のエビクションストラテジーを設定できます。

重要

デフォルトのエビクションストラテジーは LiveMigrate です。移行不可能な仮想マシンが LiveMigrate エビクションストラテジーを使用していると、ノードのドレインが妨げられたり、インフラストラクチャーのアップグレードがブロックされたりする可能性があります。これは、その仮想マシンがノードからエビクトされないためです。この状況では、仮想マシンを手動でシャットダウンしない限り、移行は Pending または Scheduling 中の状態のままになります。

移行不可能な仮想マシンのエビクションストラテジーを、アップグレードをブロックしない LiveMigrateIfPossible に設定する必要があります。移行すべきでない仮想マシンの場合は、None に設定する必要があります。

クラスターエビクションストラテジー
ワークロードの継続性またはインフラストラクチャーのアップグレードを優先するために、クラスターのエビクションストラテジーを設定できます。
Expand
表12.1 クラスターエビクションストラテジー
エビクションストラテジー説明ワークフローを中断するアップグレードをブロックする

LiveMigrate 1

アップグレードよりもワークロードの継続性を優先します。

いいえ

はい 2

LiveMigrateIfPossible

ワークロードの継続性よりもアップグレードを優先して、環境が確実に更新されるようにします。

はい

いいえ

None 3

エビクションストラテジーを使用せずに仮想マシンをシャットダウンします。

はい

いいえ

  1. マルチノードクラスターのデフォルトのエビクションストラテジー。
  2. 仮想マシンがアップグレードをブロックする場合は、仮想マシンを手動でシャットダウンする必要があります。
  3. シングルノード OpenShift のデフォルトのエビクションストラテジー。
12.1.1.1. CLI を使用した仮想マシンのエビクションストラテジーの設定

コマンドラインを使用して、仮想マシン (VM) のエビクションストラテジーを設定できます。

重要

デフォルトのエビクションストラテジーは LiveMigrate です。移行不可能な仮想マシンが LiveMigrate エビクションストラテジーを使用していると、ノードのドレインが妨げられたり、インフラストラクチャーのアップグレードがブロックされたりする可能性があります。これは、その仮想マシンがノードからエビクトされないためです。この状況では、仮想マシンを手動でシャットダウンしない限り、移行は Pending または Scheduling 中の状態のままになります。

移行不可能な仮想マシンのエビクションストラテジーを、アップグレードをブロックしない LiveMigrateIfPossible に設定する必要があります。移行すべきでない仮想マシンの場合は、None に設定する必要があります。

前提条件

  • OpenShift CLI (oc) がインストールされている。

手順

  1. 次のコマンドを実行して、VirtualMachine リソースを編集します。

    $ oc edit vm <vm_name> -n <namespace>
    Copy to Clipboard Toggle word wrap

    エビクションストラテジーの例

    apiVersion: kubevirt.io/v1
    kind: VirtualMachine
    metadata:
      name: <vm_name>
    spec:
      template:
        spec:
          evictionStrategy: LiveMigrateIfPossible 
    1
    
    # ...
    Copy to Clipboard Toggle word wrap

    1
    エビクションストラテジーを指定します。デフォルト値は LiveMigrate です。
  2. 仮想マシンを再起動して変更を適用します。

    $ virtctl restart <vm_name> -n <namespace>
    Copy to Clipboard Toggle word wrap
12.1.1.2. CLI を使用したクラスターのエビクションストラテジーの設定

コマンドラインを使用して、クラスターのエビクションストラテジーを設定できます。

前提条件

  • OpenShift CLI (oc) がインストールされている。

手順

  1. 次のコマンドを実行して、hyperconverged リソースを編集します。

    $ oc edit hyperconverged kubevirt-hyperconverged -n openshift-cnv
    Copy to Clipboard Toggle word wrap
  2. 次の例に示すように、クラスターのエビクションストラテジーを設定します。

    クラスターのエビクションストラテジーの例

    apiVersion: hco.kubevirt.io/v1beta1
    kind: HyperConverged
    metadata:
      name: kubevirt-hyperconverged
    spec:
      evictionStrategy: LiveMigrate
    # ...
    Copy to Clipboard Toggle word wrap

12.1.2. 実行ストラテジー

spec.runStrategy キーは、特定の条件下での仮想マシンの動作を決定します。

12.1.2.1. 実行ストラテジー

spec.runStrategy キーには 4 つの値があります。

Always
仮想マシンインスタンス (VMI) は、仮想マシンが別のノードに作成されるときに常に存在します。元の VMI が何らかの理由で停止した場合、新しい VMI が作成されます。
RerunOnFailure
以前のインスタンスに障害が発生した場合、VMI は別のノードで再作成されます。仮想マシンがシャットダウンされた場合など、仮想マシンが正常に停止した場合、インスタンスは再作成されません。
Manual
VMI 状態は、virtctl クライアントコマンドの startstop、および restart を使用して手動で制御します。仮想マシンは自動的には再起動されません。
Halted
仮想マシンの作成時には VMI は存在しません。

virtctl startstop、および restart コマンドのさまざまな組み合わせが、実行ストラテジーに影響します。

次の表では、仮想マシンの状態間の遷移を説明します。最初の列には、仮想マシンの初期実行ストラテジーを示します。残りの列には、virtctl コマンドと、そのコマンドを実行した後の新しい実行ストラテジーを示します。

Expand
表12.2 virtctl コマンド前後の実行ストラテジー
初期実行ストラテジーStartStopRestart

Always

-

Halted

Always

RerunOnFailure

RerunOnFailure

RerunOnFailure

RerunOnFailure

Manual

Manual

Manual

Manual

Halted

Always

-

-

注記

インストーラーによってプロビジョニングされたインフラストラクチャーを使用してインストールされたクラスター内のノードがマシンの健全性チェックに失敗して使用できない場合は、runStrategy: Always または runStrategy: RerunOnFailure を持つ仮想マシンが新しいノードで再スケジュールされます。

12.1.2.2. CLI を使用した仮想マシン実行ストラテジーの設定

コマンドラインを使用して、仮想マシン (VM) の実行ストラテジーを設定できます。

前提条件

  • OpenShift CLI (oc) がインストールされている。

手順

  • 次のコマンドを実行して、VirtualMachine リソースを編集します。

    $ oc edit vm <vm_name> -n <namespace>
    Copy to Clipboard Toggle word wrap

    実行ストラテジーの例

    apiVersion: kubevirt.io/v1
    kind: VirtualMachine
    spec:
      runStrategy: Always
    # ...
    Copy to Clipboard Toggle word wrap

12.1.3. ベアメタルノードのメンテナンス

Red Hat OpenShift Service on AWS をベアメタルインフラストラクチャーにデプロイする場合は、クラウドインフラストラクチャーにデプロイする場合と比べて、考慮すべき追加の事項があります。クラスターノードが一時的とみなされるクラウド環境とは異なり、ベアメタルノードを再プロビジョニングするには、メンテナンスタスクにより多くの時間と作業が必要になります。

致命的なカーネルエラーが発生したり、NIC カードのハードウェア障害が発生する場合などにベアメタルノードに障害が発生した場合には、障害のあるノードが修復または置き換えられている間に、障害が発生したノード上のワークロードをクラスターの別の場所で再起動する必要があります。ノードのメンテナンスモードにより、クラスター管理者はノードの電源を正常に停止し、ワークロードをクラスターの他の部分に移動させ、ワークロードが中断されないようにします。詳細な進捗とノードのステータスの詳細は、メンテナンス時に提供されます。

12.2. 古い CPU モデルのノードラベルの管理

VM CPU モデルおよびポリシーがノードでサポートされている限り、ノードで仮想マシン (VM) をスケジュールできます。

12.2.1. 古い CPU モデルのノードラベリングについて

OpenShift Virtualization Operator は、古い CPU モデルの事前定義されたリストを使用して、ノードがスケジュールされた仮想マシンの有効な CPU モデルのみをサポートするようにします。

デフォルトでは、以下の CPU モデルはノード用に生成されたラベルのリストから削除されます。

例12.1 古い CPU モデル

"486"
Conroe
athlon
core2duo
coreduo
kvm32
kvm64
n270
pentium
pentium2
pentium3
pentiumpro
phenom
qemu32
qemu64
Copy to Clipboard Toggle word wrap

この事前定義された一覧は HyperConverged CR には表示されません。このリストから CPU モデルを 削除 できませんが、HyperConverged CR の spec.obsoleteCPUs.cpuModels フィールドを編集してリストに追加することはできます。

12.2.2. 古い CPU モデルの設定

HyperConverged カスタムリソース (CR) を編集して、古い CPU モデルのリストを設定できます。

手順

  • 古い CPU モデルを obsoleteCPUs 配列で指定して、HyperConverged カスタムリソースを編集します。以下に例を示します。

    apiVersion: hco.kubevirt.io/v1beta1
    kind: HyperConverged
    metadata:
      name: kubevirt-hyperconverged
      namespace: openshift-cnv
    spec:
      obsoleteCPUs:
        cpuModels: 
    1
    
          - "<obsolete_cpu_1>"
          - "<obsolete_cpu_2>"
    Copy to Clipboard Toggle word wrap
    1
    cpuModels 配列のサンプル値を、古くなった CPU モデルに置き換えます。指定した値はすべて、古くなった CPU モデルの事前定義リストに追加されます。事前定義されたリストは CR に表示されません。

12.3. ノードのリコンシリエーションの防止

skip-node アノテーションを使用して、node-labeller がノードを調整できないようにします。

12.3.1. skip-node アノテーションの使用

node-labeller でノードを省略するには、oc CLI を使用してそのノードにアノテーションを付けます。

前提条件

  • OpenShift CLI (oc) がインストールされている。

手順

  • 以下のコマンドを実行して、スキップするノードにアノテーションを付けます。

    $ oc annotate node <node_name> node-labeller.kubevirt.io/skip-node=true 
    1
    Copy to Clipboard Toggle word wrap
    1
    <node_name> は、スキップする関連ノードの名前に置き換えます。

    ノードのアノテーションが削除されるか、false に設定された後に、次のサイクルでリコンシリエーションが再開されます。

第13章 モニタリング

13.1. モニタリングの概要

次のツールを使用して、クラスターと仮想マシン (VM) の正常性を監視できます。

OpenShift Virtualization 仮想マシンの健全性ステータスのモニタリング
Red Hat OpenShift Service on AWS Web コンソールの HomeOverview ページに移動して、Web コンソールで OpenShift Virtualization 環境の全体的な健全性を確認します。Status カードには、アラートと条件に基づいて OpenShift Virtualization の全体的な健全性が表示されます。
仮想リソースの Prometheus クエリー
仮想 CPU、ネットワーク、ストレージ、およびゲストメモリースワッピングの使用状況とライブマイグレーションの進行状況をクエリーします。
VM カスタムメトリクス
内部 VM メトリクスとプロセスを公開するように、node-exporter サービスを設定します。
VM ヘルスチェック
レディネス、ライブネス、ゲストエージェントの ping プローブ、および VM のウォッチドッグを設定します。
runbook

13.2. 仮想リソースの Prometheus クエリー

Red Hat OpenShift Service on AWS モニタリングダッシュボードを使用して、仮想化メトリクスをクエリーします。OpenShift Virtualization は、ネットワーク、ストレージ、ゲストメモリースワッピングなどのクラスターインフラストラクチャーリソースの消費を監視するために使用できるメトリクスを提供します。メトリクスを使用して、ライブマイグレーションのステータスを照会することもできます。

13.2.1. 前提条件

  • ゲストメモリースワップクエリーがデータを返すには、仮想ゲストでメモリースワップを有効にする必要があります。

Red Hat OpenShift Service on AWS メトリクスクエリーブラウザーを使用して Prometheus Query Language (PromQL) でクエリーを実行し、グラフでメトリクスを可視化して検証できます。この機能により、クラスターの状態と、モニターしているユーザー定義のワークロードに関する情報が提供されます。

クラスター管理者またはすべてのプロジェクトの表示権限を持つユーザーは、メトリクス UI で Red Hat OpenShift Service on AWS とユーザー定義プロジェクトのメトリクスにアクセスできます。

メトリクス UI には、すべてのプロジェクトの CPU、メモリー、帯域幅、ネットワークパケットなどの定義済みクエリーが含まれています。カスタムの Prometheus Query Language (PromQL) クエリーを実行することもできます。

前提条件

  • cluster-admin クラスターロールまたはすべてのプロジェクトの表示権限を持つユーザーとしてクラスターにアクセスできる。
  • OpenShift CLI (oc) がインストールされている。

手順

  1. Red Hat OpenShift Service on AWS Web コンソールで、ObserveMetrics をクリックします。
  2. 1 つ以上のクエリーを追加するために、次のいずれかの操作を実行します。

    Expand
    オプション説明

    既存のクエリーを選択する

    Select query ドロップダウンリストから、既存のクエリーを選択します。

    カスタムクエリーを作成する

    Prometheus Query Language (PromQL) クエリーを Expression フィールドに追加します。

    PromQL 式を入力すると、オートコンプリートの提案がドロップダウンリストに表示されます。これらの提案には、関数、メトリクス、ラベル、および時間トークンが含まれます。キーボードの矢印を使用して、提案された項目の中から 1 つを選択し、Enter キーを押して、その項目を式に追加します。提案された項目の上にマウスポインターを移動すると、その項目の簡単な説明が表示されます。

    複数のクエリーを追加する

    Add query をクリックします。

    既存のクエリーを複製する

    クエリーの横にあるオプションメニュー kebab をクリックし、Duplicate query を選択します。

    クエリーの実行を無効する

    クエリーの横にあるオプションメニュー kebab をクリックし、Disable query を選択します。

  3. 作成したクエリーを実行するために、Run queries をクリックします。クエリーからのメトリクスはプロットで可視化されます。クエリーが無効な場合は、UI にエラーメッセージが表示されます。

    注記
    • 時系列グラフを描画する場合、大量のデータを操作するクエリーにより、タイムアウトが発生したり、ブラウザーに過負荷がかかったりする可能性があります。これを回避するには、Hide graph をクリックし、メトリクステーブルのみを使用してクエリーを調整してください。次に、使用できるクエリーを確認した後に、グラフを描画できるようにプロットを有効にします。
    • デフォルトでは、クエリーテーブルに、すべてのメトリクスとその現在の値をリスト表示する拡張ビューが表示されます。クエリーの拡張ビューを最小化するには、下矢印 (˅) をクリックします。
  4. オプション: このクエリーのセットを今後再度使用するには、ページの URL を保存します。
  5. 視覚化されたメトリクスを調べます。最初に、有効な全クエリーの全メトリクスがプロットに表示されます。次のいずれかの操作を実行して、表示するメトリクスを選択します。

    Expand
    オプション説明

    クエリーのすべてのメトリクスを非表示にする

    クエリーのオプションメニュー kebab をクリックし、Hide all series をクリックします。

    特定のメトリクスを非表示にする

    クエリーテーブルに移動し、メトリクス名の近くにある色付きの四角形をクリックします。

    プロットを拡大し、時間範囲を変更する

    次のいずれかの操作を実行します。

    • プロットを水平にクリックし、ドラッグして、時間範囲を視覚的に選択します。
    • メニューを使用して時間範囲を選択します。

    時間範囲をリセットする

    Reset zoom をクリックします。

    特定の時点におけるすべてのクエリーの出力を表示する

    プロット上の目的のポイントにマウスを移動します。クエリーの出力がポップアップボックスに表示されます。

    プロットを非表示にする

    Hide graph をクリックします。

Red Hat OpenShift Service on AWS メトリクスクエリーブラウザーを使用して Prometheus Query Language (PromQL) でクエリーを実行し、グラフでメトリクスを可視化して検証できます。この機能により、モニタリングしているユーザー定義ワークロードに関する情報が提供されます。

開発者として、メトリクスのクエリー時にプロジェクト名を指定する必要があります。選択したプロジェクトのメトリクスを表示するには、必要な権限が必要です。

メトリクス UI には、CPU、メモリー、帯域幅、ネットワークパケットなどの定義済みクエリーが含まれています。これらのクエリーは、選択したプロジェクトに制限されています。プロジェクト用のカスタムの Prometheus クエリー言語 (PromQL) クエリーを実行することもできます。

前提条件

  • 開発者として、またはメトリクスで表示しているプロジェクトの表示権限を持つユーザーとしてクラスターへのアクセスがある。
  • ユーザー定義プロジェクトのモニタリングが有効化されている。
  • ユーザー定義プロジェクトにサービスをデプロイしている。
  • サービスのモニター方法を定義するために、サービスの ServiceMonitor カスタムリソース定義 (CRD) を作成している。

手順

  1. Red Hat OpenShift Service on AWS Web コンソールで、ObserveMetrics をクリックします。
  2. 1 つ以上のクエリーを追加するために、次のいずれかの操作を実行します。

    Expand
    オプション説明

    既存のクエリーを選択する

    Select query ドロップダウンリストから、既存のクエリーを選択します。

    カスタムクエリーを作成する

    Prometheus Query Language (PromQL) クエリーを Expression フィールドに追加します。

    PromQL 式を入力すると、オートコンプリートの提案がドロップダウンリストに表示されます。これらの提案には、関数、メトリクス、ラベル、および時間トークンが含まれます。キーボードの矢印を使用して、提案された項目の中から 1 つを選択し、Enter キーを押して、その項目を式に追加します。提案された項目の上にマウスポインターを移動すると、その項目の簡単な説明が表示されます。

    複数のクエリーを追加する

    Add query をクリックします。

    既存のクエリーを複製する

    クエリーの横にあるオプションメニュー kebab をクリックし、Duplicate query を選択します。

    クエリーの実行を無効する

    クエリーの横にあるオプションメニュー kebab をクリックし、Disable query を選択します。

  3. 作成したクエリーを実行するために、Run queries をクリックします。クエリーからのメトリクスはプロットで可視化されます。クエリーが無効な場合は、UI にエラーメッセージが表示されます。

    注記
    • 時系列グラフを描画する場合、大量のデータを操作するクエリーにより、タイムアウトが発生したり、ブラウザーに過負荷がかかったりする可能性があります。これを回避するには、Hide graph をクリックし、メトリクステーブルのみを使用してクエリーを調整してください。次に、使用できるクエリーを確認した後に、グラフを描画できるようにプロットを有効にします。
    • デフォルトでは、クエリーテーブルに、すべてのメトリクスとその現在の値をリスト表示する拡張ビューが表示されます。クエリーの拡張ビューを最小化するには、下矢印 (˅) をクリックします。
  4. オプション: このクエリーのセットを今後再度使用するには、ページの URL を保存します。
  5. 視覚化されたメトリクスを調べます。最初に、有効な全クエリーの全メトリクスがプロットに表示されます。次のいずれかの操作を実行して、表示するメトリクスを選択します。

    Expand
    オプション説明

    クエリーのすべてのメトリクスを非表示にする

    クエリーのオプションメニュー kebab をクリックし、Hide all series をクリックします。

    特定のメトリクスを非表示にする

    クエリーテーブルに移動し、メトリクス名の近くにある色付きの四角形をクリックします。

    プロットを拡大し、時間範囲を変更する

    次のいずれかの操作を実行します。

    • プロットを水平にクリックし、ドラッグして、時間範囲を視覚的に選択します。
    • メニューを使用して時間範囲を選択します。

    時間範囲をリセットする

    Reset zoom をクリックします。

    特定の時点におけるすべてのクエリーの出力を表示する

    プロット上の目的のポイントにマウスを移動します。クエリーの出力がポップアップボックスに表示されます。

    プロットを非表示にする

    Hide graph をクリックします。

13.2.4. 仮想化メトリクス

以下のメトリクスの記述には、Prometheus Query Language (PromQL) クエリーのサンプルが含まれます。これらのメトリクスは API ではなく、バージョン間で変更される可能性があります。仮想化メトリクスの完全なリストは、KubeVirt components metrics を参照してください。

注記

以下の例では、期間を指定する topk クエリーを使用します。その期間中に仮想マシンが削除された場合でも、クエリーの出力に依然として表示されます。

13.2.4.1. 仮想 CPU メトリクス

以下のクエリーは、入出力 I/O) を待機している仮想マシンを特定します。

kubevirt_vmi_vcpu_wait_seconds_total
仮想マシンの仮想 CPU の I/O の待機時間 (秒単位) を返します。タイプ: カウンター。

'0' より大きい値は、仮想 CPU は実行する用意ができているが、ホストスケジューラーがこれをまだ実行できないことを意味します。実行できない場合には I/O に問題があることを示しています。

注記

仮想 CPU メトリクスをクエリーするには、最初に schedstats=enable カーネル引数を MachineConfig オブジェクトに適用する必要があります。このカーネル引数を使用すると、デバッグとパフォーマンスチューニングに使用されるスケジューラーの統計が有効になり、スケジューラーに小規模な負荷を追加できます。

仮想 CPU 待機時間クエリーの例

topk(3, sum by (name, namespace) (rate(kubevirt_vmi_vcpu_wait_seconds_total[6m]))) > 0 
1
Copy to Clipboard Toggle word wrap

1
このクエリーは、6 分間の任意の全タイミングで I/O を待機する上位 3 の仮想マシンを返します。
13.2.4.2. ネットワークメトリクス

以下のクエリーは、ネットワークを飽和状態にしている仮想マシンを特定できます。

kubevirt_vmi_network_receive_bytes_total
仮想マシンのネットワークで受信したトラフィックの合計量 (バイト単位) を返します。タイプ: カウンター。
kubevirt_vmi_network_transmit_bytes_total
仮想マシンのネットワーク上で送信されるトラフィックの合計量 (バイト単位) を返します。タイプ: カウンター。

ネットワークトラフィッククエリーの例

topk(3, sum by (name, namespace) (rate(kubevirt_vmi_network_receive_bytes_total[6m])) + sum by (name, namespace) (rate(kubevirt_vmi_network_transmit_bytes_total[6m]))) > 0 
1
Copy to Clipboard Toggle word wrap

1
このクエリーは、6 分間の任意のタイミングで最大のネットワークトラフィックを送信する上位 3 の仮想マシンを返します。
13.2.4.3. ストレージメトリクス
13.2.4.3.1. ストレージ関連のトラフィック

以下のクエリーは、大量のデータを書き込んでいる仮想マシンを特定できます。

kubevirt_vmi_storage_read_traffic_bytes_total
仮想マシンのストレージ関連トラフィックの合計量 (バイト単位) を返します。タイプ: カウンター。
kubevirt_vmi_storage_write_traffic_bytes_total
仮想マシンのストレージ関連トラフィックのストレージ書き込みの合計量 (バイト単位) を返します。タイプ: カウンター。

ストレージ関連のトラフィッククエリーの例

topk(3, sum by (name, namespace) (rate(kubevirt_vmi_storage_read_traffic_bytes_total[6m])) + sum by (name, namespace) (rate(kubevirt_vmi_storage_write_traffic_bytes_total[6m]))) > 0 
1
Copy to Clipboard Toggle word wrap

1
上記のクエリーは、6 分間の任意のタイミングで最も大きなストレージトラフィックを送信する上位 3 の仮想マシンを返します。
13.2.4.3.2. ストレージスナップショットデータ
kubevirt_vmsnapshot_disks_restored_from_source
ソース仮想マシンから復元された仮想マシンディスクの総数を返します。タイプ: ゲージ。
kubevirt_vmsnapshot_disks_restored_from_source_bytes
ソース仮想マシンから復元された容量をバイト単位で返します。タイプ: ゲージ。

ストレージスナップショットデータクエリーの例

kubevirt_vmsnapshot_disks_restored_from_source{vm_name="simple-vm", vm_namespace="default"} 
1
Copy to Clipboard Toggle word wrap

1
このクエリーは、ソース仮想マシンから復元された仮想マシンディスクの総数を返します。
kubevirt_vmsnapshot_disks_restored_from_source_bytes{vm_name="simple-vm", vm_namespace="default"} 
1
Copy to Clipboard Toggle word wrap
1
このクエリーは、ソース仮想マシンから復元された容量をバイト単位で返します。
13.2.4.3.3. I/O パフォーマンス

以下のクエリーで、ストレージデバイスの I/O パフォーマンスを判別できます。

kubevirt_vmi_storage_iops_read_total
仮想マシンが実行している 1 秒あたりの書き込み I/O 操作の量を返します。タイプ: カウンター。
kubevirt_vmi_storage_iops_write_total
仮想マシンが実行している 1 秒あたりの読み取り I/O 操作の量を返します。タイプ: カウンター。

I/O パフォーマンスクエリーの例

topk(3, sum by (name, namespace) (rate(kubevirt_vmi_storage_iops_read_total[6m])) + sum by (name, namespace) (rate(kubevirt_vmi_storage_iops_write_total[6m]))) > 0 
1
Copy to Clipboard Toggle word wrap

1
上記のクエリーは、6 分間の任意のタイミングで最も大きな I/O 操作を実行している上位 3 の仮想マシンを返します。
13.2.4.4. ゲストメモリーのスワップメトリクス

以下のクエリーにより、メモリースワップを最も多く実行しているスワップ対応ゲストを特定できます。

kubevirt_vmi_memory_swap_in_traffic_bytes
仮想ゲストがスワップされているメモリーの合計量 (バイト単位) を返します。タイプ: ゲージ。
kubevirt_vmi_memory_swap_out_traffic_bytes
仮想ゲストがスワップアウトされているメモリーの合計量 (バイト単位) を返します。タイプ: ゲージ。

メモリースワップクエリーの例

topk(3, sum by (name, namespace) (rate(kubevirt_vmi_memory_swap_in_traffic_bytes[6m])) + sum by (name, namespace) (rate(kubevirt_vmi_memory_swap_out_traffic_bytes[6m]))) > 0 
1
Copy to Clipboard Toggle word wrap

1
上記のクエリーは、6 分間の任意のタイミングでゲストが最も大きなメモリースワップを実行している上位 3 の仮想マシンを返します。
注記

メモリースワップは、仮想マシンがメモリー不足の状態にあることを示します。仮想マシンのメモリー割り当てを増やすと、この問題を軽減できます。

13.2.4.5. ライブマイグレーションのメトリクス

次のメトリクスをクエリーして、ライブマイグレーションのステータスを表示できます。

kubevirt_vmi_migration_data_processed_bytes
新しい仮想マシン (VM) に移行されたゲストオペレーティングシステムデータの量。タイプ: ゲージ。
kubevirt_vmi_migration_data_remaining_bytes
移行されていないゲストオペレーティングシステムデータの量。タイプ: ゲージ。
kubevirt_vmi_migration_memory_transfer_rate_bytes
ゲストオペレーティングシステムでメモリーがダーティーになる速度。ダーティメモリーとは、変更されたがまだディスクに書き込まれていないデータです。タイプ: ゲージ。
kubevirt_vmi_migrations_in_pending_phase
保留中の移行の数。タイプ: ゲージ。
kubevirt_vmi_migrations_in_scheduling_phase
スケジュール移行の数。タイプ: ゲージ。
kubevirt_vmi_migrations_in_running_phase
実行中の移行の数。タイプ: ゲージ。
kubevirt_vmi_migration_succeeded
正常に完了した移行の数。タイプ: ゲージ。
kubevirt_vmi_migration_failed
失敗した移行の数。タイプ: ゲージ。

13.3. 仮想マシンのカスタムメトリクスの公開

Red Hat OpenShift Service on AWS には、コアプラットフォームコンポーネントのモニタリングを提供する事前に設定され、事前にインストールされた自己更新型のモニタリングスタックが組み込まれています。このモニタリングスタックは、Prometheus モニタリングシステムをベースにしています。Prometheus は Time Series を使用するデータベースであり、メトリクスのルール評価エンジンです。

Red Hat OpenShift Service on AWS 監視スタックの使用に加えて、CLI を使用してユーザー定義プロジェクトの監視を有効にし、node-exporter サービスで仮想マシンに公開されるカスタムメトリクスをクエリーできます。

13.3.1. ノードエクスポーターサービスの設定

node-exporter エージェントは、メトリクスを収集するクラスター内のすべての仮想マシンにデプロイされます。node-exporter エージェントをサービスとして設定し、仮想マシンに関連付けられた内部メトリクスおよびプロセスを公開します。

前提条件

  • OpenShift CLI (oc) がインストールされている。
  • cluster-admin 権限を持つユーザーとしてクラスターにログインしている。
  • cluster-monitoring-config ConfigMap オブジェクトを openshift-monitoring プロジェクトに作成する。
  • enableUserWorkloadtrue に設定して、user-workload-monitoring-config ConfigMap オブジェクトを openshift-user-workload-monitoring プロジェクトに設定する。

手順

  1. Service YAML ファイルを作成します。以下の例では、このファイルは node-exporter-service.yaml という名前です。

    kind: Service
    apiVersion: v1
    metadata:
      name: node-exporter-service 
    1
    
      namespace: dynamation 
    2
    
      labels:
        servicetype: metrics 
    3
    
    spec:
      ports:
        - name: exmet 
    4
    
          protocol: TCP
          port: 9100 
    5
    
          targetPort: 9100 
    6
    
      type: ClusterIP
      selector:
        monitor: metrics 
    7
    Copy to Clipboard Toggle word wrap
    1
    仮想マシンからメトリクスを公開する node-exporter サービス。
    2
    サービスが作成される namespace。
    3
    サービスのラベル。ServiceMonitor はこのラベルを使用してこのサービスを照会します。
    4
    ClusterIP サービスのポート 9100 でメトリクスを公開するポートに指定された名前。
    5
    リクエストをリッスンするために node-exporter-service によって使用されるターゲットポート。
    6
    monitor ラベルが設定された仮想マシンの TCP ポート番号。
    7
    仮想マシンの Pod を照会するために使用されるラベル。この例では、ラベル monitor のある仮想マシンの Pod と、metrics の値がマッチします。
  2. node-exporter サービスを作成します。

    $ oc create -f node-exporter-service.yaml
    Copy to Clipboard Toggle word wrap

13.3.2. ノードエクスポーターサービスが設定された仮想マシンの設定

node-exporter ファイルを仮想マシンにダウンロードします。次に、仮想マシンの起動時に node-exporter サービスを実行する systemd サービスを作成します。

前提条件

  • コンポーネントの Pod は openshift-user-workload-monitoring プロジェクトで実行されます。
  • このユーザー定義プロジェクトをモニターする必要のあるユーザーに monitoring-edit ロールを付与します。

手順

  1. 仮想マシンにログインします。
  2. node-exporter ファイルのバージョンに適用されるディレクトリーパスを使用して、node-exporter ファイルを仮想マシンにダウンロードします。

    $ wget https://github.com/prometheus/node_exporter/releases/download/<version>/node_exporter-<version>.linux-<architecture>.tar.gz
    Copy to Clipboard Toggle word wrap
  3. 実行ファイルを展開して、/usr/bin ディレクトリーに配置します。

    $ sudo tar xvf node_exporter-<version>.linux-<architecture>.tar.gz \
        --directory /usr/bin --strip 1 "*/node_exporter"
    Copy to Clipboard Toggle word wrap
  4. ディレクトリーのパス /etc/systemd/systemnode_exporter.service ファイルを作成します。この systemd サービスファイルは、仮想マシンの再起動時に node-exporter サービスを実行します。

    [Unit]
    Description=Prometheus Metrics Exporter
    After=network.target
    StartLimitIntervalSec=0
    
    [Service]
    Type=simple
    Restart=always
    RestartSec=1
    User=root
    ExecStart=/usr/bin/node_exporter
    
    [Install]
    WantedBy=multi-user.target
    Copy to Clipboard Toggle word wrap
  5. systemd サービスを有効にし、起動します。

    $ sudo systemctl enable node_exporter.service
    $ sudo systemctl start node_exporter.service
    Copy to Clipboard Toggle word wrap

検証

  • node-exporter エージェントが仮想マシンからのメトリクスを報告していることを確認します。

    $ curl http://localhost:9100/metrics
    Copy to Clipboard Toggle word wrap

    出力例

    go_gc_duration_seconds{quantile="0"} 1.5244e-05
    go_gc_duration_seconds{quantile="0.25"} 3.0449e-05
    go_gc_duration_seconds{quantile="0.5"} 3.7913e-05
    Copy to Clipboard Toggle word wrap

13.3.3. 仮想マシンのカスタムモニタリングラベルの作成

単一サービスから複数の仮想マシンに対するクエリーを有効にするには、仮想マシンの YAML ファイルにカスタムラベルを追加します。

前提条件

  • OpenShift CLI (oc) がインストールされている。
  • cluster-admin 権限を持つユーザーとしてログインしている。
  • 仮想マシンを停止および再起動するための Web コンソールへのアクセス権限がある。

手順

  1. 仮想マシン設定ファイルの template spec を編集します。この例では、ラベル monitor の値が metrics になります。

    spec:
      template:
        metadata:
          labels:
            monitor: metrics
    Copy to Clipboard Toggle word wrap
  2. 仮想マシンを停止して再起動し、monitor ラベルに指定されたラベル名を持つ新しい Pod を作成します。
13.3.3.1. メトリクスを取得するための node-exporter サービスのクエリー

仮想マシンのメトリクスは、/metrics の正規名の下に HTTP サービスエンドポイント経由で公開されます。メトリクスのクエリー時に、Prometheus は仮想マシンによって公開されるメトリクスエンドポイントからメトリクスを直接収集し、これらのメトリクスを確認用に表示します。

前提条件

  • cluster-admin 権限を持つユーザーまたは monitoring-edit ロールを持つユーザーとしてクラスターにアクセスできる。
  • node-exporter サービスを設定して、ユーザー定義プロジェクトのモニタリングを有効にしている。
  • OpenShift CLI (oc) がインストールされている。

手順

  1. サービスの namespace を指定して、HTTP サービスエンドポイントを取得します。

    $ oc get service -n <namespace> <node-exporter-service>
    Copy to Clipboard Toggle word wrap
  2. node-exporter サービスの利用可能なすべてのメトリクスを一覧表示するには、metrics リソースをクエリーします。

    $ curl http://<172.30.226.162:9100>/metrics | grep -vE "^#|^$"
    Copy to Clipboard Toggle word wrap

    出力例

    node_arp_entries{device="eth0"} 1
    node_boot_time_seconds 1.643153218e+09
    node_context_switches_total 4.4938158e+07
    node_cooling_device_cur_state{name="0",type="Processor"} 0
    node_cooling_device_max_state{name="0",type="Processor"} 0
    node_cpu_guest_seconds_total{cpu="0",mode="nice"} 0
    node_cpu_guest_seconds_total{cpu="0",mode="user"} 0
    node_cpu_seconds_total{cpu="0",mode="idle"} 1.10586485e+06
    node_cpu_seconds_total{cpu="0",mode="iowait"} 37.61
    node_cpu_seconds_total{cpu="0",mode="irq"} 233.91
    node_cpu_seconds_total{cpu="0",mode="nice"} 551.47
    node_cpu_seconds_total{cpu="0",mode="softirq"} 87.3
    node_cpu_seconds_total{cpu="0",mode="steal"} 86.12
    node_cpu_seconds_total{cpu="0",mode="system"} 464.15
    node_cpu_seconds_total{cpu="0",mode="user"} 1075.2
    node_disk_discard_time_seconds_total{device="vda"} 0
    node_disk_discard_time_seconds_total{device="vdb"} 0
    node_disk_discarded_sectors_total{device="vda"} 0
    node_disk_discarded_sectors_total{device="vdb"} 0
    node_disk_discards_completed_total{device="vda"} 0
    node_disk_discards_completed_total{device="vdb"} 0
    node_disk_discards_merged_total{device="vda"} 0
    node_disk_discards_merged_total{device="vdb"} 0
    node_disk_info{device="vda",major="252",minor="0"} 1
    node_disk_info{device="vdb",major="252",minor="16"} 1
    node_disk_io_now{device="vda"} 0
    node_disk_io_now{device="vdb"} 0
    node_disk_io_time_seconds_total{device="vda"} 174
    node_disk_io_time_seconds_total{device="vdb"} 0.054
    node_disk_io_time_weighted_seconds_total{device="vda"} 259.79200000000003
    node_disk_io_time_weighted_seconds_total{device="vdb"} 0.039
    node_disk_read_bytes_total{device="vda"} 3.71867136e+08
    node_disk_read_bytes_total{device="vdb"} 366592
    node_disk_read_time_seconds_total{device="vda"} 19.128
    node_disk_read_time_seconds_total{device="vdb"} 0.039
    node_disk_reads_completed_total{device="vda"} 5619
    node_disk_reads_completed_total{device="vdb"} 96
    node_disk_reads_merged_total{device="vda"} 5
    node_disk_reads_merged_total{device="vdb"} 0
    node_disk_write_time_seconds_total{device="vda"} 240.66400000000002
    node_disk_write_time_seconds_total{device="vdb"} 0
    node_disk_writes_completed_total{device="vda"} 71584
    node_disk_writes_completed_total{device="vdb"} 0
    node_disk_writes_merged_total{device="vda"} 19761
    node_disk_writes_merged_total{device="vdb"} 0
    node_disk_written_bytes_total{device="vda"} 2.007924224e+09
    node_disk_written_bytes_total{device="vdb"} 0
    Copy to Clipboard Toggle word wrap

13.3.4. ノードエクスポーターサービスの ServiceMonitor リソースの作成

Prometheus クライアントライブラリーを使用し、/metrics エンドポイントからメトリクスを収集して、node-exporter サービスが公開するメトリクスにアクセスし、表示できます。ServiceMonitor カスタムリソース定義 (CRD) を使用して、ノードエクスポーターサービスをモニターします。

前提条件

  • cluster-admin 権限を持つユーザーまたは monitoring-edit ロールを持つユーザーとしてクラスターにアクセスできる。
  • node-exporter サービスを設定して、ユーザー定義プロジェクトのモニタリングを有効にしている。
  • OpenShift CLI (oc) がインストールされている。

手順

  1. ServiceMonitor リソース設定の YAML ファイルを作成します。この例では、サービスモニターはラベル metrics が指定されたサービスとマッチし、30 秒ごとに exmet ポートをクエリーします。

    apiVersion: monitoring.coreos.com/v1
    kind: ServiceMonitor
    metadata:
      labels:
        k8s-app: node-exporter-metrics-monitor
      name: node-exporter-metrics-monitor 
    1
    
      namespace: dynamation 
    2
    
    spec:
      endpoints:
      - interval: 30s 
    3
    
        port: exmet 
    4
    
        scheme: http
      selector:
        matchLabels:
          servicetype: metrics
    Copy to Clipboard Toggle word wrap
    1
    ServiceMonitor の名前。
    2
    ServiceMonitor が作成される namespace。
    3
    ポートをクエリーする間隔。
    4
    30 秒ごとにクエリーされるポートの名前
  2. node-exporter サービスの ServiceMonitor 設定を作成します。

    $ oc create -f node-exporter-metrics-monitor.yaml
    Copy to Clipboard Toggle word wrap
13.3.4.1. クラスター外のノードエクスポーターサービスへのアクセス

クラスター外の node-exporter サービスにアクセスし、公開されるメトリクスを表示できます。

前提条件

  • cluster-admin 権限を持つユーザーまたは monitoring-edit ロールを持つユーザーとしてクラスターにアクセスできる。
  • node-exporter サービスを設定して、ユーザー定義プロジェクトのモニタリングを有効にしている。
  • OpenShift CLI (oc) がインストールされている。

手順

  1. node-exporter サービスを公開します。

    $ oc expose service -n <namespace> <node_exporter_service_name>
    Copy to Clipboard Toggle word wrap
  2. ルートの FQDN(完全修飾ドメイン名) を取得します。

    $ oc get route -o=custom-columns=NAME:.metadata.name,DNS:.spec.host
    Copy to Clipboard Toggle word wrap

    出力例

    NAME                    DNS
    node-exporter-service   node-exporter-service-dynamation.apps.cluster.example.org
    Copy to Clipboard Toggle word wrap

  3. curl コマンドを使用して、node-exporter サービスのメトリクスを表示します。

    $ curl -s http://node-exporter-service-dynamation.apps.cluster.example.org/metrics
    Copy to Clipboard Toggle word wrap

    出力例

    go_gc_duration_seconds{quantile="0"} 1.5382e-05
    go_gc_duration_seconds{quantile="0.25"} 3.1163e-05
    go_gc_duration_seconds{quantile="0.5"} 3.8546e-05
    go_gc_duration_seconds{quantile="0.75"} 4.9139e-05
    go_gc_duration_seconds{quantile="1"} 0.000189423
    Copy to Clipboard Toggle word wrap

13.4. 仮想マシンのヘルスチェック

VirtualMachine リソースで readiness プローブと liveness プローブを定義することにより、仮想マシン (VM) のヘルスチェックを設定できます。

13.4.1. readiness および liveness プローブについて

readiness プローブと liveness プローブを使用して、異常な仮想マシン (VM) を検出および処理します。VM の仕様に 1 つ以上のプローブを含めて、準備ができていない VM にトラフィックが到達しないようにし、VM が応答しなくなったときに新しい VM が作成されるようにすることができます。

readiness プローブ は、VM がサービス要求を受け入れることができるかどうかを判断します。プローブが失敗すると、VM は、準備状態になるまで、利用可能なエンドポイントのリストから削除されます。

liveness プローブ は、VM が応答しているかどうかを判断します。プローブが失敗すると、VM は削除され、応答性を復元するために、新しい VM が作成されます。

VirtualMachine オブジェクトの spec.readinessProbe フィールドと spec.livenessProbe フィールドを設定することで、readiness プローブと liveness プローブを設定できます。これらのフィールドは、以下のテストをサポートします。

HTTP GET
プローブは、Web フックを使用して VM の正常性を判断します。このテストは、HTTP の応答コードが 200 から 399 までの値の場合に正常と見なされます。完全に初期化されている場合に、HTTP ステータスコードを返すアプリケーションで HTTP GET テストを使用できます。
TCP ソケット
プローブは、VM へのソケットを開こうとします。プローブが接続を確立できる場合のみ、VM は正常であると見なされます。TCP ソケットテストは、初期化が完了するまでリスニングを開始しないアプリケーションで使用できます。
ゲストエージェントの ping
プローブは、guest-ping コマンドを使用して、QEMU ゲストエージェントが仮想マシンで実行されているかどうかを判断します。
13.4.1.1. HTTP readiness プローブの定義

仮想マシン (VM) 設定の spec.readinessProbe.httpGet フィールドを設定して、HTTP readiness プローブを定義します。

前提条件

  • OpenShift CLI (oc) がインストールされている。

手順

  1. VM 設定ファイルに readiness プローブの詳細を含めます。

    HTTP GET テストを使用した readiness プローブの例

    apiVersion: kubevirt.io/v1
    kind: VirtualMachine
    metadata:
      annotations:
      name: fedora-vm
      namespace: example-namespace
    # ...
    spec:
      template:
        spec:
          readinessProbe:
            httpGet: 
    1
    
              port: 1500 
    2
    
              path: /healthz 
    3
    
              httpHeaders:
              - name: Custom-Header
                value: Awesome
            initialDelaySeconds: 120 
    4
    
            periodSeconds: 20 
    5
    
            timeoutSeconds: 10 
    6
    
            failureThreshold: 3 
    7
    
            successThreshold: 3 
    8
    
    # ...
    Copy to Clipboard Toggle word wrap

    1
    VM に接続するために実行する HTTP GET 要求。
    2
    プローブがクエリーする VM のポート。上記の例では、プローブはポート 1500 をクエリーします。
    3
    HTTP サーバーでアクセスするパス。上記の例では、サーバーの /healthz パスのハンドラーが成功コードを返した場合、VM は正常であると見なされます。ハンドラーが失敗コードを返した場合、VM は使用可能なエンドポイントのリストから削除されます。
    4
    VM が起動してから準備プローブが開始されるまでの時間 (秒単位)。
    5
    プローブの実行間の遅延 (秒単位)。デフォルトの遅延は 10 秒です。この値は timeoutSeconds よりも大きくなければなりません。
    6
    プローブがタイムアウトになり、VM が失敗したと見なされるまでの非アクティブな秒数。デフォルト値は 1 です。この値は periodSeconds 未満である必要があります。
    7
    プローブが失敗できる回数。デフォルトは 3 です。指定された試行回数になると、Pod には Unready というマークが付けられます。
    8
    成功とみなされるまでにプローブが失敗後に成功を報告する必要のある回数。デフォルトでは 1 回です。
  2. 次のコマンドを実行して VM を作成します。

    $ oc create -f <file_name>.yaml
    Copy to Clipboard Toggle word wrap
13.4.1.2. TCP readiness プローブの定義

仮想マシン (VM) 設定の spec.readinessProbe.tcpSocket フィールドを設定して、TCP readiness プローブを定義します。

前提条件

  • OpenShift CLI (oc) がインストールされている。

手順

  1. TCP readiness プローブの詳細を VM 設定ファイルに追加します。

    TCP ソケットテストを含む readiness プローブの例

    apiVersion: kubevirt.io/v1
    kind: VirtualMachine
    metadata:
      annotations:
      name: fedora-vm
      namespace: example-namespace
    # ...
    spec:
      template:
        spec:
          readinessProbe:
            initialDelaySeconds: 120 
    1
    
            periodSeconds: 20 
    2
    
            tcpSocket: 
    3
    
              port: 1500 
    4
    
            timeoutSeconds: 10 
    5
    
    # ...
    Copy to Clipboard Toggle word wrap

    1
    VM が起動してから準備プローブが開始されるまでの時間 (秒単位)。
    2
    プローブの実行間の遅延 (秒単位)。デフォルトの遅延は 10 秒です。この値は timeoutSeconds よりも大きくなければなりません。
    3
    実行する TCP アクション。
    4
    プローブがクエリーする VM のポート。
    5
    プローブがタイムアウトになり、VM が失敗したと見なされるまでの非アクティブな秒数。デフォルト値は 1 です。この値は periodSeconds 未満である必要があります。
  2. 次のコマンドを実行して VM を作成します。

    $ oc create -f <file_name>.yaml
    Copy to Clipboard Toggle word wrap
13.4.1.3. HTTP liveness プローブの定義

仮想マシン (VM) 設定の spec.livenessProbe.httpGet フィールドを設定して、HTTP liveness プローブを定義します。readiness プローブと同様に、liveness プローブの HTTP および TCP テストの両方を定義できます。この手順では、HTTP GET テストを使用して liveness プローブのサンプルを設定します。

前提条件

  • OpenShift CLI (oc) がインストールされている。

手順

  1. VM 設定ファイルに HTTP liveness プローブの詳細を含めます。

    HTTP GET テストを使用した liveness プローブの例

    apiVersion: kubevirt.io/v1
    kind: VirtualMachine
    metadata:
      annotations:
      name: fedora-vm
      namespace: example-namespace
    # ...
    spec:
      template:
        spec:
          livenessProbe:
            initialDelaySeconds: 120 
    1
    
            periodSeconds: 20 
    2
    
            httpGet: 
    3
    
              port: 1500 
    4
    
              path: /healthz 
    5
    
              httpHeaders:
              - name: Custom-Header
                value: Awesome
            timeoutSeconds: 10 
    6
    
    # ...
    Copy to Clipboard Toggle word wrap

    1
    VM が起動してから liveness プローブが開始されるまでの時間 (秒単位)。
    2
    プローブの実行間の遅延 (秒単位)。デフォルトの遅延は 10 秒です。この値は timeoutSeconds よりも大きくなければなりません。
    3
    VM に接続するために実行する HTTP GET 要求。
    4
    プローブがクエリーする VM のポート。上記の例では、プローブはポート 1500 をクエリーします。VM は、cloud-init を介してポート 1500 に最小限の HTTP サーバーをインストールして実行します。
    5
    HTTP サーバーでアクセスするパス。上記の例では、サーバーの /healthz パスのハンドラーが成功コードを返した場合、VM は正常であると見なされます。ハンドラーが失敗コードを返した場合、VM は削除され、新しい VM が作成されます。
    6
    プローブがタイムアウトになり、VM が失敗したと見なされるまでの非アクティブな秒数。デフォルト値は 1 です。この値は periodSeconds 未満である必要があります。
  2. 次のコマンドを実行して VM を作成します。

    $ oc create -f <file_name>.yaml
    Copy to Clipboard Toggle word wrap

13.4.2. ウォッチドッグの定義

次の手順を実行して、ゲストオペレーティングシステムの健全性を監視するウォッチドッグを定義できます。

  1. 仮想マシン (VM) のウォッチドッグデバイスを設定します。
  2. ゲストにウォッチドッグエージェントをインストールします。

ウォッチドッグデバイスはエージェントを監視し、ゲストオペレーティングシステムが応答しない場合、次のいずれかのアクションを実行します。

  • poweroff: VM の電源がすぐにオフになります。spec.runStrategymanual に設定されていない場合、仮想マシンは再起動します。
  • reset: VM はその場で再起動し、ゲストオペレーティングシステムは反応できません。

    注記

    再起動時間が原因で liveness プローブがタイムアウトする場合があります。クラスターレベルの保護が liveness プローブの失敗を検出すると、VM が強制的に再スケジュールされ、再起動時間が長くなる可能性があります。

  • shutdown: すべてのサービスを停止することで、VM の電源が正常 (グレースフル) にオフになります。
注記

ウォッチドッグは、Windows VM では使用できません。

13.4.2.1. 仮想マシンのウォッチドッグデバイスの設定

仮想マシン (VM) のウォッチドッグデバイスを設定するとします。

前提条件

  • x86 システムの場合、仮想マシンは i6300esb ウォッチドッグデバイスで動作するカーネルを使用する必要があります。s390x アーキテクチャーを使用する場合は、カーネルで diag288 を有効にする必要があります。Red Hat Enterprise Linux (RHEL) イメージは、i6300esbdiag288 をサポートします。
  • OpenShift CLI (oc) がインストールされている。

手順

  1. 次の内容で YAML ファイルを作成します。

    apiVersion: kubevirt.io/v1
    kind: VirtualMachine
    metadata:
      labels:
        kubevirt.io/vm: <vm-label>
      name: <vm-name>
    spec:
      runStrategy: Halted
      template:
        metadata:
          labels:
            kubevirt.io/vm: <vm-label>
        spec:
          domain:
            devices:
              watchdog:
                name: <watchdog>
                <watchdog-device-model>: 
    1
    
                  action: "poweroff" 
    2
    
    # ...
    Copy to Clipboard Toggle word wrap
    1
    使用するウォッチドッグデバイスモデル。x86 の場合は i6300esb を指定します。s390x の場合は diag288 を指定します。
    2
    poweroffreset、または shutdown を指定します。shutdown アクションは、ゲスト仮想マシンが ACPI シグナルに応答する必要があります。したがって、shutdown の使用は推奨されません。

    上記の例では、poweroff アクションを使用して仮想マシン上のウォッチドッグデバイスを設定し、デバイスを /dev/watchdog として公開します。

    このデバイスは、ウォッチドッグバイナリーで使用できるようになりました。

  2. 以下のコマンドを実行して、YAML ファイルをクラスターに適用します。

    $ oc apply -f <file_name>.yaml
    Copy to Clipboard Toggle word wrap
重要

この手順は、ウォッチドッグ機能をテストするためにのみ提供されており、実稼働マシンでは実行しないでください。

  1. 以下のコマンドを実行して、VM がウォッチドッグデバイスに接続されていることを確認します。

    $ lspci | grep watchdog -i
    Copy to Clipboard Toggle word wrap
  2. 以下のコマンドのいずれかを実行して、ウォッチドッグがアクティブであることを確認します。

    • カーネルパニックをトリガーします。

      # echo c > /proc/sysrq-trigger
      Copy to Clipboard Toggle word wrap
    • ウォッチドッグサービスを停止します。

      # pkill -9 watchdog
      Copy to Clipboard Toggle word wrap
13.4.2.2. ゲストへのウォッチドッグエージェントのインストール

ゲストにウォッチドッグエージェントをインストールし、watchdog サービスを開始します。

手順

  1. root ユーザーとして仮想マシンにログインします。
  2. この手順は、IBM Z® (s390x) にインストールする場合にのみ必要です。次のコマンドを実行して、watchdog を有効にします。

    # modprobe diag288_wdt
    Copy to Clipboard Toggle word wrap
  3. 次のコマンドを実行して、仮想マシンに /dev/watchdog ファイルパスが存在することを確認します。

    # ls /dev/watchdog
    Copy to Clipboard Toggle word wrap
  4. watchdog ドッグパッケージとその依存関係をインストールします。

    # yum install watchdog
    Copy to Clipboard Toggle word wrap
  5. /etc/watchdog.conf ファイルの次の行のコメントを外し、変更を保存します。

    #watchdog-device = /dev/watchdog
    Copy to Clipboard Toggle word wrap
  6. 起動時に watchdog サービスを開始できるようにします。

    # systemctl enable --now watchdog.service
    Copy to Clipboard Toggle word wrap

13.5. OpenShift Virtualization の runbook

OpenShift Virtualization の アラート を引き起こしている問題を診断して解決するには、OpenShift Virtualization Operator の runbook にある手順に従います。トリガーされた OpenShift Virtualization アラートは、Web コンソールのメインの ObserveAlerts タブ、および VirtualizationOverview タブに表示されます。

OpenShift Virtualization Operator の runbook は、openshift/runbooks Git リポジトリーで管理されており、GitHub で表示できます。

13.5.1. CDIDataImportCronOutdated

13.5.2. CDIDataVolumeUnusualRestartCount

13.5.3. CDIDefaultStorageClassDegraded

13.5.4. CDIMultipleDefaultVirtStorageClasses

  • CDIMultipleDefaultVirtStorageClasses アラートの runbook を表示 します。

13.5.5. CDINoDefaultStorageClass

13.5.6. CDINotReady

13.5.7. CDIOperatorDown

13.5.8. CDIStorageProfilesIncomplete

13.5.9. CnaoDown

13.5.10. CnaoNMstateMigration

13.5.11. HAControlPlaneDown

13.5.12. HCOInstallationIncomplete

13.5.13. HCOMisconfiguredDescheduler

13.5.14. HPPNotReady

13.5.15. HPPOperatorDown

13.5.16. HPPSharingPoolPathWithOS

13.5.17. HighCPUWorkload

13.5.18. KubemacpoolDown

13.5.19. KubeMacPoolDuplicateMacsFound

13.5.20. KubeVirtComponentExceedsRequestedCPU

  • KubeVirtComponentExceedsRequestedCPU アラートが 非推奨 になりました。

13.5.21. KubeVirtComponentExceedsRequestedMemory

  • KubeVirtComponentExceedsRequestedMemory アラートは 非推奨 になりました。

13.5.22. KubeVirtCRModified

13.5.23. KubeVirtDeprecatedAPIRequested

13.5.24. KubeVirtNoAvailableNodesToRunVMs

13.5.25. KubevirtVmHighMemoryUsage

13.5.26. KubeVirtVMIExcessiveMigrations

13.5.27. LowKVMNodesCount

13.5.28. LowReadyVirtControllersCount

13.5.29. LowReadyVirtOperatorsCount

13.5.30. LowVirtAPICount

13.5.31. LowVirtControllersCount

13.5.32. LowVirtOperatorCount

13.5.33. NetworkAddonsConfigNotReady

13.5.34. NoLeadingVirtOperator

13.5.35. NoReadyVirtController

13.5.36. NoReadyVirtOperator

13.5.37. NodeNetworkInterfaceDown

13.5.38. OperatorConditionsUnhealthy

  • OperatorConditionsUnhealthy アラートは 非推奨 となりました。

13.5.39. OrphanedVirtualMachineInstances

13.5.40. OutdatedVirtualMachineInstanceWorkloads

  • OutdatedVirtualMachineInstanceWorkloads アラートの runbook を表示 します。

13.5.41. SingleStackIPv6Unsupported

13.5.42. SSPCommonTemplatesModificationReverted

  • SSPCommonTemplatesModificationReverted アラートの runbook を表示 します。

13.5.43. SSPDown

13.5.44. SSPFailingToReconcile

13.5.45. SSPHighRateRejectedVms

13.5.46. SSPOperatorDown

13.5.47. SSPTemplateValidatorDown

13.5.48. UnsupportedHCOModification

13.5.49. VirtAPIDown

13.5.50. VirtApiRESTErrorsBurst

13.5.51. VirtApiRESTErrorsHigh

13.5.52. VirtControllerDown

13.5.53. VirtControllerRESTErrorsBurst

13.5.54. VirtControllerRESTErrorsHigh

13.5.55. VirtHandlerDaemonSetRolloutFailing

13.5.56. VirtHandlerRESTErrorsBurst

13.5.57. VirtHandlerRESTErrorsHigh

13.5.58. VirtOperatorDown

13.5.59. VirtOperatorRESTErrorsBurst

13.5.60. VirtOperatorRESTErrorsHigh

13.5.61. VirtualMachineCRCErrors

  • VirtualMachineCRCErrors アラートは 非推奨 となりました。

    アラートの名前は VMStorageClassWarning になりました。

13.5.62. VMCannotBeEvicted

13.5.63. VMStorageClassWarning

第14章 サポート

14.1. サポートの概要

次のツールを使用して、Red Hat サポートへの支援リクエスト、バグの報告、環境に関するデータの収集、クラスターと仮想マシンの状態監視を行えます。

14.1.1. サポートチケットを作成する

Red Hat サポートからの支援を即時に必要とする問題が発生した場合は、サポートケースを作成できます。

バグを報告するには、Jira 課題を直接作成できます。

14.1.1.1. サポートケースの作成

Red Hat サポートにサポートを依頼するには、サポートケースの作成手順 に従ってください。

サポートリクエストに含めるデバッグデータを収集すると役立ちます。

14.1.1.1.1. Red Hat サポート用のデータ収集

次の手順を実行して、デバッグ情報を収集できます。

環境に関するデータの収集
Prometheus と Alertmanager を設定し、AWS および OpenShift Virtualization 上の Red Hat OpenShift Service の must-gather データを収集します。
14.1.1.2. Jira 課題の作成

バグを報告するには、Create Issue ページのフォームに入力して、直接 Jira 課題を作成できます。

14.1.2. Web コンソールの監視

Red Hat OpenShift Service on AWS Web コンソールを使用して、クラスターと仮想マシンの健全性を監視できます。Web コンソールには、クラスターと OpenShift Virtualization コンポーネントおよびリソースのリソース使用量、アラート、イベント、および傾向が表示されます。

Expand
表14.1 監視とトラブルシューティングのための Web コンソールページ
ページ説明

Overview ページ

クラスターの詳細、ステータス、アラート、インベントリー、およびリソースの使用状況

VirtualizationOverview タブ

OpenShift 仮想化のリソース、使用状況、アラート、およびステータス

VirtualizationTop consumers タブ

CPU、メモリー、およびストレージの上位コンシューマー

VirtualizationMigrations タブ

ライブマイグレーションの進捗

VirtualizationVirtualMachines タブ

CPU、メモリー、ストレージの使用状況の概要

VirtualizationVirtualMachinesVirtualMachine detailsMetrics タブ

VM リソースの使用状況、ストレージ、ネットワーク、および移行

VirtualizationVirtualMachinesVirtualMachine detailsEvents タブ

VM イベントリスト

VirtualizationVirtualMachinesVirtualMachine detailsDiagnostics タブ

仮想マシンのステータス条件とボリュームスナップショットのステータス

14.2. Red Hat サポート用のデータ収集

Red Hat サポートに サポートケース を送信するときは、次のツールを使用して、Red Hat OpenShift Service on AWS および OpenShift Virtualization のデバッグ情報を提供すると役立ちます。

Prometheus
Prometheus は時系列データベースであり、メトリクスのルール評価エンジンです。Prometheus は処理のためにアラートを Alertmanager に送信します。
Alertmanager
Alertmanager サービスは、Prometheus から送信されるアラートを処理します。また、Alertmanager は外部の通知システムにアラートを送信します。

14.2.1. 環境に関するデータの収集

環境に関するデータを収集すると、根本原因の分析および特定に必要な時間が最小限に抑えられます。

前提条件

  • 影響を受けるノードおよび仮想マシンの正確な数を記録する。

14.2.2. 仮想マシンに関するデータの収集

手順

仮想マシン (VM) の誤動作に関するデータを収集することで、根本原因の分析および特定に必要な時間を最小限に抑えることができます。

前提条件

手順

  1. VM を再起動する に、クラッシュした VM のスクリーンショットを収集します。
  2. 修復を試みる に、VM からメモリーダンプを収集 します。
  3. 誤動作している仮想マシンに共通する要因を記録します。たとえば、仮想マシンには同じホストまたはネットワークがあります。

14.3. トラブルシューティング

OpenShift Virtualization は、仮想マシンと仮想化コンポーネントのトラブルシューティングに使用するツールとログを提供します。

OpenShift Virtualization コンポーネントのトラブルシューティングは、Web コンソールで提供されるツールまたは oc CLI ツールを使用して実行できます。

14.3.1. Events

Red Hat OpenShift Service on AWS イベント は、重要なライフサイクル情報の記録であり、仮想マシン、namespace、リソースの問題の監視とトラブルシューティングに役立ちます。

  • 仮想マシンイベント: Web コンソールで VirtualMachine details ページの Events タブに移動します。

    namespace イベント

    namespace イベントを表示するには、次のコマンドを実行します。

    $ oc get events -n <namespace>
    Copy to Clipboard Toggle word wrap

    特定のイベントの詳細は、イベントのリスト を参照してください。

    リソースイベント

    リソースイベントを表示するには、次のコマンドを実行します。

    $ oc describe <resource> <resource_name>
    Copy to Clipboard Toggle word wrap

14.3.2. Pod ログ

Web コンソールまたは CLI を使用して、OpenShift Virtualization Pod のログを表示できます。Web コンソールで LokiStack を使用して、集約ログ を表示することもできます。

14.3.2.1. OpenShift Virtualization Pod ログの詳細レベルの設定

HyperConverged カスタムリソース (CR) を編集することで、OpenShift Virtualization Pod ログの詳細レベルを設定できます。

前提条件

  • OpenShift CLI (oc) がインストールされている。

手順

  1. 特定のコンポーネントのログの詳細度を設定するには、次のコマンドを実行して、デフォルトのテキストエディターで HyperConverged CR を開きます。

    $ oc edit hyperconverged kubevirt-hyperconverged -n openshift-cnv
    Copy to Clipboard Toggle word wrap
  2. spec.logVerbosityConfig スタンザを編集して、1 つ以上のコンポーネントのログレベルを設定します。以下に例を示します。

    apiVersion: hco.kubevirt.io/v1beta1
    kind: HyperConverged
    metadata:
      name: kubevirt-hyperconverged
    spec:
      logVerbosityConfig:
        kubevirt:
          virtAPI: 5 
    1
    
          virtController: 4
          virtHandler: 3
          virtLauncher: 2
          virtOperator: 6
    Copy to Clipboard Toggle word wrap
    1
    ログの詳細度の値は 1 ~ 9 の範囲の整数である必要があり、数値が大きいほど詳細なログであることを示します。この例では、virtAPI コンポーネントのログは、優先度が 5 以上の場合に公開されます。
  3. エディターを保存して終了し、変更を適用します。
14.3.2.2. Web コンソールを使用して virt-launcher Pod のログを表示する

Red Hat OpenShift Service on AWS Web コンソールを使用して、仮想マシンの virt-launcher Pod ログを表示できます。

手順

  1. VirtualizationVirtualMachines に移動します。
  2. 仮想マシンを選択して、VirtualMachine details ページを開きます。
  3. General タイルで、Pod 名をクリックして Pod details ページを開きます。
  4. Logs タブをクリックして、ログを表示します。
14.3.2.3. CLI を使用した OpenShift Virtualization Pod ログの表示

oc CLI ツールを使用して、OpenShift Virtualization Pod のログを表示できます。

前提条件

  • OpenShift CLI (oc) がインストールされている。

手順

  1. 以下のコマンドを実行して、OpenShift Virtualization の namespace 内の Pod のリストを表示します。

    $ oc get pods -n openshift-cnv
    Copy to Clipboard Toggle word wrap

    例14.1 出力例

    NAME                               READY   STATUS    RESTARTS   AGE
    disks-images-provider-7gqbc        1/1     Running   0          32m
    disks-images-provider-vg4kx        1/1     Running   0          32m
    virt-api-57fcc4497b-7qfmc          1/1     Running   0          31m
    virt-api-57fcc4497b-tx9nc          1/1     Running   0          31m
    virt-controller-76c784655f-7fp6m   1/1     Running   0          30m
    virt-controller-76c784655f-f4pbd   1/1     Running   0          30m
    virt-handler-2m86x                 1/1     Running   0          30m
    virt-handler-9qs6z                 1/1     Running   0          30m
    virt-operator-7ccfdbf65f-q5snk     1/1     Running   0          32m
    virt-operator-7ccfdbf65f-vllz8     1/1     Running   0          32m
    Copy to Clipboard Toggle word wrap
  2. Pod ログを表示するには、次のコマンドを実行します。

    $ oc logs -n openshift-cnv <pod_name>
    Copy to Clipboard Toggle word wrap
    注記

    Pod の起動に失敗した場合は、--previous オプションを使用して、最後の試行からのログを表示できます。

    ログ出力をリアルタイムで監視するには、-f オプションを使用します。

    例14.2 出力例

    {"component":"virt-handler","level":"info","msg":"set verbosity to 2","pos":"virt-handler.go:453","timestamp":"2022-04-17T08:58:37.373695Z"}
    {"component":"virt-handler","level":"info","msg":"set verbosity to 2","pos":"virt-handler.go:453","timestamp":"2022-04-17T08:58:37.373726Z"}
    {"component":"virt-handler","level":"info","msg":"setting rate limiter to 5 QPS and 10 Burst","pos":"virt-handler.go:462","timestamp":"2022-04-17T08:58:37.373782Z"}
    {"component":"virt-handler","level":"info","msg":"CPU features of a minimum baseline CPU model: map[apic:true clflush:true cmov:true cx16:true cx8:true de:true fpu:true fxsr:true lahf_lm:true lm:true mca:true mce:true mmx:true msr:true mtrr:true nx:true pae:true pat:true pge:true pni:true pse:true pse36:true sep:true sse:true sse2:true sse4.1:true ssse3:true syscall:true tsc:true]","pos":"cpu_plugin.go:96","timestamp":"2022-04-17T08:58:37.390221Z"}
    {"component":"virt-handler","level":"warning","msg":"host model mode is expected to contain only one model","pos":"cpu_plugin.go:103","timestamp":"2022-04-17T08:58:37.390263Z"}
    {"component":"virt-handler","level":"info","msg":"node-labeller is running","pos":"node_labeller.go:94","timestamp":"2022-04-17T08:58:37.391011Z"}
    Copy to Clipboard Toggle word wrap

14.3.3. ゲストシステムログ

仮想マシンゲストのブートログを表示すると、問題の診断に役立ちます。ゲストのログへのアクセスを設定し、Red Hat OpenShift Service on AWS Web コンソールまたは oc CLI を使用してログを表示できます。

この機能はデフォルトでは無効にされています。仮想マシンでこの設定が明示的に有効または無効になっていない場合、クラスター全体のデフォルト設定が継承されます。

重要

認証情報やその他の個人を特定できる情報 (PII) などの機密情報がシリアルコンソールに書き込まれている場合、他の表示されるすべてのテキストと一緒にそれらもログに記録されます。Red Hat では、機密データの送信にはシリアルコンソールではなく SSH を使用することを推奨しています。

Web コンソールを使用して、仮想マシンゲストシステムログへのデフォルトアクセスを有効にできます。

手順

  1. サイドメニューから、VirtualizationOverview をクリックします。
  2. Settings タブをクリックします。
  3. ClusterGuest management をクリックします。
  4. Enable guest system log access をオンに設定します。
14.3.3.2. CLI を使用して仮想マシンゲストシステムログへのデフォルトアクセスを有効にする

HyperConverged カスタムリソース (CR) を編集して、仮想マシンゲストシステムログへのデフォルトアクセスを有効にできます。

前提条件

  • OpenShift CLI (oc) がインストールされている。

手順

  1. 以下のコマンドを実行して、デフォルトのエディターで HyperConverged CR を開きます。

    $ oc edit hyperconverged kubevirt-hyperconverged -n openshift-cnv
    Copy to Clipboard Toggle word wrap
  2. disableSerialConsoleLog の値を更新します。以下に例を示します。

    kind: HyperConverged
    metadata:
      name: kubevirt-hyperconverged
    spec:
      virtualMachineOptions:
        disableSerialConsoleLog: true 
    1
    
    #...
    Copy to Clipboard Toggle word wrap
    1
    仮想マシン上でシリアルコンソールアクセスをデフォルトで有効にする場合は、disableSerialConsoleLog の値を false に設定します。
14.3.3.3. Web コンソールを使用して単一仮想マシンのゲストシステムログアクセスを設定する

Web コンソールを使用して、単一仮想マシンの仮想マシンゲストシステムログへのアクセスを設定できます。この設定は、クラスター全体のデフォルト設定よりも優先されます。

手順

  1. サイドメニューから VirtualizationVirtualMachines をクリックします。
  2. 仮想マシンを選択して、VirtualMachine details ページを開きます。
  3. Configuration タブをクリックします。
  4. Guest system log access をオンまたはオフに設定します。
14.3.3.4. CLI を使用して単一仮想マシンのゲストシステムログアクセスを設定する

VirtualMachine CR を編集することで、単一仮想マシンの仮想マシンゲストシステムログへのアクセスを設定できます。この設定は、クラスター全体のデフォルト設定よりも優先されます。

前提条件

  • OpenShift CLI (oc) がインストールされている。

手順

  1. 次のコマンドを実行して、仮想マシンのマニフェストを編集します。

    $ oc edit vm <vm_name>
    Copy to Clipboard Toggle word wrap
  2. logSerialConsole フィールドの値を更新します。以下に例を示します。

    apiVersion: kubevirt.io/v1
    kind: VirtualMachine
    metadata:
      name: example-vm
    spec:
      template:
        spec:
          domain:
            devices:
              logSerialConsole: true 
    1
    
    #...
    Copy to Clipboard Toggle word wrap
    1
    ゲストのシリアルコンソールログへのアクセスを有効にするには、logSerialConsole の値を true に設定します。
  3. 次のコマンドを実行して、新しい設定を仮想マシンに適用します。

    $ oc apply vm <vm_name>
    Copy to Clipboard Toggle word wrap
  4. オプション: 実行中の仮想マシンを編集した場合は、仮想マシンを再起動して新しい設定を適用します。以下に例を示します。

    $ virtctl restart <vm_name> -n <namespace>
    Copy to Clipboard Toggle word wrap
14.3.3.5. Web コンソールを使用してゲストシステムログを表示する

Web コンソールを使用して、仮想マシンゲストのシリアルコンソールログを表示できます。

前提条件

  • ゲストシステムログアクセスが有効になっている。

手順

  1. サイドメニューから VirtualizationVirtualMachines をクリックします。
  2. 仮想マシンを選択して、VirtualMachine details ページを開きます。
  3. Diagnostics タブをクリックします。
  4. Guest system logs をクリックしてシリアルコンソールをロードします。
14.3.3.6. CLI を使用してゲストシステムログを表示する

oc logs コマンドを実行して、仮想マシンゲストのシリアルコンソールログを表示できます。

前提条件

  • ゲストシステムログアクセスが有効になっている。
  • OpenShift CLI (oc) がインストールされている。

手順

  • 次のコマンドを実行してログを表示します。その場合、<namespace><vm_name> を独自の値に置き換えます。

    $ oc logs -n <namespace> -l kubevirt.io/domain=<vm_name> --tail=-1 -c guest-console-log
    Copy to Clipboard Toggle word wrap

14.3.4. ログアグリゲーション

ログを集約してフィルタリングすることで、容易にトラブルシューティングを行えます。

14.3.4.1. LokiStack を使用した OpenShift Virtualization 集約ログの表示

Web コンソールで LokiStack を使用すると、OpenShift Virtualization Pod およびコンテナーの集約ログを表示できます。

前提条件

  • LokiStack をデプロイしている。

手順

  1. Web コンソールで ObserveLogs に移動します。
  2. ログタイプのリストから、virt-launcher Pod ログの場合は application を選択し、OpenShift Virtualization コントロールプレーン Pod およびコンテナーの場合は infrastructure を選択します。
  3. Show Query をクリックしてクエリーフィールドを表示します。
  4. クエリーフィールドに LogQL クエリーを入力し、Run Query をクリックしてフィルタリングされたログを表示します。
14.3.4.2. OpenShift Virtualization LogQL クエリー

Web コンソールの ObserveLogs ページで Loki Query Language (LogQL) クエリーを実行することで、OpenShift Virtualization コンポーネントの集約ログを表示およびフィルタリングできます。

デフォルトのログタイプは infrastructure です。virt-launcher のログタイプは application です。

オプション: 行フィルター式を使用して、文字列または正規表現の追加や除外を行えます。

注記

クエリーが多数のログに一致する場合、クエリーがタイムアウトになる可能性があります。

Expand
表14.2 OpenShift Virtualization LogQL クエリーの例
コンポーネントLogQL クエリー

すべて

{log_type=~".+"}|json
|kubernetes_labels_app_kubernetes_io_part_of="hyperconverged-cluster"
Copy to Clipboard Toggle word wrap

cdi-apiserver

cdi-deployment

cdi-operator

{log_type=~".+"}|json
|kubernetes_labels_app_kubernetes_io_part_of="hyperconverged-cluster"
|kubernetes_labels_app_kubernetes_io_component="storage"
Copy to Clipboard Toggle word wrap

hco-operator

{log_type=~".+"}|json
|kubernetes_labels_app_kubernetes_io_part_of="hyperconverged-cluster"
|kubernetes_labels_app_kubernetes_io_component="deployment"
Copy to Clipboard Toggle word wrap

kubemacpool

{log_type=~".+"}|json
|kubernetes_labels_app_kubernetes_io_part_of="hyperconverged-cluster"
|kubernetes_labels_app_kubernetes_io_component="network"
Copy to Clipboard Toggle word wrap

virt-api

virt-controller

virt-handler

virt-operator

{log_type=~".+"}|json
|kubernetes_labels_app_kubernetes_io_part_of="hyperconverged-cluster"
|kubernetes_labels_app_kubernetes_io_component="compute"
Copy to Clipboard Toggle word wrap

ssp-operator

{log_type=~".+"}|json
|kubernetes_labels_app_kubernetes_io_part_of="hyperconverged-cluster"
|kubernetes_labels_app_kubernetes_io_component="schedule"
Copy to Clipboard Toggle word wrap

Container

{log_type=~".+",kubernetes_container_name=~"<container>|<container>"} 
1

|json|kubernetes_labels_app_kubernetes_io_part_of="hyperconverged-cluster"
Copy to Clipboard Toggle word wrap
1
1 つ以上のコンテナーを縦線記号 (|) で区切って指定します。

virt-launcher

このクエリーを実行する前に、ログタイプのリストから application を選択する必要があります。

{log_type=~".+", kubernetes_container_name="compute"}|json
|!= "custom-ga-command" 
1
Copy to Clipboard Toggle word wrap
1
|!= "custom-ga-command" は、custom-ga-command の文字列を含む libvirt ログを除外します。(BZ#2177684)

行フィルター式を使用して、文字列や正規表現を追加または除外するようにログ行をフィルタリングできます。

Expand
表14.3 行フィルター式
行フィルター式説明

|= "<string>"

ログ行に文字列が含まれています

!= "<string>"

ログ行に文字列は含まれていません

|~ "<regex>"

ログ行に正規表現が含まれています

!~ "<regex>"

ログ行に正規表現は含まれていません

行フィルター式の例

{log_type=~".+"}|json
|kubernetes_labels_app_kubernetes_io_part_of="hyperconverged-cluster"
|= "error" != "timeout"
Copy to Clipboard Toggle word wrap

14.3.5. 一般的なエラーメッセージ

以下のエラーメッセージが OpenShift Virtualization ログに表示される場合があります。

ErrImagePull または ImagePullBackOff
デプロイメント設定が正しくないか、参照されているイメージに問題があることを示します。

14.3.6. データボリュームのトラブルシューティング

DataVolume オブジェクトの Conditions および Events セクションを確認して、問題を分析および解決できます。

14.3.6.1. データボリュームの条件とイベントについて

コマンドによって生成された Conditions および Events セクションの出力を調べることで、データボリュームの問題を診断できます。

$ oc describe dv <DataVolume>
Copy to Clipboard Toggle word wrap

Conditions セクションには、次の Types が表示されます。

  • Bound
  • Running
  • Ready

Events セクションでは、以下の追加情報を提供します。

  • イベントの Type
  • ロギングの Reason
  • イベントの Source
  • 追加の診断情報が含まれる Message

oc describe からの出力には常に Events が含まれるとは限りません。

StatusReason、または Message が変化すると、イベントが生成されます。状態およびイベントはどちらもデータボリュームの状態の変更に対応します。

たとえば、インポート操作中に URL のスペルを誤ると、インポートにより 404 メッセージが生成されます。メッセージの変更により、理由と共にイベントが生成されます。Conditions セクションの出力も更新されます。

14.3.6.2. データボリュームの状態とイベントの分析

describe コマンドで生成される Conditions セクションおよび Events セクションを検査することにより、永続ボリューム要求 (PVC) に関連してデータボリュームの状態を判別します。また、操作がアクティブに実行されているか、または完了しているかどうかを判断します。また、データボリュームのステータスに関する特定の詳細、およびどのように現在の状態になったかに関する情報を提供するメッセージを受信する可能性があります。

状態の組み合わせは多数あります。それぞれは一意のコンテキストで評価される必要があります。

各種の組み合わせの例を以下に示します。

  • Bound - この例では、正常にバインドされた PVC が表示されます。

    TypeBound であるため、StatusTrue になります。PVC がバインドされていない場合、StatusFalse になります。

    PVC がバインドされると、PVC がバインドされていることを示すイベントが生成されます。この場合、ReasonBound で、StatusTrue です。Message はデータボリュームを所有する PVC を示します。

    Events セクションの Message では、PVC がバインドされている期間 (Age) およびどのリソース (From) によってバインドされているか、datavolume-controller に関する詳細が提供されます。

    出力例

    Status:
      Conditions:
        Last Heart Beat Time:  2020-07-15T03:58:24Z
        Last Transition Time:  2020-07-15T03:58:24Z
        Message:               PVC win10-rootdisk Bound
        Reason:                Bound
        Status:                True
        Type:                  Bound
    ...
      Events:
        Type     Reason     Age    From                   Message
        ----     ------     ----   ----                   -------
        Normal   Bound      24s    datavolume-controller  PVC example-dv Bound
    Copy to Clipboard Toggle word wrap

  • Running - この場合、TypeRunning で、StatusFalse であることに注意してください。これは、試行された操作が失敗する原因となったイベントが発生し、Status が True から False に変化したことを示しています。

    ただし、ReasonCompleted であり、Message フィールドには Import Complete が表示されることに注意してください。

    Events セクションには、Reason および Message に失敗した操作に関する追加のトラブルシューティング情報が含まれます。この例では、Events セクションの最初の Warning に一覧表示される Message に、404 によって接続できないことが示唆されます。

    この情報から、インポート操作が実行されており、データボリュームにアクセスしようとしている他の操作に対して競合が生じることを想定できます。

    出力例

    Status:
      Conditions:
        Last Heart Beat Time:  2020-07-15T04:31:39Z
        Last Transition Time:  2020-07-15T04:31:39Z
        Message:               Import Complete
        Reason:                Completed
        Status:                False
        Type:                  Running
    ...
      Events:
        Type     Reason       Age                From                   Message
        ----     ------       ----               ----                   -------
        Warning  Error        12s (x2 over 14s)  datavolume-controller  Unable to connect
        to http data source: expected status code 200, got 404. Status: 404 Not Found
    Copy to Clipboard Toggle word wrap

  • Ready: TypeReady であり、StatusTrue の場合、以下の例のようにデータボリュームは使用可能な状態になります。データボリュームが使用可能な状態にない場合、StatusFalse になります。

    出力例

    Status:
      Conditions:
        Last Heart Beat Time: 2020-07-15T04:31:39Z
        Last Transition Time:  2020-07-15T04:31:39Z
        Status:                True
        Type:                  Ready
    Copy to Clipboard Toggle word wrap

第15章 バックアップおよび復元

15.1. 仮想マシンスナップショットを使用したバックアップと復元

スナップショットを使用して、仮想マシンをバックアップおよび復元できます。スナップショットは、次のストレージプロバイダーによってサポートされています。

  • Kubernetes Volume Snapshot API をサポートする Container Storage Interface (CSI) ドライバーを備えたクラウドストレージプロバイダー

Running 状態の仮想マシンのスナップショットを最高の整合性で作成するには、QEMU ゲストエージェントをインストールします (使用中のオペレーティングシステムに含まれていない場合)。QEMU ゲストエージェントは、デフォルトの Red Hat テンプレートに含まれています。

重要

オンラインスナップショットは、ホットプラグされた仮想ディスクを持つ仮想マシンでサポートされます。ただし、仮想マシンの仕様に含まれていないホットプラグされたディスクは、スナップショットに含まれません。

QEMU ゲストエージェントは、仮想マシンファイルシステムの静止を試みることで、一貫性のあるスナップショットを取得します。これにより、スナップショットの作成前にインフライトの I/O がディスクに書き込まれるようになります。ゲストエージェントが存在しない場合は、静止はできず、ベストエフォートスナップショットが作成されます。

スナップショットの作成条件は、Web コンソールまたは CLI に表示されるスナップショットの指示に反映されます。これらの条件が要件を満たさない場合は、スナップショットを再度作成するか、オフラインスナップショットを使用します。

15.1.1. スナップショット

スナップショット は、特定の時点における仮想マシン (VM) の状態およびデータを表します。スナップショットを使用して、バックアップおよび障害復旧のために既存の仮想マシンを (スナップショットで表される) 以前の状態に復元したり、以前の開発バージョンに迅速にロールバックしたりできます。

仮想マシンのスナップショットは、電源がオフ (停止状態) またはオン (実行状態) の仮想マシンから作成されます。

実行中の仮想マシンのスナップショットを作成する場合には、コントローラーは QEMU ゲストエージェントがインストールされ、実行中であることを確認します。その場合、スナップショットを取得する前に仮想マシンファイルシステムをフリーズし、スナップショットを取得した後にファイルシステムをフリーズ解除します。

スナップショットは、仮想マシンに割り当てられた各 Container Storage Interface (CSI) ボリュームのコピーと、仮想マシンの仕様およびメタデータのコピーを保存します。スナップショットは作成後に変更できません。

次のスナップショットアクションを実行できます。

  • 新しいスナップショットを作成する
  • スナップショットから仮想マシンのクローンを作成する

    重要

    vTPM デバイスがアタッチされた仮想マシンのクローン作成や、そのスナップショットからの新しい仮想マシンの作成は、サポートされていません。

  • 特定の仮想マシンに割り当てられているすべてのスナップショットのリスト表示
  • スナップショットからの仮想マシンの復元
  • 既存の仮想マシンスナップショットの削除

仮想マシンスナップショットコントローラーとカスタムリソース

仮想マシンスナップショット機能では、スナップショットを管理するためのカスタムリソース定義 (CRD) として定義される 3 つの新しい API オブジェクトが導入されています。

  • VirtualMachineSnapshot: スナップショットを作成するユーザー要求を表します。これには、仮想マシンの現在の状態に関する情報が含まれます。
  • VirtualMachineSnapshotContent: クラスター上のプロビジョニングされたリソース (スナップショット) を表します。これは、仮想マシンのスナップショットコントローラーによって作成され、仮想マシンの復元に必要なすべてのリソースへの参照が含まれます。
  • VirtualMachineRestore: スナップショットから仮想マシンを復元するユーザー要求を表します。

仮想マシンスナップショットコントローラーは、1 対 1 のマッピングで、VirtualMachineSnapshotContent オブジェクトを、この作成に使用した VirtualMachineSnapshot オブジェクトにバインドします。

15.1.2. アプリケーションコンシステントなスナップショットとバックアップについて

フリーズとフリーズ解除のサイクルにより、Linux または Windows 仮想マシン (VM) のアプリケーションコンシステントなスナップショットおよびバックアップを設定できます。任意のアプリケーションに対して、スナップショットまたはバックアップの開始予定時に通知を受け取るように、Linux 仮想マシン上でスクリプトを設定するか、Windows 仮想マシン上で登録することができます。

Linux 仮想マシンでは、たとえばスナップショットが取得されたり、Velero や別のバックアップベンダーのプラグインを使用してバックアップが開始されたりすると、フリーズおよびフリーズ解除プロセスが自動的にトリガーされます。QEMU Guest Agent (QEMU GA) のフリーズフックによって実行されるフリーズプロセスにより、仮想マシンのスナップショットまたはバックアップが実行される前に、仮想マシンのすべてのファイルシステムがフリーズされ、適切に設定された各アプリケーションにスナップショットまたはバックアップが開始されることが通知されます。この通知により、各アプリケーションに状態を休止する機会が与えられます。アプリケーションによっては、休止に伴い、新しいリクエストの一時的な拒否、進行中の操作の終了、データのディスクへのフラッシュが実行される場合があります。その後、オペレーティングシステムが、未処理の書き込みをディスクにフラッシュし、新しい書き込みアクティビティーをフリーズすることによって、ファイルシステムを休止するように指示されます。新しい接続要求はすべて拒否されます。すべてのアプリケーションが非アクティブになると、QEMU GA がファイルシステムをフリーズし、スナップショットが取得されるか、バックアップが開始されます。スナップショットの取得またはバックアップの開始後、フリーズ解除プロセスが開始します。ファイルシステムの書き込みが再アクティブ化され、アプリケーションが通常の操作を再開するための通知を受け取ります。

Windows 仮想マシンでも、同様のフリーズおよびフリーズ解除のサイクルを利用できます。アプリケーションが Volume Shadow Copy Service (VSS) に登録され、バックアップまたはスナップショットの実行が近づいているため、データをフラッシュする必要があるという通知を受け取ります。バックアップまたはスナップショットの完了後にアプリケーションがフリーズ解除されると、アプリケーションはアクティブな状態に戻ります。詳細は、Volume Shadow Copy Service に関する Windows Server のドキュメントを参照してください。

15.1.3. スナップショットの作成

Red Hat OpenShift Service on AWS Web コンソールまたはコマンドラインを使用して、仮想マシン (VM) のスナップショットを作成できます。

15.1.3.1. Web コンソールを使用したスナップショットを作成する

Red Hat OpenShift Service on AWS Web コンソールを使用して、仮想マシン (VM) のスナップショットを作成できます。

前提条件

  • snapshot フィーチャーゲートは、kubevirt CR の YAML 設定で有効になっています。
  • 仮想マシンスナップショットには、以下の要件を満たすディスクが含まれます。

    • ディスクはデータボリュームまたは永続ボリューム要求です。
    • ディスクは、Container Storage Interface (CSI) ボリュームスナップショットをサポートするストレージクラスに属しています。
    • ディスクは、永続ボリューム (PV) に バインド され、データソースが 入力 されます。

手順

  1. Web コンソールで VirtualizationVirtualMachines に移動します。
  2. 仮想マシンを選択して、VirtualMachine details ページを開きます。
  3. Snapshots タブをクリックしてから Take Snapshot をクリックします。

    または、仮想マシンを右クリックし、ポップアップメニューから Create snapshot を選択します。

  4. スナップショット名を入力します。
  5. Disks included in this Snapshot を拡張し、スナップショットに組み込むストレージボリュームを表示します。
  6. 仮想マシンにスナップショットに含めることができないディスクがあり、続行する場合は、I am aware of this warning and wish to proceed を選択します。
  7. Save をクリックします。
15.1.3.2. CLI を使用したスナップショットの作成

VirtualMachineSnapshot オブジェクトを作成し、オフラインまたはオンラインの仮想マシンの仮想マシン (VM) スナップショットを作成できます。

前提条件

  • 次のコマンドを使用して、kubevirt CR に対して Snapshot フィーチャーゲートが有効になっていることを確認します。

    $ oc get kubevirt kubevirt-hyperconverged -n openshift-cnv -o yaml
    Copy to Clipboard Toggle word wrap

    省略された出力

    spec:
      developerConfiguration:
        featureGates:
          - Snapshot
    Copy to Clipboard Toggle word wrap

  • 仮想マシンスナップショットに、次の要件を満たすディスクが含まれていることを確認します。

    • ディスクはデータボリュームまたは永続ボリューム要求です。
    • ディスクは、Container Storage Interface (CSI) ボリュームスナップショットをサポートするストレージクラスに属しています。
    • ディスクは、永続ボリューム (PV) に バインド され、データソースが 入力 されます。
  • OpenShift CLI (oc) がインストールされている。
  • オプション: スナップショットを作成する仮想マシンの電源を切っている。

手順

  1. 次の例のように、YAML ファイルを作成して、新しい VirtualMachineSnapshot の名前とソース仮想マシンの名前を指定する VirtualMachineSnapshot オブジェクトを定義します。

    apiVersion: snapshot.kubevirt.io/v1beta1
    kind: VirtualMachineSnapshot
    metadata:
      name: <snapshot_name>
    spec:
      source:
        apiGroup: kubevirt.io
        kind: VirtualMachine
        name: <vm_name>
    Copy to Clipboard Toggle word wrap
  2. VirtualMachineSnapshot オブジェクトを作成します。

    $ oc create -f <snapshot_name>.yaml
    Copy to Clipboard Toggle word wrap

    スナップコントローラーは VirtualMachineSnapshotContent オブジェクトを作成し、これを VirtualMachineSnapshot にバインドし、VirtualMachineSnapshot オブジェクトの status および readyToUse フィールドを更新します。

検証

  1. オプション: スナップショットの作成プロセス中に、wait コマンドを使用してスナップショットのステータスを監視し、使用可能になるまで待機できます。

    1. 以下のコマンドを実行します。

      $ oc wait <vm_name> <snapshot_name> --for condition=Ready
      Copy to Clipboard Toggle word wrap
    2. スナップショットのステータスを確認します。

      • InProgress - スナップショット操作はまだ進行中です。
      • Succeeded - スナップショット操作が正常に完了しました。
      • Failed - スナップショット操作が失敗しました。

        注記

        オンラインスナップショットのデフォルト期限は 5 分 (5m) です。スナップショットが 5 分後に正常に完了しない場合には、ステータスが failed に設定されます。その後、ファイルシステムと仮想マシンのフリーズが解除され、失敗したスナップショットイメージが削除されるまで、ステータスは failed のままになります。

        デフォルトの期限を変更するには、仮想マシンスナップショット spec に FailureDeadline 属性を追加して、スナップショット操作がタイムアウトするまでの時間を分単位 (m) または秒単位 (s) で指定します。

        期限を指定しない場合は、0 を指定できますが、仮想マシンが応答しなくなる可能性があるため、通常は推奨していません。

        m または s などの時間の単位を指定しない場合、デフォルトは秒 (s) です。

  2. VirtualMachineSnapshot オブジェクトが作成され、VirtualMachineSnapshotContent にバインドされていることと、readyToUse フラグが true に設定されていることを確認します。

    $ oc describe vmsnapshot <snapshot_name>
    Copy to Clipboard Toggle word wrap

    出力例

    apiVersion: snapshot.kubevirt.io/v1beta1
    kind: VirtualMachineSnapshot
    metadata:
      creationTimestamp: "2020-09-30T14:41:51Z"
      finalizers:
      - snapshot.kubevirt.io/vmsnapshot-protection
      generation: 5
      name: mysnap
      namespace: default
      resourceVersion: "3897"
      selfLink: /apis/snapshot.kubevirt.io/v1beta1/namespaces/default/virtualmachinesnapshots/my-vmsnapshot
      uid: 28eedf08-5d6a-42c1-969c-2eda58e2a78d
    spec:
      source:
        apiGroup: kubevirt.io
        kind: VirtualMachine
        name: my-vm
    status:
      conditions:
      - lastProbeTime: null
        lastTransitionTime: "2020-09-30T14:42:03Z"
        reason: Operation complete
        status: "False" 
    1
    
        type: Progressing
      - lastProbeTime: null
        lastTransitionTime: "2020-09-30T14:42:03Z"
        reason: Operation complete
        status: "True" 
    2
    
        type: Ready
      creationTime: "2020-09-30T14:42:03Z"
      readyToUse: true 
    3
    
      sourceUID: 355897f3-73a0-4ec4-83d3-3c2df9486f4f
      virtualMachineSnapshotContentName: vmsnapshot-content-28eedf08-5d6a-42c1-969c-2eda58e2a78d 
    4
    
      indications: 
    5
    
        - Online
      includedVolumes: 
    6
    
        - name: rootdisk
          kind: PersistentVolumeClaim
          namespace: default
        - name: datadisk1
          kind: DataVolume
          namespace: default
    Copy to Clipboard Toggle word wrap

    1
    Progressing 状態の status フィールドは、スナップショットが作成中であるかどうかを指定します。
    2
    Ready 状態の status フィールドは、スナップショットの作成プロセスが完了しているかどうかを指定します。
    3
    スナップショットを使用する準備ができているかどうかを指定します。
    4
    スナップショットが、スナップショットコントローラーで作成される VirtualMachineSnapshotContent オブジェクトにバインドされるように指定します。
    5
    スナップショットがオンラインスナップショットであるかどうか、または QEMU ゲストエージェントの実行中に作成されたかどうかなど、スナップショットに関する追加情報を指定します。
    6
    スナップショットの一部であるストレージボリュームとそのパラメーターをリスト表示します。
  3. スナップショットの説明の includedVolumes セクションをチェックして、予想される PVC がスナップショットに含まれていることを確認します。

15.1.4. スナップショット指示を使用したオンラインスナップショットの検証

スナップショットの表示は、オンライン仮想マシン (VM) スナップショット操作に関するコンテキスト情報です。オフラインの仮想マシン (VM) スナップショット操作では、指示は利用できません。イベントは、オンラインスナップショット作成の詳説する際に役立ちます。

前提条件

  • オンライン仮想マシンスナップショットを作成しようとしている必要があります。

手順

  1. 次のいずれかの操作を実行して、スナップショット指示からの出力を表示します。

    • コマンドラインを使用して、VirtualMachineSnapshot オブジェクト YAML の status スタンザのインジケーター出力を表示します。
    • Web コンソールの Snapshot details 画面で、VirtualMachineSnapshotStatus をクリックします。
  2. status.indications パラメーターの値を表示して、オンラインの仮想マシンスナップショットのステータスを確認します。

    • Online は、オンラインスナップショットの作成中に仮想マシンが実行されていたことを示します。
    • GuestAgent は、オンラインスナップショットの作成中に QEMU ゲストエージェントが実行されていたことを示します。
    • NoGuestAgent は、オンラインスナップショットの作成中に QEMU ゲストエージェントが実行されていなかったことを示します。QEMU ゲストエージェントがインストールされていないか、実行されていないか、別のエラーが原因で、QEMU ゲストエージェントを使用してファイルシステムをフリーズしてフリーズを解除できませんでした。

15.1.5. スナップショットからの仮想マシンの復元

Red Hat OpenShift Service on AWS Web コンソールまたはコマンドラインを使用して、スナップショットから仮想マシン (VM) を復元できます。

15.1.5.1. Web コンソールを使用したスナップショットからの仮想マシンの復元

Red Hat OpenShift Service on AWS Web コンソールのスナップショットで表される以前の設定に仮想マシン (VM) を復元できます。

手順

  1. Web コンソールで VirtualizationVirtualMachines に移動します。
  2. 仮想マシンを選択して、VirtualMachine details ページを開きます。
  3. 仮想マシンが実行中の場合は、Options メニュー kebab をクリックし、Stop を選択して電源を切ります。
  4. Snapshots タブをクリックして、仮想マシンに関連付けられたスナップショットのリストを表示します。
  5. スナップショットを選択して、Snapshot Details 画面を開きます。
  6. Options メニュー kebab をクリックし、Restore VirtualMachine from snapshot を選択します。
  7. Restore をクリックします。
  8. オプション: スナップショットに基づいて新しい仮想マシンを作成することもできます。これを行うには、以下を行います。

    1. スナップショットのオプションメニュー kebab から、Create VirtualMachine from Snapshot を選択します。
    2. 新しい仮想マシンの名前を指定します。
    3. Create をクリックします。
15.1.5.2. CLI を使用したスナップショットからの仮想マシンの復元

コマンドラインを使用して、既存の仮想マシンを以前の設定に復元できます。オフラインの仮想マシンスナップショットからしか復元できません。

前提条件

  • OpenShift CLI (oc) がインストールされている。
  • 復元する仮想マシンの電源を切ります。
  • オプション: ターゲット仮想マシンが完全に停止 (ready) しない場合の動作を調整します。これを行うには、vmrestore YAML 設定の targetReadinessPolicy パラメーターを次のいずれかの値に設定します。

    • FailImmediate - 仮想マシンの準備ができていない場合、復元プロセスは直ちに失敗します。
    • StopTarget - 仮想マシンの準備ができていない場合、仮想マシンは停止され、復元プロセスが開始されます。
    • WaitGracePeriod 5 - 復元プロセスは、仮想マシンの準備ができるまで、設定された時間 (分単位) 待機します。これはデフォルトの設定であり、デフォルト値は 5 分に設定されています。
    • WaitEventually - 復元プロセスは、仮想マシンの準備が整うまで無制限に待機します。

手順

  1. 次の例のように、復元する仮想マシンの名前およびソースとして使用されるスナップショットの名前を指定する VirtualMachineRestore オブジェクトを定義するために YAML ファイルを作成します。

    apiVersion: snapshot.kubevirt.io/v1beta1
    kind: VirtualMachineRestore
    metadata:
      name: <vm_restore>
    spec:
      target:
        apiGroup: kubevirt.io
        kind: VirtualMachine
        name: <vm_name>
      virtualMachineSnapshotName: <snapshot_name>
    Copy to Clipboard Toggle word wrap
  2. VirtualMachineRestore オブジェクトを作成します。

    $ oc create -f <vm_restore>.yaml
    Copy to Clipboard Toggle word wrap

    スナップショットコントローラーは、VirtualMachineRestore オブジェクトのステータスフィールドを更新し、既存の仮想マシン設定をスナップショットのコンテンツに置き換えます。

検証

  • 仮想マシンがスナップショットで表される以前の状態に復元されていること、および complete フラグが true に設定されていることを確認します。

    $ oc get vmrestore <vm_restore>
    Copy to Clipboard Toggle word wrap

    出力例

    apiVersion: snapshot.kubevirt.io/v1beta1
    kind: VirtualMachineRestore
    metadata:
    creationTimestamp: "2020-09-30T14:46:27Z"
    generation: 5
    name: my-vmrestore
    namespace: default
    ownerReferences:
    - apiVersion: kubevirt.io/v1
      blockOwnerDeletion: true
      controller: true
      kind: VirtualMachine
      name: my-vm
      uid: 355897f3-73a0-4ec4-83d3-3c2df9486f4f
      resourceVersion: "5512"
      selfLink: /apis/snapshot.kubevirt.io/v1beta1/namespaces/default/virtualmachinerestores/my-vmrestore
      uid: 71c679a8-136e-46b0-b9b5-f57175a6a041
      spec:
        target:
          apiGroup: kubevirt.io
          kind: VirtualMachine
          name: my-vm
      virtualMachineSnapshotName: my-vmsnapshot
      status:
      complete: true 
    1
    
      conditions:
      - lastProbeTime: null
      lastTransitionTime: "2020-09-30T14:46:28Z"
      reason: Operation complete
      status: "False" 
    2
    
      type: Progressing
      - lastProbeTime: null
      lastTransitionTime: "2020-09-30T14:46:28Z"
      reason: Operation complete
      status: "True" 
    3
    
      type: Ready
      deletedDataVolumes:
      - test-dv1
      restoreTime: "2020-09-30T14:46:28Z"
      restores:
      - dataVolumeName: restore-71c679a8-136e-46b0-b9b5-f57175a6a041-datavolumedisk1
      persistentVolumeClaim: restore-71c679a8-136e-46b0-b9b5-f57175a6a041-datavolumedisk1
      volumeName: datavolumedisk1
      volumeSnapshotName: vmsnapshot-28eedf08-5d6a-42c1-969c-2eda58e2a78d-volume-datavolumedisk1
    Copy to Clipboard Toggle word wrap

    1
    仮想マシンをスナップショットで表される状態に復元するプロセスが完了しているかどうかを指定します。
    2
    Progressing 状態の status フィールドは、仮想マシンが復元されているかどうかを指定します。
    3
    Ready 状態の status フィールドは、仮想マシンの復元プロセスが完了しているかどうかを指定します。

15.1.6. スナップショットの削除

Red Hat OpenShift Service on AWS Web コンソールまたはコマンドラインを使用して、仮想マシン (VM) のスナップショットを削除できます。

15.1.6.1. Web コンソールを使用してスナップショットを削除する

Web コンソールを使用して既存の仮想マシンスナップショットを削除できます。

手順

  1. Web コンソールで VirtualizationVirtualMachines に移動します。
  2. 仮想マシンを選択して、VirtualMachine details ページを開きます。
  3. Snapshots タブをクリックして、仮想マシンに関連付けられたスナップショットのリストを表示します。
  4. スナップショットの横にある Options メニュー kebab をクリックし、Delete snapshot を選択します。
  5. Delete をクリックします。
15.1.6.2. CLI での仮想マシンのスナップショットの削除

適切な VirtualMachineSnapshot オブジェクトを削除して、既存の仮想マシン (VM) スナップショットを削除できます。

前提条件

  • OpenShift CLI (oc) がインストールされている。

手順

  • VirtualMachineSnapshot オブジェクトを削除します。

    $ oc delete vmsnapshot <snapshot_name>
    Copy to Clipboard Toggle word wrap

    スナップショットコントローラーは、VirtualMachineSnapshot を、関連付けられた VirtualMachineSnapshotContent オブジェクトと共に削除します。

検証

  • スナップショットが削除され、この仮想マシンに割り当てられていないことを確認します。

    $ oc get vmsnapshot
    Copy to Clipboard Toggle word wrap

15.2. 仮想マシンのバックアップと復元

重要

Red Hat は、OADP 1.3.x 以降で OpenShift Virtualization 4.14 以降を使用することをサポートしています。

OADP 1.3.0 より前のバージョンでは、OpenShift Virtualization のバックアップと復元ではサポートされていません。

OpenShift API for Data Protection を使用して仮想マシンをバックアップおよび復元します。

OADP Operator をインストールし、バックアップの場所を設定することで、OpenShift Virtualization を使用した OpenShift API for Data Protection (OADP) をインストールできます。その後、Data Protection Application をインストールできます。

注記

OpenShift Virtualization を使用した OpenShift API for Data Protection は、バックアップおよび復元のストレージオプションとして次のものをサポートしています。

  • Container Storage Interface (CSI) バックアップ
  • DataMover による Container Storage Interface (CSI) バックアップ

次のストレージオプションは対象外です。

  • ファイルシステムのバックアップと復元
  • ボリュームスナップショットのバックアップと復元

制限されたネットワーク環境に OADP Operator をインストールするには、最初にデフォルトの OperatorHub ソースを無効にして、Operator カタログをミラーリングする必要があります。

15.2.1. OpenShift Virtualization を使用した OADP のインストールと設定

クラスター管理者は、OADP Operator をインストールして OADP をインストールします。

最新バージョンの OADP Operator は、Velero 1.16 をインストールします。

前提条件

  • cluster-admin ロールを持つユーザーとしてクラスターにアクセスできる。

手順

  1. ストレージプロバイダーの指示に従って、OADP Operator をインストールします。
  2. kubevirt および openshift OADP プラグインを使用して Data Protection Application (DPA) をインストールします。
  3. Backup カスタムリソース (CR) を作成して、仮想マシンをバックアップします。

    警告

    Red Hat のサポート対象は、次のオプションに限られています。

    • CSI バックアップ
    • DataMover による CSI バックアップ

Restore CR を作成して Backup CR を復元します。

15.2.2. Data Protection Application のインストール

DataProtectionApplication API のインスタンスを作成して、Data Protection Application (DPA) をインストールします。

前提条件

  • OADP Operator をインストールする。
  • オブジェクトストレージをバックアップロケーションとして設定する必要がある。
  • スナップショットを使用して PV をバックアップする場合、クラウドプロバイダーはネイティブスナップショット API または Container Storage Interface (CSI) スナップショットのいずれかをサポートする必要がある。
  • バックアップとスナップショットの場所で同じ認証情報を使用する場合は、デフォルトの名前である cloud-credentials を使用して Secret を作成する必要がある。

    注記

    インストール中にバックアップまたはスナップショットの場所を指定したくない場合は、空の credentials-velero ファイルを使用してデフォルトの Secret を作成できます。デフォルトの Secret がない場合、インストールは失敗します。

手順

  1. OperatorsInstalled Operators をクリックして、OADP Operator を選択します。
  2. Provided APIs で、DataProtectionApplication ボックスの Create instance をクリックします。
  3. YAML View をクリックして、DataProtectionApplication マニフェストのパラメーターを更新します。

    apiVersion: oadp.openshift.io/v1alpha1
    kind: DataProtectionApplication
    metadata:
      name: <dpa_sample>
      namespace: openshift-adp 
    1
    
    spec:
      configuration:
        velero:
          defaultPlugins:
            - kubevirt 
    2
    
            - gcp 
    3
    
            - csi 
    4
    
            - openshift 
    5
    
          resourceTimeout: 10m 
    6
    
        nodeAgent: 
    7
    
          enable: true 
    8
    
          uploaderType: kopia 
    9
    
          podConfig:
            nodeSelector: <node_selector> 
    10
    
      backupLocations:
        - velero:
            provider: gcp 
    11
    
            default: true
            credential:
              key: cloud
              name: <default_secret> 
    12
    
            objectStorage:
              bucket: <bucket_name> 
    13
    
              prefix: <prefix> 
    14
    Copy to Clipboard Toggle word wrap
    1
    OADP のデフォルトの namespace は openshift-adp です。namespace は変数であり、設定可能です。
    2
    kubevirt プラグインは OpenShift Virtualization に必須です。
    3
    バックアッププロバイダーのプラグインがある場合には、それを指定します (例: gcp)。
    4
    CSI スナップショットを使用して PV をバックアップするには、csi プラグインが必須です。csi プラグインは、Velero CSI ベータスナップショット API を使用します。スナップショットの場所を設定する必要はありません。
    5
    openshift プラグインは必須です。
    6
    Velero CRD の可用性、volumeSnapshot の削除、バックアップリポジトリーの可用性など、タイムアウトが発生するまでに複数の Velero リソースを待機する時間を分単位で指定します。デフォルトは 10m です。
    7
    管理要求をサーバーにルーティングする管理エージェント。
    8
    nodeAgent を有効にして File System Backup を実行する場合は、この値を true に設定します。
    9
    組み込み DataMover を使用するには、アップローダーとして kopia と入力します。nodeAgent はデーモンセットをデプロイします。これは、nodeAgent Pod が各ワーキングノード上で実行されることを意味します。File System Backup を設定するには、spec.defaultVolumesToFsBackup: trueBackup CR に追加します。
    10
    Kopia が利用可能なノードを指定します。デフォルトでは、Kopia はすべてのノードで実行されます。
    11
    バックアッププロバイダーを指定します。
    12
    バックアッププロバイダーにデフォルトのプラグインを使用する場合は、Secret の正しいデフォルト名を指定します (例: cloud-credentials-gcp)。カスタム名を指定すると、そのカスタム名がバックアップの場所に使用されます。Secret 名を指定しない場合は、デフォルトの名前が使用されます。
    13
    Backup Storage Location としてバケットを指定します。バケットが Velero バックアップ専用のバケットでない場合は、接頭辞を指定する必要があります。
    14
    バケットが複数の目的で使用される場合は、Velero バックアップの接頭辞を指定します (例: velero)。
  4. Create をクリックします。

検証

  1. 次のコマンドを実行して OpenShift API for Data Protection (OADP) リソースを表示し、インストールを検証します。

    $ oc get all -n openshift-adp
    Copy to Clipboard Toggle word wrap

    出力例

    NAME                                                     READY   STATUS    RESTARTS   AGE
    pod/oadp-operator-controller-manager-67d9494d47-6l8z8    2/2     Running   0          2m8s
    pod/node-agent-9cq4q                                     1/1     Running   0          94s
    pod/node-agent-m4lts                                     1/1     Running   0          94s
    pod/node-agent-pv4kr                                     1/1     Running   0          95s
    pod/velero-588db7f655-n842v                              1/1     Running   0          95s
    
    NAME                                                       TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)    AGE
    service/oadp-operator-controller-manager-metrics-service   ClusterIP   172.30.70.140    <none>        8443/TCP   2m8s
    service/openshift-adp-velero-metrics-svc                   ClusterIP   172.30.10.0      <none>        8085/TCP   8h
    
    NAME                        DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
    daemonset.apps/node-agent    3         3         3       3            3           <none>          96s
    
    NAME                                                READY   UP-TO-DATE   AVAILABLE   AGE
    deployment.apps/oadp-operator-controller-manager    1/1     1            1           2m9s
    deployment.apps/velero                              1/1     1            1           96s
    
    NAME                                                           DESIRED   CURRENT   READY   AGE
    replicaset.apps/oadp-operator-controller-manager-67d9494d47    1         1         1       2m9s
    replicaset.apps/velero-588db7f655                              1         1         1       96s
    Copy to Clipboard Toggle word wrap

  2. 次のコマンドを実行して、DataProtectionApplication (DPA) が調整されていることを確認します。

    $ oc get dpa dpa-sample -n openshift-adp -o jsonpath='{.status}'
    Copy to Clipboard Toggle word wrap

    出力例

    {"conditions":[{"lastTransitionTime":"2023-10-27T01:23:57Z","message":"Reconcile complete","reason":"Complete","status":"True","type":"Reconciled"}]}
    Copy to Clipboard Toggle word wrap

  3. typeReconciled に設定されていることを確認します。
  4. 次のコマンドを実行して、Backup Storage Location を確認し、PHASEAvailable であることを確認します。

    $ oc get backupstoragelocations.velero.io -n openshift-adp
    Copy to Clipboard Toggle word wrap

    出力例

    NAME           PHASE       LAST VALIDATED   AGE     DEFAULT
    dpa-sample-1   Available   1s               3d16h   true
    Copy to Clipboard Toggle word wrap

Legal Notice

Copyright © 2025 Red Hat

OpenShift documentation is licensed under the Apache License 2.0 (https://www.apache.org/licenses/LICENSE-2.0).

Modified versions must remove all Red Hat trademarks.

Portions adapted from https://github.com/kubernetes-incubator/service-catalog/ with modifications by Red Hat.

Red Hat, Red Hat Enterprise Linux, the Red Hat logo, the Shadowman logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.

Linux® is the registered trademark of Linus Torvalds in the United States and other countries.

Java® is a registered trademark of Oracle and/or its affiliates.

XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.

MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.

Node.js® is an official trademark of Joyent. Red Hat Software Collections is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.

The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation’s permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.

All other trademarks are the property of their respective owners.

トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

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

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

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

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

会社概要

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

Theme

© 2025 Red Hat