OpenShift Virtualization – OpenShift でのVM管理についてご紹介

こんにちは。サイオステクノロジーの塙です。

今回は、OpenShift(以下、OCP)上で、VMを実行するための機能となるOpenShift Virtualization(以下、OCP Virt)について説明したいと思います。

前提情報

本記事では、現時点では、以下のバージョンを対象としています。

■バージョン
OpenShift v4.15
OpenShift Virtualization v4.15 *1

*1 OCP Virt のバージョンは、v4.8 から OCP と同じになり、OCPと同様に推移していきます。
https://access.redhat.com/support/policy/updates/openshift_operators

概要

OCP Virt は、OCP 上で VM を動作、管理するためのコンポーネントとなります。

OCP Virt は OCP v4.5 から GA となり、OCP WebUI の OperatorHub から OCP Virt の Operator をインストールすることで利用可能となります。

サブスクリプションは、OCP のサブスクリプションで利用できるようになります。

また、OCP Virt は CNCF の Incubating Project である KubeVirt を利用して開発されているようです。

https://www.cncf.io/projects/kubevirt/

アーキテクチャ

アーキテクチャの基礎部分

VM を動作させる仕組みとして KVM を使用します。

KVM が RHCOS のカーネルで実行され、QEMU、libvirt はコンテナの内部で実行される形式となります。

概要では、Kubernetes の他の Pod と同様に、以下の枠組みを使用します。

  • CNI
  • CSI
  • CRD

内部のコンポーネント

VM を動作させるには、主に3つのコンポーネントがあります。

(Building a unified hybrid cloud strategy with Red Hat OpenShift Virtualization より引用)

  • virt-controller :CRD で定義された VM リソースを監視し、VM リソースの Pod をノードに割り当てる
  • virt-handler :各 Worker ノードで実行される DaemonSet。API や virt-controller と連携して、Pod の作成などの操作を、virt-launcher に指示する役割がある
  • virt-launcher :libvirtd と連携し、VM の作成や削除を制御する

VM のリソース

VM のリソースは Kubernetes の CRD を用いて定義を行う形となります。

# VMリソースの例
apiVersion: kubevirt.io/v1alpha3
kind: VirtualMachine
metadata:
  label:
    app: demo
  name: test-vm
spec:
  dataVolumeTemplates:
  - metadata:
      name: example-dv
    spec:
      pvc:
        accessModes:
        - ReadWriteOnce
        resources:
          requests:
            storage: 1G
      source:
        http:
          url: ""
  running: false
  template:
    spec:
      domain:
        devices:
          disks:
            - name: containerdisk
              disk:
                bus: virtio
          interfaces:
          - masquerade: {}
            name: default
        resources:
          requests:
            memory: 1024M
      networks:
        - name: default
          pod: {}
      volumes:
        - name: containerdisk
          containerDisk:
            image: kubevirt/fedora-cloud-container-disk-demo
  • VirtualMachine(VM)リソース:VMIを作成するためのテンプレートを構成するリソース
  • VirtualMachineInstance(VMI) リソース:VM リソースの定義の、稼働中の実態を表すインスタンスのリソース
  • VirtualMachineInstanceMigration リソース:VM をライブマイグレーションするときに構成するリソース
  • DataVolume(DV) リソース:VM のディスクイメージなどのストレージ側の設定を定義するリソース

サポート対象のノードと OS

サポート対象のノード

VM を動作させるノードは、ベアメタルになります。

OCP Virt のサポート対象のクラスターノードは以下のとおりです。

  • ブレインメタルサーバー
  • AWS ベアメタル インスタンス
  • IBM Cloud ベアメタルサーバー (TechPreview機能)

サポート対象のOS

VM の OS としてサポート対象となっている OS が確認できます。

https://access.redhat.com/articles/973163#ocpvirt

参考までに、rhel OS のライセンスは OCP に含まれており、Windows は別途ライセンスが必要になります。

利用のポイント

OCP Virt の利用を考える時のポイントを以下に記載していきます。

1. VM管理のメリット

VM のディスク、ネットワークなどのリソース定義は、OCP の Pod と同様に、yaml ファイルのマニフェストで管理出来る形になっています。VM 自体を IaC で管理することで、ある程度 VMの管理自体もしやすく、自動化出来る部分もあるのではないでしょうか。

例えば、現在コンテナ環境も運用されており、コンテナ運用を見据えた取り組みをしたいという考えがある場合は、VM と コンテナの運用管理を統一することができ、効率化を図ることができます。

2. コンテナ環境とシームレスに接続

Kubernetes の仕組みとして CSI(Container Storage Interface)*1、CNI(Container Network Interface)*2 を他のPodと同じように使用できます。

これは、VM と Pod 間で通信を行いたいときに、ネットワークがクラ​​スター内で完結できることを意味します。

そして、他のPodの通信方法と同じように、通信の際のVMのIPを意識せずに良いという所もポイントとなります。ただ、IPを指定して通信を行いたいといった要件の場合は、少し難点があるかもしれません。

*1 CSI(Container Storage Interface):異なるストレージ技術を利用してコンテナに永続的なストレージを提供する仕組み

*2 CNI(Container Network Interface): コンテナ間でのネットワーク接続を管理するためのプラグインを提供する仕組み

3. 他環境からのマイグレーションや、稼働中の変更時のダウンタイム

OCP Virt は、MTV というツールを用いて、他の VM 環境から VM をマイグレーションすることが可能です。

これは非常に便利な機能ですが、注意点が一つあります。

現時点では、他環境からマイグレーションをするときに VM のダウンタイムが発生します。移行規模にもよりますが、ダウンタイムを考慮した移行を計画する必要があります。

また、OCP Virt で稼働中のリソースを変更する場合、マニフェストを変更、適用する形となります。マニフェスト適用後に Pod の再起動が発生するので、VM のリブートでダウンタイムが発生することを考慮する必要があります。

まとめ

今回は、OpenShift(以下、OCP)上で、VMを実行するための機能となるOpenShift Virtualization(以下、OCP Virt)について説明しました。

また、より詳細のOCP Virt の機能について紹介出来ればと思います。

本書の記載が読者のお役に立てば幸いです。

参考文献

https://docs.redhat.com/ja/documentation/openshift_container_platform/4.15/html-single/virtualization/index

OpenShift Virtualization ( Kubevirt ) でVM管理もCloud Nativeに (1)

OpenShift Virtualization、コンテナ基盤で仮想マシンを動かす

ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

役に立った 役に立たなかった

0人がこの投稿は役に立ったと言っています。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です