Nutanix Database Service(NDB)と Kubernetes を連携させる、NDB-Operator を使用してみます。NDB-Operator ではコンテナの DB を作成するわけではなく、NDB による仮想マシンの DB サーバを作成します。
今回の内容です。
- 今回の環境
- 1. Kubernetes の用意(podman + kind)
- 2. NDB Operator のインストール
- 3. NDB-Operator での DB プロビジョニング
- 4. NDB-Operator での 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 でインストールします。
- https://artifacthub.io/packages/helm/nutanix/ndb-operator
-
https://github.com/nutanix/helm/tree/master/charts/ndb-operator
- https://github.com/nutanix-cloud-native/ndb-operator
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 を作成しておきます。
ndb-operator-demo_db-secrets.yml
- DB & DB サーバに設定する認証情報をもつ Secret を作成しておきます。
- ssh_public_key には、プロビジョニングする DB サーバ へのログインで利用するする SSH 鍵ペアの公開鍵を指定します。
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 証明書のチェックは無視します。
それでは 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 も一緒に削除されます。
以上。