OpenShift Virtualization 構築してみた

概要

こちらの記事では既存のOpenShift上でコンテナとVMを統合管理することが出来るOpenShift Virtualization(以降、OCP-Virt)ついて紹介しました。
本記事では、実際にAWS環境のOpenShift上でOCP-Virtを構築し、簡単なVMの作成と外部公開を行ってみたいと思います。
次回の記事では、同じ仮想化基盤であるSUSE VIrtualizationの紹介をします。

前提条件

構築時の前提条件を以下に記載します。

  • AWS環境でOpenShift v 4.17クラスターが構築済みであること
  • cluster-admin 権限および Operator インストール権限を持つアカウントを使用して OpenShift クラスターにアクセスできること
  • 作業端末に下記Cliがインストール済みであること
    • oc
    • virtctl
  • ベアメタルインスタンスのノードを追加する必要があるため、従量課金の料金には自己責任で気を付けてください

事前準備

OpenShift Virtualization用ノードの追加

AWS環境のOpenShiftへのノード追加方法を詳しく書いた記事があるので、詳細はこちらの記事を読んでください。
OpenShift(AWS)へのノード追加

OpenShift OperatorHub で Administrator のパースペクティブにいることを確認します。

Web コンソールで[コンピュート] > [MachineSets]に移動します。

[MachineSetの作成] をクリックします。

入力フォームにMachineSet の yaml を記述し、[作成]をクリックします。


MachineSet.yaml

apiVersion: machine.openshift.io/v1beta1
kind: MachineSet
metadata:
  labels:
    machine.openshift.io/cluster-api-cluster: <infrastructure_id>
  name: <infrastructure_id>-<role>-us-east-2a-baremetal
  namespace: openshift-machine-api
spec:
  replicas: 1
  selector:
    matchLabels:
      machine.openshift.io/cluster-api-cluster: <infrastructure_id>
      machine.openshift.io/cluster-api-machineset: <infrastructure_id>-worker-us-east-2a
  template:
    metadata:
      labels:
        machine.openshift.io/cluster-api-cluster: <infrastructure_id>
        machine.openshift.io/cluster-api-machine-role: <role>
        machine.openshift.io/cluster-api-machine-type: <role> 
        machine.openshift.io/cluster-api-machineset: <infrastructure_id>-worker-us-east-2a
    spec:
      metadata:
        labels:
          node-role.kubernetes.io/<role>: "" 
      providerSpec:
        value:
          ami:
            id: ami-08997afda521c28fa
          apiVersion: awsproviderconfig.openshift.io/v1beta1
          blockDevices:
            - ebs:
                iops: 0
                volumeSize: 120
                volumeType: gp2
          credentialsSecret:
            name: aws-cloud-credentials
          deviceIndex: 0
          iamInstanceProfile:
            id: <infrastructure_id>-worker-profile 
          instanceType: c5n.metal
          kind: AWSMachineProviderConfig
          placement:
            availabilityZone: us-east-2a
            region: us-east-2
          securityGroups:
            - filters:
                - name: 'tag:Name'
                  values:
                    - <infrastructure_id>-node
            - filters:
                - name: 'tag:Name'
                  values:
                    - <infrastructure_id>-lb 
          subnet:
            filters:
              - name: tag:Name
                values:
                  - <infrastructure_id>-subnet-private-us-east-2a
          tags:
            - name: kubernetes.io/cluster/<infrastructure_id>
              value: owned
          userDataSecret:
            name: worker-user-data

変更点

  1. <infrastructure_id>:<クラスター名>-<ランダム文字列>
    • infrastructure_idは以下のコマンドで確認するか、既存のマシンセットのyamlを見て確認してください。
    • $ oc get infrastructure cluster -o jsonpath='{.status.infrastructureName}'
      ocp-test-sp9lv
  2. <role>:worker
  3. metadata.name:マシンセットの名前(既存のマシンセットの名前と被るとエラーが出るので注意)
  4. instanceType:c5n.metal(ベアメタルインスタンスが要件となるため、ベアメタルインスタンスタイプを選択)
  5. ami.id:ami-08997afda521c28fa(インスタンスタイプに対応したRHCOSのAMI)

MachineSet が作成されていることを確認します。しばらくした後(少なくとも10分以上はかかる印象があります)、利用可能数がspec.replicasで設定したマシン1台になっていることを確認します。

OpenShift Data Foundation インストール

VMに永続・分散ストレージを提供するためにはOpenShift Data Foundationを導入する必要があります。これは、VMのマイグレーションを行うためには必須となります。ただし、ノードを3台追加する必要があるため、お試しでOCP-Virtを使ってみたいといった際はOpenShift Data Foundationを導入しなくても問題ありません。

