6.9. 仮想マシンのインポート


6.9.1. DataVolume インポートの TLS 証明書

6.9.1.1. DataVolume インポートの認証に使用する TLS 証明書の追加

ソースからデータをインポートするには、レジストリーまたは HTTPS エンドポイントの TLS 証明書を ConfigMap に追加する必要があります。この ConfigMap は、宛先 DataVolume の namespace に存在する必要があります。

TLS 証明書の相対パスを参照して ConfigMap を作成します。

手順

  1. 正しい namespace にあることを確認します。ConfigMap は、同じ namespace にある場合に DataVolume によってのみ参照されます。

    $ oc get ns
  2. 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. 前提条件

6.9.2.2. CDI がサポートする操作マトリックス

このマトリックスにはエンドポイントに対してコンテンツタイプのサポートされる CDI 操作が表示されます。これらの操作にはスクラッチ領域が必要です。

コンテンツタイプ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*

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

手順

  1. インポートする必要のある仮想ディスクイメージをホストする HTTP ファイルサーバーを特定します。正しい形式での完全な URL が必要になります。

  2. データソースに認証情報が必要な場合、endpoint-secret.yaml ファイルを編集し、更新された設定をクラスターに適用します。

    apiVersion: v1
    kind: Secret
    metadata:
      name: <endpoint-secret>
      labels:
        app: containerized-data-importer
    type: Opaque
    data:
      accessKeyId: "" 1
      secretKey:   "" 2
    1
    オプション: キーまたはユーザー名 (base64 エンコード)
    2
    オプション: シークレットまたはパスワード、base64 エンコード
    $ oc apply -f endpoint-secret.yaml
  3. 仮想マシン設定ファイルを編集し、インポートする必要のあるイメージのデータソースを指定します。この例では、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: {}
    1
    インポートする必要のあるイメージの HTTP ソース。
    2
    secretRef パラメーターはオプションです。
    3
    certConfigMap は、自己署名証明書またはシステム CA バンドルで署名されていない証明書を使用するサーバーと通信するために必要です。参照される ConfigMap は DataVolume と同じ namespace にある必要があります。
  4. 仮想マシンを作成します。

    $ oc create -f vm-<name>-datavolume.yaml
    注記

    oc create コマンドは、DataVolume および仮想マシンを作成します。CDI コントローラーは適切なアノテーションを使って基礎となる PVC を作成し、インポートプロセスが開始されます。インポートが完了すると、DataVolume のステータスは Succeeded に変更され、仮想マシンの起動が可能になります。

    DataVolume のプロビジョニングはバックグランドで実行されるため、これをモニターする必要はありません。仮想マシンは起動できますが、これはインポートが完了するまで実行されません。

オプションの検証手順

  1. oc get pods を実行し、インポーター Pod を見つけます。この Pod は指定された URL からイメージをダウンロードし、これをプロビジョニングされた PV に保存します。
  2. Succeeded が表示されるまで DataVolume のステータスをモニターします。

    $ oc describe dv <data-label> 1
    1
    仮想マシン設定ファイルに指定された DataVolume のデータラベル。
  3. プロビジョニングが完了し、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"
1
インポートする必要のあるイメージの HTTP ソース。
2
secretRef パラメーターはオプションです。

6.9.3. DataVolume の使用による仮想マシンイメージのブロックストレージへのインポート

既存の仮想マシンイメージは OpenShift Container Platform クラスターにインポートできます。Container-native Virtualization は DataVolume を使用してデータのインポートおよび基礎となる PersistentVolumeClaim (PVC) の作成を自動化します。

重要

ディスクイメージを PVC にインポートする際に、ディスクイメージは PVC で要求されるストレージの全容量を使用するように拡張されます。この領域を使用するには、仮想マシンのディスクパーティションおよびファイルシステムの拡張が必要になる場合があります。

サイズ変更の手順は、仮想マシンにインストールされるオペレーティングシステムによって異なります。詳細は、該当するオペレーティングシステムのドキュメントを参照してください。

6.9.3.1. 前提条件

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 ボリュームとして参照し、これを仮想マシンイメージのブロックデバイスとして使用できます。

手順

  1. ローカル PV を作成するノードに root としてログインします。この手順では、node01 を例に使用します。
  2. ファイルを作成して、これを null 文字で設定し、ブロックデバイスとして使用できるようにします。以下の例では、2Gb (20 100Mb ブロック) のサイズのファイル loop10 を作成します。

    $ dd if=/dev/zero of=<loop10> bs=100M count=20
  3. loop10 ファイルをループデバイスとしてマウントします。

    $ losetup </dev/loop10>d3 <loop10> 1 2
    1
    ループデバイスがマウントされているファイルパスです。
    2
    前の手順で作成したファイルはループデバイスとしてマウントされます。
  4. マウントされたループデバイスを参照する 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
    1
    ノード上のループデバイスのパス。
    2
    ブロック PV であることを指定します。
    3
    オプション: PV に StorageClass を設定します。これを省略する場合、クラスターのデフォルトが使用されます。
    4
    ブロックデバイスがマウントされたノード。
  5. ブロック 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。

