前提摘要
-
主机安装: prometheus 监控插件
-
Slave 镜像:980315926pxm/mysql-slave:8.0.0
-
Master 镜像:980315926pxm/mysql-master:8.0.0
目录
-
1. 编写 mysql-master-rc.yaml (ReplicationController)
-
2. 编写 mysql-slave-rc.yaml(ReplicationController)
-
3. 编写 mysql-svc.yaml (Service)
-
4. 部署安装集群
-
5. 从机 slave 验证主从同步开启
-
6. 集群手动伸缩扩容
-
7. 集群自动伸缩扩容
1. 编写 mysql-master-rc.yaml (ReplicationController)
apiVersion: v1
kind: ReplicationController
metadata:
name: mysql-master
labels:
name: mysql-master
spec:
replicas: 1
selector:
name: mysql-master
template:
metadata:
labels:
name: mysql-master
spec:
containers:
- name: mysql-master
image: 980315926pxm/mysql-master:8.0.0
imagePullPolicy: IfNotPresent
ports:
- containerPort: 3306
env:
- name: MYSQL_ROOT_PASSWORD
value: "master123456"
- name: MYSQL_REPLICATION_USER
value: "slave"
- name: MYSQL_REPLICAITON_PASSWORD
value: "123456"
-
环境变量:spec.containers.env:
MYSQL_ROOT_PASSWORD (master 主机 root 密码)
MYSQL_REPLICATION_USER (slave 从机同步 master 账号)
MYSQL_REPLICAITON_PASSWORD (slave 从机同步 master 密码)
2. 编写 mysql-slave-rc.yaml
apiVersion: v1
kind: ReplicationController
metadata:
name: mysql-slave
labels:
name: mysql-slave
spec:
replicas: 1
selector:
name: mysql-slave
template:
metadata:
labels:
name: mysql-slave
spec:
containers:
- name: mysql-slave
image: 980315926pxm/mysql-slave:8.0.0
imagePullPolicy: IfNotPresent
resources:
requests:
memory: 128Mi
cpu: 100m
limits:
memory: 256Mi
cpu: 200m
ports:
- containerPort: 3306
env:
- name: MYSQL_ROOT_PASSWORD
value: "slave123456"
- name: MYSQL_REPLICATION_USER
value: "slave"
- name: MYSQL_REPLICAITON_PASSWORD
value: "123456"
-
环境变量:spec.containers.env:
MYSQL_ROOT_PASSWORD (slave 主机 root 密码)
MYSQL_REPLICATION_USER (slave 从机同步 master 账号)
MYSQL_REPLICAITON_PASSWORD (slave 从机同步 master 密码)
3. 编写 mysql-svc.yaml (Service)
apiVersion: v1
kind: Service
metadata:
name: mysql-master
labels:
name: mysql-master
spec:
type: NodePort
ports:
- port: 3306
targetPort: 3306
name: http
nodePort: 30006
selector:
name: mysql-master
---
apiVersion: v1
kind: Service
metadata:
name: mysql-slave
labels:
name: mysql-slave
spec:
type: NodePort
ports:
- port: 3306
targetPort: 3306
name: http
nodePort: 30066
selector:
name: mysql-slave
-
master 主机外网连接端口 30006
-
slave 从机外网连接端口 30066
-
推荐使用 Navicat 测试连接
4. 部署安装集群
kubectl create -f mysql-master-rc.yaml
kubectl create -f mysql-slave-rc.yaml
kubectl create -f mysql-svc.yaml
5. 从机 slave 验证主从同步开启
root@VM-0-6-ubuntu:~# kubectl get po
NAME READY STATUS RESTARTS AGE
mysql-master-99mpz 1/1 Running 0 20s
mysql-slave-rfc45 1/1 Running 0 14s
root@VM-0-6-ubuntu:~# kubectl exec -it mysql-slave-rfc45 -- bash
root@mysql-slave-rfc45:/# mysql -u root -p
Enter password:123456
mysql> show slave status\G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 10.1.81.141
Master_User: slave
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-master-99mpz-bin.000003
Read_Master_Log_Pos: 313
Relay_Log_File: mysql-slave-rfc45-relay-bin.000005
Relay_Log_Pos: 552
Relay_Master_Log_File: mysql-master-99mpz-bin.000003
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
image.png
-
Slave_IO_Running: Yes
-
Slave_SQL_Running: Yes
-
同步验证成功
6. 集群手动伸缩扩容
root@VM-0-6-ubuntu:~# kubectl scale rc mysql-slave --replicas=3
replicationcontroller/mysql-slave scaled
root@VM-0-6-ubuntu:~# kubectl get pods
NAME READY STATUS RESTARTS AGE
mysql-master-99mpz 1/1 Running 0 15m
mysql-slave-6kvxz 1/1 Running 0 7s
mysql-slave-fjqlj 1/1 Running 0 7s
mysql-slave-rfc45 1/1 Running 0 15m
image.png
-
kubectl scale rc mysql-slave --replicas=3
-
kubectl get pods
7. 集群自动伸缩扩容
root@VM-0-6-ubuntu:~# kubectl autoscale rc mysql-slave --min=1 --max=10 --cpu-percent=50
horizontalpodautoscaler.autoscaling/mysql-slave autoscaled
root@VM-0-6-ubuntu:~# kubectl get hpa
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
mysql-slave ReplicationController/mysql-slave <unknown>/50% 1 10 0 8s
-
kubectl autoscale rc mysql-slave --min=1 --max=10 --cpu-percent=50
--min (容器数量下限)
--max (容器数量上限)
--cpu-percent (cpu使用率达到指定百分比)
容器 cpu 使用率上升至 50% 以上时,自动扩充容器数量
容器 cpu 使用率下降至 50% 以上时,自动缩减容器数量