MySQL デプロイ¶
概要¶
MySQL は最も広く使われているリレーショナルデータベース管理システムであり、WEB アプリケーションにおいては最適な RDBMS(Relational Database Management System:リレーショナルデータベース管理システム)の一つです。
前提条件¶
- Kubernetes クラスターがデプロイ済みであること。未デプロイの場合は Kubernetes デプロイ を参照してください。
- nfs-subdir-external-provisioner がデプロイ済みであること。未デプロイの場合は Kubernetes Storage を参照してください。
基本情報と互換性¶
| 名称 | 説明 |
|---|---|
| MySQL バージョン | 8.0 |
| 対応クラスター | 1.18+ |
| オフラインインストール対応 | はい |
| 対応アーキテクチャ | amd64/arm64 |
デフォルト設定¶
| デフォルトアドレス | mysql.middleware |
| デフォルトポート | 3306 |
| デフォルトアカウント | root/rootPassw0rd |
インストール¶
注意
管理者アカウントを作成してください(管理者アカウントである必要があります。後続のインストール初期化でこのアカウントを使用して各アプリケーション DB を作成、初期化します。リモート接続が必要な場合は、ご自身で有効化してください)。
デプロイが成功しない場合は、Docker を使用して mysql をデプロイする方法で行ってください。
ハイライト部分の storageClassName は実際の状況に応じて設定してください。
MySQL の管理者アカウントは必ず変更してください。
mysql.yaml を保存し、デプロイします。
mysql.yaml(クリックして展開)
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
annotations:
volume.beta.kubernetes.io/storage-provisioner: "kubernetes.io/nfs"
# volume.beta.kubernetes.io/storage-class: "managed-nfs-storage"
name: mysql-data
namespace: middleware
spec:
accessModes:
- ReadWriteOnce
volumeMode: Filesystem
resources:
requests:
storage: 10Gi
storageClassName: standard-nfs-storage ## 実際に存在する StorageClass を指定してください #
---
apiVersion: v1
kind: ConfigMap
metadata:
name: mysql-config
namespace: middleware
labels:
app: mysql
data:
mysqld.cnf: |-
[mysqld]
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
symbolic-links=0
max_connections=5000
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: mysql
name: mysql
namespace: middleware
spec:
progressDeadlineSeconds: 600
replicas: 1
revisionHistoryLimit: 2
selector:
matchLabels:
app: mysql
strategy:
rollingUpdate:
maxSurge: 25%
maxUnavailable: 25%
type: RollingUpdate
template:
metadata:
labels:
app: mysql
spec:
containers:
- env:
- name: MYSQL_ROOT_PASSWORD
value: rootPassw0rd
- name: MYSQL_DATABASE
value: FT2.0
- name: MYSQL_USER
value: admin
- name: MYSQL_PASSWORD
value: admin@123
image: pubrepo.guance.com/googleimages/mysql:8.0
imagePullPolicy: IfNotPresent
name: mysql
resources:
limits:
cpu: '4'
memory: 4Gi
requests:
cpu: 100m
memory: 512Mi
ports:
- containerPort: 3306
name: dbport
protocol: TCP
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
volumeMounts:
- mountPath: /var/lib/mysql
name: db
subPath: data
- mountPath: /etc/mysql/conf.d/mysqld.cnf
name: config
subPath: mysqld.cnf
dnsPolicy: ClusterFirst
restartPolicy: Always
schedulerName: default-scheduler
securityContext: {}
terminationGracePeriodSeconds: 30
volumes:
- name: db
persistentVolumeClaim:
claimName: mysql-data
- name: config
configMap:
name: mysql-config
---
apiVersion: v1
kind: Service
metadata:
name: mysql
namespace: middleware
spec:
ports:
- name: mysqlport
nodePort: 32306
port: 3306
protocol: TCP
targetPort: dbport
selector:
app: mysql
sessionAffinity: None
type: NodePort
次のコマンドを実行してインストールします。
デプロイの確認¶
- Pod の状態を確認します。