Kubernetes MySQL クラスター 作成

今回は、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ファイルを作成します。

・mysql-dev.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

正常に動作していれば、各種情報が確認できます。

Kubernetes kubectl MySQL check

コマンドライン MySQLサービス接続確認

コマンドラインからMySQLに接続して確認します。

kubectl run -it --rm --image=mysql:5.6 --restart=Never mysql-client -- mysql -h mysql -ppassword

MySQLへの接続を行い、挙動に問題が無いことを確認します。

Kubernetes MySQL Service cluster


SQLクライアント 接続

ローカル開発環境では、普段から利用しているSQLクライアントでDBの内容を確認することが多いので、

SQLクライアントでの接続方法もメモしておきます。

サービス ポートフォワード トンネリング 設定

以下のコマンドで、MySQLのサービスとローカルホストOSを繋ぐための設定を行います。

※今回は適当にホストのポートとして3008を指定していますが、未使用の任意の数値を指定下さい。

kubectl port-forward service/mysql 3008:3306

特に問題ない場合、接続状態が表示されます。

※停止する場合は、Ctrl + c(Win)、option + c(Mac)などで停止して下さい。

kubernetes MySQL Port forward

クライアントツール 接続確認

お好みのクライアントツールで接続確認を行います。

以下はDBeaverの例ですが、他のツールも同じ情報で接続できると思います。

・Server Host:local

・Port:先程指定したポート値

・ユーザー:mysql-dev.yamlで設定したユーザー名

・パスワード:mysql-dev.yamlで設定したユーザー名

kubernetes MySQL DBeaver Setting

テスト接続を行い、正常に接続できることを確認します。

kubernetes MySQL DBeaver Setting


今回のメモは以上となります。

あまりKubernetesには触れたことがないので馴染みがありませんが、

逐一メモしていきたいと思います。

都内でエンジニアをやっています。 2017年に脱サラ(法人設立)しました。 仕事で調べたことや、気になったことをメモしています。
投稿を作成しました 163

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


関連投稿

検索語を上に入力し、 Enter キーを押して検索します。キャンセルするには ESC を押してください。

トップに戻る