概要
こちらの記事では既存の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 の 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
変更点
- <infrastructure_id>:<クラスター名>-<ランダム文字列>
- infrastructure_idは以下のコマンドで確認するか、既存のマシンセットのyamlを見て確認してください。
-
$ oc get infrastructure cluster -o jsonpath='{.status.infrastructureName}' ocp-test-sp9lv
- <role>:worker
- metadata.name:マシンセットの名前(既存のマシンセットの名前と被るとエラーが出るので注意)
- instanceType:c5n.metal(ベアメタルインスタンスが要件となるため、ベアメタルインスタンスタイプを選択)
- 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
変更点
- <infrastructure_id>:<クラスター名>-<ランダム文字列>
- infrastructure_idは以下のコマンドで確認するか、既存のマシンセットのyamlを見て確認してください。
-
$ oc get infrastructure cluster -o jsonpath='{.status.infrastructureName}' ocp-test-sp9lv
- <role>:worker
- metadata.name:マシンセットの名前(既存のマシンセットの名前と被るとエラーが出るので注意)
- instanceType:m6a.2xlarge(3台の合計リソースが要件を満たすインスタンスタイプを選択)
- 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のインストール完了確認
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