環境
- 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 のインストール
$ 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 インスタンスの作成
はじめに、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)