手順

  1. データソースに認証情報が必要な場合、endpoint-secret.yaml ファイルを編集し、更新された設定をクラスターに適用します。

    1. 選択するテキストエディターで endpoint-secret.yaml ファイルを編集します。

      apiVersion: v1
      kind: Secret
      metadata:
        name: <endpoint-secret>
        labels:
          app: containerized-data-importer
      type: Opaque
      data:
        accessKeyId: "" 1
        secretKey:   "" 2
      1
      オプション: キーまたはユーザー名 (base64 エンコード)
      2
      オプション: シークレットまたはパスワード、base64 エンコード
    2. シークレットを更新します。

      $ oc apply -f endpoint-secret.yaml
  2. インポートするイメージのデータソースを指定する 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>
    1
    DataVolume の名前。
    2
    オプション: ストレージクラスを設定するか、またはこれを省略してクラスターのデフォルトを受け入れます。
    3
    インポートするイメージの HTTP ソース。
    4
    データソースに認証が必要である場合にのみ必要です。
    5
    ブロック PV にインポートするために必要です。
  3. 仮想マシンイメージをインポートするために DataVolume を作成します。

    $ oc create -f <import-pv-datavolume.yaml>1
    1
    直前の手順で作成されたファイル名 DataVolume。

6.9.3.6. CDI がサポートする操作マトリックス

このマトリックスにはエンドポイントに対してコンテンツタイプのサポートされる CDI 操作が表示されます。これらの操作にはスクラッチ領域が必要です。

コンテンツタイプ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*

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 設定の managementStateRemoved から 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」以上である。

手順

  1. レジストリーをストレージを使用できるように設定するには、configs.imageregistry/cluster リソースの spec.storage.pvc を変更します。

    注記

    NFS などの共有ストレージを使用する場合は、fsGroup ID ではなく、セキュリティーコンテキストの許可される補助グループを定める supplementalGroups ストラテジーを使用することが強く推奨されます。詳細は、NFS の グループ ID についてのドキュメントを参照してください。

  2. レジストリー 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
  3. レジストリー設定を確認します。

    $ oc edit configs.imageregistry.operator.openshift.io
    
    storage:
      pvc:
        claim:

    claim フィールドを空のままにし、image-registry-storage PVC の自動作成を可能にします。

  4. clusteroperator ステータスを確認します。

    $ oc get clusteroperator image-registry
6.9.4.1.2. 内部イメージレジストリーへのアクセスの設定

レジストリーをルートで公開して、クラスター内から OpenShift Container Platform 内部レジストリーに直接アクセスできます。

6.9.4.1.2.1. クラスターからレジストリーへの直接アクセス

クラスター内からレジストリーにアクセスすることができます。

手順

内部ルートを使用して、クラスターからレジストリーにアクセスします。

  1. ノードのアドレスを取得することにより、ノードにアクセスします。

    $ oc get nodes
    $ oc debug nodes/<node_address>
  2. ノード上で ocpodman などのツールにアクセスするには、以下のコマンドを実行します。

    sh-4.2# chroot /host
  3. アクセストークンを使用してコンテナーイメージレジストリーにログインします。

    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> のようになります。

  4. レジストリーに対して podman pull および podman push 操作を実行します。

    重要

    任意のイメージをプルできますが、system:registry ロールを追加している場合は、各自のプロジェクトにあるレジストリーにのみイメージをプッシュすることができます。

    次の例では、以下を使用します。

    Component

    <registry_ip>

    172.30.124.220

    <port>

    5000

    <project>

    openshift

    <image>

    image

    <tag>

    省略 (デフォルトは latest)

    1. 任意のイメージをプルします。

      $ podman pull name.io/image
    2. 新規イメージに <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 は失敗します。テストするために、新規プロジェクトを作成してイメージをプッシュできます。

    3. 新しくタグ付けされたイメージをレジストリーにプッシュします。

      $ 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 を使用してレジストリーを公開するには、以下を実行します。

  1. DefaultRouteTrue に設定します。

    $ oc patch configs.imageregistry.operator.openshift.io/cluster --patch '{"spec":{"defaultRoute":true}}' --type=merge
  2. 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 で、信頼されるカスタム証明書をデフォルト証明書として設定できます。

カスタムルートを使用してレジストリーを公開するには、以下を実行します。

  1. ルートの 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 設定を使用します。

  2. レジストリー 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 ファイル)。

