VMware Tanzu™ SQL with MySQL for Kubernetes をTKGm にインストールする

VMware Tanzu™ SQL with MySQL for Kubernetes(以下MySQL4K8s) がGA されたのでTanzu Kubernetes Grid(TKGm) にインストールしました。その際の手順になります。

MySQL4K8s のアーキテクチャとしては、以下が参考になります。同一Kubernetes クラスタ内に限った構成になりますが、HA 構成も組める様になっています。

環境

  • Tanzu Kubernetes Grid multicloud(TKGm) v1.3.0
  • Workload Cluster のKubernetesバージョン v1.20.4
  • VMware Tanzu™ SQL with MySQL for Kubernetes v1.0

前提条件

  • TKGm v1.3.0 がデプロイ済である事
    General Limitations にあるように、任意のKubernetes ディストリビューション(v1.16以上)にインストールする事が可能です。

手順

MySQL4K8s Operator のインストール

こちらの手順「Installing the Tanzu SQL for Kubernetes Operator」に従って、インストールしていきます。VMware Tanzu Network へのアクセスが必要になるため、事前にアカウントを作成しておきます。
$ helm version
version.BuildInfo{Version:"v3.5.3", GitCommit:"041ce5a2c17a58be0fcd5f5e16fb3e7e95fea622", GitTreeState:"dirty", GoVersion:"go1.15.8"}
export HELM_EXPERIMENTAL_OCI=1
helm registry login registry.pivotal.io

こちらのMySQL4K8sのArtifact Referencesのページを参照しながら、コンテナイメージだったりをhelm chart をダウンロードしていきます。
$ helm chart pull registry.pivotal.io/tanzu-mysql-for-kubernetes/tanzu-mysql-operator-chart:1.0.0
1.0.0: Pulling from registry.pivotal.io/tanzu-mysql-for-kubernetes/tanzu-mysql-operator-chart
ref:     registry.pivotal.io/tanzu-mysql-for-kubernetes/tanzu-mysql-operator-chart:1.0.0
digest:  c31fb4153a737af9102e3d652a0459c70b60a747c1e2498e694e54648562b841
size:    6.6 KiB
name:    tanzu-sql-with-mysql-operator
version: 1.0.0
Status: Downloaded newer chart for registry.pivotal.io/tanzu-mysql-for-kubernetes/tanzu-mysql-operator-chart:1.0.0
docker pull registry.pivotal.io/tanzu-mysql-for-kubernetes/tanzu-mysql-instance:1.0.0
docker pull registry.pivotal.io/tanzu-mysql-for-kubernetes/tanzu-mysql-operator:1.0.0

Operator のインストール、MySQL インスタンスの作成時に利用するコンテナレジストリは、プライベートレジストリであるHarbor を利用しようと思うので、コンテナイメージをそちらに上げ直します。
docker tag registry.pivotal.io/tanzu-mysql-for-kubernetes/tanzu-mysql-instance:1.0.0 registry.<MYDOMAIN>/mysql/tanzu-mysql-for-kubernetes/tanzu-mysql-instance:1.0.0
docker tag registry.pivotal.io/tanzu-mysql-for-kubernetes/tanzu-mysql-operator:1.0.0 registry.<MYDOMAIN>/mysql/tanzu-mysql-for-kubernetes/tanzu-mysql-operator:1.0.0
docker push registry.<MYDOMAIN>/mysql/tanzu-mysql-for-kubernetes/tanzu-mysql-instance:1.0.0
docker push registry.<MYDOMAIN>/mysql/tanzu-mysql-for-kubernetes/tanzu-mysql-operator:1.0.0

MySQL4K8s Operator をインストールするNamespace を作成し、Harbor にアクセスするためのSecret を作成します。事前にdevops ユーザーはHarbor 上で作成し、ここで利用するレジストリを利用出来る状態である事を前提としています。
k create ns tanzu-mysql-for-kubernetes-system
$ k -n tanzu-mysql-for-kubernetes-system create secret docker-registry tanzu-mysql-image-registry \
--docker-server=https://registry.<MYDOMAIN> --docker-username=devops --docker-password=xxxx

