Nutanix Meetup Hybrid 23.08 で話した「Nutanix DevStation から NDB を操作してみる。」の資料と補足です。
今回の内容です。
1. NDB と REST API
NDB(Nutanix Database Service)は、Nutanix HCI の機能を活用した DBaaS ソリューションで、REST API も提供されています。NDB を REST API で操作する場合、API のエンドポイントは NDB Server になります。(Prism Central や Prism Element ではなく)
NDB の REST API Explorer は、NDB Server に内蔵されています。
API バージョンは v0.8 と v0.9 がありますが、最近は v0.9 が利用されています。ちなみに、API リファレンスは下記のサイトでも確認できます。
NDB Server の Web コンソールには、「同等の API」(英語 UI では API Equivalent)というボタンが用意されていて、簡単に Web コンソールでの手順を API に置き換えられます。
「同等の API」画面には、API でパラメータとして渡す JSON データと、そのデータとオプションを含めてあるスクリプトが自動生成されます。
たとえば、タイムマシンで「snap-01」というスナップショットを作成する場合は下記のようになります。
REST API は、下記のようなクライアント ツールから利用できます。
curl
- REST API をそのまま利用できる。
Terraform
- Terraform Provider は nutanix/nutanix
- https://registry.terraform.io/providers/nutanix/nutanix/1.9.2
- https://github.com/nutanix/terraform-provider-nutanix
- Prism API は v3
- NDB API は v0.9 (nutanix Provider 1.8.0 から NDB 対応。ただしDB 種類指定できるのは PostgreSQL のみ)
Ansible
- Ansible Collection は nutanix.ncp
- https://galaxy.ansible.com/nutanix/ncp
- https://github.com/nutanix/nutanix.ansible
- Prism API は v3
- NDB API は v0.9(nutanix.ncp 1.8.0 から NDB 対応)
- もしくは uri モジュール
PowerShell Core(pwsh)
- PowerShell Core に対応しているのは、Nutanix Cmdlets 2.0(Nutanix.Cli)
- NDB 用のコマンドレットは用意されていない。
AOS(HCI)を操作する Nutanix 公式のモジュール やプロバイダは、現状ではほぼ Prism API v3(Nutanix REST API v3 ?)が利用されているため、基本的には Prism Central に接続して操作します。ちなみに Prism Element の機能の範囲であれば、v3 API でも Prism Element(つまり Nutanix クラスタの VIP)に接続して操作できたりします。
NDB のモジュールはなぜか AOS のものに同梱されていることが多いですが、Terraform / Ansible で NDB を操作する場合は Prism Central / Prism Element ではなく NDB Server に接続します。今後は、Nutanix REST API v4 に NDB も含まれるようですが、まだリファレンスなどは公開されていません。
API 操作以外も含めると、おもな NDB 操作のイメージは、下記のようになると思います。
- NDB の利用法としてもっとも一般的なものは、Web ブラウザ(図中の紫線)での NDB Server 接続です。
- HCI での Prism Central / Prism Element と同様に。
- ちなみに Nutanix 製品としては珍しく、NDB はいまのところ Prism Central とは無関係で、Prism Element 経由で直接操作します。
- NDB でプロビジョニングした DB サーバー(Linux 。SQL Server のみ Winows)については、直接操作するような API はありません。そのため、ふつうに SSH 接続(オレンジ線)などで管理することになります。
- NDB を REST API で利用するツールは、NDB Server に接続(赤線)します。
- HCI を操作するサードパーティ ツールも API を利用するので Prism Central(v3 と v4)、Prism Element(v1 と v2)に接続します。
- そういったツールに同梱されている NDB 操作モジュールも、Prism ではなく NDB Server に接続します。
Nutanix DevStation を利用すると、図中赤枠のあたりのツールの実行環境をまとめて用意できます。
2. Nutanix DevStation から NDB を操作
復習として、前回の登壇内容の投稿はこちら。
Nutanix DevStation のイメージを再掲しておきます。
DevStation を利用すると、Visual Studio Code(VS Code)から開発環境となるコンテナを介してフォルダを開けるので、Ansible の Playbook(YAML)や Terraform の .tf ファイル(HCL)を書きつつ、ターミナルから CLI を実行できたりします。
例1: DB のプロビジョニング / 削除
ここからは、いくつか例をもとに紹介しまう。
まずは、DB サーバや DB のプロビジョニングのような、定義を書き換えず、作成 ↔ 削除するようなものについては、Terraform が利用しやすいと思います。
Terraform では、1セットの .tf ファイルで、terraform apply ↔ terraform destroy といった使い方ができるので、開発 / デモ環境をなんども作り直すような場合に便利かなと思います。
NDB を Terraform で利用してみる以前の投稿はこちら。
DB と DB Server VM をわけてプロビジョニングする .tf ファイルの例はこちら。
ということで DevStation では、VS Code で .tf ファイルを書きつつ、ターミナルで terraform コマンドを実行できます。terraform コマンドはインストールされていますが、nutanix プロバイダはインストールされていないようです。(とはいっても、terraform init を実行するとインストールされます)
$ terraform init $ terraform apply
例2: NDB の情報収集
NDB から情報収集をするには、ntnx_ndb_xxx_info といったモジュールが用意されている Ansible が利用しやすいかなと思います。
Nutanix の Ansible Collecion については、以前の投稿もどうぞ。
DevStation には、Ansible もインストールされています。そして、ansible.ncp モジュールもインストールされています。
スナップショット情報を取得して、JSON ファイルに保存するプレイブックの例です。
get_snapshot_info.yml
- モジュールの接続先(nutanix_host)は、AOS を操作する場合は Prism Central / Element のアドレスを指定しますが、NDB の場合は NDB Server のアドレスを指定します。
VS Code のコンソールから ansible-playbook でプレイブックを実行できます。
$ ansible-playbook get_snapshot_info.yml
例3: スナップショットの作成
ひたすらスナップショット作成するような、 単純なコマンド投入のような操作については、Ansible が利用しやすいと思います。
たとえば、タイムスタンプを含む名前のスナップショットを作成するプレイブックを作成してみました。
create_snapshot.yml
- スナップショット名は、「snap-<タイムスタンプ>」といった形式にしています。
- タイムマシンの UUID(time_machine_uuid)は、今回はハードコードです。
そして、ターミナルで実行してみました。
$ ansible-playbook create_snapshot_info.yml
3. Kubernetes (minikube) + NDB-Operator
最後に、NDB を Kubernetes から利用する「NDB-Operator」を DevStation から試してみる例を紹介します。
NDB-Operator のインストール方法や、利用する YAML の例については、以前の投稿を参考にしてください。
DevStation には、Minikube がインストールされています。
そこでターミナルから minikube start を実行して、1ノードの Kubernetes クラスタを作成します。
Kubernetes クラスタが作成されたら、下記のように Helm で NDB-Operator をインストルします。DevStation には、helm コマンドもインストールされています。
そして、Database(db に省略)カスタム リソースを作成してみます。(YAML の内容は以前の投稿を参考に・・・)
ターミナルから、コマンドを実行している様子です。
DB カスタム リソースを作成すると、NDB で DB のプロビジョニングが開始されます。
Helm チャートや、NDB-Operator のカスタム リソースは、VS Code の Kubernetes 拡張機能から確認できたりもします。
まとめ
NDB の Terraform / Ansible による API 操作でも DevStation が使えます。
ただ、NDB の API Equivalent 機能が便利なので、私は気がついたら curl で使っていることが多い気がします。
録画
当日の録画はこちら。
以上。