手順

  1. 自己署名証明書を使用するレジストリーの信頼される証明書が含まれる 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
  2. クラスターイメージの設定を更新します。

    $ 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 内部イメージレジストリーまたはセキュアな外部レジストリーにアクセスできる必要があります。

手順

  1. 一時ディレクトリーを作成し、これに移動します。

    $ mkdir /tmp/<dir_name> && cd /tmp/<dir_name>
  2. ブラウザーで VMware code に移動し、SDKs をクリックします。
  3. Compute VirtualizationVirtual Disk Development Kit(VDDK) をクリックします。
  4. 最新の VDDK リリースを選択し、Download をクリックしてから VDDK アーカイブを一時ディレクトリーに保存します。
  5. VDDK アーカイブを展開します。

    $ tar -xzf VMware-vix-disklib-<version>.x86_64.tar.gz
  6. 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
  7. イメージをビルドします。

    $ 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>)。
  8. イメージをレジストリーにプッシュします。

    $ podman push <registry_route_or_server_path>/vddk:<tag>
  9. イメージが OpenShift Container Platform 環境からアクセスできることを確認します。
  10. openshift-cnv プロジェクトで v2v-vmware ConfigMap を編集します。

    $ oc edit configmap v2v-vmware -n openshift-cnv
  11. 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 仮想マシンの電源がオフになっていること。

手順

  1. Container-native Virtualization Web コンソールで Workloads Virtual Machines をクリックします。
  2. Create Virtual Machine をクリックし、Import with Wizard を選択します。
  3. General 画面で、以下の手順を実行します。

    1. Provider 一覧から、VMware を選択します。
    2. vCenter instance 一覧から Connect to New Instance または保存された vCenter インスタンスを選択します。

      • Connect to New Instance を選択する場合、vCenter hostnameUsernamePassword を入力します。
      • 保存された vCenter インスタンスを選択する場合、ウィザードは保存された認証情報を使用して vCenter に接続します。
    3. VM or Template to Import 一覧からインポートする仮想マシンまたはテンプレートを選択します。
    4. オペレーティングシステムを選択します。
    5. Flavor 一覧から既存フレーバーまたは Custom を選択します。

      Custom を選択した場合は、Memory (GB) および CPUs を指定します。

    6. Workload Profile を選択します。
    7. 仮想マシン名が namespace の別の仮想マシンで使用されている場合、名前を更新します。
    8. Next をクリックします。
  4. Networking 画面で以下の手順を実行します。

    1. ネットワークインターフェースの Options メニュー kebab をクリックし、Edit を選択します。
    2. 有効なネットワークインターフェース名を入力します。

      この名前には、小文字 (a-z)、数字 (0-9)、およびハイフン (-) を含めることができ、最大 253 文字を使用できます。最初と最後の文字は英数字にする必要があります。この名前には、大文字、スペース、ピリオド (.)、または特殊文字を使用できません。

    3. ネットワークインターフェースモデルを選択します。
    4. ネットワーク定義を選択します。
    5. ネットワークインターフェースの種類を選択します。
    6. MAC アドレスを入力します。
    7. Save をクリックした後に、Next をクリックします。
  5. Storage 画面で以下の手順を実行します。

    1. ディスクの Options メニュー kebab をクリックし、Edit を選択します。
    2. 有効な名前を入力します。

      この名前には、小文字 (a-z)、数字 (0-9)、およびハイフン (-) を含めることができ、最大 253 文字を使用できます。最初と最後の文字は英数字にする必要があります。この名前には、大文字、スペース、ピリオド (.)、または特殊文字を使用できません。

    3. インターフェースタイプを選択します。
    4. ストレージクラスを作成します。

      ストレージクラスを選択しない場合、Container-native Virtualization はデフォルトストレージクラスを使用して仮想マシンを作成します。

    5. Save をクリックした後に、Next をクリックします。
  6. Advanced 画面で、cloud-init を使用している場合は Hostname および Authorized SSH Keys を入力します。
  7. Next をクリックします。
  8. 設定を確認し、Create Virtual Machine をクリックします。

    Successfully created virtual machine というメッセージが表示され、仮想マシンに作成されたリソースの一覧が表示されます。電源がオフになった仮想マシンが Workloads Virtual Machines に表示されます。

  9. See virtual machine details をクリックして、インポートされた仮想マシンのダッシュボードを表示します。

    エラーが発生した場合は、以下の手順を実行します。

    1. Workloads Pods をクリックします。
    2. 変換 Pod (例: kubevirt-v2v-conversion-rhel7-mini-1-27b9h) をクリックします。
    3. Logs をクリックし、エラーメッセージの有無を確認します。

ウィザードのフィールドについての詳細は、「virtual machine wizard fields」を参照してください。

6.9.4.4. インポートされた VMware 仮想マシンの NIC 名の更新