helm chart をローカル環境にダウンロードします。
$ helm chart export registry.pivotal.io/tanzu-mysql-for-kubernetes/tanzu-mysql-operator-chart:1.0.0
ref:     registry.pivotal.io/tanzu-mysql-for-kubernetes/tanzu-mysql-operator-chart:1.0.0
digest:  c31fb4153a737af9102e3d652a0459c70b60a747c1e2498e694e54648562b841
size:    6.6 KiB
name:    tanzu-sql-with-mysql-operator
version: 1.0.0
Exported chart to tanzu-sql-with-mysql-operator/

作業しているディレクトリにtanzu-sql-with-mysql-operator が作成され、そのディレクトリ配下に以下が含まれています。
  • The Tanzu MySQL for Kubernetes Helm chart
  • Custom Resource Definitions (CRDs)
  • Role-Based Access Control (RBAC) definitions required to install the Operator with Helm
$ tree tanzu-sql-with-mysql-operator/
tanzu-sql-with-mysql-operator/
├── Chart.yaml
├── crds
│   └── with.sql.tanzu.vmware.com_crds.yaml
├── templates
│   ├── _helper.tpl
│   ├── rbac.yaml
│   └── tanzu-mysql-operator.yaml
├── values.schema.json
└── values.yaml

2 directories, 7 files

今回はregistry.pivotal.io から直接イメージを利用しないので、values.yaml を作成します。values-override.yaml というファイル名で以下の様に作成します。
$ cat values-override.yaml
---
imagePullSecret: tanzu-mysql-image-registry

operatorImage: registry.<MYDOMAIN>/mysql/tanzu-mysql-for-kubernetes/tanzu-mysql-operator:1.0.0

instanceImage: registry.<MYDOMAIN>/mysql/tanzu-mysql-for-kubernetes/tanzu-mysql-instance:1.0.0

resources:
  limits:
    cpu: 100m
    memory: 128Mi
  requests:
    cpu: 100m
    memory: 128Mi

MySQL4K8s Operator をインストールします。
$ helm --namespace tanzu-mysql-for-kubernetes-system install --values=./values-override.yaml tanzu-sql-with-mysql-operator ./tanzu-sql-with-mysql-operator/
NAME: tanzu-sql-with-mysql-operator
LAST DEPLOYED: Wed Apr 21 06:07:56 2021
NAMESPACE: tanzu-mysql-for-kubernetes-system
STATUS: deployed
REVISION: 1
TEST SUITE: None

ちゃんとリソースが立ち上がって来ている事を確認出来ました。
$ k -n tanzu-mysql-for-kubernetes-system get all
NAME                                                 READY   STATUS    RESTARTS   AGE
pod/tanzu-sql-with-mysql-operator-76bdb77d75-d6fzk   1/1     Running   0          5s

NAME                                            READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/tanzu-sql-with-mysql-operator   1/1     1            1           5s

NAME                                                       DESIRED   CURRENT   READY   AGE
replicaset.apps/tanzu-sql-with-mysql-operator-76bdb77d75   1         1         1       5s

MySQL インスタンスの作成

こちらの「Creating and Deleting MySQL Instances」に従って、MySQL4K8s インスタンスを作成していきます。
はじめに、MySQL インスタンスを作成するためのNamespace と、そのNamespace にMySQL インスタンス用コンテナイメージがストアされているHarbor アクセス用のSecret を作成します。
k create ns mysql-test
$ k -n mysql-test create secret docker-registry tanzu-mysql-image-registry \
--docker-server=https://registry.<MYDOMAIN> --docker-username=devops --docker-password=xxxx

こちらにある「Tanzu MySQL Deployment Templates」をダウンロードし展開します。
$ tar xvf tanzu-mysql-deployment-templates-1.0.0.tgz
tanzu-mysql-deployment-templates-1.0.0/samples/
tanzu-mysql-deployment-templates-1.0.0/samples/backup.yaml
tanzu-mysql-deployment-templates-1.0.0/samples/backuplocation.yaml
tanzu-mysql-deployment-templates-1.0.0/samples/backupschedule.yaml
tanzu-mysql-deployment-templates-1.0.0/samples/mysql.yaml
tanzu-mysql-deployment-templates-1.0.0/samples/restore.yaml
tanzu-mysql-deployment-templates-1.0.0/samples/tls-secret.yaml
tanzu-mysql-deployment-templates-1.0.0/open_source_license_VMware_Tanzu™_SQL_with_MySQL_for_Kubernetes_1.0.0_GA.txt

