k8s 部署 mysql ha集群 示例
时间: 2023-10-30 10:03:37 浏览: 64
以下是一个简单的 Kubernetes 部署 MySQL HA 集群的示例:
- 创建一个 StatefulSet 对象,用于部署 MySQL 实例:
```
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: mysql
spec:
serviceName: mysql
replicas: 3
selector:
matchLabels:
app: mysql
template:
metadata:
labels:
app: mysql
spec:
containers:
- name: mysql
image: mysql:5.7
env:
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: mysql-secrets
key: password
ports:
- containerPort: 3306
name: mysql
volumeMounts:
- name: mysql-persistent-storage
mountPath: /var/lib/mysql
volumeClaimTemplates:
- metadata:
name: mysql-persistent-storage
spec:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 1Gi
```
- 创建一个 Service 对象,用于访问 MySQL 实例:
```
apiVersion: v1
kind: Service
metadata:
name: mysql
spec:
selector:
app: mysql
ports:
- name: mysql
port: 3306
targetPort: mysql
```
- 创建两个 ConfigMap 对象,用于配置 MySQL 主从复制:
```
apiVersion: v1
kind: ConfigMap
metadata:
name: mysql-master
data:
init.sql: |
CREATE USER 'repl'@'%' IDENTIFIED BY 'repl';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
FLUSH PRIVILEGES;
CHANGE MASTER TO MASTER_HOST='mysql-0.mysql', MASTER_USER='repl', MASTER_PASSWORD='repl';
---
apiVersion: v1
kind: ConfigMap
metadata:
name: mysql-slave
data:
init.sql: |
CHANGE MASTER TO MASTER_HOST='mysql-0.mysql', MASTER_USER='repl', MASTER_PASSWORD='repl';
```
- 创建一个 StatefulSet 对象,用于部署 MySQL 主从复制的代理:
```
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: mysql-replicas
spec:
serviceName: mysql-replicas
replicas: 2
selector:
matchLabels:
app: mysql-replicas
template:
metadata:
labels:
app: mysql-replicas
spec:
containers:
- name: mysql-replicas
image: percona/percona-xtradb-cluster-operator:1.6.0
env:
- name: BOOTSTRAP
value: "0"
- name: MYSQL_PASSWORD
valueFrom:
secretKeyRef:
name: mysql-secrets
key: password
- name: XTRABACKUP_PASSWORD
valueFrom:
secretKeyRef:
name: mysql-secrets
key: xtrabackup-password
command: ["/bin/bash", "-c", "while true; do sleep 30; done;"]
volumeMounts:
- name: mysql-master-init
mountPath: /etc/mysql-init
- name: mysql-slave-init
mountPath: /etc/mysql-slave-init
volumeClaimTemplates:
- metadata:
name: mysql-persistent-storage
spec:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 1Gi
volumeClaimTemplates:
- metadata:
name: mysql-persistent-storage
spec:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 1Gi
volumeClaimTemplates:
- metadata:
name: mysql-persistent-storage
spec:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 1Gi
volumeClaimTemplates:
- metadata:
name: mysql-persistent-storage
spec:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 1Gi
volumeClaimTemplates:
- metadata:
name: mysql-persistent-storage
spec:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 1Gi
volumeClaimTemplates:
- metadata:
name: mysql-persistent-storage
spec:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 1Gi
volumeClaimTemplates:
- metadata:
name: mysql-persistent-storage
spec:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 1Gi
volumeClaimTemplates:
- metadata:
name: mysql-persistent-storage
spec:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 1Gi
volumeClaimTemplates:
- metadata:
name: mysql-persistent-storage
spec:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 1Gi
```
- 创建一个 Service 对象,用于访问 MySQL 主从复制的代理:
```
apiVersion: v1
kind: Service
metadata:
name: mysql-replicas
spec:
selector:
app: mysql-replicas
ports:
- name: mysql
port: 3306
targetPort: mysql
```
这些 YAML 文件可以通过 kubectl apply 命令来部署到 Kubernetes 集群中。