OpenShift Data Foundation 用ノードの追加

上記のOpenShift Virtualization用ノードの追加と同じ手順でOpenShift Data Foundation 用ノードの追加を行います。MachineSetのyamlと変更点は下記になります。

MachineSet.yaml

apiVersion: machine.openshift.io/v1beta1
kind: MachineSet
metadata:
  labels:
    machine.openshift.io/cluster-api-cluster: <infrastructure_id>
  name: <infrastructure_id>-<role>-us-east-2a-odf
  namespace: openshift-machine-api
spec:
  replicas: 3
  selector:
    matchLabels:
      machine.openshift.io/cluster-api-cluster: <infrastructure_id>
      machine.openshift.io/cluster-api-machineset: <infrastructure_id>-worker-us-east-2a
  template:
    metadata:
      labels:
        machine.openshift.io/cluster-api-cluster: <infrastructure_id>
        machine.openshift.io/cluster-api-machine-role: <role>
        machine.openshift.io/cluster-api-machine-type: <role>
        machine.openshift.io/cluster-api-machineset: <infrastructure_id>-worker-us-east-2a
    spec:
      metadata:
        labels:
          node-role.kubernetes.io/<role>: ""
      providerSpec:
        value:
          ami:
            id: ami-08997afda521c28fa
          apiVersion: awsproviderconfig.openshift.io/v1beta1
          blockDevices:
            - ebs:
                iops: 0
                volumeSize: 120
                volumeType: gp2
          credentialsSecret:
            name: aws-cloud-credentials
          deviceIndex: 0
          iamInstanceProfile:
            id: <infrastructure_id>-worker-profile
          instanceType: m6a.2xlarge
          kind: AWSMachineProviderConfig
          placement:
            availabilityZone: us-east-2a
            region: us-east-2
          securityGroups:
            - filters:
                - name: 'tag:Name'
                  values:
                    - <infrastructure_id>-node
            - filters:
                - name: 'tag:Name'
                  values:
                    - <infrastructure_id>-lb
          subnet:
            filters:
              - name: tag:Name
                values:
                  - <infrastructure_id>-subnet-private-us-east-2a
          tags:
            - name: kubernetes.io/cluster/<infrastructure_id>
              value: owned
          userDataSecret:
            name: worker-user-data

変更点

  1. <infrastructure_id>:<クラスター名>-<ランダム文字列>
    • infrastructure_idは以下のコマンドで確認するか、既存のマシンセットのyamlを見て確認してください。
    • $ oc get infrastructure cluster -o jsonpath='{.status.infrastructureName}'
      ocp-test-sp9lv
  2. <role>:worker
  3. metadata.name:マシンセットの名前(既存のマシンセットの名前と被るとエラーが出るので注意)
  4. instanceType:m6a.2xlarge(3台の合計リソースが要件を満たすインスタンスタイプを選択)
  5. ami.id:ami-08997afda521c28fa(インスタンスタイプに対応したRHCOSのAMI)

OpenShift Data Foundation Operatorインストール

OpenShift OperatorHub で Administrator のパースペクティブにいることを確認します。

Web コンソールで[Operators] > [OperatorHub]に移動します。

検索バーに「OpenShift Data Foundation」と入力して、 OpenShift Data Foundation をクリックして Install をクリックします。

デフォルトの設定で Install をクリックします。

Operatorのインストール完了確認

  • [インストール済みの Operator]に OpenShift Data Foundation、OpenShift Data Foundation Clientが存在しており、ステータスがSucceededになっていることを確認します。

OpenShift Data Foundation をクリックして Storage System を作成します。

  • パラメータを入力できる画面に遷移しない場合はWeb コンソールを再読み込みする


デフォルトの設定で Install をクリックします。

下記コマンドを実行して StorageClass:ocs-storagecluster-ceph-rbd、ocs-storagecluster-cephfs、openshift-storage.noobaa.io が作成されていることを確認します。

$ oc get storageclass
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
gp2-csi ebs.csi.aws.com Delete WaitForFirstConsumer true 5h45m
gp3-csi (default) ebs.csi.aws.com Delete WaitForFirstConsumer true 5h45m
ocs-storagecluster-ceph-rbd openshift-storage.rbd.csi.ceph.com Delete Immediate true 4m17s
ocs-storagecluster-cephfs openshift-storage.cephfs.csi.ceph.com Delete Immediate true 4m9s
openshift-storage.noobaa.io openshift-storage.noobaa.io/obc Delete Immediate false 78s

 

