NTNX>日記

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

Nutanix Kubernetes Platform と Application の関係について(仮)登壇資料

先日の Nutanix .NEXT On Tour Tokyo 2025 の Community Hub で話した「Nutanix Kubernetes Platform と Application の関係について(仮)」の登壇資料です。

nutanix.connpass.com

 

セッションの内容

 

はじめに

今回は時間枠の都合上、Nutanix .NEXT On Tour Tokyo の基調講演に参加していて、Kubernetes と NKP についてはそこそこ概要を知っているひとむけになっています。

NKP でのアプリ管理機能の様子と、ためしにカスタム アプリをカタログ登録する流れを紹介します。

1. Kubernetes とアプリ

まず、Kubernetes でのアプリ展開について、おさらいしておきます。

Kubernetes では、クラスタを構成する管理系のアプリも、ユーザーが提供するサービス(業務)系のアプリも、コンテナとして起動されます。

Kubernetes のコンテナ ホストは、制御プレーン ノードとワーカー ノードに分かれています。そして、管理系アプリのコンテナは、おもに制御プレーン ノード、業務系のアプリはワーカー ノードで起動されます。

 

今回は、業務系アプリの例として、AI チャット アプリ(.NEXT の基調講演のデモにあった、パックマン アプリの代わりにあたる)を用意しました。

これは Nutanix  Enterprise AI(NAI)による推論エンドポイントに接続していますが、ただの自作アプリです。

 

今回のデモアプリの概要です。

  • Python のスクリプト ファイルです。
  • ファイル名:nai_demo.py
  • AI サービス(NAI の推論エンドポイント)に接続する設定は、環境変数で定義します。
  • AI サービスに接続する API キーも、環境変数でアプリに渡します。

このデモ アプリの詳細についてはこちらをどうぞ。

 

Kubernetes にアプリを展開する流れを、5ステップで説明します。

  • Step-1. アプリを用意(Python スクリプトの作成)
  • Step-2. コンテナ化(コンテナ イメージの作成)
  • Step-3. Kubernetes に展開(YAML マニフェストの作成)
  • Step-4. パッケージ化(Helm Chart の作成)
  • Step-5:CD ツールの利用(Flux などを利用)

 

まず、まだコンテナ化していないアプリを用意します。

設定やキーを環境変数に格納して、作成したアプリ(Python スクリプト)を実行すると、Web ブラウザからアクセスできる AI チャット アプリが起動されます。

 

Python スクリプトを含むコンテナ イメージを作成します。コンテナ イメージからコンテナを起動する際には、設定情報やキーを環境変数(-e)で渡します。

作成したコンテナ イメージは、Docker Hub などのコンテナ レジストリに Push して公開します。この例では、GitHub Container registry(ghcr.io)を利用しています。

 

Kubernetes でアプリを展開する場合には、下記のように複数のリソース(オブジェクト)を作成します。

  • Pod:コンテナ(Deployment などの親リソースから作成)★アプリの本体
  • ConfigMap:設定
  • Secret:パスワード、キー、トークンなどを格納
  • Service:クラスタ内外からコンテナにアクセスするための IP / Port を用意

 

Kubernetes リソース(Deployment、ConfigMap、Secret、Service など)は、Kubernetes マニフェストを YAML 形式のファイルとして用意します。起動するコンテナ イメージ は、Deployment(や Pod)の YAML に記載しておきます。

そして kubectl apply などで Kubernetes クラスタに適用することで、アプリが展開(リソース作成)されます。

 

