NTNX>日記

個人的な趣味による Nutanix Community Edition 日記。Japanese のみですみません。

Nutanix Enterprise AI 2.4 をデプロイしてみる。Part-03:NKP クラスタの準備

NKP に、Nutanix Enterprise AI(NAI)2.4 を展開してみます。今回は、NKP の Kubernetes クラスタを作成します。

 

前回はこちら。

 

今回の内容です。

 

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   Ready              3m5s   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 ユーザー、パスワードを指定

gist.github.com

 

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 は指定していません。

gist.github.com

 

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

 

つづく。

 

©2025 gowatana
クリエイティブ・コモンズ・ライセンスこの 作品 は クリエイティブ・コモンズ 表示 4.0 国際 ライセンスの下に提供されています。