はじめに
JPA/JTAを試したく、さくっとkubernetes上にmysqlを立てられないか?と調べたところ、やっぱりhelmが楽そうなので使ってみる。作成する環境は以下である。

環境構築
パッケージのインストール時にMySQLのユーザとデータベースも併せて作成したいので、先にコンフィギュレーションを準備する。
$ vim mysql.yaml
## Specify password for root user
mysqlRootPassword: <rootのパスワード>
## Create a database user
mysqlUser: <新規で作成したいユーザ>
mysqlPassword: <そのユーザのパスワード>
## Create a database
mysqlDatabase: entities
上記の設定ファイル(mysql.yaml)を読み込ませてインストールします。パスワードを直書きしているので、設定ファイルの取り扱いには注意。実際にはsecretリソースを利用するなどが好ましい。
$ helm install mysql stable/mysql -f mysql.yaml
NAME: mysql
LAST DEPLOYED: Tue May 19 04:51:40 2020
NAMESPACE: default
STATUS: deployed
REVISION: 1
(略)
ちなみにインストール時に変更できるパラメータは以下で出力することができる。上記以外にも変更したい場合は、一度このコマンドで出力した後に、エディタで編集するとよい。
$ helm inspect values stable/mysql > mysql.yaml
以下のようにインストール状態を確認する。
# deployされていることを確認
$ kubectl get deploy
NAME READY UP-TO-DATE AVAILABLE AGE
mysql 1/1 1 1 14m
# ポッドが起動していること確認
$ kubectl get pod
NAME READY STATUS RESTARTS AGE
mysql-7f4776db6f-txdct 1/1 Running 0 14m
# サービスが起動していることを確認
$ kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
mysql ClusterIP 10.0.135.7 <none> 3306/TCP 14m
さらに詳細を確認すると以下のようである。バージョンは5.7、TCP 3306でlistenし、ストレージ容量は8Gであるとわかる。
# どんな状態でデプロイされた?
$ kubectl describe deploy -l app=mysql
Name: mysql
Namespace: default
(略)
Pod Template:
Requests:
cpu: 10m
memory: 10Mi
Mounts:
/var/lib/mysql from data (rw)
Containers:
mysql:
Image: mysql:5.7.28
Port: 3306/TCP
Host Port: 0/TCP
Requests:
cpu: 100m
memory: 256Mi
Volumes:
data:
Type: PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
ClaimName: mysql
(略)
# PVC(Persistent Volume Claim)は?
$ kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
mysql Bound pvc-98b75819-4793-4e65-96c2-5ab91b6253ed 8Gi RWO default 25m
実際にmysqlクライアントから接続できるかを確認してみる。以下のように一時的なコンテナを作成し、接続ユーザとパスワードを指定する。
$ kubectl run mysql-client-test -it --image=mysql:5.7 --rm -- mysql -h mysql -u<ユーザ名> -p<パスワード>
kubectl run --generator=deployment/apps.v1 is DEPRECATED and will be removed in a future version. Use kubectl run --generator=run-pod/v1 or kubectl create instead.
If you don't see a command prompt, try pressing enter.
データベースも確かに追加されている。
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| entities |
+--------------------+
2 rows in set (0.00 sec)
これでWebアプリから接続できる環境は整った。この後は、Webアプリ(JPAでmysqlデータソースに接続)を作成していく。