NTNX>日記

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

Nutanix の NDB-Operator で PostgreSQL DB をプロビジョニングしてみる。

Nutanix Database Service(NDB)と Kubernetes を連携させる、NDB-Operator を使用してみます。NDB-Operator ではコンテナの DB を作成するわけではなく、NDB による仮想マシンの DB サーバを作成します。

今回の内容です。

構成のイメージです。

今回の環境

NDB Server は、下記で用意したものを利用します。

今回の Kubernetes は、kind(Kubernetes IN Docker)を利用します。

そして、kind のコンテナ ホストとして Oracle Linux 8 を利用します。

[root@lab-linux-02 ~]# cat /etc/oracle-release
Oracle Linux Server release 8.7

NDB-Operator は、下記のあたりで説明されているように Helm でインストールします。

1. Kubernetes の用意(podman + kind)

コンテナ ホストとして Oracle Linux 8 を利用するので、コンテナ エンジンは Docker ではなく Podman を利用します。

1-1. Podman のインストール

dnf で、podman をインストールします。

[root@lab-linux-02 ~]# dnf install -y podman

Podman のバージョンです。

[root@lab-linux-02 ~]# podman version
Client:       Podman Engine
Version:      4.2.0
API Version:  4.2.0
Go Version:   go1.18.4
Built:        Tue Nov 22 08:04:24 2022
OS/Arch:      linux/amd64

1-2. kubectl のインストール

kubectl をインストールしておきます。

[root@lab-linux-02 ~]# curl -o $HOME/bin/kubectl -L --url https://storage.googleapis.com/kubernetes-release/release/v1.25.3/bin/linux/amd64/kubectl
[root@lab-linux-02 ~]# chmod +x $HOME/bin/kubectl

kubectl がインストールできました。

[root@lab-linux-02 ~]# kubectl version --short
Flag --short has been deprecated, and will be removed in the future. The --short output will become the default.
Client Version: v1.25.3
Kustomize Version: v4.5.7
Server Version: v1.25.3

1-3. kind のインストール

kind を PAHT の設定されているディレクトリにダウンロードして、実行権限を付与しておきます。

[root@lab-linux-02 ~]# curl -o $HOME/bin/kind -L --url https://github.com/kubernetes-sigs/kind/releases/download/v0.17.0/kind-linux-amd64
[root@lab-linux-02 ~]# chmod +x $HOME/bin/kind
[root@lab-linux-02 ~]# kind version
kind v0.17.0 go1.19.2 linux/amd64

1-4. kind での Kubernetes クラスタ作成

「kind create cluster」コマンドで、Kubernetes クラスタを作成します。絵文字が文字化けしていますが、ここでは気にせず進めます。

[root@lab-linux-02 ~]# kind create cluster
enabling experimental podman provider
Creating cluster "kind" ...
 ? 偲nsuring node image (kindest/node:v1.25.3) ?
 ? πreparing nodes ?
 ? Writing configuration ?
 ? 袴tarting control-plane ?刻?