ダウンロードしたファイルをベースにMySQL インスタンスをデプロイするためのマニフェストファイルを作成します。spec.storageClassName と spec.serviceType を環境に合わせて変更しています。
cp tanzu-mysql-deployment-templates-1.0.0/samples/mysql.yaml ./testdb.yaml
$ cat testdb.yaml
---
apiVersion: with.sql.tanzu.vmware.com/v1
kind: MySQL
metadata:
  name: mysql-sample
spec:
  storageSize: 1Gi
  imagePullSecret: tanzu-mysql-image-registry

#### Set the storage class name to change storage class of the PVC associated with this resource
  storageClassName: default

#### Set the type of Service used to provide access to the MySQL database.
  serviceType: ClusterIP

#### Set the name of the Secret used for TLS
#  tls:
#    secret:
#      name: mysql-tls-secret

#### Enable highly available cluster
#  highAvailability:
#    enabled: true

#### Examples to set resource limit/request for mysql/backup containers.
#  resources:

#### This is the container running the mysql server.
#    mysql:
#      limits:
#        cpu: '1.0'
#        memory: 800Mi
#      requests:
#        cpu: '0.75'
#        memory: 500Mi

#### This is the sidecar container that manages backups and innodb cluster operations
#    mysqlSidecar:
#      limits:
#        cpu: '0.25'
#        memory: 75Mi
#      requests:
#        cpu: 100m
#        memory: 50Mi

作成したマニフェストを用いてMySQL インスタンスをデプロイします。
k -n mysql-test apply -f testdb.yaml
$ k -n mysql-test get pvc
NAME                        STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
mysql-data-mysql-sample-0   Bound    pvc-8dfa94c9-5449-4f45-966e-c8e83b9bdb14   1Gi        RWO            default        4m56s
$ k -n mysql-test get all
NAME                 READY   STATUS    RESTARTS   AGE
pod/mysql-sample-0   2/2     Running   0          82s

NAME                           TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)              AGE
service/mysql-sample           ClusterIP   100.70.94.15   <none>        3306/TCP,33060/TCP   82s
service/mysql-sample-members   ClusterIP   None           <none>        3306/TCP,33060/TCP   82s

NAME                            READY   AGE
statefulset.apps/mysql-sample   1/1     82s

NAME                                           READY   STATUS    AGE
mysql.with.sql.tanzu.vmware.com/mysql-sample   true    Running   83s

無事デプロイされたので、MySQL インスタンスのPod にアクセスしてみます。
k -n mysql-test exec -it mysql-sample-0 -c mysql -- bash
mysql@mysql-sample-0:/$ mysql -uroot -p$(cat $MYSQL_ROOT_PASSWORD_FILE)
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)

mysql> connect mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Connection id:    11
Current database: mysql

mysql> show tables;
+----------------------------------------------+
| Tables_in_mysql                              |
+----------------------------------------------+
| columns_priv                                 |
| component                                    |
| db                                           |
| default_roles                                |
| engine_cost                                  |
| func                                         |
| general_log                                  |
| global_grants                                |
| gtid_executed                                |
| help_category                                |
| help_keyword                                 |
| help_relation                                |
| help_topic                                   |
| innodb_index_stats                           |
| innodb_table_stats                           |
| password_history                             |
| plugin                                       |
| procs_priv                                   |
| proxies_priv                                 |
| replication_asynchronous_connection_failover |
| role_edges                                   |
| server_cost                                  |
| servers                                      |
| slave_master_info                            |
| slave_relay_log_info                         |
| slave_worker_info                            |
| slow_log                                     |
| tables_priv                                  |
| time_zone                                    |
| time_zone_leap_second                        |
| time_zone_name                               |
| time_zone_transition                         |
| time_zone_transition_type                    |
| user                                         |
+----------------------------------------------+
34 rows in set (0.00 sec)


TKGm 上に簡単にMySQL4K8s をデプロイする事が出来ました。Tanzu SQL で提供されるプロダクトとして、MySQL, Postgres(Postgres に関しては、「Tanzu SQL with Postgres for Kubernetes をTKGm にインストールする」で紹介しています。) 両方共にGA され、K8s 上で提供されるデータサービスの選択肢が増えました。

このブログの人気の投稿