本記事はNutanix Technical Marketing Engineer のNimal Kunnath氏が2022年8月16日に投稿した記事の翻訳版です。
原文はこちら。
NutanixとRed Hatは継続してお客様がハイブリッドマルチクラウド環境を進んでゆくためにお望みの認証取得済の、一元化されたソリューションを提供し続けています。プラットフォームに特化したRed Hat OpenShiftクラスタをNutanix上にインストールすることも可能ではあるものの、このやり方では管理者が必要な仮想マシン、オペレーティングシステムイメージ、ロードバランサー、DNSエントリーなどをすべて展開しなければなりません。Nutanix NCM Self-ServiceとRed Hat Ansible Automation Platformを活用してこれらのワークフローをエンドツーエンドで自動化することもできますが、お客様は2つのプラットフォームをネイティブに統合したソリューションを必要とされています。
Red Hat OpenShift 4.11のリリースに伴い、Installer Provisioned Infrastructure もしくはIPIとして知られるフルスタックの自動化されたインストールプロセスがNutanixクラウドプラットフォーム向けにも利用できるようになったことをアナウンスできることを喜ばしく思います。
IPI手法ではOpenShiftインストーラーはNutanix Prism APIと統合され、AHV仮想マシンの作成、ブートイメージのインストール、そしてクラスタ全体のブートストラップを行います。インストールの中に統合されているため、外部のロードバランサーを作成し、構成する必要はありません。それだけではなく、刻々と変わり続けるワークロードに対応するためのクラスタのスケールアップ・ダウンもユーザーの介入なく行われます。これはNutanixのアップストリームクラスタAPIプロジェクトとカスタムOpenShiftリソースをベースとして完全なMachine APIのサポートによって実現されています。
それではIPIインストール展開ワークフローの詳細にステップごとに分け入ってみましょう。
前提条件
- Red Hat OpenShift Container Platform version 4.11 は以下のソフトウェアヴァージョンにおいて互換性を検証済みです:
- Prism Central ヴァージョン pc.2022.4
- AOS ヴァージョン 5.20.4 (LTS) および 6.1.1 (STS)
- 最低800GBのストレージを保持するNutanixクラスタ
- 仮想マシン、カテゴリ、イメージに対するCRUD操作が実行できるだけのロールを割り当てられたNutanixユーザーアカウント
- 有効なPrism Central向けに信頼済のCAから発行されたSSL証明。自己証明の証明書を利用する場合にはOpenShiftについての文書を参照してください。
- 環境内にファイヤウォールがある場合にはPrism CentralのIPアドレスに対して9440ポートのアクセスを許可されていることをご確認ください。
- Machineネットワーク向けにはDHCPを利用する必要があり、クラスタ Machineに対する永続的なIPアドレスを提供できるように設定しなければなりません。
- クラスタAPIのVIPとingress VIP向けに2つの静的IPアドレスを予約して置かなければなりません。もしNutanixのIPAM(IPアドレス管理)機能を利用する場合、Prism Elementクラスタ内のコントローラーVMの何れかから以下のコマンドを利用して、サブネットから予約を行うことができます。
acli net.add_to_ip_blacklist <network_name> ip_list=ip_address1,ip_address2
- 適切なDNSサーバー内で2つの静的IPアドレス向けのDNSレコードを作成してください。これらは以下のようなフォーマットで指定します。
- api.<cluster_name>.<base_domain>. API VIP向け
- *.apps.<cluster_name>.<base_domain>. ingress VIP向け
今回のデモでは、ocp-demoという名前のクラスタ名でクラスタをインストールし、ドメインは mypcfqdn.uk をベースとします。APIとingress のVIPのワイルドカードDNSエントリーが有効であることを確認してみましょう。
root@openshift_provisoner ~]# dig +short api.ocp-demo.mypcfqdn.uk
10.55.68.150
rroot@openshift_provisoner ~]# dig +short test.apps.ocp-demo.mypcfqdn.uk
10.55.68.151
インストールプログラムのダウンロード
Red Hat Hybrid Cloud Consoleにログインして、Nutanix AOS ページへ移動して始めていきましょう。OpenShift installer programとクラスタの管理に必要なoc toolsをダウンロードして、展開します。Pull secretもダウンロードしたことを確認しましょう。これ以外にはここからもインストールプログラムをダウンロードすることができます。
$ ls
kubectl oc openshift-install pull_secret.json
Cloud Credential Operatorユーティリティ
Cloud Credential OperatorはOPCの特定のクラウドプロバイダー向けの認証情報のリクエストを実行するためのコントローラーです。Nutanixでは現時点ではCCOのmanual mode設定のみをサポートしています。Manual modeではユーザーがCloud Credential Operator(CCO)の代わりにクラウド認証情報を管理することになります。CredentialsRequest CRをリリースイメージ内に展開し、Kubernetes SecretsをPrism Centralの認証機能を利用して作成する必要があります。今回はccoctl toolをこのために利用します。
Ccoctlバイナリをリリースイメージから展開しましょう。
- OpenShiftリリースイメージを取得します。
$ RELEASE_IMAGE=$(./openshift-install version | awk '/release image/ {print $3}')
- CCOコンテナイメージをリリースイメージから取得します。
$ CCO_IMAGE=$(oc adm release info --image-for='cloud-credential-operator' $RELEASE_IMAGE)
- CcoctlバイナリをCCOコンテナイメージから展開し、実行権限を与えます。
$ oc image extract $CCO_IMAGE --file="/usr/bin/ccoctl" -a pull_secret.json
$ chmod u+x ccoctl && cp ccoctl /usr/local/bin/
$ ls
ccoctl kubectl oc openshift-install pull_secret.json
注意: ccoctlはLinuxバイナリなのでLinux環境で実行しなければなりません。
ディレクトリ”creds”内にPrism の認証情報を保持した、YAMLファイルを作成していきましょう。以下は認証情報のフォーマットのサンプルです。
$ cat creds/pc_credentials.yaml
credentials:
- type: basic_auth
data:
prismCentral:
username: <username_for_prism_central>
password: <password_for_prism_central>
Nutanixクラウドプラットフォーム向けのCredentialsRequestオブジェクトをリリースイメージから展開し、”credreqs”というディレクトリ内に保存します。
$ oc adm release extract --credentials-requests --cloud=nutanix --to=credreqs -a pull_secret.json $RELEASE_IMAGE
最後にccoctl toolを利用してCredentialsRequestオブジェクトを処理し、secret manifestsを生成します。これは後で必要になります。
$ ccoctl nutanix create-shared-secrets --credentials-requests-dir=credreqs --output-dir=. --credentials-source-filepath=creds/pc_credentials.yaml
Output:
2022/08/02 04:01:58 Saved credentials configuration to: manifests/openshift-machine-api-nutanix-credentials-credentials.yaml
ファイルが作成されたことを確認します。以下のようなアウトプットがえられるはずです。
$ cat manifests/openshift-machine-api-nutanix-credentials-credentials.yaml
apiVersion: v1
kind: Secret
metadata:
name: nutanix-credentials
namespace: openshift-machine-api
type: Opaque
data:
credentials: ******************************************************************************************************************************************************
インストール構成ファイルを作成
インストールの際には3組のファイルを利用することになります ― install_config.yamlと命名されたインストール構成ファイル、Kubernetes manifest、そしてMachineタイプに合わせたignition config fileです。Install_configファイルはNutanixプラットフォームに固有の詳細情報が含まれており、これがkubernetes manifestへと変換されます。これらのmanifestはignition config fileへとまとめられ、インストールプログラムがこれを利用することでクラスタを作成します。
Install_configファイルを作成する手順はインタラクティブです。以下のコマンドを実行してインストールを始めましょう。
$ openshift-install create install-config
- platformにはnutanixを選択します
- Prism Centralのエンドポイント、Prism Elementクラスタ、そして利用するネットワークサブネットなどのPrism Centralの詳細情報を入力します
- Cluster name, base domain, APIとingressのためのVIPなどのOpenShiftクラスタの詳細情報を入力します
$ openshift-install create install-config
? SSH Public Key /root/.ssh/nk_id_rsa.pub
? Platform nutanix
? Prism Central ntnxdemo.mypcfqdn.uk
? Port 9440
? Username demo-admin
? Password A? for help] ************
INFO Connecting to Prism Central ntnxdemo.mypcfqdn.uk
? Prism Element DM3-POC068
? Subnet Secondary-demo
? Virtual IP Address for API 10.55.68.150
? Virtual IP Address for Ingress 10.55.68.151
? Base Domain mypcfqdn.uk
? Cluster Name ocp-demo
? Pull Secret /? for help] ******************************************************************************************************************************************************
***************************************************************************************************
INFO Install-Config created in: .
install_config.yaml が作成されたら、このファイルはインストール手順内で利用されて削除されてしまうため、確実に安全にバックアップしておくようにしましょう。同じファイルを再利用して、名前やVIPなどの必要なパラメーターを変更して複数のクラスタを作成することもできます。
以下はこの手順で生成されたinstall_config.yamlのサンプルです。先に進む前にファイルを開いて情報が正しいことを確認しておきましょう。今回はデフォルト設定を利用していきます。
$ cat install-config.yaml
apiVersion: v1
baseDomain: mypcfqdn.uk
compute:
- architecture: amd64
hyperthreading: Enabled
name: worker
platform: {}
replicas: 3
controlPlane:
architecture: amd64
hyperthreading: Enabled
name: master
platform: {}
replicas: 3
credentialsMode: Manual
metadata:
creationTimestamp: null
name: ocp-demo
networking:
clusterNetwork:
- cidr: 10.128.0.0/14
hostPrefix: 23
machineNetwork:
- cidr: 10.0.0.0/16
networkType: OpenShiftSDN
serviceNetwork:
- 172.30.0.0/16
platform:
nutanix:
apiVIP: 10.55.68.150
ingressVIP: 10.55.68.151
prismCentral:
endpoint:
address: ntnxdemo.mypcfqdn.uk
port: 9440
password: ********
username: demo-admin
prismElements:
- endpoint:
address: 10.55.68.37
port: 9440
uuid: 0005e4c8-1f34-9dc5-0000-000000014039
subnetUUIDs:
- 8346214e-584c-4689-b525-c6019bbc4856
publish: External
pullSecret: '{"auths": …}'
sshKey: '********'
すべての利用可能なパラメーターとお好みにファイルをカスタマイズするためにはOpenShift文書 を参照してください。
Install_config YAMLファイルからインストールのmanifestを生成します。
$ openshift-install create manifests
INFO Consuming Install Config from target directory
INFO Manifests created in: manifests and openshift
注意: manifestsディレクトリ内に以前生成したopenshift-machine-api-nutanix-credentials-credentials.yaml があることを確認してください。
クラスタの作成の準備が整いました。
クラスタの展開
以下のコマンドを実行してクラスタの展開を開始します。
$ openshift-install create cluster
このコマンドはbootstrap、masterそしてworkerのignition ファイルを作成し、インストーラーがこれらからクラスタを作成します。インストーラーはブートイメージを取得、作成し、これがbootstrapとcontrol planeノードのパワーオンに利用されます。Control planeが準備できたら、bootstrapノードは削除され、workerノードが指定された構成で作成されます。
$ openshift-install create cluster
INFO Consuming Common Manifests from target directory
INFO Consuming Worker Machines from target directory
INFO Consuming Openshift Manifests from target directory
INFO Consuming Master Machines from target directory
INFO Consuming OpenShift Install (Manifests) from target directory
INFO Creating infrastructure resources...
INFO Waiting up to 20m0s (until 4:43AM) for the Kubernetes API at https://api.ocp-demo.mypcfqdn.uk:6443...
INFO API v1.24.0+9546431 up
INFO Waiting up to 30m0s (until 4:55AM) for bootstrapping to complete...
INFO Destroying the bootstrap resources...
INFO Waiting up to 40m0s (until 5:15AM) for the cluster at https://api.ocp-demo.mypcfqdn.uk:6443 to initialize...
INFO Waiting up to 10m0s (until 4:56AM) for the openshift-console route to be created...
INFO Install complete!
INFO To access the cluster as the system:admin user when using 'oc', run
INFO export KUBECONFIG=/root/IPI/auth/kubeconfig
INFO Access the OpenShift web-console here: https://console-openshift-console.apps.ocp-demo.mypcfqdn.uk
INFO Login to the console with user: "kubeadmin", and password: "xxxx-xxxx-xxxx"
INFO Time elapsed: 25m29s
クラスタの展開が正常に完了すると、ターミナルにはログイン認証情報とともにOpenShift web consoleにアクセスするためのリンクが表示されます。
Prism Central画面へと戻ると、クラスタ内のAHVノード全てにMachineが展開されていることを確認することができます。 Prismでは仮想マシンの構成情報以外にもネットワーク、ストレージ、効率性などの詳細統計情報インサイトも確認することができます。
以下は展開が終わった後のPrism Centralで取得したスクリーンキャプチャです。
OpenShiftのリンクを取得し、クラスタの管理者コンソールへログインしましょう。想定通り、プロバイダーはNutanixとなっていることが確認できます。
Nutanix CSI Operator
インストール終了後にはクラスタ向けのストレージを構成しましょう。OpenShift上のアプリケーションはRed Hat OpenShift Operator 認証取得ずみとしてパッケージされたNutanix CSI Driver経由でNutanixストレージを利用します。Nutanix CSI Operatorはブロックストレージ向けにVolumes、そしてファイルストレージ向けにFilesを利用して拡張性を備えた永続ストレージを提供します。
コンソール内でOperatorタブへと移動し、Nutanixと検索します。認証取得済のNutanix Operatorをインストールし、StorageClassとPVCの作成のインストラクションに従います。
もっと詳細なウォークスルーのためにはこちらのデモを参照してください。
Machine API provider
OpenShift 4.11から利用できるIPIインストールに加え、NutanixはMachine APIのサポートも実現しています。Machine API Operatorは下支えするOpenShift仮想マシンをMachineとMachineSetの概念と通して管理しています。
ノード表示を選択すると、すべてのNutanix上の仮想マシンがここから作成されていることが確認できます。
Machine表示へと移動するとそれぞれのノードがMachineとしてMachine APIで管理されていることを確認できます。
インストーラーは標準でMachineSetを作成し、3つのworker machineをその中に保持しています。MachineSetはReplicaSetとPodにも利用されています。
コマンドラインへと戻って、確認していきましょう。
oc get machinesets -n openshift-machine-api
NAME DESIRED CURRENT READY AVAILABLE AGE
ocp-demo-t82dn-worker 3 3 3 3 64m
$ oc get machines -n openshift-machine-api
NAME PHASE TYPE REGION ZONE AGE
ocp-demo-t82dn-master-0 Running 64m
ocp-demo-t82dn-master-1 Running 64m
ocp-demo-t82dn-master-2 Running 64m
ocp-demo-t82dn-worker-bpl9w Running 59m
ocp-demo-t82dn-worker-cwntr Running 59m
ocp-demo-t82dn-worker-ndvlr Running 59m
マニュアルでMachineSetのレプリカを編集することでMachine数をコントロールすることもできます。Machineを削除した場合、MachineSetがそれを再作成します。インフラストラクチャーノードのような特殊な目的のための追加のMachineSetも作成することができます。
これだけでも素晴らしいのですが、autoscalerが更に優れた付加価値を提供します。クラスタを刻々と変化するワークロードに適用させていくことは大変重要です。我々はcluster auto scalerとmachine auto scaler オブジェクトも作成しており、これによってOpenShiftは自動的にインフラストラクチャーを環境のニーズに合わせてスケールさせることができます。
以下は我々が利用しようとしているYAMLオブジェクトのサンプルです。
apiVersion: "autoscaling.openshift.io/v1"
kind: "ClusterAutoscaler"
metadata:
name: "default"
spec:
resourceLimits:
maxNodesTotal: 20
scaleDown:
enabled: true
delayAfterAdd: 10s
delayAfterDelete: 10s
delayAfterFailure: 10s
ClusterAutoscalerではクラスタ全体のコア、メモリなどのリソースの拡張性の上限を指定することができます。今回はノード数の上限を20に指定しています。
apiVersion: "autoscaling.openshift.io/v1beta1"
kind: "MachineAutoscaler"
metadata:
name: "ocp-demo-t82dn-worker"
namespace: "openshift-machine-api"
spec:
minReplicas: 1
maxReplicas: 12
scaleTargetRef:
apiVersion: machine.openshift.io/v1beta1
kind: MachineSet
name: ocp-demo-t82dn-worker
MachineAutoscalerは自動的にMachine set内のMachine数を調整します。Spec内の名前が既存のmachine set(今回はocp-demo-t82dn-workerです)の名前と一致するようにしてください。
それでは先に進んで、これらのオブジェクトを作成していきましょう。
$ oc create -f clusterautoscaler.yaml
clusterautoscaler.autoscaling.openshift.io/default created
$ oc create -f machineautoscaler.yaml
machineautoscaler.autoscaling.openshift.io/ocp-demo-t82dn-worker created
公式の Openshift文書 を参照し、他のすべてのパラメータや制限について確認して、クラスタに必要な設定を施してください。
クラスタを自動拡張する
それではいくらかの負荷を生成して、OpenShift on Nutanixの拡張について見ていきましょう。Autoscale-exampleというプロジェクトを作成し、クラスタ上に大きな負荷をかけるジョブを作成します。多くのPodが作成され、worker machineの数を自動で拡張させることを余儀なくされます。
$ oc adm new-project autoscale-example && oc project autoscale-example
Created project autoscale-example
Now using project "autoscale-example" on server "https://api.ocp-demo.mypcfqdn.uk:6443".
以下のジョブは50の同時に稼働するPodを作成します。それぞれのPodが500Mのメモリと500mのCPUコアを利用して、8分後に終了します。
apiVersion: batch/v1
kind: Job
metadata:
generateName: demo-job-
spec:
template:
spec:
containers:
- name: work
image: busybox
command: "sleep", "480"]
resources:
requests:
memory: 500Mi
cpu: 500m
restartPolicy: Never
backoffLimit: 4
completions: 50
parallelism: 50
$ oc create -f demo-job.yaml
1分ほど待ってからPodの状況を確認すると、膨大な数のpodが稼働していることが確認できるはずです。
$ oc get pod -n autoscale-example
NAME READY STATUS RESTARTS AGE
demo-job-jfj5k-29xqc 0/1 Pending 0 63s
demo-job-jfj5k-2j8zf 1/1 Running 0 63s
demo-job-jfj5k-2xnng 1/1 Running 0 63s
demo-job-jfj5k-5ftfc 0/1 Pending 0 63s
demo-job-jfj5k-5kw7z 0/1 Pending 0 63s
demo-job-jfj5k-69j48 0/1 Pending 0 63s
demo-job-jfj5k-69xbw 1/1 Running 0 63s
demo-job-jfj5k-6z9n5 1/1 Running 0 63s
demo-job-jfj5k-7lxz2 0/1 Pending 0 63s
demo-job-jfj5k-7pz2g 1/1 Running 0 63s
demo-job-jfj5k-bbwgj 0/1 Pending 0 63s
demo-job-jfj5k-bnlzv 0/1 Pending 0 63s
demo-job-jfj5k-bqdq5 0/1 Pending 0 63s
demo-job-jfj5k-c4psn 1/1 Running 0 63s
demo-job-jfj5k-c9gxs 0/1 Pending 0 63s
demo-job-jfj5k-cc4ws 0/1 Pending 0 63s
demo-job-jfj5k-crbsf 0/1 Pending 0 63s
demo-job-jfj5k-fj2p5 0/1 Pending 0 63s
.
.
.
Machine数を見ると、多くのmachineが作成され追加されていることが確認できます。
$ oc get machines -n openshift-machine-api
NAME PHASE TYPE REGION ZONE AGE
ocp-demo-t82dn-master-0 Running 120m
ocp-demo-t82dn-master-1 Running 120m
ocp-demo-t82dn-master-2 Running 120m
ocp-demo-t82dn-worker-7zgzb Provisioning 17s
ocp-demo-t82dn-worker-8gh6f Provisioning 17s
ocp-demo-t82dn-worker-bpl9w Running 116m
ocp-demo-t82dn-worker-cwntr Running 116m
ocp-demo-t82dn-worker-dcvch Provisioning 17s
ocp-demo-t82dn-worker-dffnb Provisioning 17s
ocp-demo-t82dn-worker-m5jzm Provisioning 17s
ocp-demo-t82dn-worker-mh8vh Provisioning 17s
ocp-demo-t82dn-worker-ndvlr Running 116m
ocp-demo-t82dn-worker-vz4r4 Provisioning 17s
Prismコンソールへと戻ると、これらの仮想マシンがNutanixプラットフォーム上で作成されていることを確認できます。
8分が経過し、ワークロードが終了し始めると、クラスタ上の負荷は小さくなっていきます。今度はmachine autoscalerがMachineSetから不必要なMachineを削除始めていることを確認できます。
$ oc get machines -n openshift-machine-api
NAME PHASE TYPE REGION ZONE AGE
ocp-demo-t82dn-master-0 Running 130m
ocp-demo-t82dn-master-1 Running 130m
ocp-demo-t82dn-master-2 Running 128m
ocp-demo-t82dn-worker-7zgzb Deleting 10m7s
ocp-demo-t82dn-worker-bpl9w Running 126m
ocp-demo-t82dn-worker-cwntr Running 126m
ocp-demo-t82dn-worker-dcvch Running 10m7s
ocp-demo-t82dn-worker-dffnb Running 10m7s
ocp-demo-t82dn-worker-m5jzm Deleting 10m7s
ocp-demo-t82dn-worker-ndvlr Running 126m
ocp-demo-t82dn-worker-vz4r4 Running 10m7s
加えて、同様のことがOpenShiftコンソールからも確認でき、Nutanix上の仮想マシンが削除されているのがPrismから確認できます。
まとめ
OpenShift 4.11で、Nutanix上でエンタープライズ向けのKubernetesソリューションの展開と管理がより簡単になりました。IPIインストーラーの統合によって、ネイティブNutanix APIを利用したOpenShiftクラスタの自動化された展開が可能なっています。運用を行うメンバーは多くの時間と労力をOpenShiftの準備にかかる仕事からだけでなく、日々の運用の機能から取り戻すことができます。OpenShiftを下支えするNutanixインフラストラクチャーを動的に展開することによって、OpenShiftクラスタは自動的にスケールアップ、ダウンして変わり続けるモダンなアプリケーションのニーズに適切に対応することができます。