VMware からインポートされた仮想マシンの NIC 名を、 Container-native Virtualization の命名規則に適合するように更新します。

手順

  1. 仮想マシンにログインします。
  2. /etc/sysconfig/network-scripts ディレクトリーに移動します。
  3. ネットワーク設定ファイル名を ifcfg-eth0 に変更します。

    $ mv vmnic0 ifcfg-eth0 1
    1
    追加のネットワーク設定ファイルには、ifcfg-eth1ifcfg-eth2 などの番号が順番に付けられます。
  4. ネットワーク設定ファイルで NAME および DEVICE パラメーターを更新します。

    NAME=eth0
    DEVICE=eth0
  5. ネットワークを再起動します。

    $ systemctl restart network

6.9.4.5. VMware 仮想マシンのインポートのトラブルシューティング

インポートされた仮想マシンのステータスが Import error: (VMware) の場合は、Conversion Pod ログでエラーの有無を確認できます。

  1. Conversion Pod 名を取得します。

    $ oc get pods -n <project> | grep v2v 1
    kubevirt-v2v-conversion-f66f7d-zqkz7            1/1     Running     0          4h49m
    1
    インポートされた仮想マシンのプロジェクトを指定します。
  2. 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

クラスターからアクセスできるレジストリーの起動可能なオペレーティングシステムコンテナーから仮想マシンをプロビジョニングします。例: kubevirt/cirros-registry-disk-demo

Disk

ディスクから仮想マシンをプロビジョニングします。

Attach disk

 

以前にクローン作成されたか、または作成され、 PersistentVolumeClaims で利用可能にされた既存ディスクを割り当てます。このオプションが選択される場合、Operating SystemFlavor、および Workload Profile フィールドに手動で入力する必要があります。

Operating System

 

仮想マシン用に選択される主なオペレーティングシステム。

Flavor

small、medium、large、tiny、Custom

仮想マシンに割り当てられる CPU およびメモリーの量を決定するプリセット。Flavor に設定される Preset はオペレーティングシステムによって決まります。

Workload Profile

High Performance

高パフォーマンスのワークロードに対して最適化された仮想マシン設定。

Server

サーバーワークロードの実行に最適化されたプロファイル。

Desktop

デスクトップで使用するための仮想マシン設定。

Name

 

この名前には、小文字 (a-z)、数字 (0-9)、およびハイフン (-) を含めることができ、最大 253 文字を使用できます。最初と最後の文字は英数字にする必要があります。この名前には、大文字、スペース、ピリオド (.)、または特殊文字を使用できません。

Description

 

オプションの説明フィールド。

Start virtual machine on creation

 

これを選択すると、作成時に仮想マシンが自動的に起動します。

6.9.4.6.2. Cloud-init フィールド
NameDescription

Hostname

仮想マシンの特定のホスト名を設定します。

Authenticated SSH Keys

仮想マシンの ~/.ssh/authorized_keys にコピーされるユーザーの公開鍵。

Use custom script

他のオプションを、カスタム cloud-init スクリプトを貼り付けるフィールドに置き換えます。

6.9.4.6.3. ネットワークフィールド
NameDescription

Name

ネットワークインターフェースの名前。

Model

ネットワークインターフェースカードのドライバー、またはネットワークインターフェースカードのモデル

Network

利用可能な NetworkAttachmentDefinition オブジェクトの一覧。

Type

利用可能なバインディングメソッドの一覧。デフォルトの Pod ネットワークについては、masquerade が唯一の推奨されるバインディングメソッドになります。セカンダリーネットワークの場合は、bridge バインディングメソッドを使用します。masquerade メソッドは、デフォルト以外のネットワークではサポートされません。

MAC Address

ネットワークインターフェースの MAC アドレス。MAC アドレスが指定されていない場合、セッションの一時アドレスが生成されます。

6.9.4.6.4. ストレージフィールド
NameDescription

Source

仮想マシンの空のディスクを選択するか、または PXEContainerURL または Diskなどのオプションから選択します。既存のディスクを選択し、これを仮想マシンに割り当てるには、利用可能な PersistentVolumeClaim (PVC) の一覧から Attach Disk を選択するか、またはクローン作成されたディスクからこれを選択します。

名前

ディスクの名前。この名前には、小文字 (a-z)、数字 (0-9)、ハイフン (-) およびピリオド (.) を含めることができ、最大 253 文字を使用できます。最初と最後の文字は英数字にする必要があります。この名前には、大文字、スペース、または特殊文字を使用できません。

Size (GiB)

ディスクのサイズ (GiB)。

Interface

インターフェースの名前。

Storage class

基礎となる StorageClass の名前。

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

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

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

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

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

会社概要

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

© 2024 Red Hat, Inc.