MySQL デプロイ¶
1. 概要¶
MySQL は軽量なリレーショナルデータベース管理システムであり、スウェーデンの MySQL AB 社によって開発され、現在は Oracle 社に所属しています。MySQL はインターネット上の中小規模の Web サイトで広く利用されており、小型で高速、総所有コストが低く、オープンソースかつ無料であるため、一般的に中小規模の Web サイト開発では Linux + MySQL を Web サイトデータベースとして採用しています。
MySQL はリレーショナルデータベース管理システムであり、関連データを一つの大きな倉庫にまとめて保存するのではなく、異なるテーブルに分割して保存することで、速度と柔軟性を向上させています。
2. 前提条件¶
- Kubernetes クラスタがデプロイされていること
- OpenEBS ストレージプラグインドライバがデプロイされていること
root@k8s-node01 /etc]# kubectl get pods -n kube-system|grep openebs
openebs-localpv-provisioner-6b56b5567c-k5r9l 1/1 Running 0 23h
openebs-ndm-jqxtr 1/1 Running 0 23h
openebs-ndm-operator-5df6ffc98-cplgp 1/1 Running 0 23h
openebs-ndm-qtjxm 1/1 Running 0 23h
openebs-ndm-vlcrv 1/1 Running 0 23h
3. インストール準備¶
MySQL はリソースを多く消費するため、クラスタリソースを専有する必要があります。事前にクラスタスケジューリングを設定する必要があります。
4. クラスタラベル設定¶
以下のコマンドを実行してクラスタにラベルを付けます
# クラスタ計画に基づき、MySQL サービスをデプロイする k8s ノードにラベルを付けます(単一ノード)
# xxx は実際のクラスタ内で mysql サービスをデプロイするノードを表します
kubectl label nodes xxx mysql=true
ラベルを確認します
5. クラスタテイント設定¶
以下のコマンドを実行してクラスタテイントを設定します
ヒント
MySQL サービスを実行する独立ノードを計画していない場合、ノードにテイントを設定する必要はありません。この手順はスキップできます。
6. StorageClass の設定¶
MySQL 専用のストレージクラスを設定します
# 以下の yaml 内容を k8s クラスタにコピーし、yaml 形式で保存して、実際の状況に応じて修正した後にデプロイします
apiVersion: storage.k8s.io/v1
allowVolumeExpansion: true
kind: StorageClass
metadata:
annotations:
cas.openebs.io/config: |
- name: StorageType
value: "hostpath"
- name: BasePath
value: "/data/mysql" # このパスは実際の状況に応じて変更可能です。十分なストレージ容量とパスの存在を確認してください
name: openebs-mysql # クラスタ内で一意の名前です。インストール前にデプロイファイル /etc/kubeasz/guance/infrastructure/yaml/mysql.yaml を同期して変更する必要があります
provisioner: openebs.io/local
reclaimPolicy: Retain
volumeBindingMode: WaitForFirstConsumer
/data/mysqlディレクトリのディスク容量が十分であることを確認してください
データストレージの設定
# /etc/kubeasz/guance/infrastructure/yaml/mysql.yaml に移動し、必要に応じて変更します
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mysql-data
spec:
accessModes:
- ReadWriteOnce
volumeMode: Filesystem
resources:
requests:
storage: 10Gi # 実際の使用量に応じてストレージサイズを設定します
storageClassName: openebs-mysql
7. インストール¶
# デフォルトの root 管理者パスワードは "mQ2LZenlYs1UoVzi" です
# インストール前に /etc/kubeasz/guance/infrastructure/yaml/mysql.yaml で変更可能です
# 名前空間を作成
kubectl create ns middleware
# MySQL サービスをデプロイ
kubectl apply -f /etc/kubeasz/guance/infrastructure/yaml/mysql.yaml -n middleware
8. デプロイと設定の確認¶
8.1 コンテナステータスの確認¶
[root@k8s-node01 /etc/kubeasz/guance/infrastructure/yaml]# kubectl get pods -n middleware |grep mysql
mysql-75499f6fcd-6tc7l 1/1 Running 0 4m36s
8.2 サービスの確認¶
MySQL サービスの可用性確認
# デフォルトの root 管理者パスワードは "mQ2LZenlYs1UoVzi" です
# インストール前に /etc/kubeasz/guance/infrastructure/yaml/mysql.yaml で変更可能です
[root@k8s-node01 /etc/kubeasz/guance/infrastructure/yaml]# kubectl exec -it -n middleware mysql-xxxxx -- mysql -uroot -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.40 MySQL Community Server (GPL)
Copyright (c) 2000, 2022, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| FT2.0 |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.00 sec)