diff --git a/examples/mysql/mysql-8-cluster.yaml b/examples/mysql/mysql-8-cluster.yaml new file mode 100644 index 0000000..fc4d09d --- /dev/null +++ b/examples/mysql/mysql-8-cluster.yaml @@ -0,0 +1,508 @@ +--- + +# 创建 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.35 + 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.35 + app.k8s.hty1024.com/resources: persistentVolume + app.k8s.hty1024.com/role: master +spec: + capacity: + storage: 20Gi + volumeMode: Filesystem + accessModes: + - ReadWriteOnce + persistentVolumeReclaimPolicy: Retain + storageClassName: storage-local-mysql + local: + path: /app/mysql/data/matser + 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.35 + app.k8s.hty1024.com/resources: persistentVolume + app.k8s.hty1024.com/role: slave +spec: + capacity: + storage: 20Gi + 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.35 + app.k8s.hty1024.com/resources: persistentVolumeClaim + app.k8s.hty1024.com/role: master +spec: + resources: + requests: + storage: 20Gi + 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.35 + app.k8s.hty1024.com/resources: persistentVolumeClaim + app.k8s.hty1024.com/role: slave +spec: + resources: + requests: + storage: 20Gi + 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.35 + 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.35 + 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.35 + 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.35 + 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.35 + 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.35 + 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.35 + 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.35 + 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.35 + 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.35 + 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.35 + 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.35 + 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.35 + 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.35 + 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.35 + 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.35 + 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.35 + 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