本日の記事はOpenShiftで仮想マシンを扱うことが出来るOpenShift VirtualizationをAWS上にデプロイし、AWSのベアメタルインスタンスで仮想マシンを扱ってみたいと思います。
アップストリームプロジェクトはKubeVirtになっています。本記事の内容は本記事執筆時にはTechnical Previewのサポート状況であり本番で利用することはできません。
軽快に検証できる点を重視して記事を提供致します。
軽快に検証できる点を重視して記事を提供致します。
- OpenShift Virtualizationのデプロイしてテストインスタンスを立ち上げる
- プラットフォームはAWSを使用
- OpenShiftインストールメソッドはIPI
- ストレージにはOpenShift Data Foundationを使用
- 2つMachineSetを作成しODF、OCP-V用ノードを追加
- 何らかのOpenShiftのサブスクリプションを所有されていることが前提
- マイグレーションなど機能のテストは次回
TOC
- はじめに
- OpenShiftをAWS IPIでインストール
- MachineSet作成してODFノード(ストレージ用)、Baremetalノード(OCP Virtualization用親ノード)追加
- Operatorインストール (ODF)
- Storage System CR作成
- HCO CR作成
- 仮想インスタンスの立ち上げ
- 次回
はじめに
コンテナプラットフォームの上で仮想マシンを動かす。そんな謎ソリューションが気になってくしゃみが止まらなくなった日はありませんか?私は年々ひどくなる花粉症に理由を付けて現実逃避をする日々が続いております。
クラウドインフラ全般を担当しているソリューションアーキテクトの伊藤です。
クラウドインフラ全般を担当しているソリューションアーキテクトの伊藤です。
こちらのKBでOpenShift VirtualizationをAWS上にデプロイするナレッジが公開されています。
最近リリースされたOpenShift 4.10にアドオンできるOpenShift Virtualization 4.10のリリースノートに、「OpenShift VirtualizationのワーカーノードにAWSのBaremetalノードを使用することについてはTechPreviewです」と明記されるようになりました。実は以前からデプロイは出来たのですが、今回ドキュメントに明記されたことから、本記事では実際に行ってみたいと思います。
最近リリースされたOpenShift 4.10にアドオンできるOpenShift Virtualization 4.10のリリースノートに、「OpenShift VirtualizationのワーカーノードにAWSのBaremetalノードを使用することについてはTechPreviewです」と明記されるようになりました。実は以前からデプロイは出来たのですが、今回ドキュメントに明記されたことから、本記事では実際に行ってみたいと思います。
#仮想マシンにはRWX属性を持った共有ストレージが必要であるため、OpenShift Data Foundationも同時にデプロイします。
今回デプロイするのはこの構成(最小構成、シングルAZ)
- Masterノード (3nodes, m5.2xlarge)
- 標準のWorkerノード (2nodes, m6i.large)
- ストレージ用のODF Workerノード (3nodes, m6i.4xlarge)
- 仮想マシンを動かすベアメタルWorkerノード (2nodes, m5.metal)
1と2はopenshift-installerによって初期にデプロイされます。
3と4は初期デプロイが完了したあと、machinesetを作成してノードを拡張します。
OpenShiftをAWS IPIでインストール
基本は上記のクイックインストールの通りですが、費用削減とテストのためAZを1つに絞ります。
アカウント設定
AWS CLIが使えるIAMアカウントを作成してください。
アカウント確認
AWS CLIを叩いたときに意図したアカウントであるか確認してください。
OpenShift CLIダウンロード
上記のURLからOpenShift installerとCommand line interfaceを両方最新をDLして展開します。
インストールコンフィグの作成
mkdir aws4103 #クラスタ毎にディレクトリを作ることをお勧めします。
openshift-isntall create install-config #以下のインタラクティブが行われます。
SSH公開鍵、プラットフォーム、リージョン、ベースドメイン、クラスタ名、pullsecretの6つを指定します。そして生成されたinstall-config.yamlファイルを以下のdiffの様に書き換えます。
[takitou@takuya-PC aws410]$ diff -uda install-config.yaml.org install-config.yaml--- install-config.yaml.org 2022-03-28 13:59:53.296185800 +0900+++ install-config.yaml 2022-03-28 14:03:13.925747800 +0900@@ -4,13 +4,20 @@- architecture: amd64hyperthreading: Enabledname: worker- platform: {}- replicas: 3+ platform:+ aws:+ zones:+ - ap-northeast-1d+ replicas: 2controlPlane:architecture: amd64hyperthreading: Enabledname: master- platform: {}+ platform:+ aws:+ zones:+ - ap-northeast-1d+ type: m5.2xlargereplicas: 3metadata:creationTimestamp: null[takitou@takuya-PC aws410]$
デプロイ実行
[takitou@takuya-PC aws410]$ openshift-install create cluster --dir . --log-level=debug
特に問題なければクラスタ作成コマンドを実行し、40分弱でクラスタがデプロイされて管理者のログインパスワードが表示されます。
INFO To access the cluster as the system:admin user when using 'oc', run 'export KUBECONFIG=/home/takitou/aws410/auth/kubeconfig'INFO Access the OpenShift web-console here: https://console-openshift-console.apps.ocpv.sandbox1779.opentlc.comINFO Login to the console with user: "kubeadmin", and password: "1234-5678-9012-3456"
デプロイ完了を確認
export KUBECONFIG=./auth/kubeconfigoc get cooc get machines -n openshift-machine-api
Cluster Operatorが全てAvailable: Ture, Degraded: Falseになっていることを確認します。
MachineSet作成してODFノード(ストレージ用)、Baremetalノード(OCP Virtualization用親ノード)追加
マシンセットの作成は以下のドキュメントを参考にします。
oc get machineset -n openshift-machine-apiNAME DESIRED CURRENT READY AVAILABLE AGEocpv-rskd2-worker-ap-northeast-1d 2 2 2 2 34moc get machineset -n openshift-machine-api ocpv-rskd2-worker-ap-northeast-1d -o yaml > ocpv-odf-apne-1d.yaml
ODFノード用のMachineSetの定義は以下のdiffのように変更
[takitou@takuya-PC aws410]$ diff -uda ocpv-worker-apne-1d.yaml ocpv-odf-apne-1d.yaml
--- ocpv-worker-apne-1d.yaml 2022-03-28 14:51:47.205147700 +0900
+++ ocpv-odf-apne-1d.yaml 2022-03-28 14:55:15.593765900 +0900
@@ -1,34 +1,35 @@
apiVersion: machine.openshift.io/v1beta1
kind: MachineSet
metadata:
- annotations:
- machine.openshift.io/GPU: "0"
- machine.openshift.io/memoryMb: "8192"
- machine.openshift.io/vCPU: "2"
- creationTimestamp: "2022-03-28T05:16:55Z"
- generation: 1
labels:
machine.openshift.io/cluster-api-cluster: ocpv-rskd2
- name: ocpv-rskd2-worker-ap-northeast-1d
+ name: ocpv-rskd2-odf-ap-northeast-1d
namespace: openshift-machine-api
- resourceVersion: "23688"
- uid: 8bbed1d2-3ce9-43bb-b412-a330fac4df2c
spec:
- replicas: 2
+ replicas: 3
selector:
matchLabels:
machine.openshift.io/cluster-api-cluster: ocpv-rskd2
- machine.openshift.io/cluster-api-machineset: ocpv-rskd2-worker-ap-northeast-1d
+ machine.openshift.io/cluster-api-machineset: ocpv-rskd2-odf-ap-northeast-1d
template:
metadata:
labels:
machine.openshift.io/cluster-api-cluster: ocpv-rskd2
machine.openshift.io/cluster-api-machine-role: worker
machine.openshift.io/cluster-api-machine-type: worker
- machine.openshift.io/cluster-api-machineset: ocpv-rskd2-worker-ap-northeast-1d
+ machine.openshift.io/cluster-api-machineset: ocpv-rskd2-odf-ap-northeast-1d
spec:
lifecycleHooks: {}
- metadata: {}
+ taints:
+ - effect: NoSchedule
+ key: node.ocs.openshift.io/storage
+ value: "true"
+ metadata:
+ creationTimestamp: null
+ labels:
+ node-role.kubernetes.io/worker: ""
+ node-role.kubernetes.io/infra: ""
+ cluster.ocs.openshift.io/openshift-storage: ""
providerSpec:
value:
ami:
@@ -47,7 +48,7 @@
deviceIndex: 0
iamInstanceProfile:
id: ocpv-rskd2-worker-profile
- instanceType: m6i.large
+ instanceType: m6i.4xlarge
kind: AWSMachineProviderConfig
metadata:
creationTimestamp: null
@@ -69,9 +70,3 @@
value: owned
userDataSecret:
name: worker-user-data
-status:
- availableReplicas: 2
- fullyLabeledReplicas: 2
- observedGeneration: 1
- readyReplicas: 2
- replicas: 2
[takitou@takuya-PC aws410]$
続いて、Baremetalノード用のMachineSetを作成します。
oc get machineset -n openshift-machine-api mymetal-dqhvp-worker-ap-northeast-1d -o yaml > ocpv-metal-apne-1d.yaml
Baremetalノード用のMachineSetの定義は以下のdiffのように変更
[takitou@takuya-PC aws410]$ diff -uda ocpv-worker-apne-1d.yaml ocpv-metal-apne-1d.yaml
--- ocpv-worker-apne-1d.yaml 2022-03-28 14:51:47.205147700 +0900
+++ ocpv-metal-apne-1d.yaml 2022-03-28 14:56:54.514627400 +0900
@@ -1,34 +1,29 @@
apiVersion: machine.openshift.io/v1beta1
kind: MachineSet
metadata:
- annotations:
- machine.openshift.io/GPU: "0"
- machine.openshift.io/memoryMb: "8192"
- machine.openshift.io/vCPU: "2"
- creationTimestamp: "2022-03-28T05:16:55Z"
- generation: 1
labels:
machine.openshift.io/cluster-api-cluster: ocpv-rskd2
- name: ocpv-rskd2-worker-ap-northeast-1d
+ name: ocpv-rskd2-metal-ap-northeast-1d
namespace: openshift-machine-api
- resourceVersion: "23688"
- uid: 8bbed1d2-3ce9-43bb-b412-a330fac4df2c
spec:
replicas: 2
selector:
matchLabels:
machine.openshift.io/cluster-api-cluster: ocpv-rskd2
- machine.openshift.io/cluster-api-machineset: ocpv-rskd2-worker-ap-northeast-1d
+ machine.openshift.io/cluster-api-machineset: ocpv-rskd2-metal-ap-northeast-1d
template:
metadata:
labels:
machine.openshift.io/cluster-api-cluster: ocpv-rskd2
machine.openshift.io/cluster-api-machine-role: worker
machine.openshift.io/cluster-api-machine-type: worker
- machine.openshift.io/cluster-api-machineset: ocpv-rskd2-worker-ap-northeast-1d
+ machine.openshift.io/cluster-api-machineset: ocpv-rskd2-metal-ap-northeast-1d
spec:
lifecycleHooks: {}
- metadata: {}
+ metadata:
+ creationTimestamp: null
+ labels:
+ node-role.kubernetes.io/worker: ""
providerSpec:
value:
ami:
@@ -47,7 +42,7 @@
deviceIndex: 0
iamInstanceProfile:
id: ocpv-rskd2-worker-profile
- instanceType: m6i.large
+ instanceType: m5.metal
kind: AWSMachineProviderConfig
metadata:
creationTimestamp: null
@@ -69,9 +64,3 @@
value: owned
userDataSecret:
name: worker-user-data
-status:
- availableReplicas: 2
- fullyLabeledReplicas: 2
- observedGeneration: 1
- readyReplicas: 2
- replicas: 2
[takitou@takuya-PC aws410]$
作成したマニフェストをOpenShiftクラスタに適用します。
oc create -f ocpv-odf-apne-1d.yamloc create -f ocpv-metal-apne-1d.yaml
AWSのクラウドAPIを叩いて実際にノードを作成するため少し時間が掛かります。適用したことを確認します。
oc get machine -n openshift-machine-apioc get machineset -n openshift-machine-api
これでODFとOpenShift Virtualization用のノードがデプロイできました。
Operatorインストール (ODF)
OperatorHubでODFを検索しクリックします。
特に変更なくインストールを行います。
インストールが完了したら、同時にOpenShift Virtualization Operatorもインストールします。Storage System CR作成
次にODFのカスタムリソースであるStorage Systemを作成し、ストレージクラスタを構成します。
提供されるAPIのStorage Systemをクリックします。
1については特に変更なく進みます。
2の容量およびノードについては、MachineSetを作成するためのマニフェストにラベルを付与していましたので、デフォルトで対象のノードが選択された状態になっています。このまま進みます。セキュリティおよびネットワークについても特に変更点ありません。このまま進めてStorage Systemを作成していまいます。
作成が完了すると、ODFのコンソールが確認できるようになります。
デフォルト ストレージクラスの変更
ODFでStorage Systemを作成してから、OpenShift VirtualizationのHyper Converged CRを作成するまでの間に行う重要なことがあります。
デフォルトのStorage ClassをODFで作成した ocs-storagecluster-ceph-rbdに変更します。
この変更によって、この後作成するHyper Converged CRによって仮想マシンテンプレートのOSイメージ保存先が変更されます。デフォルトの gp2だとRWX属性ではないため、gp2で作成された仮想マシンでライブマイグレーションが実施できません。
デフォルトのStorage ClassをODFで作成した ocs-storagecluster-ceph-rbdに変更します。
この変更によって、この後作成するHyper Converged CRによって仮想マシンテンプレートのOSイメージ保存先が変更されます。デフォルトの gp2だとRWX属性ではないため、gp2で作成された仮想マシンでライブマイグレーションが実施できません。
HCO CR作成
続いて、HyperConveged CRも作成します。内容はデフォルトのままで問題ありません。
Administratorパースペクティブに仮想化のビューが出現しました。
仮想インスタンスの立ち上げ
なんと!OpenShift 4.10から、いくつかの仮想マシンのテンプレートにブートソース(OSイメージ)がデフォルトで設定されるようになりました。
特にコンフィグレーションを変更していない場合は、このブートソースのOSイメージは常に最新を目指します。機能追加、脆弱性修正などで新しいパッチバージョンがリリースされた場合、これに追従します。
特にコンフィグレーションを変更していない場合は、このブートソースのOSイメージは常に最新を目指します。機能追加、脆弱性修正などで新しいパッチバージョンがリリースされた場合、これに追従します。
ブートソースのPVのストレージクラスがデフォルトで指定したocs-storagecluster-ceph-rbdであることが確認できます。
最後にOpenShiftで仮想マシンが立ち上げられることを確認します。
次回
次回は実際にマイグレーションなどの機能を確認して使ってみようと思います。