NKP の Kubernetes クラスタに、Nutanix Enterprise AI(NAI)2.6 を展開してみます。今回は、NAI をインストールし、初期設定を実施します。
前回はこちら。
今回の内容です。
ドキュメントでは、下記のあたりです。
1. Nutanix Docker Hub トークンの入手
NAI のインストール時にコンテナ イメージをダウンロードするため、Nutanix Docker Hub のトークン(dckr_pat_~)を生成しておきます。
トークンは、Nutanix Support & Insight Portal の NAI ダウンロード ページで生成できます。

2. Helm Repo の追加
Nutanix の Helm リポジトリを追加します。
gowatana@nkp-work-02:~$ helm repo add ntnx-charts https://nutanix.github.io/helm-releases "ntnx-charts" has been added to your repositories
Helm リポジトリの情報を更新する場合は、下記のように helm repo update を実行します。
gowatana@nkp-work-02:~$ helm repo update ntnx-charts Hang tight while we grab the latest from your chart repositories... ...Successfully got an update from the "ntnx-charts" chart repository Update Complete. ⎈Happy Helming!⎈
NAI Operator(nai-operators)の Helm Chart は v2.5.0 から提供されています。
gowatana@nkp-work-02:~$ helm search repo ntnx-charts/nai-operators --versions NAME CHART VERSION APP VERSION DESCRIPTION ntnx-charts/nai-operators 2.6.0 0.1.0 A Helm chart for CRDs and Operators required by... ntnx-charts/nai-operators 2.5.0 0.1.0 A Helm chart for CRDs and Operators required by...
nai-core の Helm Chart は、v2.3.0 以降が提供されています。
gowatana@nkp-work-02:~$ helm search repo ntnx-charts/nai-core --versions NAME CHART VERSION APP VERSION DESCRIPTION ntnx-charts/nai-core 2.6.0 0.1.0 A Helm chart for NAI core components ntnx-charts/nai-core 2.5.0 0.1.0 A Helm chart for NAI core components ntnx-charts/nai-core 2.4.0 0.1.0 A Helm chart for NAI core components ntnx-charts/nai-core 2.3.0 0.1.0 A Helm chart for NAI core components
3. NAI のインストール
Helm で、NAI の Chart をインストールします。
3-1. Namespace の作成
Docker Hub の認証情報を登録する Secret を作成するため、さきに NAI のインストール先となる nai-system Namespace を作成しておきます。
gowatana@nkp-work-02:~$ kubectl create namespace nai-system --dry-run=client -o yaml | kubectl apply -f - namespace/nai-system created
3-2. Nutanix Docker Hub 認証情報の登録
環境変数に、認証情報を格納します。NAI のコンテナを格納する場合、ユーザー名は固定値で「ntnxsvcgpt」です。
export REGISTRY_SECRET_NAME=nai-regcred export DOCKER_SERVER=https://index.docker.io/v1/ export DOCKER_USERNAME=ntnxsvcgpt export DOCKER_PASSWORD=dckr_pat_XXXXXXXXXXXXXXXXXXX
Secret を作成します。
kubectl create secret docker-registry ${REGISTRY_SECRET_NAME} \
-n nai-system \
--docker-server=${DOCKER_SERVER} \
--docker-username=${DOCKER_USERNAME} \
--docker-password=${DOCKER_PASSWORD} \
--dry-run=client -o yaml | kubectl apply -f -
3-3. NAI Operator のインストール
NAI Operator をインストールします。
helm upgrade --install nai-operators ntnx-charts/nai-operators \
--version=2.6.0 \
-n nai-system \
--create-namespace \
--wait \
--set "naiAIGateway.enabled=true" \
--set "global.imagePullSecrets[0].name=${REGISTRY_SECRET_NAME}" \
--insecure-skip-tls-verify
実際に実行すると、下記のようになります。
gowatana@nkp-work-02:~$ helm upgrade --install nai-operators ntnx-charts/nai-operators \
--version=2.6.0 \
-n nai-system \
--create-namespace \
--wait \
--set "naiAIGateway.enabled=true" \
--set "global.imagePullSecrets[0].name=${REGISTRY_SECRET_NAME}" \
--insecure-skip-tls-verify
Release "nai-operators" does not exist. Installing it now.
I0328 08:33:49.004020 55108 warnings.go:107] "Warning: spec.template.spec.containers[1].ports[0]: duplicate port name \"metrics\" with spec.template.spec.containers[0].ports[0], services and probes that select ports by name will use spec.template.spec.containers[0].ports[0]"
I0328 08:33:49.070503 55108 warnings.go:107] "Warning: spec.privateKey.rotationPolicy: In cert-manager >= v1.18.0, the default value changed from `Never` to `Always`."
NAME: nai-operators
LAST DEPLOYED: Sat Mar 28 08:33:44 2026
NAMESPACE: nai-system
STATUS: deployed
REVISION: 1
DESCRIPTION: Install complete
TEST SUITE: None
この時点で、nai-system Namespace には、下記のように Pod が起動されます。
gowatana@nkp-work-02:~$ kubectl get pod -n nai-system NAME READY STATUS RESTARTS AGE ai-gateway-controller-6b786974b5-hct7w 1/1 Running 0 66s nai-operators-nai-clickhouse-operator-f8f666db9-g7j8b 2/2 Running 0 66s redis-standalone-684f6dd8f7-frbth 2/2 Running 0 66s
3-4. NAI(nai-core)のインストール
あらためて、NAI で使用する Storage Class の名前(nai-nfs-storage と nutanix-volume)を確認しておきます。
gowatana@nkp-work-02:~$ kubectl get sc NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE dkp-object-store kommander.ceph.rook.io/bucket Delete Immediate false 20h nai-nfs-storage csi.nutanix.com Delete Immediate false 17h nutanix-volume (default) csi.nutanix.com Delete WaitForFirstConsumer true 2d4h
NKP クラスタの Workspace(今回は管理クラスタなので Management Cluster Workspace)に対応する Namespace を確認しておきます。
gowatana@nkp-work-02:~$ kubectl get workspace NAME DISPLAY NAME WORKSPACE NAMESPACE AGE default-workspace Default Workspace kommander-default-workspace 2d3h kommander-workspace Management Cluster Workspace kommander 2d3h
確認したパラメータを、変数に格納しておきます。
NAI_API_RWX_STORAGECLASS=nai-nfs-storage NAI_DEFAULT_RWO_STORAGECLASS=nutanix-volume NKP_WORKSPACE_NAMESPACE=kommander REGISTRY_SECRET_NAME=nai-regcred
Helm で、NAI(nai-core)をインストールします。
helm upgrade --install nai-core ntnx-charts/nai-core \
--version=2.6.0 \
-n nai-system \
--create-namespace \
--wait \
--set "global.imagePullSecrets[0].name=${REGISTRY_SECRET_NAME}" \
--set "naiAIGateway.enabled=true" \
--set "naiApi.storageClassName=${NAI_API_RWX_STORAGECLASS}" \
--set "defaultStorageClassName=${NAI_DEFAULT_RWO_STORAGECLASS}" \
--set "naiMonitoring.opentelemetry.storageClassName=${NAI_API_RWX_STORAGECLASS}" \
--set "nai-clickhouse-keeper.clickhouseKeeper.storage.storageClass=${NAI_DEFAULT_RWO_STORAGECLASS}" \
--set "nai-clickhouse-server.clickhouse.storage.storageClass=${NAI_DEFAULT_RWO_STORAGECLASS}" \
--set "naiMonitoring.nodeExporter.serviceMonitor.namespaceSelector.matchNames[0]=${NKP_WORKSPACE_NAMESPACE}" \
--set "naiMonitoring.dcgmExporter.serviceMonitor.namespaceSelector.matchNames[0]=${NKP_WORKSPACE_NAMESPACE}" \
--insecure-skip-tls-verify
しばらく待つと、nai-system Namespace では下記のように Pod が起動されます。
gowatana@nkp-work-02:~$ kubectl get pod -n nai-system NAME READY STATUS RESTARTS AGE ai-gateway-controller-6b786974b5-sfgl9 1/1 Running 0 11m chi-nai-clickhouse-server-chcluster1-0-0-0 1/1 Running 0 9m24s chk-nai-clickhouse-keeper-chkeeper-0-0-0 1/1 Running 0 9m7s iam-database-bootstrap-lc0vb-h55kz 0/1 Completed 0 9m38s iam-proxy-686fff8f6d-mnsk7 1/1 Running 0 9m38s iam-proxy-control-plane-854c76b8cc-59ss6 1/1 Running 0 9m38s iam-themis-757776777b-w2xz8 1/1 Running 0 9m38s iam-themis-bootstrap-scqkl-4v4gt 0/1 Completed 0 9m38s iam-ui-7f6bb5b477-fb96d 1/1 Running 0 9m38s iam-user-authn-78d6b7d8df-9ksfs 1/1 Running 0 9m38s nai-api-557d94c66f-nnb75 1/1 Running 0 9m38s nai-api-db-migrate-t6ljz-prsqc 0/1 Completed 0 9m38s nai-clickhouse-schema-job-1774699534-2jmlg 0/1 Completed 0 9m38s nai-db-0 1/1 Running 0 9m38s nai-iep-model-controller-77f44f88c-q9sgn 1/1 Running 0 9m38s nai-labs-86cb964886-bfmrp 1/1 Running 0 9m38s nai-oauth2-proxy-bdf7f85cf-hs64m 1/1 Running 0 9m38s nai-oidc-client-registration-ft0fh-nr4wd 0/1 Completed 0 9m38s nai-operators-nai-clickhouse-operator-f8f666db9-rk5jk 2/2 Running 0 11m nai-otel-collector-collector-6djns 1/1 Running 0 9m36s nai-otel-collector-collector-8dhgx 1/1 Running 0 9m36s nai-otel-collector-collector-b6l6z 1/1 Running 0 9m36s nai-otel-collector-collector-gmkdx 1/1 Running 0 9m36s nai-otel-collector-collector-sfnq2 1/1 Running 0 9m36s nai-otel-collector-collector-shqps 1/1 Running 0 9m36s nai-otel-collector-collector-wpptx 1/1 Running 0 9m36s nai-otel-collector-targetallocator-fbc8688d7-jvfp9 1/1 Running 0 9m36s nai-ui-8648bd7dbc-j4fj7 1/1 Running 0 9m38s redis-standalone-684f6dd8f7-6zfc9 2/2 Running 0 11m
そして、Envoy Gateway インストール時点ではエラーになっていた envoy-ratelimit Pod も起動されています。
gowatana@nkp-work-02:~$ kubectl get pod -n envoy-gateway-system NAME READY STATUS RESTARTS AGE envoy-gateway-9b8b654fd-6bfrb 1/1 Running 1 (38m ago) 48m envoy-nai-system-nai-ingress-gateway-ff52ba1f-795c466f9b-qggv2 2/2 Running 0 14m envoy-ratelimit-6b4657bddd-l5k9h 1/1 Running 0 50m
3-5. NAI UI の IP アドレス確認
Web ブラウザから NAI UI にアクセスするための IP アドレスを確認しておきます。
下記のようにコマンドを実行すると、LoadBalancer から払い出された IP アドレスが確認できます。このアドレスは、後続の SSL/TLS 証明書の発行でも必要になります。
- 10.1.7.122
gowatana@nkp-work-02:~$ kubectl get svc -n envoy-gateway-system -l "gateway.envoyproxy.io/owning-gateway-name=nai-ingress-gateway,gateway.envoyproxy.io/owning-gateway-namespace=nai-system" NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE envoy-nai-system-nai-ingress-gateway-ff52ba1f LoadBalancer 10.98.117.153 10.1.7.122 80:31848/TCP 25m
ちなみに、下記のようにコマンドを実行すると、IP アドレスのみを取得できます。
gowatana@nkp-work-02:~$ kubectl get svc -n envoy-gateway-system -l "gateway.envoyproxy.io/owning-gateway-name=nai-ingress-gateway,gateway.envoyproxy.io/owning-gateway-namespace=nai-system" -o jsonpath='{.items[0].status.loadBalancer.ingress[0].ip}' | more
10.1.7.122
4. SSL/TLS 証明書の発行
NAI では、nai-system Namespace に nai-ingress-gateway という Gateway リソースを作成します。
gowatana@nkp-work-02:~$ kubectl get gateways.gateway.networking.k8s.io -A NAMESPACE NAME CLASS ADDRESS PROGRAMMED AGE nai-system nai-ingress-gateway nai-gatewayclass 10.1.7.122 True 30m
この Gateway は、証明書として nai-system Namespace にある ingress-certificate Secret を参照します。
gowatana@nkp-work-02:~$ kubectl get gateways.gateway.networking.k8s.io -n nai-system nai-ingress-gateway -o json | jq -r .spec
{
"gatewayClassName": "nai-gatewayclass",
"infrastructure": {
"labels": {
"serving.kserve.io/gateway": "nai-ingress-gateway"
}
},
"listeners": [
{
"allowedRoutes": {
"namespaces": {
"from": "All"
}
},
"name": "http",
"port": 80,
"protocol": "HTTP"
},
{
"allowedRoutes": {
"namespaces": {
"from": "All"
}
},
"name": "https",
"port": 443,
"protocol": "HTTPS",
"tls": {
"certificateRefs": [
{
"group": "",
"kind": "Secret",
"name": "ingress-certificate",
"namespace": "nai-system"
}
],
"mode": "Terminate"
}
}
]
}
今回は NKP クラスタにインストールされている cert-manager の ClusterIssuer(selfsigned-issuer)で、既存の Gateway 設定にあわせて証明書(Certificate)を発行します。
gowatana@nkp-work-02:~$ kubectl get clusterissuers.cert-manager.io NAME READY AGE kommander-ca True 2d8h selfsigned-issuer True 2d8h
下記のように Certificate の YAML ファイルを作成します。
cert_ingress-certificate.yaml
- L5:Certificate リソースの名前は ingress-certificate
- L12, L14:DNS 名には、ワイルドカード DNS サービスによる FQDN を指定(nai.10.1.7.122.nip.io)
- L16:NAI UI の IP アドレスを指定(10.1.7.122)
YAML を適用して、証明書を発行します。この証明書は、Gateway に自動反映されます。
gowatana@nkp-work-02:~$ kubectl apply -f cert_ingress-certificate.yaml Warning: spec.privateKey.rotationPolicy: In cert-manager >= v1.18.0, the default value changed from `Never` to `Always`. certificate.cert-manager.io/ingress-certificate created
5. NAI UI への初回ログイン
Web ブラウザから NAI UI にログインして、初期設定を実施します。FQDN でアクセスすると理想的ですが、今回はラボ環境なので IP アドレスでアクセスします。
5-1. admin パスワードの変更
Web ブラウザで、HTTPS で NAI UI の IP アドレスにアクセスします。HTTP のアクセスでも認証画面を開けますが、認証後に 404 エラーなどになるはずです。
Web ブラウザの証明書エラーは、無視して進みます。

デフォルトのパスワードでログインします。
- ユーザー:admin
- パスワード:Nutanix.123

パスワード変更を要求されるので、現在と新規パスワード(2回)を入力して「Submit」をクリックします。

あらためて、admin ユーザーでログインします。

5-2. 初期設定
最初に、「Nutanix License and Services Agreement」を受け入れる必要があります。利用者の名前と会社名を入力して「Accept」をクリックします。

ラボ環境なので、Pulse は無効にして「Save and Proceed」をクリックします。
- Enable Pulse:OFF

これで、NAI UI にアクセスできるようになりました。

5-3. UI 言語の変更
UI の表示言語を、日本語に変更しておきます。
「Settings」→「Language Settings」を開き、「Edit」をクリックします。

「ja-JP」を選択して、「Update」をクリックします。

これで、UI が日本語表示になりました。

つづく。
