NKP に、Nutanix Enterprise AI(NAI)2.4 を展開してみます。今回は、NKP の Kubernetes クラスタを作成します。
前回はこちら。
今回の内容です。
- 1. NKP クラスタの作成(Self-Managed)
- 2. NKP のライセンス キー登録
- 3. GPU ノードの追加
- 4. GPU Operator のインストール
- 5. Storage Class の作成
1. NKP クラスタの作成(Self-Managed)
下記のように、nkp コマンドで Kubernetes クラスタを作成します。今回は、管理クラスタをそのまま NAI のインストール先として使用します。
Prism Central のログイン情報を、環境変数に設定しておきます。
$ export NUTANIX_USER=admin $ export NUTANIX_PASSWORD='パスワード'
Self-Managed の Kubernetes クラスタ(管理クラスタ)を作成します。
今回のパラメータです。
- NKP クラスタの名前:nkpnai
- Prism Central のアドレス:10.1.7.100
- Prism Element クラスタ名:PE
- サブネット:vlan-0-ipam(IPAM 有効)
- Control Plane の VIP アドレス:10.1.7.120
- Service(Load Blancer)の IP アドレス範囲:10.1.7.121-10.1.7.123
- OS イメージ(--vm-image で指定する)がダウンロード サイトにない場合は、Nutanix Image Builder で作成 できます。
- SSH の公開鍵($HOME/.ssh/id_rsa.pub ファイル)は、事前に作成しておきます。
- Nutanix クラスタのストレージ コンテナ名:default-container-01
- Docker Hub の Rate Limit 回避のため、Docker Hub のログイン情報を指定(これは Nutanix Docker Hub とは関係なく、自分のアカウントをなにか指定)
NKP の管理クラスタの作成方法については、こちらもどうぞ
nkp create cluster nutanix \ --cluster-name=nkpnai \ --endpoint=https://10.1.7.100:9440 \ --insecure \ --control-plane-prism-element-cluster=PE \ --worker-prism-element-cluster=PE \ --control-plane-subnets=vlan-0-ipam \ --worker-subnets=vlan-0-ipam \ --control-plane-endpoint-ip=10.1.7.120 \ --kubernetes-service-load-balancer-ip-range=10.1.7.121-10.1.7.123 \ --vm-image=nkp-rocky-9.5-release-1.32.3-20250430150550.qcow2 \ --csi-storage-container=default-container-01 \ --ssh-username nutanix \ --ssh-public-key-file=$HOME/.ssh/id_rsa.pub \ --registry-url=https://registry-1.docker.io \ --registry-username=Docker Hub のユーザ名 \ --registry-password='Docker Hub のパスワード' \ --self-managed
作成が完了したら、カレント ディレクトリに生成された kubeconfig ファイル(NKPクラスタ名.conf)を、デフォルトのパス($HOME/.kube/config)に配置します。これで、nkp / kubectl コマンドでクラスタに接続可能になります。
$ mkdir ~/.kube $ cp nkpnai.conf ~/.kube/config
nkp コマンドで、作成されたクラスタを確認します。
$ nkp get clusters -A WORKSPACE NAME KUBECONFIG STATUS kommander-workspace host-cluster kommander-self-attach-kubeconfig Joined
kubectl でも、クラスタに接続できることを確認しておきます。今回は、nkp create cluster のデフォルト設定により、Control Plane 3台、Worker 4台で構成されています。
$ kubectl get nodes NAME STATUS ROLES AGE VERSION nkpnai-md-0-4lrv5-nfsc8-fl68h Ready <none> 28m v1.32.3 nkpnai-md-0-4lrv5-nfsc8-kh6pm Ready <none> 29m v1.32.3 nkpnai-md-0-4lrv5-nfsc8-tpsnm Ready <none> 29m v1.32.3 nkpnai-md-0-4lrv5-nfsc8-vdstk Ready <none> 29m v1.32.3 nkpnai-wr6mn-9j9z6 Ready control-plane 26m v1.32.3 nkpnai-wr6mn-9qq5n Ready control-plane 28m v1.32.3 nkpnai-wr6mn-hqgqn Ready control-plane 30m v1.32.3
2. NKP のライセンス キー登録
NKP でのアプリケーション管理機能を利用するため、NKP Starter よりも上位のライセンスが必要です。ちなみに、今回は Ultimate の評価用ライセンスを使用しています。
NKP UI からライセンス キーを追加します。
まず、nkp get dashboard で、自動生成されたログイン情報を確認します。
# nkp get dashboard Username: cranky_ritchie Password: LBkv3JcVXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXfJkt5 URL: https://10.1.7.121/dkp/kommander/dashboard
表示された情報をもとに、Web ブラウザで NKP ダッシュボードにログインします。っそして、「Seggings」→「Licensing」画面を開き、デフォルトで設定されている Starter ライセンスを削除して、上位のライセンス キーを登録します。
3. GPU ノードの追加
GPU 用の Ubuntu ディスク イメージを作成して、NKP クラスタに GPU ノード プールを追加します。
ここでも、Prism Central への接続情報を環境変数に設定しておきます。(このあとも、設定されているのであれば省略できます)
$ export NUTANIX_USER=admin $ export NUTANIX_PASSWORD='パスワード'
3-1. GPU ノード用 Ubuntu イメージの作成
Nutanix Image Builder(nkp create image nutanix コマンド)で、GPU ノード用のイメージを作成します。
- ubuntu-22.04 は固定値です。
- cluster:ディスク イメージを作成する Prism Element のクラスタ名
- endpont:Prism Central のアドレス
- subnet:イメージ作成中に使用するサブネット(IPAM を有効化しておく)
- gpu-name:AHV に搭載されている GPU 名(Prism などでの表示をもとに指定)
nkp create image nutanix ubuntu-22.04 \ --cluster=PE \ --endpoint=10.1.7.100 \ --subnet=vlan-0-ipam \ --gpu-name="Ampere 16" \ --insecure
イメージの作成が完了すると、下記のようにイメージ名が表示されます。
Build 'nutanix.kib_image' finished after 11 minutes 47 seconds. ==> Wait completed after 11 minutes 47 seconds ==> Builds finished. The artifacts of successful builds are: --> nutanix.kib_image: nkp-ubuntu-22.04-gpu-1.32.3-20250928080231 --> nutanix.kib_image: nkp-ubuntu-22.04-gpu-1.32.3-20250928080231 --> nutanix.kib_image: nkp-ubuntu-22.04-gpu-1.32.3-20250928080231
3-2. GPU ノード プールの追加
nkp create nodepool で、ノード プールを追加します。
- GPU プール名:gpupool-1
- vm-image:さきほど作成した、GPU 用イメージを指定
- 今回は 1ノードのみ展開
nkp create nodepool nutanix gpupool-1 \ --cluster-name=nkpnai \ --prism-element-cluster=PE \ --subnets=vlan-0-ipam \ --vm-image=nkp-ubuntu-22.04-gpu-1.32.3-20250928080231 \ --vcpus=16 \ --memory=40 \ --disk-size=300 \ --gpu-count=1 \ --gpu-name="Ampere 16"
nkp コマンドで、ノード プールが追加されたことを確認します。
$ nkp get nodepool --cluster-name nkpnai NODEPOOL DESIRED READY KUBERNETES VERSION gpupool-1 1 1 v1.32.3 md-0 4 4 v1.32.3
kubectl でも、ノード(nkpnai-gpupool-1-~)が追加されたことを確認しておきます。
$ kubectl get nodes NAME STATUS ROLES AGE VERSION nkpnai-f9wrs-5pxhz Ready control-plane 162m v1.32.3 nkpnai-f9wrs-tp8gw Ready control-plane 161m v1.32.3 nkpnai-f9wrs-xm8gk Ready control-plane 160m v1.32.3 nkpnai-gpupool-1-54cwp-gc744-mr97j Ready3m5s v1.32.3 nkpnai-md-0-545f7-njj6p-5wwbb Ready 162m v1.32.3 nkpnai-md-0-545f7-njj6p-mhnzs Ready 162m v1.32.3 nkpnai-md-0-545f7-njj6p-wdbhk Ready 162m v1.32.3 nkpnai-md-0-545f7-njj6p-zszrz Ready 162m v1.32.3
4. GPU Operator のインストール
NKP のダッシュボードで、GPU Operator をインストールします。
画面上部の「Global」のあたり →「Management Cluster Workspace」を開きます。

