Nutanix Kubernetes Platform(NKP)v2.12 がリリースされたので、ためしに Nutanix CE 2.1 に Kubernetes クラスタを作成してみます。今回は、Cluster API で Kubernetes クラスタを管理する「Management Cluster」を作成してみます。
今回の内容です。
- 今回の環境
- 1. Linux マシンの用意
- 2. Podman のインストール
- 3. kubectl のインストール
- 4. nkp コマンドのインストール
- 5. Kubernetes ノード用ディスク イメージの登録
- 6. ネットワークの作成
- 7. Kubernetes クラスタの作成(Management Cluster)
- 8. Management Cluster へのログイン
ドキュメントは下記のあたりです。
今回の環境
下記のソフトウェアを利用しています。
- Nutanix Community Edition 2.1(Prism Element)
- Prism Central pc.2024.1.0.2
- Red Hat Enterprise Linux 8.10(作業マシン)
自宅ラボのマシンでは、搭載している CPU / メモリ容量の都合で Prism Central を起動すると他の VM を起動する余裕がありません。そこで、あえて Prism Central に 2つのシングル ノード Nutanix クラスタを登録しています。
- 各 Nutanix CE ノードの搭載リソース
- CPU: 8
- メモリ: 60GB弱
- lab-nxce-01 クラスタ: Prism Central 用
- lab-nxce-02 クラスタ: NKP の Kubernetes クラスタ作成用
1. Linux マシンの用意
今回は、作業用マシンとして RHEL8 を利用します。ちなみに、OS は Minimal インストールです。手順簡素化のため、今回はすべて root ユーザーで作業しますが、rootless Podman の設定をすれば、一般ユーザーでも作業できます。
[root@lab-nkp-01 ~]# cat /etc/redhat-release Red Hat Enterprise Linux release 8.10 (Ootpa)
RPM パッケージを更新しておきます。
[root@lab-nkp-01 ~]# dnf update -y [root@lab-nkp-01 ~]# reboot
実行ファイル(nkp、kubectl)を配置するディレクトリを、ホームディレクトリ直下に作成しておきます。
[root@lab-nkp-01 ~]# mkdir $HOME/bin
Bash の補完機能を利用できるように、bash-completion をインストールします。
[root@lab-nkp-01 ~]# dnf install bash-completion -y
NKP の Kubernetes ノードにログインするための SSH キー ペアを生成します。
[root@lab-nkp-01 ~]# ssh-keygen -t rsa -f $HOME/.ssh/id_rsa -P '' Generating public/private rsa key pair. Created directory '/root/.ssh'. Your identification has been saved in /root/.ssh/id_rsa. Your public key has been saved in /root/.ssh/id_rsa.pub. The key fingerprint is: SHA256:moovECf4BG4PUG1bSn+hFB1vVNHM4QoOPHkZ2VGmp9E root@lab-nkp-01 The key's randomart image is: +---[RSA 3072]----+ | ... .o..o++B+. | |o + o.o+.o.=+ | |+. o * .=.* o E | |++o o o .* . = | |.*o .S . o | |. .. o | | . o | | .. . | | .oo | +----[SHA256]-----+
生成した公開鍵ファイル(~.pub)を、あとで nkp コマンドで指定します。
[root@lab-nkp-01 ~]# ls -l $HOME/.ssh/id_rsa* -rw-------. 1 root root 2602 9月 16 03:57 /root/.ssh/id_rsa -rw-r--r--. 1 root root 569 9月 16 03:57 /root/.ssh/id_rsa.pub
2. Podman のインストール
NKP での Kubernetes クラスタ作成では kind(Kubernetes IN Docker)を利用するので、その前提として必要になる podman をインストールしておきます。
[root@lab-nkp-01 ~]# dnf install podman -y
3. kubectl のインストール
NKP 2.12 では、Kubernetes v1.29.6 のクラスタが作成されます。そこで、対応したバージョンの kubectl をインストールしておきます。
[root@lab-nkp-01 ~]# curl -L -o $HOME/bin/kubectl https://dl.k8s.io/release/v1.29.6/bin/linux/amd64/kubectl
kubectl には実行権限が付与されていないので、chmod で設定します。
[root@lab-nkp-01 ~]# chmod +x $HOME/bin/kubectl
これで、kubectl が実行できるようになりました。
[root@lab-nkp-01 ~]# kubectl version --client Client Version: v1.29.6 Kustomize Version: v5.0.4-0.20230601165947-6ce0bf390ce3
4. nkp コマンドのインストール
Nutanix Support & Insight Portal から、下記のファイルをダウンロードして、Linux マシンに配置しておきます。
- nkp_v2.12.0_linux_amd64.tar.gz
tar.gz ファイルから nkp ファイルを展開して、$HOME/bin 配下に保存します。
[root@lab-nkp-01 ~]# tar zxvf nkp_v2.12.0_linux_amd64.tar.gz -C $HOME/bin nkp [root@lab-nkp-01 ~]# ls -l $HOME/bin/nkp -rwxr-xr-x. 1 1000 1000 93982872 8月 28 02:57 /root/bin/nkp
RHEL 8 では、デフォルトで $HOME/bin ディレクトリが PATH 環境変数に含まれているので、nkp コマンドが実行できます。
[root@lab-nkp-01 ~]# nkp version diagnose: v0.10.1 imagebuilder: v0.13.1 kommander: v2.12.0 konvoy: v2.12.0 mindthegap: v1.13.1 nkp: v2.12.0
5. Kubernetes ノード用ディスク イメージの登録
Nutanix Support & Insight Portal にある NKP のダウンロード ページから、下記の QCOW2 ディスク イメージ ファイルをダウンロードしておきます。
- nkp-rocky-9.4-release-1.29.6-20240816215147.qcow2
Prism Central にログインして、「Infrastructure」→「Compute & Storage」→「Images」を開き、「Add Image」をクリックします。
Image Source で「Import File」を選択して「Add File」をクリックし、ダウンロードしておいた QCOW2 ファイルを選択します。
イメージの名前と種類を指定して、「Next」を苦リクします。
- Name: nkp-rocky-9.4-release-1.29.6-20240816215147.qcow2
※追加する QCOW2 ファイル名のままにしておく。 - Type: Disk
Select Location ページでは、デフォルトのまま「Save」をクリックします。これで、Prism Central に登録されている 2クラスタの両方にディスク イメージが追加されます。
しばらく待つとイメージの処理が完了して、名前や容量などが表示されます。
6. ネットワークの作成
AHV に、IP Address Management(IPAM)が有効化された VLAN ネットワークを作成しておきます。
Prism Central の「Infrastructure」→「Network & Security」→「Subnets」を開き、「Create Subnet」をクリックします。
ネットワークの情報を入力して、下にスクロールします。
- Name: nw-vlan-12
- Type: VLAN ※デフォルトのまま
- Compute: lab-nxce-01 ※Nutanix クラスタ名
- VLAN ID: 12
- Virtual Switch: vs0 ※デフォルトのまま
- IP Address Management: チェック ON
IPAM の情報(ネットワーク アドレスとゲートウェイ)を入力して、「Add IP Pool」をクリックします。
- Network IP Address/Prefix: 192.168.12.0/24
- Gateway IP Address: 192.168.12.1
IP Pool の情報を入力して「✓」マークをクリックし、さらにスクロールします。
- Start Address: 192.168.12.100
- End Address: 192.168.12.149
「Domain Settings」を開いて、DNS 関連のパラメータを入力してから「Create」をクリックします。
- Domain Name Servers: 192.168.1.101, 192.168.1.102
- Domain Search: go-lab.jp
- Domain Name: go-lab.jp
これで、1つめのクラスタ(lab-nxce-01)に VLAN ネットワークが作成されました。つづけて「Create Subnet」をクリックして、2つめのクラスタにも同様のネットワークを作成しておきます。
2つめのクラスタの VLAN ネットワークは、下記のように作成します。1つめの lab-nxce-01 クラスタとの差分は、赤字部分のみです。
- Name: nw-vlan-12
- Type: VLAN
- Compute: lab-nxce-02 ※Nutanix クラスタ名
- VLAN ID: 12
- Virtual Switch: vs0
- IP Address Management: チェック ON
- Network IP Address/Prefix: 192.168.12.0/24
- Gateway IP Address: 192.168.12.1
- IP Pool
- Start Address: 192.168.12.150
- End Address: 192.168.12.199
- Domain Settings
- Domain Name Servers: 192.168.1.101, 192.168.1.102
- Domain Search: go-lab.jp
- Domain Name: go-lab.jp
これで、それぞれのクラスタに IPAM が有効化された VLAN ネットワークが作成できました。
7. Kubernetes クラスタの作成(Management Cluster)
NKP の Management Cluster を、nkp コマンドで作成します。今回は root ユーザーで実行していますが、非 root ユーザーの場合は下記のように実行できました。(でも Delegate=yes がうまく認識させられず)
まず、下記のように Prism Central のユーザーとパスワード を環境変数で指定します。
export NUTANIX_USER=admin export NUTANIX_PASSWORD='パスワード'
Management Cluster は、nkp create cluster nutanix コマンドで作成できます。
このコマンドは、「nkp create cluster nutanix」のみで実行すると、対話モードでパラメータを指定してManagement Cluster を作成できます。しかし操作感が微妙で、Kubernetes ノードのリソース割り当てなどの詳細な設定できないので、今回は nkp コマンドにオプションを指定して実行します。
デフォルト構成(そして最小構成)の Management Cluster は、下記のように作成されます。
- Control Plane: 3 ノード(各 4 vCPU、16GB メモリ)
- Worker: 4 ノード(各 8 vCPU、32GB メモリ)
この構成ではラボ環境には大きすぎるので、本来の最小構成よりもさらに小さく指定してあります。そこで今回は、下記の nkp create cluster nutanix コマンドを実行します。
- Control Plane: 1 ノード(各 4 vCPU、8GB メモリ)
- Worker: 2 ノード(各 4 vCPU、6GB メモリ)
nkp create cluster nutanix \ --endpoint=https://lab-nxpc-01.go-lab.jp:9440 \ --insecure \ --control-plane-prism-element-cluster=lab-nxce-02 \ --worker-prism-element-cluster=lab-nxce-02 \ --control-plane-subnets=nw-vlan-12 \ --worker-subnets=nw-vlan-12 \ --cluster-name=nkpm01 \ --control-plane-endpoint-ip=192.168.12.200 \ --control-plane-vm-image=nkp-rocky-9.4-release-1.29.6-20240816215147.qcow2 \ --worker-vm-image=nkp-rocky-9.4-release-1.29.6-20240816215147.qcow2 \ --kubernetes-service-load-balancer-ip-range=192.168.12.201-192.168.12.204 \ --kubernetes-pod-network-cidr=172.16.0.0/16 \ --kubernetes-service-cidr=10.96.0.0/12 \ --csi-hypervisor-attached-volumes=true \ --csi-storage-container=default-container-88443613598780 \ --ssh-public-key-file=/root/.ssh/id_rsa.pub \ --self-managed \ --control-plane-replicas=1 \ --control-plane-vcpus=4 \ --control-plane-memory=8 \ --worker-replicas=2 \ --worker-vcpus=4 \ --worker-memory=6
nkp create cluster nutanix コマンドを実行してしばらく待つと、Kubernetes クラスタ(Management Cluster)が作成されます。ちなみに、さらに「--dry-run」オプションで追加することで、クラスタ作成直前までの事前確認ができます。
[root@lab-nkp-01 ~]# nkp create cluster nutanix \ > --endpoint=https://lab-nxpc-01.go-lab.jp:9440 \ > --insecure \ > --control-plane-prism-element-cluster=lab-nxce-02 \ > --worker-prism-element-cluster=lab-nxce-02 \ > --control-plane-subnets=nw-vlan-12 \ > --worker-subnets=nw-vlan-12 \ > --cluster-name=nkpm01 \ > --control-plane-endpoint-ip=192.168.12.200 \ > --control-plane-vm-image=nkp-rocky-9.4-release-1.29.6-20240816215147.qcow2 \ > --worker-vm-image=nkp-rocky-9.4-release-1.29.6-20240816215147.qcow2 \ > --kubernetes-service-load-balancer-ip-range=192.168.12.201-192.168.12.204 \ > --kubernetes-pod-network-cidr=172.16.0.0/16 \ > --kubernetes-service-cidr=10.96.0.0/12 \ > --csi-hypervisor-attached-volumes=true \ > --csi-storage-container=default-container-88443613598780 \ > --ssh-public-key-file=/root/.ssh/id_rsa.pub \ > --self-managed \ > --control-plane-replicas=1 \ > --control-plane-vcpus=4 \ > --control-plane-memory=8 \ > --worker-replicas=2 \ > --worker-vcpus=4 \ > --worker-memory=6 ✓ Creating a bootstrap cluster ✓ Initializing new CAPI components ✓ Creating ClusterClass resources ✓ Creating ClusterClass resources Generating cluster resources cluster.cluster.x-k8s.io/nkpm01 created secret/nkpm01-pc-credentials created secret/nkpm01-pc-credentials-for-csi created configmap/kommander-bootstrap-configuration created secret/global-nutanix-credentials created ✓ Waiting for cluster infrastructure to be ready ✓ Waiting for cluster control-planes to be ready ✓ Waiting for machines to be ready ✓ Initializing new CAPI components ✓ Creating ClusterClass resources ✓ Moving cluster resources You can now view resources in the moved cluster by using the --kubeconfig flag with kubectl. For example: kubectl --kubeconfig="/root/nkpm01.conf" get nodes ✓ Deleting bootstrap cluster Cluster default/nkpm01 kubeconfig was written to to the filesystem. You can now view resources in the new cluster by using the --kubeconfig flag with kubectl. For example: kubectl --kubeconfig="/root/nkpm01.conf" get nodes Starting kommander installation ✓ Deploying Flux ✓ Deploying Ingress certificate ✓ Creating kommander-overrides ConfigMap ✓ Deploying Git Operator ✓ Creating GitClaim for management GitRepository ✓ Creating GitClaimUser for accessing management GitRepository ✓ Creating HTTP Proxy configuration ✓ Deploying Flux configuration ✓ Deploying Kommander Operator ✓ Creating KommanderCore resource ✓ Cleaning up kommander bootstrap resources ✓ Deploying Substitution variables ✓ Deploying Flux configuration ✓ Deploying Gatekeeper ✓ Deploying Kommander AppManagement ✓ Creating Core AppDeployments ✓ 4 out of 12 core applications have been installed (waiting for dex, dex-k8s-authenticator and 6 more) ✓ 5 out of 12 core applications have been installed (waiting for dex, dex-k8s-authenticator and 5 more) ✓ 8 out of 12 core applications have been installed (waiting for dex-k8s-authenticator, kommander and 2 more) ✓ 9 out of 12 core applications have been installed (waiting for dex-k8s-authenticator, kommander-ui and 1 more) ✓ 10 out of 12 core applications have been installed (waiting for dex-k8s-authenticator, traefik-forward-auth-mgmt) ✓ 11 out of 12 core applications have been installed (waiting for traefik-forward-auth-mgmt) ✓ Creating cluster-admin credentials Cluster was created successfully! Get the dashboard details with: nkp get dashboard --kubeconfig="/root/nkpm01.conf" [root@lab-nkp-01 ~]#
カレント ディレクトリに kubeconfig(<クラスタ名>.conf)ファイルが作成されるので、kubectl で接続してみます。(記念の参照コマンドはこちら)
[root@lab-nkp-01 ~]# kubectl --kubeconfig=nkpm01.conf get nodes NAME STATUS ROLES AGE VERSION nkpm01-dh72h-sxwm5 Ready control-plane 22m v1.29.6 nkpm01-md-0-td65c-k9h78-d7z6g Ready <none> 20m v1.29.6 nkpm01-md-0-td65c-k9h78-m2dnk Ready <none> 21m v1.29.6
Prism Elemet でも、NKP によって Kubernetes ノードの仮想マシンが作成されたことが確認できます。
ちなみに、Prism Centarl のバージョンがサポート対象より低いと、下記のようなエラーになり、Management Cluster の作成に失敗します。これは、「kubectl -n ntnx-system logs -l job-name=nutanix-csi-precheck-job」 コマンドで確認したものです。
main.go:256: [ERROR] PC version: pc.2023.4.0.2 not supported, minimum required version: pc.2024.1
8. Management Cluster へのログイン
nkp get dashboard コマンドで、ダッシュボードにログインするための情報を表示します。このコマンドは、Management Cluster 作成が完了したターミナル画面にも表示されているはずです。kubeconfig ファイルのパスは下記のようになっています。
- <nkp コマンドの実行ディレクトリ>/<クラスタ名>.conf
ちなみに、ユーザー名とパスワードは、クラスタを作成するたびにランダム生成されます。
[root@lab-nkp-01 ~]# nkp get dashboard --kubeconfig="/root/nkpm01.conf" Username: intelligent_leakey Password: 1DSlLSOyl5kpNW3Ky4yfSoJKsjWsYbP4HCVyghcCsZU2KD5HeHh2xWa4Rum2LdhE URL: https://192.168.12.201/dkp/kommander/dashboard
表示された URL に Web ブラウザでアクセスして、証明書エラーを無視して進みます。
ユーザー名とパスワードを入力して、「Log In」をクリックします。
NKE の Management Cluster のダッシュボードにログインできました。作成した Management Cluster は、「Kommander Host」という名前で表示されています。
つづく。