kubernetes-yaml/examples/mysql/mysql-8-cluster.yaml

509 lines
13 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
# 创建 Namespace
apiVersion: v1
kind: Namespace
metadata:
name: hty1024-db
---
# 创建 StorageClass
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: storage-local-mysql
labels:
app.k8s.hty1024.com/env: prod
app.k8s.hty1024.com/type: db
app.k8s.hty1024.com/name: mysql
app.k8s.hty1024.com/version: 8.0.37
app.k8s.hty1024.com/resources: storageClass
provisioner: kubernetes.io/no-provisioner
reclaimPolicy: Retain
volumeBindingMode: WaitForFirstConsumer
---
# 创建 PersistentVolume
## master
apiVersion: v1
kind: PersistentVolume
metadata:
name: hty1024-db-mysql-pv-master
labels:
app.k8s.hty1024.com/env: prod
app.k8s.hty1024.com/type: db
app.k8s.hty1024.com/name: mysql
app.k8s.hty1024.com/version: 8.0.37
app.k8s.hty1024.com/resources: persistentVolume
app.k8s.hty1024.com/role: master
spec:
capacity:
storage: 100Gi
volumeMode: Filesystem
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storageClassName: storage-local-mysql
local:
path: /app/mysql/data/master
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: node.k8s.hty1024.com/type
operator: In
values:
- app
---
## slave
apiVersion: v1
kind: PersistentVolume
metadata:
name: hty1024-db-mysql-pv-slave
labels:
app.k8s.hty1024.com/env: prod
app.k8s.hty1024.com/type: db
app.k8s.hty1024.com/name: mysql
app.k8s.hty1024.com/version: 8.0.37
app.k8s.hty1024.com/resources: persistentVolume
app.k8s.hty1024.com/role: slave
spec:
capacity:
storage: 100Gi
volumeMode: Filesystem
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storageClassName: storage-local-mysql
local:
path: /app/mysql/data/slave
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: node.k8s.hty1024.com/type
operator: In
values:
- app
---
# 创建 PersistentVolumeClaim
## master
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: hty1024-db-mysql-pvc-master
namespace: hty1024-db
labels:
app.k8s.hty1024.com/env: prod
app.k8s.hty1024.com/type: db
app.k8s.hty1024.com/name: mysql
app.k8s.hty1024.com/version: 8.0.37
app.k8s.hty1024.com/resources: persistentVolumeClaim
app.k8s.hty1024.com/role: master
spec:
resources:
requests:
storage: 100Gi
volumeMode: Filesystem
accessModes:
- ReadWriteOnce
storageClassName: storage-local-mysql
---
## slave
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: hty1024-db-mysql-pvc-slave
namespace: hty1024-db
labels:
app.k8s.hty1024.com/env: prod
app.k8s.hty1024.com/type: db
app.k8s.hty1024.com/name: mysql
app.k8s.hty1024.com/version: 8.0.37
app.k8s.hty1024.com/resources: persistentVolumeClaim
app.k8s.hty1024.com/role: slave
spec:
resources:
requests:
storage: 100Gi
volumeMode: Filesystem
accessModes:
- ReadWriteOnce
storageClassName: storage-local-mysql
---
# 创建 ConfigMap
## master
### my.cnf
apiVersion: v1
kind: ConfigMap
metadata:
name: hty1024-db-mysql-cm-master
namespace: hty1024-db
labels:
app.k8s.hty1024.com/env: prod
app.k8s.hty1024.com/type: db
app.k8s.hty1024.com/name: mysql
app.k8s.hty1024.com/version: 8.0.37
app.k8s.hty1024.com/resources: configMap
app.k8s.hty1024.com/role: master
data:
my.cnf: |
[mysqld]
max_connections = 1000
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
server-id = 1
report_host = master
log_bin = master-bin
log_error = master-bin.err
binlog_format = mixed
binlog_expire_logs_seconds = 604800
max_binlog_size = 1G
binlog-ignore-db = mysql
binlog-ignore-db = sys
binlog-ignore-db = information_schema
binlog-ignore-db = performance_schema
---
### init.sql
apiVersion: v1
kind: ConfigMap
metadata:
name: hty1024-db-mysql-cm-master-init
namespace: hty1024-db
labels:
app.k8s.hty1024.com/env: prod
app.k8s.hty1024.com/type: db
app.k8s.hty1024.com/name: mysql
app.k8s.hty1024.com/version: 8.0.37
app.k8s.hty1024.com/resources: configMap
app.k8s.hty1024.com/role: master
data:
init.sql: |
create user 'replication'@'%' identified by '123456';
grant replication slave, replication client on *.* to 'replication'@'%';
show grants for 'replication'@'%';
flush privileges;
---
## slave
### my.cnf
apiVersion: v1
kind: ConfigMap
metadata:
name: hty1024-db-mysql-cm-slave
namespace: hty1024-db
labels:
app.k8s.hty1024.com/env: prod
app.k8s.hty1024.com/type: db
app.k8s.hty1024.com/name: mysql
app.k8s.hty1024.com/version: 8.0.37
app.k8s.hty1024.com/resources: configMap
app.k8s.hty1024.com/role: slave
data:
my.cnf: |
[mysqld]
max_connections = 1000
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
server-id = 2
report_host = slave
replicate_ignore_db = mysql
replicate_ignore_db = sys
replicate_ignore_db = information_schema
replicate_ignore_db = performance_schema
---
### init.sql
apiVersion: v1
kind: ConfigMap
metadata:
name: hty1024-db-mysql-cm-slave-init
namespace: hty1024-db
labels:
app.k8s.hty1024.com/env: prod
app.k8s.hty1024.com/type: db
app.k8s.hty1024.com/name: mysql
app.k8s.hty1024.com/version: 8.0.37
app.k8s.hty1024.com/resources: configMap
app.k8s.hty1024.com/role: slave
data:
init.sql: |
change master to master_host='hty1024-db-mysql-service-master.hty1024-db', master_port=3306, master_user='replication', master_password='123456', master_log_file='master-bin.000003', master_log_pos=157, get_master_public_key=1;
set global sql_slave_skip_counter=1;
start slave;
---
# 创建 Secret自定义 MySQL 用户密码)
apiVersion: v1
kind: Secret
metadata:
name: hty1024-db-mysql-secret
namespace: hty1024-db
labels:
app.k8s.hty1024.com/env: prod
app.k8s.hty1024.com/type: db
app.k8s.hty1024.com/name: mysql
app.k8s.hty1024.com/version: 8.0.37
app.k8s.hty1024.com/resources: secret
type: Opaque
stringData:
root.key: |
12345678
replication.key: |
123456
immutable: true
---
# 创建 Service
## master
apiVersion: v1
kind: Service
metadata:
name: hty1024-db-mysql-service-master
namespace: hty1024-db
labels:
app.k8s.hty1024.com/env: prod
app.k8s.hty1024.com/type: db
app.k8s.hty1024.com/name: mysql
app.k8s.hty1024.com/version: 8.0.37
app.k8s.hty1024.com/resources: service
app.k8s.hty1024.com/role: master
spec:
type: ClusterIP
ports:
- port: 3306
targetPort: 3306
selector:
app.k8s.hty1024.com/env: prod
app.k8s.hty1024.com/type: db
app.k8s.hty1024.com/name: mysql
app.k8s.hty1024.com/version: 8.0.37
app.k8s.hty1024.com/resources: pod
app.k8s.hty1024.com/role: master
---
## slave
apiVersion: v1
kind: Service
metadata:
name: hty1024-db-mysql-service-slave
namespace: hty1024-db
labels:
app.k8s.hty1024.com/env: prod
app.k8s.hty1024.com/type: db
app.k8s.hty1024.com/name: mysql
app.k8s.hty1024.com/version: 8.0.37
app.k8s.hty1024.com/resources: service
app.k8s.hty1024.com/role: slave
spec:
type: ClusterIP
ports:
- port: 3306
targetPort: 3306
selector:
app.k8s.hty1024.com/env: prod
app.k8s.hty1024.com/type: db
app.k8s.hty1024.com/name: mysql
app.k8s.hty1024.com/version: 8.0.37
app.k8s.hty1024.com/resources: pod
app.k8s.hty1024.com/role: slave
---
# 创建 StatefulSet
## master
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: hty1024-db-mysql-statefulset-master
namespace: hty1024-db
labels:
app.k8s.hty1024.com/env: prod
app.k8s.hty1024.com/type: db
app.k8s.hty1024.com/name: mysql
app.k8s.hty1024.com/version: 8.0.37
app.k8s.hty1024.com/resources: statefulSet
app.k8s.hty1024.com/role: master
spec:
replicas: 1
minReadySeconds: 30
selector:
matchLabels:
app.k8s.hty1024.com/env: prod
app.k8s.hty1024.com/type: db
app.k8s.hty1024.com/name: mysql
app.k8s.hty1024.com/version: 8.0.37
app.k8s.hty1024.com/resources: pod
app.k8s.hty1024.com/role: master
template:
metadata:
labels:
app.k8s.hty1024.com/env: prod
app.k8s.hty1024.com/type: db
app.k8s.hty1024.com/name: mysql
app.k8s.hty1024.com/version: 8.0.37
app.k8s.hty1024.com/resources: pod
app.k8s.hty1024.com/role: master
spec:
terminationGracePeriodSeconds: 60
volumes:
- name: localtime
hostPath:
path: /etc/localtime
- name: hty1024-db-mysql-data-master
persistentVolumeClaim:
claimName: hty1024-db-mysql-pvc-master
- name: hty1024-db-mysql-conf-master
configMap:
name: hty1024-db-mysql-cm-master
items:
- key: my.cnf
path: my.cnf
- name: hty1024-db-mysql-conf-master-init
configMap:
name: hty1024-db-mysql-cm-master-init
items:
- key: init.sql
path: init.sql
- name: hty1024-db-mysql-pwd
secret:
secretName: hty1024-db-mysql-secret
containers:
- name: mysql
image: mysql:8.0.37
ports:
- name: tcp
containerPort: 3306
volumeMounts:
- name: localtime
mountPath: /etc/localtime
readOnly: true
- name: hty1024-db-mysql-data-master
mountPath: /var/lib/mysql
- name: hty1024-db-mysql-conf-master
mountPath: /etc/mysql/conf.d/
- name: hty1024-db-mysql-conf-master-init
mountPath: /docker-entrypoint-initdb.d/
- name: hty1024-db-mysql-pwd
mountPath: /tmp/secret-volume
readOnly: true
env:
- name: MYSQL_ROOT_PASSWORD_FILE
value: "/tmp/secret-volume/root.key"
- name: MYSQL_REPLICATION_MODE
value: "master"
- name: MYSQL_REPLICATION_USER
value: "replication"
- name: MYSQL_REPLICATION_PASSWORD_FILE
value: "/tmp/secret-volume/replication.key"
nodeSelector:
node.k8s.hty1024.com/type: app
---
## slave
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: hty1024-db-mysql-statefulset-slave
namespace: hty1024-db
labels:
app.k8s.hty1024.com/env: prod
app.k8s.hty1024.com/type: db
app.k8s.hty1024.com/name: mysql
app.k8s.hty1024.com/version: 8.0.37
app.k8s.hty1024.com/resources: statefulSet
app.k8s.hty1024.com/role: slave
spec:
replicas: 1
minReadySeconds: 30
selector:
matchLabels:
app.k8s.hty1024.com/env: prod
app.k8s.hty1024.com/type: db
app.k8s.hty1024.com/name: mysql
app.k8s.hty1024.com/version: 8.0.37
app.k8s.hty1024.com/resources: pod
app.k8s.hty1024.com/role: slave
template:
metadata:
labels:
app.k8s.hty1024.com/env: prod
app.k8s.hty1024.com/type: db
app.k8s.hty1024.com/name: mysql
app.k8s.hty1024.com/version: 8.0.37
app.k8s.hty1024.com/resources: pod
app.k8s.hty1024.com/role: slave
spec:
terminationGracePeriodSeconds: 60
volumes:
- name: localtime
hostPath:
path: /etc/localtime
- name: hty1024-db-mysql-data-slave
persistentVolumeClaim:
claimName: hty1024-db-mysql-pvc-slave
- name: hty1024-db-mysql-conf-slave
configMap:
name: hty1024-db-mysql-cm-slave
items:
- key: my.cnf
path: my.cnf
- name: hty1024-db-mysql-conf-slave-init
configMap:
name: hty1024-db-mysql-cm-slave-init
items:
- key: init.sql
path: init.sql
- name: hty1024-db-mysql-pwd
secret:
secretName: hty1024-db-mysql-secret
containers:
- name: mysql
image: mysql:8.0.37
ports:
- name: tcp
containerPort: 3306
volumeMounts:
- name: localtime
mountPath: /etc/localtime
readOnly: true
- name: hty1024-db-mysql-data-slave
mountPath: /var/lib/mysql
- name: hty1024-db-mysql-conf-slave
mountPath: /etc/mysql/conf.d/
- name: hty1024-db-mysql-conf-slave-init
mountPath: /docker-entrypoint-initdb.d/
- name: hty1024-db-mysql-pwd
mountPath: /tmp/secret-volume
readOnly: true
env:
- name: MYSQL_ROOT_PASSWORD_FILE
value: "/tmp/secret-volume/root.key"
- name: MYSQL_REPLICATION_MODE
value: "slave"
nodeSelector:
node.k8s.hty1024.com/type: app