今回は、KubernetesでMySQLを動作させるメモです。
Docker DeskTopや、MinikubeでKubernetesが動作可能な前提の内容となります。
こちらは、Kubernetes公式で紹介されている以下を参考にしました。
コマンドライン上でMySQLへの接続確認を行うあたりまでは、概ねこちらの内容通りになっています。
https://kubernetes.io/docs/tasks/run-application/run-single-instance-stateful-application/
目次
環境
- macOS:Big Sur 11.5.2
動作確認バージョン
- Kubectl:1.26
PersistentVolume リソース 作成
まず、クラスターで利用するストレージ等のPV(永続ボリューム)のリソース作成を行います。
https://kubernetes.io/ja/docs/concepts/storage/persistent-volumes/
以下のようなyamlファイルを作成します。
・mysql-pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: mysql-pv-volume
labels:
type: local
spec:
storageClassName: manual
capacity:
storage: 20Gi
accessModes:
- ReadWriteOnce
hostPath:
path: "/mnt/data"
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mysql-pv-claim
spec:
storageClassName: manual
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 20Gi
ファイル作成後、以下のコマンドを実行して永続ボリュームの作成を行います。
kubectl apply -f mysql-pv.yaml
Service MySQL 作成
続けて、MySQLのサービスを作成するために、以下のyamlファイルを作成します。
apiVersion: v1
kind: Service
metadata:
name: mysql
spec:
ports:
- port: 3306
selector:
app: mysql
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: mysql
spec:
selector:
matchLabels:
app: mysql
strategy:
type: Recreate
template:
metadata:
labels:
app: mysql
spec:
containers:
- image: mysql:5.6
name: mysql
env:
# Use secret in real usage
- name: MYSQL_ROOT_PASSWORD
value: password
ports:
- containerPort: 3306
name: mysql
volumeMounts:
- name: mysql-persistent-storage
mountPath: /var/lib/mysql
volumes:
- name: mysql-persistent-storage
persistentVolumeClaim:
claimName: mysql-pv-claim
ファイル作成後、以下のコマンドでサービス作成を行います。
kubectl apply -f mysql-dev.yaml
挙動確認
Deployment、Pod、Services 確認
作成されたDeployment、Pod、Serviceそれぞれの状況を確認します。
kubectl get deployments
kubectl get pods
kubectl get services
正常に動作していれば、各種情報が確認できます。
コマンドライン MySQLサービス接続確認
コマンドラインからMySQLに接続して確認します。
kubectl run -it --rm --image=mysql:5.6 --restart=Never mysql-client -- mysql -h mysql -ppassword
MySQLへの接続を行い、挙動に問題が無いことを確認します。
SQLクライアント 接続
ローカル開発環境では、普段から利用しているSQLクライアントでDBの内容を確認することが多いので、
SQLクライアントでの接続方法もメモしておきます。
サービス ポートフォワード トンネリング 設定
以下のコマンドで、MySQLのサービスとローカルホストOSを繋ぐための設定を行います。
※今回は適当にホストのポートとして3008を指定していますが、未使用の任意の数値を指定下さい。
kubectl port-forward service/mysql 3008:3306
特に問題ない場合、接続状態が表示されます。
※停止する場合は、Ctrl + c(Win)、option + c(Mac)などで停止して下さい。
クライアントツール 接続確認
お好みのクライアントツールで接続確認を行います。
以下はDBeaverの例ですが、他のツールも同じ情報で接続できると思います。
・Server Host:local
・Port:先程指定したポート値
・ユーザー:mysql-dev.yamlで設定したユーザー名
・パスワード:mysql-dev.yamlで設定したユーザー名
テスト接続を行い、正常に接続できることを確認します。
今回のメモは以上となります。
あまりKubernetesには触れたことがないので馴染みがありませんが、
逐一メモしていきたいと思います。