6.9. 仮想マシンのインポート
6.9.1. DataVolume インポートの TLS 証明書
6.9.1.1. DataVolume インポートの認証に使用する TLS 証明書の追加
ソースからデータをインポートするには、レジストリーまたは HTTPS エンドポイントの TLS 証明書を ConfigMap に追加する必要があります。この ConfigMap は、宛先 DataVolume の namespace に存在する必要があります。
TLS 証明書の相対パスを参照して ConfigMap を作成します。
手順
正しい namespace にあることを確認します。ConfigMap は、同じ namespace にある場合に DataVolume によってのみ参照されます。
$ oc get ns
ConfigMap を作成します。
$ oc create configmap <configmap-name> --from-file=</path/to/file/ca.pem>
6.9.1.2. 例: TLS 証明書から作成される ConfigMap
以下は、ca.pem
TLS 証明書で作成される ConfigMap の例です。
apiVersion: v1 kind: ConfigMap metadata: name: tls-certs data: ca.pem: | -----BEGIN CERTIFICATE----- ... <base64 encoded cert> ... -----END CERTIFICATE-----
6.9.2. DataVolume の使用による仮想マシンイメージのインポート
既存の仮想マシンイメージは OpenShift Container Platform クラスターにインポートできます。Container-native Virtualization は DataVolume を使用してデータのインポートおよび基礎となる PersistentVolumeClaim (PVC) の作成を自動化します。
ディスクイメージを PVC にインポートする際に、ディスクイメージは PVC で要求されるストレージの全容量を使用するように拡張されます。この領域を使用するには、仮想マシンのディスクパーティションおよびファイルシステムの拡張が必要になる場合があります。
サイズ変更の手順は、仮想マシンにインストールされるオペレーティングシステムによって異なります。詳細は、該当するオペレーティングシステムのドキュメントを参照してください。
6.9.2.1. 前提条件
- エンドポイントに TLS 証明書が必要な場合、証明書は DataVolume と同じ namespace の ConfigMap に組み込む必要があり、これは DataVolume 設定で参照されます。
- この操作を正常に実行するためには、StorageClass を定義するか、CDI のスクラッチ領域を用意する必要がある場合があります。
6.9.2.2. CDI がサポートする操作マトリックス
このマトリックスにはエンドポイントに対してコンテンツタイプのサポートされる CDI 操作が表示されます。これらの操作にはスクラッチ領域が必要です。
コンテンツタイプ | HTTP | HTTPS | HTTP Basic 認証 | レジストリー | アップロード |
---|---|---|---|---|---|
kubevirt (QCOW2) |
✓ QCOW2 |
✓ QCOW2** |
✓ QCOW2 |
✓ QCOW2* |
✓ QCOW2* |
KubeVirt (RAW) |
✓ RAW |
✓ RAW |
✓ RAW |
✓ RAW* |
✓ RAW* |
Archive+ | ✓ TAR | ✓ TAR | ✓ TAR | □ TAR | □ TAR |
✓ サポートされる操作
□ サポートされない操作
* スクラッチ領域が必要
**カスタム認証局が必要な場合にスクラッチ領域が必要
+ アーカイブはブロックモード DV をサポートしません。
6.9.2.3. DataVolume について
DataVolume
オブジェクトは、Containerized Data Importer (CDI) プロジェクトで提供されるカスタムリソースです。DataVolume は、基礎となる PersistentVolumeClaim (PVC) に関連付けられるインポート、クローン作成、およびアップロード操作のオーケストレーションを行います。DataVolume は KubeVirt に統合され、仮想マシンが PVC の作成前に起動することを防ぎます。
6.9.2.4. DataVolume のあるオブジェクトへの仮想マシンイメージのインポート
インポートされたイメージから仮想マシンを作成するには、仮想マシンを作成する前にイメージの場所を VirtualMachine
設定ファイルに指定します。
前提条件
-
OpenShift CLI (
oc
) のインストール。 -
RAW、ISO、または QCOW2 形式の仮想マシンディスクイメージ (オプションで
xz
またはgz
を使用して圧縮される) -
イメージがデータソースにアクセスするために必要な認証情報と共にホストされる
HTTP
エンドポイント - 1 つ以上の利用可能な PersistentVolume
手順
インポートする必要のある仮想ディスクイメージをホストする
HTTP
ファイルサーバーを特定します。正しい形式での完全な URL が必要になります。データソースに認証情報が必要な場合、
endpoint-secret.yaml
ファイルを編集し、更新された設定をクラスターに適用します。apiVersion: v1 kind: Secret metadata: name: <endpoint-secret> labels: app: containerized-data-importer type: Opaque data: accessKeyId: "" 1 secretKey: "" 2
$ oc apply -f endpoint-secret.yaml
仮想マシン設定ファイルを編集し、インポートする必要のあるイメージのデータソースを指定します。この例では、Fedora イメージがインポートされます。
apiVersion: kubevirt.io/v1alpha3 kind: VirtualMachine metadata: creationTimestamp: null labels: kubevirt.io/vm: vm-fedora-datavolume name: vm-fedora-datavolume spec: dataVolumeTemplates: - metadata: creationTimestamp: null name: fedora-dv spec: pvc: accessModes: - ReadWriteOnce resources: requests: storage: 2Gi storageClassName: local source: http: url: https://download.fedoraproject.org/pub/fedora/linux/releases/28/Cloud/x86_64/images/Fedora-Cloud-Base-28-1.1.x86_64.qcow2 1 secretRef: "" 2 certConfigMap: "" 3 status: {} running: false template: metadata: creationTimestamp: null labels: kubevirt.io/vm: vm-fedora-datavolume spec: domain: devices: disks: - disk: bus: virtio name: datavolumedisk1 machine: type: "" resources: requests: memory: 64M terminationGracePeriodSeconds: 0 volumes: - dataVolume: name: fedora-dv name: datavolumedisk1 status: {}
仮想マシンを作成します。
$ oc create -f vm-<name>-datavolume.yaml
注記oc create
コマンドは、DataVolume および仮想マシンを作成します。CDI コントローラーは適切なアノテーションを使って基礎となる PVC を作成し、インポートプロセスが開始されます。インポートが完了すると、DataVolume のステータスはSucceeded
に変更され、仮想マシンの起動が可能になります。DataVolume のプロビジョニングはバックグランドで実行されるため、これをモニターする必要はありません。仮想マシンは起動できますが、これはインポートが完了するまで実行されません。
オプションの検証手順
-
oc get pods
を実行し、インポーター Pod を見つけます。この Pod は指定された URL からイメージをダウンロードし、これをプロビジョニングされた PV に保存します。 Succeeded
が表示されるまで DataVolume のステータスをモニターします。$ oc describe dv <data-label> 1
- 1
- 仮想マシン設定ファイルに指定された DataVolume のデータラベル。
プロビジョニングが完了し、VMI が起動したことを検証するには、そのシリアルコンソールへのアクセスを試行します。
$ virtctl console <vm-fedora-datavolume>
6.9.2.5. テンプレート: DataVolume 仮想マシン設定ファイル
example-dv-vm.yaml
apiVersion: kubevirt.io/v1alpha3
kind: VirtualMachine
metadata:
labels:
kubevirt.io/vm: example-vm
name: example-vm
spec:
dataVolumeTemplates:
- metadata:
name: example-dv
spec:
pvc:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1G
source:
http:
url: "" 1
running: false
template:
metadata:
labels:
kubevirt.io/vm: example-vm
spec:
domain:
cpu:
cores: 1
devices:
disks:
- disk:
bus: virtio
name: example-dv-disk
machine:
type: q35
resources:
requests:
memory: 1G
terminationGracePeriodSeconds: 0
volumes:
- dataVolume:
name: example-dv
name: example-dv-disk
- 1
- インポートする必要のあるイメージの
HTTP
ソース (該当する場合)。
6.9.2.6. テンプレート: DataVolume インポート設定ファイル
example-import-dv.yaml
apiVersion: cdi.kubevirt.io/v1alpha1 kind: DataVolume metadata: name: "example-import-dv" spec: source: http: url: "" 1 secretRef: "" 2 pvc: accessModes: - ReadWriteOnce resources: requests: storage: "1G"
6.9.3. DataVolume の使用による仮想マシンイメージのブロックストレージへのインポート
既存の仮想マシンイメージは OpenShift Container Platform クラスターにインポートできます。Container-native Virtualization は DataVolume を使用してデータのインポートおよび基礎となる PersistentVolumeClaim (PVC) の作成を自動化します。
ディスクイメージを PVC にインポートする際に、ディスクイメージは PVC で要求されるストレージの全容量を使用するように拡張されます。この領域を使用するには、仮想マシンのディスクパーティションおよびファイルシステムの拡張が必要になる場合があります。
サイズ変更の手順は、仮想マシンにインストールされるオペレーティングシステムによって異なります。詳細は、該当するオペレーティングシステムのドキュメントを参照してください。
6.9.3.1. 前提条件
- CDI でサポートされる操作マトリックスに応じてスクラッチ領域が必要な場合、まずは、この操作が正常に実行されるように StorageClass を定義するか、またはCDI スクラッチ領域を用意します。
6.9.3.2. DataVolume について
DataVolume
オブジェクトは、Containerized Data Importer (CDI) プロジェクトで提供されるカスタムリソースです。DataVolume は、基礎となる PersistentVolumeClaim (PVC) に関連付けられるインポート、クローン作成、およびアップロード操作のオーケストレーションを行います。DataVolume は KubeVirt に統合され、仮想マシンが PVC の作成前に起動することを防ぎます。
6.9.3.3. ブロック PersistentVolume について
ブロック PersistentVolume (PV) は、raw ブロックデバイスによってサポートされる PV です。これらのボリュームにはファイルシステムがなく、ディスクに直接書き込む仮想マシンや、独自のストレージサービスを実装する仮想マシンにはパフォーマンス上の利点があります。
raw ブロックボリュームは、PV および PersistentVolumeClaim (PVC) 仕様で volumeMode: Block
を指定してプロビジョニングされます。
6.9.3.4. ローカルブロック PersistentVolume の作成
ファイルにデータを設定し、これをループデバイスとしてマウントすることにより、ノードでローカルブロック PersistentVolume (PV) を作成します。次に、このループデバイスを PV 設定で Block
ボリュームとして参照し、これを仮想マシンイメージのブロックデバイスとして使用できます。
手順
-
ローカル PV を作成するノードに
root
としてログインします。この手順では、node01
を例に使用します。 ファイルを作成して、これを null 文字で設定し、ブロックデバイスとして使用できるようにします。以下の例では、2Gb (20 100Mb ブロック) のサイズのファイル
loop10
を作成します。$ dd if=/dev/zero of=<loop10> bs=100M count=20
loop10
ファイルをループデバイスとしてマウントします。$ losetup </dev/loop10>d3 <loop10> 1 2
マウントされたループデバイスを参照する
PersistentVolume
設定を作成します。kind: PersistentVolume apiVersion: v1 metadata: name: <local-block-pv10> annotations: spec: local: path: </dev/loop10> 1 capacity: storage: <2Gi> volumeMode: Block 2 storageClassName: local 3 accessModes: - ReadWriteOnce persistentVolumeReclaimPolicy: Delete nodeAffinity: required: nodeSelectorTerms: - matchExpressions: - key: kubernetes.io/hostname operator: In values: - <node01> 4
ブロック PV を作成します。
# oc create -f <local-block-pv10.yaml>1
- 1
- 直前の手順で作成された PersistentVolume のファイル名。
6.9.3.5. DataVolume を使用した仮想マシンイメージのブロック PersistentVolume へのインポート
既存の仮想マシンイメージは OpenShift Container Platform クラスターにインポートできます。Container-native Virtualization は DataVolume を使用してデータのインポートおよび基礎となる PersistentVolumeClaim (PVC) の作成を自動化します。その後、仮想マシン設定で DataVolume を参照できます。
前提条件
-
RAW、ISO、または QCOW2 形式の仮想マシンディスクイメージ (オプションで
xz
またはgz
を使用して圧縮される) -
データソースにアクセスするために必要な認証情報と共にイメージがホストされる
HTTP
またはs3
エンドポイント - 少なくとも 1 つ以上の利用可能なブロック PV。
手順
データソースに認証情報が必要な場合、
endpoint-secret.yaml
ファイルを編集し、更新された設定をクラスターに適用します。選択するテキストエディターで
endpoint-secret.yaml
ファイルを編集します。apiVersion: v1 kind: Secret metadata: name: <endpoint-secret> labels: app: containerized-data-importer type: Opaque data: accessKeyId: "" 1 secretKey: "" 2
シークレットを更新します。
$ oc apply -f endpoint-secret.yaml
インポートするイメージのデータソースを指定する
DataVolume
およびvolumeMode: Block
を作成して、利用可能なブロック PV が使用されるようにします。apiVersion: cdi.kubevirt.io/v1alpha1 kind: DataVolume metadata: name: <import-pv-datavolume> 1 spec: storageClassName: local 2 source: http: url: <http://download.fedoraproject.org/pub/fedora/linux/releases/28/Cloud/x86_64/images/Fedora-Cloud-Base-28-1.1.x86_64.qcow2> 3 secretRef: <endpoint-secret> 4 pvc: volumeMode: Block 5 accessModes: - ReadWriteOnce resources: requests: storage: <2Gi>
仮想マシンイメージをインポートするために DataVolume を作成します。
$ oc create -f <import-pv-datavolume.yaml>1
- 1
- 直前の手順で作成されたファイル名 DataVolume。
6.9.3.6. CDI がサポートする操作マトリックス
このマトリックスにはエンドポイントに対してコンテンツタイプのサポートされる CDI 操作が表示されます。これらの操作にはスクラッチ領域が必要です。
コンテンツタイプ | HTTP | HTTPS | HTTP Basic 認証 | レジストリー | アップロード |
---|---|---|---|---|---|
kubevirt (QCOW2) |
✓ QCOW2 |
✓ QCOW2** |
✓ QCOW2 |
✓ QCOW2* |
✓ QCOW2* |
KubeVirt (RAW) |
✓ RAW |
✓ RAW |
✓ RAW |
✓ RAW* |
✓ RAW* |
Archive+ | ✓ TAR | ✓ TAR | ✓ TAR | □ TAR | □ TAR |
✓ サポートされる操作
□ サポートされない操作
* スクラッチ領域が必要
**カスタム認証局が必要な場合にスクラッチ領域が必要
+ アーカイブはブロックモード DV をサポートしません。
6.9.4. VMware 仮想マシンまたはテンプレートのインポート
単一の VMware 仮想マシンまたはテンプレートを OpenShift Container Platform クラスターにインポートできます。
VMware テンプレートをインポートする場合、ウィザードはテンプレートに基づいて仮想マシンを作成します。
VMware 仮想マシンまたはテンプレートのインポートはテクノロジープレビュー機能です。テクノロジープレビュー機能は Red Hat の実稼働環境でのサービスレベルアグリーメント (SLA) ではサポートされていないため、Red Hat では実稼働環境での使用を推奨していません。Red Hat は実稼働環境でこれらを使用することを推奨していません。これらの機能は、近々発表予定の製品機能をリリースに先駆けてご提供することにより、お客様は機能性をテストし、開発プロセス中にフィードバックをお寄せいただくことができます。
Red Hat のテクノロジープレビュー機能のサポート範囲についての詳細は、https://access.redhat.com/ja/support/offerings/techpreview/ を参照してください。
インポートプロセスでは、VMware Virtual Disk Development Kit (VDDK) を使用して VMware 仮想ディスクをコピーします。VDDK SDK をダウンロードし、VDDK イメージをビルドし、イメージレジストリーにイメージをアップロードしてからこれを v2v-vmware
ConfigMap に追加できます。
仮想マシンウィザードで VMware 仮想マシンをインポートしてから、仮想マシンのネットワーク名を更新することができます。
6.9.4.1. VDDK イメージのイメージレジストリーの設定
内部 OpenShift Container Platform イメージレジストリーまたは VDDK イメージのセキュアな外部イメージレジストリーのいずれかを設定できます。
VDDK イメージをパブリックリポジトリーに保存すると、VMware ライセンスの条件に違反する可能性があります。
6.9.4.1.1. 内部イメージレジストリーの設定
イメージレジストリー Operator 設定を更新して、ベアメタルに内部 OpenShift Container Platform イメージレジストリーを設定できます。
6.9.4.1.1.1. イメージレジストリーの管理状態の変更
イメージレジストリーを起動するには、イメージレジストリー Operator 設定の managementState
を Removed
から Managed
に変更する必要があります。
手順
ManagementState
イメージレジストリー Operator 設定をRemoved
からManaged
に変更します。以下は例になります。$ oc patch configs.imageregistry.operator.openshift.io cluster --type merge --patch '{"spec":{"managementState":"Managed"}}'
6.9.4.1.1.2. ベアメタルの場合のレジストリーストレージの設定
クラスター管理者は、インストール後にレジストリーをストレージを使用できるように設定する必要があります。
前提条件
- クラスター管理者のパーミッション。
- ベアメタル上のクラスター。
- Red Hat OpenShift Container Storage などのクラスターの永続ストレージをプロビジョニングします。プライベートイメージレジストリーをデプロイするには、ストレージで ReadWriteMany アクセスモードを指定する必要があります。
- 容量は「100Gi」以上である。
手順
レジストリーをストレージを使用できるように設定するには、
configs.imageregistry/cluster
リソースのspec.storage.pvc
を変更します。注記NFS などの共有ストレージを使用する場合は、
fsGroup
ID ではなく、セキュリティーコンテキストの許可される補助グループを定めるsupplementalGroups
ストラテジーを使用することが強く推奨されます。詳細は、NFS の グループ ID についてのドキュメントを参照してください。レジストリー Pod がないことを確認します。
$ oc get pod -n openshift-image-registry
注記-
ストレージタイプが
emptyDIR
の場合、レプリカ数が1
を超えることはありません。 ストレージタイプが
NFS
の場合、no_wdelay
およびroot_squash
マウントオプションを有効にする必要があります。以下は例になります。# cat /etc/exports /mnt/data *(rw,sync,no_wdelay,root_squash,insecure,fsid=0) sh-4.3# exportfs -rv exporting *:/mnt/data
-
ストレージタイプが
レジストリー設定を確認します。
$ oc edit configs.imageregistry.operator.openshift.io storage: pvc: claim:
claim
フィールドを空のままにし、image-registry-storage
PVC の自動作成を可能にします。clusteroperator
ステータスを確認します。$ oc get clusteroperator image-registry
6.9.4.1.2. 内部イメージレジストリーへのアクセスの設定
レジストリーをルートで公開して、クラスター内から OpenShift Container Platform 内部レジストリーに直接アクセスできます。
6.9.4.1.2.1. クラスターからレジストリーへの直接アクセス
クラスター内からレジストリーにアクセスすることができます。
手順
内部ルートを使用して、クラスターからレジストリーにアクセスします。
ノードのアドレスを取得することにより、ノードにアクセスします。
$ oc get nodes $ oc debug nodes/<node_address>
ノード上で
oc
やpodman
などのツールにアクセスするには、以下のコマンドを実行します。sh-4.2# chroot /host
アクセストークンを使用してコンテナーイメージレジストリーにログインします。
sh-4.4# oc login -u kubeadmin -p <password_from_install_log> https://api-int.<cluster_name>.<base_domain>:6443 sh-4.4# podman login -u kubeadmin -p $(oc whoami -t) image-registry.openshift-image-registry.svc:5000
以下のようなログインを確認するメッセージが表示されるはずです。
Login Succeeded!
注記ユーザー名には任意の値を指定でき、トークンには必要な情報がすべて含まれます。コロンが含まれるユーザー名を指定すると、ログインに失敗します。
イメージレジストリー Operator はルートを作成するため、
default-route-openshift-image-registry.<cluster_name>
のようになります。レジストリーに対して
podman pull
およびpodman push
操作を実行します。重要任意のイメージをプルできますが、system:registry ロールを追加している場合は、各自のプロジェクトにあるレジストリーにのみイメージをプッシュすることができます。
次の例では、以下を使用します。
Component 値 <registry_ip>
172.30.124.220
<port>
5000
<project>
openshift
<image>
image
<tag>
省略 (デフォルトは
latest
)任意のイメージをプルします。
$ podman pull name.io/image
新規イメージに
<registry_ip>:<port>/<project>/<image>
形式でタグ付けします。プロジェクト名は、イメージを正しくレジストリーに配置し、これに後でアクセスできるようにするために OpenShift Container Platform のプル仕様に表示される必要があります。$ podman tag name.io/image image-registry.openshift-image-registry.svc:5000/openshift/image
注記指定されたプロジェクトについて
system:image-builder
ロールを持っている必要があります。このロールにより、ユーザーはイメージの書き出しやプッシュを実行できます。そうでない場合は、次の手順のpodman push
は失敗します。テストするために、新規プロジェクトを作成してイメージをプッシュできます。新しくタグ付けされたイメージをレジストリーにプッシュします。
$ podman push image-registry.openshift-image-registry.svc:5000/openshift/image
6.9.4.1.2.2. セキュアなレジストリーの手動による公開
クラスター内から OpenShift Container Platform レジストリーにログインするのではなく、外部からレジストリーにアクセスできるように、このレジストリーをルートに公開します。この方法を使うと、ルートアドレスを使ってクラスターの外部からレジストリーにログインし、ルートのホストを使ってイメージにタグ付けしたり、イメージをプッシュしたりできます。
前提条件
以下の前提条件は自動的に実行されます。
- レジストリー Operator をデプロイします。
- Ingress Operator をデプロイします。
手順
configs.imageregistry.operator.openshift.io
リソースで DefaultRoute
パラメーターを使用するか、またはカスタムルートを使用してルートを公開することができます。
DefaultRoute
を使用してレジストリーを公開するには、以下を実行します。
DefaultRoute
をTrue
に設定します。$ oc patch configs.imageregistry.operator.openshift.io/cluster --patch '{"spec":{"defaultRoute":true}}' --type=merge
Podman でログインします。
$ HOST=$(oc get route default-route -n openshift-image-registry --template='{{ .spec.host }}') $ podman login -u $(oc whoami) -p $(oc whoami -t) --tls-verify=false $HOST 1
- 1
--tls-verify=false
は、ルートのクラスターのデフォルト証明書が信頼されない場合に必要になります。Ingress Operator で、信頼されるカスタム証明書をデフォルト証明書として設定できます。
カスタムルートを使用してレジストリーを公開するには、以下を実行します。
ルートの TLS キーでシークレットを作成します。
$ oc create secret tls public-route-tls \ -n openshift-image-registry \ --cert=</path/to/tls.crt> \ --key=</path/to/tls.key>
この手順はオプションです。シークレットを作成しない場合、ルートは Ingress Operator からデフォルトの TLS 設定を使用します。
レジストリー Operator では、以下のようになります。
spec: routes: - name: public-routes hostname: myregistry.mycorp.organization secretName: public-route-tls ...
レジストリーのルートのカスタム TLS 設定を指定している場合は
secretName
のみを設定します。
6.9.4.1.3. 外部イメージレジストリーへのアクセスの設定
VDDK イメージの外部イメージレジストリーを使用する場合、外部イメージレジストリーの認証局を OpenShift Container Platform クラスターに追加できます。
オプションで、Docker 認証情報からプルシークレットを作成し、これをサービスアカウントに追加できます。
6.9.4.1.3.1. クラスターへの認証局の追加
以下の手順でイメージのプッシュおよびプル時に使用する認証局 (CA) をクラスターに追加することができます。
前提条件
- クラスター管理者の権限があること。
-
レジストリーの公開証明書 (通常は、
/etc/docker/certs.d/
ディレクトリーにあるhostname/ca.crt
ファイル)。
手順
自己署名証明書を使用するレジストリーの信頼される証明書が含まれる ConfigMap を
openshift-config
namespace に作成します。それぞれの CA ファイルについて、 ConfigMap のキーがhostname[..port]
形式のレジストリーのホスト名であることを確認します。$ oc create configmap registry-cas -n openshift-config \ --from-file=myregistry.corp.com..5000=/etc/docker/certs.d/myregistry.corp.com:5000/ca.crt \ --from-file=otherregistry.com=/etc/docker/certs.d/otherregistry.com/ca.crt
クラスターイメージの設定を更新します。
$ oc patch image.config.openshift.io/cluster --patch '{"spec":{"additionalTrustedCA":{"name":"registry-cas"}}}' --type=merge
6.9.4.1.3.2. Pod が他のセキュリティー保護されたレジストリーからイメージを参照できるようにする設定
Docker クライアントの .dockercfg
$HOME/.docker/config.json
ファイルは、セキュア/非セキュアなレジストリーに事前にログインしている場合に認証情報を保存する Docker 認証情報ファイルです。
OpenShift Container Platform の内部レジストリーにないセキュリティー保護されたコンテナーイメージをプルするには、Docker 認証情報でプルシークレットを作成し、これをサービスアカウントに追加する必要があります。
手順
セキュリティー保護されたレジストリーの
.dockercfg
ファイルがすでにある場合は、以下を実行してそのファイルからシークレットを作成できます。$ oc create secret generic <pull_secret_name> \ --from-file=.dockercfg=<path/to/.dockercfg> \ --type=kubernetes.io/dockercfg
または、
$HOME/.docker/config.json
ファイルがある場合は以下を実行します。$ oc create secret generic <pull_secret_name> \ --from-file=.dockerconfigjson=<path/to/.docker/config.json> \ --type=kubernetes.io/dockerconfigjson
セキュリティー保護されたレジストリーの Docker 認証情報がない場合は、以下を実行してシークレットを作成できます。
$ oc create secret docker-registry <pull_secret_name> \ --docker-server=<registry_server> \ --docker-username=<user_name> \ --docker-password=<password> \ --docker-email=<email>
Pod のイメージのプルにシークレットを使用するには、シークレットをサービスアカウントに追加する必要があります。この例では、サービスアカウントの名前は、Pod が使用するサービスアカウントの名前に一致している必要があります。
default
はデフォルトのサービスアカウントです。$ oc secrets link default <pull_secret_name> --for=pull
ビルドイメージのプッシュおよびプルにシークレットを使用するには、シークレットは Pod 内でマウント可能である必要があります。以下でこれを実行できます。
$ oc secrets link builder <pull_secret_name>
6.9.4.2. VDDK イメージの作成および使用
VMware Virtual Disk Development Kit (VDDK) をダウンロードして、VDDK イメージをビルドし、VDDK イメージをイメージレジストリーにプッシュできます。次に、VDDK イメージを v2v-vmware
ConfigMap に追加します。
前提条件
- OpenShift Container Platform 内部イメージレジストリーまたはセキュアな外部レジストリーにアクセスできる必要があります。
手順
一時ディレクトリーを作成し、これに移動します。
$ mkdir /tmp/<dir_name> && cd /tmp/<dir_name>
- ブラウザーで VMware code に移動し、SDKs をクリックします。
- Compute Virtualization で Virtual Disk Development Kit(VDDK) をクリックします。
- 最新の VDDK リリースを選択し、Download をクリックしてから VDDK アーカイブを一時ディレクトリーに保存します。
VDDK アーカイブを展開します。
$ tar -xzf VMware-vix-disklib-<version>.x86_64.tar.gz
Dockerfile
を作成します。$ cat > Dockerfile <<EOF FROM busybox:latest COPY vmware-vix-disklib-distrib /vmware-vix-disklib-distrib RUN mkdir -p /opt ENTRYPOINT ["cp", "-r", "/vmware-vix-disklib-distrib", "/opt"] EOF
イメージをビルドします。
$ podman build . -t <registry_route_or_server_path>/vddk:<tag> 1
- 1
- イメージレジストリーを指定します。
-
内部 OpenShift Container Platform レジストリーの場合は、内部レジストリールート (例:
image-registry.openshift-image-registry.svc:5000/openshift/vddk:<tag>
) を使用します。 -
外部レジストリーの場合は、サーバー名、パスおよびタグを指定します (例:
server.example.com:5000/vddk:<tag>
)。
-
内部 OpenShift Container Platform レジストリーの場合は、内部レジストリールート (例:
イメージをレジストリーにプッシュします。
$ podman push <registry_route_or_server_path>/vddk:<tag>
- イメージが OpenShift Container Platform 環境からアクセスできることを確認します。
openshift-cnv プロジェクトで
v2v-vmware
ConfigMap を編集します。$ oc edit configmap v2v-vmware -n openshift-cnv
vddk-init-image
パラメーターをdata
スタンザに追加します。... data: vddk-init-image: <registry_route_or_server_path>/vddk:<tag>
6.9.4.3. 仮想マシンウィザードによる VMware 仮想マシンまたはテンプレートのインポート
仮想マシンウィザードを使用して VMware 仮想マシンまたはテンプレートをインポートできます。
前提条件
-
VDDK イメージを作成して、これをイメージレジストリーにプッシュし、
v2v-vmware
ConfigMap に追加する必要があります。 インポートしたディスクに十分なストレージ容量が必要です。
警告ディスクサイズが利用可能なストレージ領域よりも大きい仮想マシンをインポートしようとすると、この操作は完了しません。オブジェクトの削除をサポートするためのリソースが十分にないため、別の仮想マシンをインポートしたり、ストレージをクリーンアップしたりすることはできません。この状況を解決するには、ストレージバックエンドにオブジェクトストレージデバイスを追加する必要があります。
- VMware 仮想マシンの電源がオフになっていること。
手順
-
Container-native Virtualization Web コンソールで Workloads
Virtual Machines をクリックします。 - Create Virtual Machine をクリックし、Import with Wizard を選択します。
General 画面で、以下の手順を実行します。
- Provider 一覧から、VMware を選択します。
vCenter instance 一覧から Connect to New Instance または保存された vCenter インスタンスを選択します。
- Connect to New Instance を選択する場合、vCenter hostname、Username、Password を入力します。
- 保存された vCenter インスタンスを選択する場合、ウィザードは保存された認証情報を使用して vCenter に接続します。
- VM or Template to Import 一覧からインポートする仮想マシンまたはテンプレートを選択します。
- オペレーティングシステムを選択します。
Flavor 一覧から既存フレーバーまたは Custom を選択します。
Custom を選択した場合は、Memory (GB) および CPUs を指定します。
- Workload Profile を選択します。
- 仮想マシン名が namespace の別の仮想マシンで使用されている場合、名前を更新します。
- Next をクリックします。
Networking 画面で以下の手順を実行します。
- ネットワークインターフェースの Options メニュー をクリックし、Edit を選択します。
有効なネットワークインターフェース名を入力します。
この名前には、小文字 (
a-z
)、数字 (0-9
)、およびハイフン (-
) を含めることができ、最大 253 文字を使用できます。最初と最後の文字は英数字にする必要があります。この名前には、大文字、スペース、ピリオド (.
)、または特殊文字を使用できません。- ネットワークインターフェースモデルを選択します。
- ネットワーク定義を選択します。
- ネットワークインターフェースの種類を選択します。
- MAC アドレスを入力します。
- Save をクリックした後に、Next をクリックします。
Storage 画面で以下の手順を実行します。
- ディスクの Options メニュー をクリックし、Edit を選択します。
有効な名前を入力します。
この名前には、小文字 (
a-z
)、数字 (0-9
)、およびハイフン (-
) を含めることができ、最大 253 文字を使用できます。最初と最後の文字は英数字にする必要があります。この名前には、大文字、スペース、ピリオド (.
)、または特殊文字を使用できません。- インターフェースタイプを選択します。
ストレージクラスを作成します。
ストレージクラスを選択しない場合、Container-native Virtualization はデフォルトストレージクラスを使用して仮想マシンを作成します。
- Save をクリックした後に、Next をクリックします。
-
Advanced 画面で、
cloud-init
を使用している場合は Hostname および Authorized SSH Keys を入力します。 - Next をクリックします。
設定を確認し、Create Virtual Machine をクリックします。
Successfully created virtual machine というメッセージが表示され、仮想マシンに作成されたリソースの一覧が表示されます。電源がオフになった仮想マシンが Workloads
Virtual Machines に表示されます。 See virtual machine details をクリックして、インポートされた仮想マシンのダッシュボードを表示します。
エラーが発生した場合は、以下の手順を実行します。
-
Workloads
Pods をクリックします。 -
変換 Pod (例:
kubevirt-v2v-conversion-rhel7-mini-1-27b9h
) をクリックします。 - Logs をクリックし、エラーメッセージの有無を確認します。
-
Workloads
ウィザードのフィールドについての詳細は、「virtual machine wizard fields」を参照してください。
6.9.4.4. インポートされた VMware 仮想マシンの NIC 名の更新
VMware からインポートされた仮想マシンの NIC 名を、 Container-native Virtualization の命名規則に適合するように更新します。
手順
- 仮想マシンにログインします。
-
/etc/sysconfig/network-scripts
ディレクトリーに移動します。 ネットワーク設定ファイル名を
ifcfg-eth0
に変更します。$ mv vmnic0 ifcfg-eth0 1
- 1
- 追加のネットワーク設定ファイルには、
ifcfg-eth1
、ifcfg-eth2
などの番号が順番に付けられます。
ネットワーク設定ファイルで
NAME
およびDEVICE
パラメーターを更新します。NAME=eth0 DEVICE=eth0
ネットワークを再起動します。
$ systemctl restart network
6.9.4.5. VMware 仮想マシンのインポートのトラブルシューティング
インポートされた仮想マシンのステータスが Import error: (VMware)
の場合は、Conversion Pod ログでエラーの有無を確認できます。
Conversion Pod 名を取得します。
$ oc get pods -n <project> | grep v2v 1 kubevirt-v2v-conversion-f66f7d-zqkz7 1/1 Running 0 4h49m
- 1
- インポートされた仮想マシンのプロジェクトを指定します。
Conversion Pod ログを取得します。
$ oc logs kubevirt-v2v-conversion-f66f7d-zqkz7 -f -n <project>
6.9.4.5.1. エラーメッセージ
インポートされた仮想マシンイベントでエラーメッセージ
Readiness probe failed
が表示される場合、以下のエラーメッセージが Conversion Pod ログに表示されます。INFO - have error: ('virt-v2v error: internal error: invalid argument: libvirt domain ‘v2v_migration_vm_1’ is running or paused. It must be shut down in order to perform virt-v2v conversion',)"
インポートする前に、仮想マシンがシャットダウンしていることを確認する必要があります。
6.9.4.5.2. 既知の問題
OpenShift Container Platform 環境には、インポートされたディスク用のストレージ容量が十分にある必要があります。
ディスクサイズが利用可能なストレージ領域よりも大きい仮想マシンをインポートしようとすると、この操作は完了しません。オブジェクトの削除をサポートするためのリソースが十分にないため、別の仮想マシンをインポートしたり、ストレージをクリーンアップしたりすることはできません。この状況を解決するには、ストレージバックエンドにオブジェクトストレージデバイスをさらに追加する必要があります。(BZ#1721504)
- NFS を使用したストレージを、変換 Pod に割り当てられる 2 GB ディスクに使用する場合、hostPath ボリュームを設定する必要があります。(BZ#1814611)
6.9.4.6. 仮想マシンウィザードのフィールド
6.9.4.6.1. 仮想マシンウィザードのフィールド
Name | パラメーター | 説明 |
---|---|---|
Template | 仮想マシンの作成に使用するテンプレート。テンプレートを選択すると、他のフィールドが自動的に入力されます。 | |
Source | PXE | PXE メニューから仮想マシンをプロビジョニングします。クラスターに PXE 対応の NIC が必要になります。 |
URL | HTTP または S3 エンドポイントで利用できるイメージから仮想マシンをプロビジョニングします。 | |
Container |
クラスターからアクセスできるレジストリーの起動可能なオペレーティングシステムコンテナーから仮想マシンをプロビジョニングします。例: | |
Disk | ディスクから仮想マシンをプロビジョニングします。 | |
Attach disk | 以前にクローン作成されたか、または作成され、 PersistentVolumeClaims で利用可能にされた既存ディスクを割り当てます。このオプションが選択される場合、Operating System、Flavor、および Workload Profile フィールドに手動で入力する必要があります。 | |
Operating System | 仮想マシン用に選択される主なオペレーティングシステム。 | |
Flavor | small、medium、large、tiny、Custom | 仮想マシンに割り当てられる CPU およびメモリーの量を決定するプリセット。Flavor に設定される Preset はオペレーティングシステムによって決まります。 |
Workload Profile | High Performance | 高パフォーマンスのワークロードに対して最適化された仮想マシン設定。 |
Server | サーバーワークロードの実行に最適化されたプロファイル。 | |
Desktop | デスクトップで使用するための仮想マシン設定。 | |
Name |
この名前には、小文字 ( | |
Description | オプションの説明フィールド。 | |
Start virtual machine on creation | これを選択すると、作成時に仮想マシンが自動的に起動します。 |
6.9.4.6.2. Cloud-init フィールド
Name | Description |
---|---|
Hostname | 仮想マシンの特定のホスト名を設定します。 |
Authenticated SSH Keys | 仮想マシンの ~/.ssh/authorized_keys にコピーされるユーザーの公開鍵。 |
Use custom script | 他のオプションを、カスタム cloud-init スクリプトを貼り付けるフィールドに置き換えます。 |
6.9.4.6.3. ネットワークフィールド
Name | Description |
---|---|
Name | ネットワークインターフェースの名前。 |
Model | ネットワークインターフェースカードのドライバー、またはネットワークインターフェースカードのモデル |
Network | 利用可能な NetworkAttachmentDefinition オブジェクトの一覧。 |
Type |
利用可能なバインディングメソッドの一覧。デフォルトの Pod ネットワークについては、 |
MAC Address | ネットワークインターフェースの MAC アドレス。MAC アドレスが指定されていない場合、セッションの一時アドレスが生成されます。 |
6.9.4.6.4. ストレージフィールド
Name | Description |
---|---|
Source | 仮想マシンの空のディスクを選択するか、または PXE、Container、URL または Diskなどのオプションから選択します。既存のディスクを選択し、これを仮想マシンに割り当てるには、利用可能な PersistentVolumeClaim (PVC) の一覧から Attach Disk を選択するか、またはクローン作成されたディスクからこれを選択します。 |
名前 |
ディスクの名前。この名前には、小文字 ( |
Size (GiB) | ディスクのサイズ (GiB)。 |
Interface | インターフェースの名前。 |
Storage class |
基礎となる |