?? 孤nstalling CNI ?
?? Installing CNI ?
?? Installing CNI ?
?? Installing CNI ?
?? Installing CNI ?
?? Installing CNI ?
?? Installing CNI ?
?? Installing CNI ?
?? Installing CNI ?
?? Installing CNI ?
?? Installing CNI ?
?? Installing CNI ?
?? Installing CNI ?
?? Installing CNI ?
?? Installing CNI ?
?? Installing CNI ?
?? Installing CNI ?
?? Installing CNI ?
?? Installing CNI ?
?? Installing CNI ?
?? Installing CNI ?
?? Installing CNI ?
?? Installing CNI ?
?? Installing CNI ?
?? Installing CNI ?
?? Installing CNI ?
?? Installing CNI ?
?? Installing CNI ?
?? Installing CNI ?
?? Installing CNI ?
?? Installing CNI ?
?? Installing CNI ?
?? Installing CNI ?
?? Installing CNI ?
?? Installing CNI ?
?? Installing CNI ?
?? Installing CNI ?
?? Installing CNI ?
?? Installing CNI ?
?? Installing CNI ?
?? Installing CNI ?
?? Installing CNI ?
?? Installing CNI ?
?? Installing CNI ?
?? Installing CNI ?
?? Installing CNI ?
?? Installing CNI ?
?? Installing CNI ?
?? Installing CNI ?
?? Installing CNI ?
?? Installing CNI ?
?? Installing CNI ?
?? Installing CNI ?
?? Installing CNI ?
?? Installing CNI ?
?? Installing CNI ?
?? Installing CNI ?
?? Installing CNI ?
?? Installing CNI ?
?? Installing CNI ?
?? Installing CNI ?
?? Installing CNI ?
?? Installing CNI ?
?? Installing CNI ?
?? Installing CNI ?
?? Installing CNI ?
?? Installing CNI ?
?? Installing CNI ?
?? Installing CNI ?
?? Installing CNI ?
?? Installing CNI ?
?? Installing CNI ?
?? Installing CNI ?
?? Installing CNI ?
?? Installing CNI ?
?? Installing CNI ?
?? Installing CNI ?
?? Installing CNI ?
?? Installing CNI ?
?? Installing CNI ?
?? Installing CNI ?
?? Installing CNI ?
?? Installing CNI ?
?? Installing CNI ?
?? Installing CNI ?
?? Installing CNI ?
?? Installing CNI ?
?? Installing CNI ?
?? Installing CNI ?
?? Installing CNI ?
?? Installing CNI ?
?? Installing CNI ?
?? Installing CNI ?
?? Installing CNI ?
?? Installing CNI ?
?? Installing CNI ?
?? Installing CNI ?
?? Installing CNI ?
?? Installing CNI ?
?? Installing CNI ?
?? Installing CNI ?
?? Installing CNI ?
?? Installing CNI ?
?? Installing CNI ?
?? Installing CNI ?
?? Installing CNI ?
?? Installing CNI ?
?? Installing CNI ?
?? Installing CNI ?
?? Installing CNI ?
?? Installing CNI ?
 ? Installing CNI ?

 ? 症nstalling StorageClass ?
肖et kubectl context to "kind-kind"
You can now use your cluster with:

kubectl cluster-info --context kind-kind

Have a question, bug, or feature request? Let us know! https://kind.sigs.k8s.io/#community ?

これで、ローカルの Kubernetes クラスタが作成できました。

[root@lab-linux-02 ~]# kubectl config get-contexts
CURRENT   NAME        CLUSTER     AUTHINFO    NAMESPACE
*         kind-kind   kind-kind   kind-kind
[root@lab-linux-02 ~]# kubectl get nodes
NAME                 STATUS   ROLES           AGE     VERSION
kind-control-plane   Ready    control-plane   8m33s   v1.25.3

2. NDB Operator のインストール

NDB-Operator のインストールでは、Helm を利用します。

2-1. Helm のインストール

Helm をインストールします。

[root@lab-linux-02 ~]# curl -OL https://get.helm.sh/helm-v3.10.3-linux-amd64.tar.gz
[root@lab-linux-02 ~]# tar zxvf ./helm-v3.10.3-linux-amd64.tar.gz
[root@lab-linux-02 ~]# install ./linux-amd64/helm $HOME/bin/

インストールできました。

[root@lab-linux-02 ~]# helm version
version.BuildInfo{Version:"v3.10.3", GitCommit:"835b7334cfe2e5e27870ab3ed4135f136eecc704", GitTreeState:"clean", GoVersion:"go1.18.9"}

2-2. NDB-Operator のインストール

Nutanix の Helme リポジトリを追加します。

[root@lab-linux-02 ~]# helm repo add nutanix https://nutanix.github.io/helm/
"nutanix" has been added to your repositories

追加されました。

[root@lab-linux-02 ~]# helm repo list
NAME    URL
nutanix https://nutanix.github.io/helm/

NDB-Operator をインストールします。

[root@lab-linux-02 ~]# helm install ndb-operator nutanix/ndb-operator -n ndb-operator --create-namespace
NAME: ndb-operator
LAST DEPLOYED: Sun Dec 25 02:25:35 2022
NAMESPACE: ndb-operator
STATUS: deployed
REVISION: 1
TEST SUITE: None
[root@lab-linux-02 ~]#

インストールされました。

[root@lab-linux-02 ~]# helm list -n ndb-operator
NAME            NAMESPACE       REVISION        UPDATED                                 STATUS    CHART                   APP VERSION
ndb-operator    ndb-operator    1               2022-12-25 02:25:35.341841428 -0500 EST deployed  ndb-operator-0.0.2      v0.0.2

Kubernetes には、CRD が追加されています。