Kubernetes の YAML では多くのリソースを定義することになるのですが、Helm でパッケージ化もできます。作成した Helm Chart は、Helm Chart リポジトリや、OCI リポジトリ(つまり Docker Hub などのコンテナ レジストリ)で公開できます。Chart の公開方法は、OCI リポジトリを利用する方式(oci://~)が主流になっていくようです。

Helm Chart は、helm install コマンドでインストールする際に「--set ~」でパラメータを指定できます。

 

Helm Chart のひな型は、「helm create」コマンドで作成できます。そして YAML マニフェストは、Helm でのパラメータを受け取れるように、部分的にテンプレート形式におきかえて Chart に組み込みます。

 

YAML マニフェストや Helm Chart の Kubernetes クラスタへの展開は、CD(継続的デリバリー)ツールなどで自動化できます。

 

2. Nutanix Kubernetes Platform(NKP)のアプリとは

Kubernetes で起動されているアプリは、下記のように管理系 / サービス(業務)系のどちらもコンテナとして起動されます。Nutanix Kubernetes Platform(NKP)のアプリ管理機能では、その両方が管理対象となります。

 

NKP で管理できるアプリの種類には、下記があります。

  • Platform Application
    • Kubernetes では ClusterApp カスタム リソースとして管理される
    • クラスタで必要になるもの。cert-manager や Traefik など
  • NKP Catalog Application
    • Kubernetes では App カスタム リソース
    • クラスタの管理機能以外のもの。Kafka、Zookeeper、NAI など
  • Custom Application
    • これも App カスタム リソース
    • サードパーティのアプリ。Nutanix サポート外のもの。自作アプリ登録もできる

 

NKP でのアプリ管理機能では、ワークロード クラスタのアプリも管理クラスタで管理できます。この機能は、内部では Flux が利用されています。

 

NKP の Web UI にある「Application」画面で、アプリが登録されている様子がわかります。NKP で用意されているアプリは、おもに管理系の Platform Application です。

 

Nutanix Enterprise AI(NAI)も、カタログ アプリケーションとして登録されています。ちなみに NAI は、NKP v2.15 では手動登録、NKP v2.16 以降はデフォルトで登録されています。

 

NKP で管理されているアプリをインストールすると、「AppDeployment」という Kubernetes カスタム リソースが作成されます。

 

3. カスタム アプリについて

NKP のカタログに、カスタム アプリとして自作の AI チャット アプリを登録する様子を紹介します。今回は、概要の紹介のみです。

3-1. NKP カタログ登録までの流れ

NKP のカタログにアプリを登録することは、先ほどの Step-1 ~ 5 では、Step-5 の CD ツールの利用(展開ツールの利用)にあたるものです。

コンテナ イメージの作成や、YAML マニフェストの用意は、従来どおりの Kubernetes へのアプリ展開と同様です。

 

Helm Chart は、OCI リポジトリに Push して、OCI アーティファクト(oci://~)として利用できるようにしておきます。

 

NKP カタログにアプリを登録するには、下記のように nkp コマンドを使用します。

  • NKP カタログ リポジトリの作成
    • nkp generate catalog-repository --apps nai-demo=0.1.0
    • 作成されたディレクトリの YAML を手動編集・・・
  • NKP カタログ バンドル(.tar)の作成
    • nkp create catalog-bundle
  • NKP カタログ バンドルの Push
    • nkp push bundle --bundle <~.tar> --to-registry <OCI リポジトリ>
  • NKP カタログ アプリケーションの作成
    • nkp create catalog-application
    • これで、NKP カタログにアプリが表示される

 

NKP カタログ リポジトリの、ファイルの構成イメージです。

NKP のカタログ リポジトリでは、Helm Chart 自体は含まず、Helm Chart の OCI アーティファクトを参照しています。

 

NKP のカタログ リポジトリに含まれるファイルでは、NKP カタログに表示するアプリの名前や、Helm Chart の URL(oci://~)などを記載します。

 

3-2. アプリのインストール

NKP カタログに登録されたアプリ(この例では nai-demo)は、パネル右下のボタン →「Enable」をクリックすると、インストール画面が表示されます。

 

開いた画面では、アプリの名前、インストール先クラスタ、Helm Chart のパラメータなどを指定できます。

 

アプリがインストールされると、「Enabled」と表示されます。

 

AppDeployment リソースが追加され、カスタム アプリなので App リソースも追加されています。また、Flux では Helm を利用しており、helm list コマンドでもアプリの情報が確認できます。

 

インストールしたアプリの Pod(コンテナ)も起動されています。

 

そして Web ブラウザから Service リソースの IP アドレスにアクセスすると、AI チャット アプリが利用可能になっています。

 

さいごに

  • とはいっても、NKP ではふつうに kubectl や helm でもアプリを管理できます。
  • まずは、Platform Application(管理系のアプリ)だけ NKP のアプリ管理機能を利用してみるとよいかなと思います。

 

以上。

 

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