kubernetes 部署安装 mysql8.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% 以上时,自动缩减容器数量
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。