[root@lab-linux-02 ~]# kubectl get crd
NAME                        CREATED AT
databases.ndb.nutanix.com   2022-12-25T07:25:33Z

そして、ndb-operator-controller-manager の Pod も起動されました。

[root@lab-linux-02 ~]# kubectl get pod -n ndb-operator
NAME                                               READY   STATUS    RESTARTS   AGE
ndb-operator-controller-manager-5ddbc986db-68x8k   2/2     Running   0          92s

databases リソースも追加されています。

[root@lab-linux-02 ~]# kubectl api-resources | grep nutanix
databases                         db,dbs       ndb.nutanix.com/v1alpha1               true         Database

3. NDB-Operator での DB プロビジョニング

REST API などで、NDB クラスタ(NDB Server)の ID を確認しておきます。jq は必須ではないので、インストールされていない場合は別の方法で JSON データの中から id を探し出します。

[root@lab-linux-02 ~]# NDB=192.168.20.19
[root@lab-linux-02 ~]# CRED='admin:nutanix/4u'
[root@lab-linux-02 ~]# curl -ks -u "$CRED" --url "https://$NDB/era/v0.9/clusters" | jq -r .[].id
d20656e2-84c3-4ff9-9327-7b67363bbf2f

Kubernetes にリソースを作成するために、3つの YAML ファイルを用意しておきます。

ndb-operator-demo_ndb-secrets.yml

  • NDB Server の認証情報をもつ Secret を作成しておきます。

gist.github.com

ndb-operator-demo_db-secrets.yml

  •  DB & DB サーバに設定する認証情報をもつ Secret を作成しておきます。
  • ssh_public_key には、プロビジョニングする DB サーバ へのログインで利用するする SSH 鍵ペアの公開鍵を指定します。

gist.github.com

ndb-operator-demo_ndbo-pgsql-01.yml

  • プロビジョニングする DB & DB サーバ (NDB-Operator 独自の Database リソース)を定義します。
  • name は Kubernetes の Database リソースの名前を指定するもので、NDB 側の DB の名前は databaseInstanceName で指定します。
  • clusterId は、Prism の Cluster UUID ではなく、NDB クラスタ(NDB Server)の UUID を指定します。
  • 他 2件の YAML で作成する Secret も、この中で指定します。
  • skipCertificateVerification で、SSL 証明書のチェックは無視します。

gist.github.com

それでは kubectl で YAML ファイルを適用して、Kubernetes にリソースを作成します。

[root@lab-linux-02 ~]# kubectl apply -f ndb-operator-demo_ndb-secrets.yml
secret/demo-ndb-secret created
[root@lab-linux-02 ~]# kubectl apply -f ndb-operator-demo_db-secrets.yml
secret/demo-db-secret created
[root@lab-linux-02 ~]# kubectl apply -f ndb-operator-demo_ndbo-pgsql-01.yml
database.ndb.nutanix.com/ndbo-pgsql-01 created

すぐに、DB のプロビジョニングが開始されます。

[root@lab-linux-02 ~]# kubectl get db
NAME            IP ADDRESS   STATUS         DATABASE INSTANCE ID                   DATABASE SERVER ID
ndbo-pgsql-01                PROVISIONING   8dd480a1-fa0d-4f0f-8ac2-f40a4bb92ea1

NDB の Web UI でも、プロビジョニングの開始が確認できます。

しばらくすると、DB と DB サーバがプロビジョニングが完了します。

STATUS が READY になります。そして、DB サーバ二設定された IP アドレスも確認できます。

[root@lab-linux-02 ~]# kubectl get db
NAME            IP ADDRESS       STATUS   DATABASE INSTANCE ID                   DATABASE SERVER ID
ndbo-pgsql-01   192.168.11.112   READY    8dd480a1-fa0d-4f0f-8ac2-f40a4bb92ea1   e21b58e7-fe28-44f2-990c-63939335fc74

NDB では、DB サーバ VM、DB、タイムマシンが作成されます。

4. NDB-Operator での DB 削除

NDB-Operator による DB は、削除でも kubectl を利用します。

[root@lab-linux-02 ~]# kubectl delete db ndbo-pgsql-01
database.ndb.nutanix.com "ndbo-pgsql-01" deleted

「kubectl delete db」で DB を削除すると、DB とタイムマシンが削除されて・・・

DB サーバ VM も一緒に削除されます。

以上。

 

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