HelmでMySQLをインストール

はじめに

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データソースに接続)を作成していく。

タイトルとURLをコピーしました