「Applications」を開き、「GPU」で検索すると、「NVIDIA GPU Operator」がみつかります。

「NVIDIA GPU Operator」の右下あたり →「Enable」を開きます。

「Workplace Configuration」に、下記の YAML を入力して「Enable」をクリックします。
toolkit: version: v1.17.5-ubuntu20.04

Status が「Enabled」になったことを確認します。

kubectl でも、GPU Operator がインストールされたことを確認しておきます。
$ kubectl get appdeployments.apps.kommander.d2iq.io -n kommander nvidia-gpu-operator NAME APP AGE nvidia-gpu-operator nvidia-gpu-operator-25.3.0 9m9s
関連する Pod(nvidia や gpu といった文字列が含まれるもの)が起動されたことを確認しておきます。(rook-ceph-~ という Pod は無関係です)
$ kubectl get pod -A | grep -e nvidia -e gpu kommander gpu-feature-discovery-phpgp 1/1 Running 0 10m kommander gpu-operator-b7999797b-zv6vc 1/1 Running 0 11m kommander nvidia-container-toolkit-daemonset-hhl22 1/1 Running 0 10m kommander nvidia-cuda-validator-6gn7d 0/1 Completed 0 9m57s kommander nvidia-dcgm-exporter-qxnwg 1/1 Running 0 10m kommander nvidia-dcgm-vqb94 1/1 Running 0 10m kommander nvidia-device-plugin-daemonset-jg6ps 1/1 Running 0 10m kommander nvidia-operator-validator-fc4sl 1/1 Running 0 10m kommander rook-ceph-crashcollector-nkpnai-gpupool-1-54cwp-gc744-mr97m6xgk 1/1 Running 0 39m kommander rook-ceph-exporter-nkpnai-gpupool-1-54cwp-gc744-mr97j-594c95br9 1/1 Running 0 39m
5. Storage Class の作成
Nutanix Files の NFS サーバーを使用するために、StorageClass を作成しておきます。
5-1. ログイン情報の登録(Secret の作成)
まず、Prism Element と Nutanix Files の NFS サーバーのログイン情報をもつ Secret リソースを作成します。
下記のような YAML を用意します。
nutanix-csi-credentials-files.yml
- key には、Prism Element のアドレス(例では 10.1.7.101)、ユーザー、パスワードを指定
- files-key には、NFS サーバーのアドレス(例では 10.1.7.202)、API ユーザー、パスワードを指定
kubectl で、Secret を作成します。
$ kubectl apply -f nutanix-csi-credentials-files.yml secret/nutanix-csi-credentials-files created
Secret が作成されたことを確認します。
$ kubectl get secrets -n ntnx-system NAME TYPE DATA AGE nutanix-csi-credentials Opaque 1 3d nutanix-csi-credentials-files Opaque 2 25s sh.helm.release.v1.nutanix-csi.v1 helm.sh/release.v1 1 3d
5-2. StorageClass の作成
StorageClass の YAML を作成します。
nai-nfs-storage.yml
- ファイル サーバーの名前:nai-fs
- ファイル サーバーのアドレス:10.1.7.202(複数台構成の場合は FQDN 指定にする)
- 動的プロビジョニングで使用するため、nfsPath は指定していません。
kubectl で、StorageClass を作成します。
$ kubectl apply -f nai-nfs-storage.yml storageclass.storage.k8s.io/nai-nfs-storage created
StorageClass が作成されたこと確認します。
$ kubectl get sc NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE dkp-object-store kommander.ceph.rook.io/bucket Delete Immediate false 3h50m nai-nfs-storage csi.nutanix.com Delete Immediate true 3s nutanix-volume (default) csi.nutanix.com Delete WaitForFirstConsumer true 4h13m
つづく。