OCP-Virt 構築

OpenShift Virtualization Operatorインストール

OpenShift OperatorHub で Administrator のパースペクティブにいることを確認します。

Web コンソールで[Operators] > [OperatorHub]に移動します。

検索バーに「OpenShift Virtualization」と入力して、 OpenShift Virtualization をクリックして Install をクリックします。

デフォルトの設定でInstall をクリックします。

Operatorのインストール完了確認

  1. [インストール済みの Operator]に OpenShift Virtualizationが存在しており、ステータスがSucceededになっていることを確認します。

OpenShift Virtualization をクリックして HyperConverged を作成します。

デフォルトの設定で Install をクリックします。

ステータスに Available が表示されていることを確認します。

下記コマンドを実行して StorageClass:ocs-storagecluster-ceph-rbd-virtualization が作成されていることを確認します。

$ oc get storageclass
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
gp2-csi ebs.csi.aws.com Delete WaitForFirstConsumer true 3h23m
gp3-csi (default) ebs.csi.aws.com Delete WaitForFirstConsumer true 3h23m
ocs-storagecluster-ceph-rbd openshift-storage.rbd.csi.ceph.com Delete Immediate true 4m12s
ocs-storagecluster-cephfs openshift-storage.cephfs.csi.ceph.com Delete Immediate true 4m4s
openshift-storage.noobaa.io openshift-storage.noobaa.io/obc Delete Immediate false 3m16s
ocs-storagecluster-ceph-rbd-virtualization openshift-storage.rbd.csi.ceph.com Delete Immediate true 0s

簡単なVMの作成

OpenShift OperatorHub で Administrator のパースペクティブにいることを確認します。

Web コンソールで[Virtualization] > [VirtualMachines]に移動します。

[Create VirtualMachines] > [From template] をクリックします。

プロジェクトの選択、作成する必要があれば作成して作成対象のOSをクリックします。右上にSource availableと書いてあるOSが簡単に作成可能です。今回はCentOS Stream 9 VMを選択してみます。

デフォルトの設定で[Quick Create VirtualMachines] をクリックします。

数分後、ステータスがRunningであることを確認します。

[Console]タブへ移動し、[Guest login credentials]をクリックしてログイン情報を取得後、コンソールからVMにログインします。「i」キーを押すとinsert modeに入ります。insert modeを抜けるには、「ESC」キーを押します。

コンソールから下記コマンドを実行してパッケージのインストールをします。

$ sudo dnf install nginx
...
Complete!

コンソールから下記コマンドを実行してNginxを起動します。

$ sudo systemctl start nginx

コンソールから下記コマンドを実行してnginxが起動していることを確認します。

$ sudo systemctl status nginx
...
 Active: active (running)
...

VMの外部公開設定

下記コマンドを実行してVMが作成されているプロジェクトに移動します。

$ oc project <プロジェクト名>
Now using project "<プロジェクト名>" on server "https://api.<ドメイン>:6443".

下記コマンドを実行し、パラメータシートを参照してServiceのマニフェストファイルを作成します。

$ vi service.yaml
apiVersion: v1
kind: Service
metadata:
  name: vm-service
  namespace: vm-tutorial
spec:
  selector:
    kubevirt.io/domain: centos-stream9-moccasin-bandicoot-85 # VM名を指定
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80  # Nginxのリッスンポート

下記コマンドを実行してserviceを作成します。

$ oc apply -f service.yaml
service/nginx-service created

下記コマンドを実行して作成したserviceを公開します。

$ oc expose service vm-service
route.route.openshift.io/vm-service exposed

下記コマンドを実行してrouteが作成されていることを確認します。

$ oc get route
NAME HOST/PORT PATH SERVICES PORT TERMINATION WILDCARD
vm-service vm-service-vm-tutorial.apps.<ドメイン> vm-service 80 None

VMの疎通確認

表示されたホストにアクセスしてnginxの画面が表示されることを確認します。

まとめ

実際にAWS環境のOpenShift上でOCP-Virtを構築し、簡単なVMの作成と外部公開を行ってみました。OCP-VirtはOperaterのインストールを行うことで簡単に仮想化基盤を構築することが出来ました。

次回の記事では同じ仮想化基盤であるSUSE VIrtualizationの紹介をします。

参考文献

https://docs.redhat.com/ja/documentation/openshift_container_platform/4.17/html/virtualization/index

https://docs.redhat.com/ja/documentation/red_hat_openshift_data_foundation/4.17/html/deploying_openshift_data_foundation_using_amazon_web_services/index

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

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

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

コメントを残す

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