K8s 使用应用statefulset、operator编排,扩展wordpress和nginx多实例,k8s集群外部访问mysql主从数据库

一. wordpress 示例:

  1. 使用 statefulset 编排运行 mysql,实例数为 1;
    #创建mysql secret资源
root@k8s-master01:~/learning-k8s/wordpress/mysql/mysql-sts# cat 01-secret-mysql.yaml 
apiVersion: v1
kind: Secret
metadata:
  creationTimestamp: null
  name: mysql-user-pass
data:
  database.name: d3BkYg==
  root.password: TUBnZUVkdQ==
  user.name: d3B1c2Vy
  user.password: bWFnZURVLmMwbQ==

root@k8s-master01:~/learning-k8s/wordpress/mysql/mysql-sts# kubectl apply -f 01-secret-mysql.yaml -n test
secret/mysql-user-pass created
root@k8s-master01:~/learning-k8s/wordpress/mysql/mysql-sts# kubectl get secret -n test
NAME              TYPE     DATA   AGE
mysql-user-pass   Opaque   4      8s

#创建mysql pvc资源

root@k8s-master01:~/learning-k8s/wordpress/mysql/mysql-sts# cat 02-pvc-mysql-data.yaml 
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mysql-data-sts
spec:
  volumeMode: Filesystem
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 3Gi
  storageClassName: nfs-csi
root@k8s-master01:~/learning-k8s/wordpress/mysql/mysql-sts# kubectl apply -f 02-pvc-mysql-data.yaml -n test
persistentvolumeclaim/mysql-data-sts created
root@k8s-master01:~/learning-k8s/wordpress/mysql/mysql-sts# kubectl get pvc -n test
NAME             STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
mysql-data-sts   Bound    pvc-e33b1096-8d90-498f-9e40-c680be27f471   3Gi        RWO            nfs-csi        11s

#创建StatefulSet 的mysql资源

root@k8s-master01:~/learning-k8s/wordpress/mysql/mysql-sts# cat 04-deploy-mysql.yaml 
---
apiVersion: v1
kind: Service
metadata:
  name: mysql-sts
  labels:
    app: mysql-sts
spec:
  clusterIP: None
  ports:
  - port: 3306
  selector:
    app: mysql-sts
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: mysql-sts
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mysql-sts
  serviceName: "mysql-sts"
  template:
    metadata:
      labels:
        app: mysql-sts
    spec:
      containers:
      - image: mysql:8.0
        name: mysql-sts
        env:
        - name: MYSQL_ROOT_PASSWORD
          valueFrom:
            secretKeyRef:
              name: mysql-user-pass
              key: root.password
        - name: MYSQL_USER
          valueFrom:
            secretKeyRef:
              name: mysql-user-pass
              key: user.name
        - name: MYSQL_PASSWORD
          valueFrom:
            secretKeyRef:
              name: mysql-user-pass
              key: user.password
        - name: MYSQL_DATABASE
          valueFrom:
            secretKeyRef:
              name: mysql-user-pass
              key: database.name
        volumeMounts:
        - name: mysql-data
          mountPath: /var/lib/mysql/
      volumes:
      - name: mysql-data
        persistentVolumeClaim:
          claimName: mysql-data-sts

root@k8s-master01:~/learning-k8s/wordpress/mysql/mysql-sts# kubectl apply -f 04-deploy-mysql.yaml -n test
service/mysql-sts created
deployment.apps/mysql-sts created
root@k8s-master01:~/learning-k8s/wordpress/mysql/mysql-sts# kubectl get svc -n test
NAME        TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)    AGE
mysql-sts   ClusterIP   None         <none>        3306/TCP   14s
root@k8s-master01:~/learning-k8s/wordpress/mysql/mysql-sts# kubectl get pods -n test -o wide
NAME          READY   STATUS    RESTARTS   AGE   IP             NODE         NOMINATED NODE   READINESS GATES
mysql-sts-0   1/1     Running   0          66s   10.244.2.196   k8s-node02   <none>           <none>

#登录mysql pod验证,正常访问

root@k8s-node02:~# docker exec -it 0d2bc43029a1 /bin/sh
sh-4.4# env
MYSQL_PASSWORD=mageDU.c0m
HOSTNAME=mysql-sts-0
MYSQL_DATABASE=wpdb
KUBERNETES_PORT_443_TCP_PROTO=tcp
KUBERNETES_PORT_443_TCP_ADDR=10.96.0.1
MYSQL_ROOT_PASSWORD=M@geEdu
KUBERNETES_PORT=tcp://10.96.0.1:443
PWD=/
HOME=/root
MYSQL_MAJOR=8.0
GOSU_VERSION=1.16
MYSQL_USER=wpuser
KUBERNETES_SERVICE_PORT_HTTPS=443
KUBERNETES_PORT_443_TCP_PORT=443
MYSQL_VERSION=8.0.32-1.el8
KUBERNETES_PORT_443_TCP=tcp://10.96.0.1:443
TERM=xterm
SHLVL=1
KUBERNETES_SERVICE_PORT=443
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
KUBERNETES_SERVICE_HOST=10.96.0.1
MYSQL_SHELL_VERSION=8.0.32-1.el8
_=/usr/bin/env
sh-4.4# mysql -uwpuser -pmageDU.c0m
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.32 MySQL Community Server - GPL

Copyright (c) 2000, 2023, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| performance_schema |
| wpdb               |
+--------------------+
3 rows in set (0.02 sec)

mysql> 
  1. 换成使用 Operator 编排运行 mysql,实例数为 1+;
root@k8s-master01:~# kubectl apply -f https://raw.githubusercontent.com/mysql/mysql-operator/trunk/deploy/deploy-crds.yaml
customresourcedefinition.apiextensions.k8s.io/innodbclusters.mysql.oracle.com created
customresourcedefinition.apiextensions.k8s.io/mysqlbackups.mysql.oracle.com created
customresourcedefinition.apiextensions.k8s.io/clusterkopfpeerings.zalando.org created
customresourcedefinition.apiextensions.k8s.io/kopfpeerings.zalando.org created
root@k8s-master01:~# kubectl apply -f https://raw.githubusercontent.com/mysql/mysql-operator/trunk/deploy/deploy-operator.yaml
clusterrole.rbac.authorization.k8s.io/mysql-operator created
clusterrole.rbac.authorization.k8s.io/mysql-sidecar created
clusterrolebinding.rbac.authorization.k8s.io/mysql-operator-rolebinding created
clusterkopfpeering.zalando.org/mysql-operator created
namespace/mysql-operator created
serviceaccount/mysql-operator-sa created
deployment.apps/mysql-operator created
root@k8s-master01:~# kubectl get deployment -n mysql-operator mysql-operator
NAME             READY   UP-TO-DATE   AVAILABLE   AGE
mysql-operator   0/1     1            0           35s

root@k8s-master01:~# kubectl get pods -n mysql-operator
NAME                             READY   STATUS    RESTARTS   AGE
mysql-operator-9897675fc-t5szv   1/1     Running   0          2m41s
root@k8s-master01:~# kubectl get pods -n mysql-operator -o wide
NAME                             READY   STATUS    RESTARTS   AGE     IP             NODE         NOMINATED NODE   READINESS GATES
mysql-operator-9897675fc-t5szv   1/1     Running   0          2m52s   10.244.3.129   k8s-node03   <none>           <none>
root@k8s-master01:~# 

sh-4.4$ env
HOSTNAME=mysql-operator-9897675fc-t5szv
KUBERNETES_PORT_443_TCP_PROTO=tcp
KUBERNETES_PORT_443_TCP_ADDR=10.96.0.1
KUBERNETES_PORT=tcp://10.96.0.1:443
PWD=/
HOME=/mysqlsh
KUBERNETES_SERVICE_PORT_HTTPS=443
KUBERNETES_PORT_443_TCP_PORT=443
KUBERNETES_PORT_443_TCP=tcp://10.96.0.1:443
MYSQLSH_USER_CONFIG_HOME=/mysqlsh
TERM=xterm
SHLVL=1
KUBERNETES_SERVICE_PORT=443
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
KUBERNETES_SERVICE_HOST=10.96.0.1
_=/usr/bin/env

  1. 将 mysql 以传统模型的主从复制的形式运行于 Kubernetes 外部,让运行在 Kubernetes 集群上的 wordpress 去访问外部的 MySQL 服务。
    #在node2,node3上安装主从mysql
node2:192.168.6.102
node3:192.168.6.103

#操作命令需要在每个节点执行,这里只展示一个节点
#下载yaml源配置包

root@k8s-node03:~# wget https://repo.mysql.com//mysql-apt-config_0.8.24-1_all.deb
--2023-03-02 21:13:14--  https://repo.mysql.com//mysql-apt-config_0.8.24-1_all.deb
Resolving repo.mysql.com (repo.mysql.com)... 23.45.53.26
Connecting to repo.mysql.com (repo.mysql.com)|23.45.53.26|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 18048 (18K) [application/x-debian-package]
Saving to: ‘mysql-apt-config_0.8.24-1_all.deb’

mysql-apt-config_0.8.24-1_all.deb          100%[=======================================================================================>]  17.62K  --.-KB/s    in 0s      

2023-03-02 21:13:27 (202 MB/s) - ‘mysql-apt-config_0.8.24-1_all.deb’ saved [18048/18048]

#安装yaml源配置包

root@k8s-node03:~# dpkg -i mysql-apt-config_0.8.24-1_all.deb
Selecting previously unselected package mysql-apt-config.
(Reading database ... 109162 files and directories currently installed.)
Preparing to unpack mysql-apt-config_0.8.24-1_all.deb ...
Unpacking mysql-apt-config (0.8.24-1) ...
Setting up mysql-apt-config (0.8.24-1) ...
Warning: apt-key should not be used in scripts (called from postinst maintainerscript of the package mysql-apt-config)
OK
root@k8s-node03:~# apt update
Hit:1 http://mirrors.aliyun.com/docker-ce/linux/ubuntu focal InRelease
Hit:2 https://mirrors.aliyun.com/ubuntu focal InRelease                                              
Hit:3 https://mirrors.aliyun.com/ubuntu focal-security InRelease                                     
Get:4 http://repo.mysql.com/apt/ubuntu focal InRelease [12.9 kB]            
Hit:5 https://mirrors.aliyun.com/ubuntu focal-updates InRelease             
Hit:6 https://mirrors.aliyun.com/ubuntu focal-backports InRelease
Hit:7 https://mirrors.aliyun.com/kubernetes/apt kubernetes-xenial InRelease  
Get:8 http://repo.mysql.com/apt/ubuntu focal/mysql-8.0 Sources [963 B]
Get:9 http://repo.mysql.com/apt/ubuntu focal/mysql-apt-config amd64 Packages [565 B]
Get:10 http://repo.mysql.com/apt/ubuntu focal/mysql-8.0 amd64 Packages [8,530 B]
Get:11 http://repo.mysql.com/apt/ubuntu focal/mysql-tools amd64 Packages [6,193 B]
Fetched 29.1 kB in 3s (11.6 kB/s)    
Reading package lists... Done
Building dependency tree       
Reading state information... Done
42 packages can be upgraded. Run 'apt list --upgradable' to see them.

#安装mysql server

root@k8s-node03:~# apt install mysql-server -y
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following additional packages will be installed:
  libmecab2 mecab-ipadic mecab-ipadic-utf8 mecab-utils mysql-client mysql-common mysql-community-client mysql-community-client-core mysql-community-client-plugins
  mysql-community-server mysql-community-server-core
The following NEW packages will be installed:
  libmecab2 mecab-ipadic mecab-ipadic-utf8 mecab-utils mysql-client mysql-common mysql-community-client mysql-community-client-core mysql-community-client-plugins
  mysql-community-server mysql-community-server-core mysql-server
0 upgraded, 12 newly installed, 0 to remove and 42 not upgraded.
Need to get 42.9 MB of archives.
After this operation, 359 MB of additional disk space will be used.
Get:1 https://mirrors.aliyun.com/ubuntu focal/main amd64 libmecab2 amd64 0.996-10build1 [233 kB]
Get:2 https://mirrors.aliyun.com/ubuntu focal/main amd64 mecab-utils amd64 0.996-10build1 [4,912 B]
Get:3 https://mirrors.aliyun.com/ubuntu focal/main amd64 mecab-ipadic all 2.7.0-20070801+main-2.1 [6,714 kB]
Get:4 http://repo.mysql.com/apt/ubuntu focal/mysql-8.0 amd64 mysql-common amd64 8.0.32-1ubuntu20.04 [69.3 kB]
Get:5 http://repo.mysql.com/apt/ubuntu focal/mysql-8.0 amd64 mysql-community-client-plugins amd64 8.0.32-1ubuntu20.04 [1,275 kB]
Get:6 http://repo.mysql.com/apt/ubuntu focal/mysql-8.0 amd64 mysql-community-client-core amd64 8.0.32-1ubuntu20.04 [1,906 kB]
Get:7 http://repo.mysql.com/apt/ubuntu focal/mysql-8.0 amd64 mysql-community-client amd64 8.0.32-1ubuntu20.04 [3,496 kB]
Get:8 https://mirrors.aliyun.com/ubuntu focal/main amd64 mecab-ipadic-utf8 all 2.7.0-20070801+main-2.1 [4,380 B]                                                          
Get:9 http://repo.mysql.com/apt/ubuntu focal/mysql-8.0 amd64 mysql-client amd64 8.0.32-1ubuntu20.04 [68.1 kB]                                                             
Get:10 http://repo.mysql.com/apt/ubuntu focal/mysql-8.0 amd64 mysql-community-server-core amd64 8.0.32-1ubuntu20.04 [29.0 MB]                                             
Get:11 http://repo.mysql.com/apt/ubuntu focal/mysql-8.0 amd64 mysql-community-server amd64 8.0.32-1ubuntu20.04 [79.1 kB]                                                  
Get:12 http://repo.mysql.com/apt/ubuntu focal/mysql-8.0 amd64 mysql-server amd64 8.0.32-1ubuntu20.04 [68.0 kB]                                                            
Fetched 42.9 MB in 20s (2,138 kB/s)                                                                                                                                       
Preconfiguring packages ...
Selecting previously unselected package mysql-common.
(Reading database ... 109167 files and directories currently installed.)
Preparing to unpack .../00-mysql-common_8.0.32-1ubuntu20.04_amd64.deb ...
Unpacking mysql-common (8.0.32-1ubuntu20.04) ...
Selecting previously unselected package mysql-community-client-plugins.
Preparing to unpack .../01-mysql-community-client-plugins_8.0.32-1ubuntu20.04_amd64.deb ...
Unpacking mysql-community-client-plugins (8.0.32-1ubuntu20.04) ...
Selecting previously unselected package mysql-community-client-core.
Preparing to unpack .../02-mysql-community-client-core_8.0.32-1ubuntu20.04_amd64.deb ...
Unpacking mysql-community-client-core (8.0.32-1ubuntu20.04) ...
Selecting previously unselected package mysql-community-client.
Preparing to unpack .../03-mysql-community-client_8.0.32-1ubuntu20.04_amd64.deb ...
Unpacking mysql-community-client (8.0.32-1ubuntu20.04) ...
Selecting previously unselected package mysql-client.
Preparing to unpack .../04-mysql-client_8.0.32-1ubuntu20.04_amd64.deb ...
Unpacking mysql-client (8.0.32-1ubuntu20.04) ...
Selecting previously unselected package libmecab2:amd64.
Preparing to unpack .../05-libmecab2_0.996-10build1_amd64.deb ...
Unpacking libmecab2:amd64 (0.996-10build1) ...
Selecting previously unselected package mysql-community-server-core.
Preparing to unpack .../06-mysql-community-server-core_8.0.32-1ubuntu20.04_amd64.deb ...
Unpacking mysql-community-server-core (8.0.32-1ubuntu20.04) ...
Selecting previously unselected package mysql-community-server.
Preparing to unpack .../07-mysql-community-server_8.0.32-1ubuntu20.04_amd64.deb ...
Unpacking mysql-community-server (8.0.32-1ubuntu20.04) ...
Selecting previously unselected package mecab-utils.
Preparing to unpack .../08-mecab-utils_0.996-10build1_amd64.deb ...
Unpacking mecab-utils (0.996-10build1) ...
Selecting previously unselected package mecab-ipadic.
Preparing to unpack .../09-mecab-ipadic_2.7.0-20070801+main-2.1_all.deb ...
Unpacking mecab-ipadic (2.7.0-20070801+main-2.1) ...
Selecting previously unselected package mecab-ipadic-utf8.
Preparing to unpack .../10-mecab-ipadic-utf8_2.7.0-20070801+main-2.1_all.deb ...
Unpacking mecab-ipadic-utf8 (2.7.0-20070801+main-2.1) ...
Selecting previously unselected package mysql-server.
Preparing to unpack .../11-mysql-server_8.0.32-1ubuntu20.04_amd64.deb ...
Unpacking mysql-server (8.0.32-1ubuntu20.04) ...
Setting up libmecab2:amd64 (0.996-10build1) ...
Setting up mysql-common (8.0.32-1ubuntu20.04) ...
update-alternatives: using /etc/mysql/my.cnf.fallback to provide /etc/mysql/my.cnf (my.cnf) in auto mode
Setting up mysql-community-server-core (8.0.32-1ubuntu20.04) ...
Setting up mecab-utils (0.996-10build1) ...
Setting up mysql-community-client-plugins (8.0.32-1ubuntu20.04) ...
Setting up mecab-ipadic (2.7.0-20070801+main-2.1) ...
Compiling IPA dictionary for Mecab.  This takes long time...
reading /usr/share/mecab/dic/ipadic/unk.def ... 40
emitting double-array: 100% |###########################################| 
/usr/share/mecab/dic/ipadic/model.def is not found. skipped.
reading /usr/share/mecab/dic/ipadic/Adnominal.csv ... 135
reading /usr/share/mecab/dic/ipadic/Postp.csv ... 146
reading /usr/share/mecab/dic/ipadic/Others.csv ... 2
reading /usr/share/mecab/dic/ipadic/Noun.proper.csv ... 27328
reading /usr/share/mecab/dic/ipadic/Noun.others.csv ... 151
reading /usr/share/mecab/dic/ipadic/Suffix.csv ... 1393
reading /usr/share/mecab/dic/ipadic/Noun.name.csv ... 34202
reading /usr/share/mecab/dic/ipadic/Noun.adverbal.csv ... 795
reading /usr/share/mecab/dic/ipadic/Symbol.csv ... 208
reading /usr/share/mecab/dic/ipadic/Postp-col.csv ... 91
reading /usr/share/mecab/dic/ipadic/Auxil.csv ... 199
reading /usr/share/mecab/dic/ipadic/Noun.demonst.csv ... 120
reading /usr/share/mecab/dic/ipadic/Adj.csv ... 27210
reading /usr/share/mecab/dic/ipadic/Noun.adjv.csv ... 3328
reading /usr/share/mecab/dic/ipadic/Prefix.csv ... 221
reading /usr/share/mecab/dic/ipadic/Conjunction.csv ... 171
reading /usr/share/mecab/dic/ipadic/Noun.place.csv ... 72999
reading /usr/share/mecab/dic/ipadic/Adverb.csv ... 3032
reading /usr/share/mecab/dic/ipadic/Noun.csv ... 60477
reading /usr/share/mecab/dic/ipadic/Verb.csv ... 130750
reading /usr/share/mecab/dic/ipadic/Filler.csv ... 19
reading /usr/share/mecab/dic/ipadic/Noun.verbal.csv ... 12146
reading /usr/share/mecab/dic/ipadic/Noun.number.csv ... 42
reading /usr/share/mecab/dic/ipadic/Interjection.csv ... 252
reading /usr/share/mecab/dic/ipadic/Noun.nai.csv ... 42
reading /usr/share/mecab/dic/ipadic/Noun.org.csv ... 16668
emitting double-array: 100% |###########################################| 
reading /usr/share/mecab/dic/ipadic/matrix.def ... 1316x1316
emitting matrix      : 100% |###########################################| 

done!
update-alternatives: using /var/lib/mecab/dic/ipadic to provide /var/lib/mecab/dic/debian (mecab-dictionary) in auto mode
Setting up mysql-community-client-core (8.0.32-1ubuntu20.04) ...
Setting up mecab-ipadic-utf8 (2.7.0-20070801+main-2.1) ...
Compiling IPA dictionary for Mecab.  This takes long time...
reading /usr/share/mecab/dic/ipadic/unk.def ... 40
emitting double-array: 100% |###########################################| 
/usr/share/mecab/dic/ipadic/model.def is not found. skipped.
reading /usr/share/mecab/dic/ipadic/Adnominal.csv ... 135
reading /usr/share/mecab/dic/ipadic/Postp.csv ... 146
reading /usr/share/mecab/dic/ipadic/Others.csv ... 2
reading /usr/share/mecab/dic/ipadic/Noun.proper.csv ... 27328
reading /usr/share/mecab/dic/ipadic/Noun.others.csv ... 151
reading /usr/share/mecab/dic/ipadic/Suffix.csv ... 1393
reading /usr/share/mecab/dic/ipadic/Noun.name.csv ... 34202
reading /usr/share/mecab/dic/ipadic/Noun.adverbal.csv ... 795
reading /usr/share/mecab/dic/ipadic/Symbol.csv ... 208
reading /usr/share/mecab/dic/ipadic/Postp-col.csv ... 91
reading /usr/share/mecab/dic/ipadic/Auxil.csv ... 199
reading /usr/share/mecab/dic/ipadic/Noun.demonst.csv ... 120
reading /usr/share/mecab/dic/ipadic/Adj.csv ... 27210
reading /usr/share/mecab/dic/ipadic/Noun.adjv.csv ... 3328
reading /usr/share/mecab/dic/ipadic/Prefix.csv ... 221
reading /usr/share/mecab/dic/ipadic/Conjunction.csv ... 171
reading /usr/share/mecab/dic/ipadic/Noun.place.csv ... 72999
reading /usr/share/mecab/dic/ipadic/Adverb.csv ... 3032
reading /usr/share/mecab/dic/ipadic/Noun.csv ... 60477
reading /usr/share/mecab/dic/ipadic/Verb.csv ... 130750
reading /usr/share/mecab/dic/ipadic/Filler.csv ... 19
reading /usr/share/mecab/dic/ipadic/Noun.verbal.csv ... 12146
reading /usr/share/mecab/dic/ipadic/Noun.number.csv ... 42
reading /usr/share/mecab/dic/ipadic/Interjection.csv ... 252
reading /usr/share/mecab/dic/ipadic/Noun.nai.csv ... 42
reading /usr/share/mecab/dic/ipadic/Noun.org.csv ... 16668
emitting double-array: 100% |###########################################| 
reading /usr/share/mecab/dic/ipadic/matrix.def ... 1316x1316
emitting matrix      : 100% |###########################################| 

done!
update-alternatives: using /var/lib/mecab/dic/ipadic-utf8 to provide /var/lib/mecab/dic/debian (mecab-dictionary) in auto mode
Setting up mysql-community-client (8.0.32-1ubuntu20.04) ...
Setting up mysql-client (8.0.32-1ubuntu20.04) ...
Setting up mysql-community-server (8.0.32-1ubuntu20.04) ...
update-alternatives: using /etc/mysql/mysql.cnf to provide /etc/mysql/my.cnf (my.cnf) in auto mode
Created symlink /etc/systemd/system/multi-user.target.wants/mysql.service → /lib/systemd/system/mysql.service.
Setting up mysql-server (8.0.32-1ubuntu20.04) ...
Processing triggers for man-db (2.9.1-1) ...
Processing triggers for libc-bin (2.31-0ubuntu9.9) ...

#配置mysql主从集群
#配置主数据库服务器

root@mysql-node2:~# vi /etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld]
pid-file	= /var/run/mysqld/mysqld.pid
socket		= /var/run/mysqld/mysqld.sock
datadir		= /var/lib/mysql
log-error	= /var/log/mysql/error.log
server-id = 1
log-bin		= /var/log/mysql/mysql-bin.log
tmpdir 		= /tmp
binlog_format 	= ROW
max_binlog_size = 800M
sync_binlog 	= 1
expire-logs-days = 5
slow_query_log = 1
slow_query_log_file = /var/lib/mysql/mysqld-slow.log

#重启主节点mysql

root@mysql-node2:~# systemctl restart mysql

#查看mysql状态

root@mysql-node2:~# systemctl status mysql

#主节点创建同步账号

root@mysql-node2:~# mysql -uroot -p123456
mysql> CREATE USER rsync@'%' IDENTIFIED BY 'rsync@2023';
Query OK, 0 rows affected (0.01 sec)

mysql> GRANT REPLICATION SLAVE on *.* to rsync@'%';
Query OK, 0 rows affected (0.01 sec)

mysql> SHOW GRANTS FOR rsync@'%';
+-----------------------------------------------+
| Grants for rsync@%                            |
+-----------------------------------------------+
| GRANT REPLICATION SLAVE ON *.* TO `rsync`@`%` |
+-----------------------------------------------+
1 row in set (0.00 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.01 sec)

mysql> exit
Bye

#配置从数据库节点

root@mysql-node3:~# vi /etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld]
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
datadir         = /var/lib/mysql
log-error       = /var/log/mysql/error.log
log_bin         = /var/log/mysql/mysql-bin.log
server-id       = 2
read_only       = 1
tmpdir          = /tmp
binlog_format   = ROW
max_binlog_size = 800M
sync_binlog     = 1
expire-logs-days = 5
slow_query_log  = 2

#重启从节点mysql

root@mysql-node3:~# systemctl restart mysql

#查看mysql状态

root@mysql-node3:~# systemctl status mysql

#查看主服务器状态,binlog和position,后面创建主从需要使用

root@mysql-node2:~# mysql -uroot -pygc@2023
mysql> SHOW MASTER STATUS\G
*************************** 1. row ***************************
             File: binlog.000005
         Position: 712
     Binlog_Do_DB: 
 Binlog_Ignore_DB: 
Executed_Gtid_Set: 
1 row in set (0.00 sec)

#从服务器连接主服务器

root@mysql-node3:~# mysql -uroot -p123456

#停止从属线程

mysql> STOP SLAVE;
Query OK, 0 rows affected, 1 warning (0.00 sec)

#设置从服务器以复制主服务器

mysql> CHANGE MASTER TO MASTER_HOST='192.168.6.102', MASTER_USER='rsync', MASTER_PASSWORD='rsync@2023', MASTER_LOG_FILE='binlog.000005', MASTER_LOG_POS=712,get_master_publiic_key=1;
Query OK, 0 rows affected, 9 warnings (0.03 sec)

#现在激活从服务器

mysql> start slave;
Query OK, 0 rows affected, 1 warning (0.02 sec)

#查询验证从服务器状态,Slave_IO_Running 和Slave_SQL_Running 两个进程都是yes状态

mysql> show slave status\G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for source to send event
                  Master_Host: 192.168.6.102
                  Master_User: rsync
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: binlog.000005
          Read_Master_Log_Pos: 712
               Relay_Log_File: k8s-node03-relay-bin.000002
                Relay_Log_Pos: 323
        Relay_Master_Log_File: binlog.000005
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: 
          Replicate_Ignore_DB: 
           Replicate_Do_Table: 
       Replicate_Ignore_Table: 
      Replicate_Wild_Do_Table: 
  Replicate_Wild_Ignore_Table: 
                   Last_Errno: 0
                   Last_Error: 
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 712
              Relay_Log_Space: 538
              Until_Condition: None
               Until_Log_File: 
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File: 
           Master_SSL_CA_Path: 
              Master_SSL_Cert: 
            Master_SSL_Cipher: 
               Master_SSL_Key: 
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error: 
               Last_SQL_Errno: 0
               Last_SQL_Error: 
  Replicate_Ignore_Server_Ids: 
             Master_Server_Id: 1
                  Master_UUID: b92450e1-b6ac-11ed-b1e9-000c2937c613
             Master_Info_File: mysql.slave_master_info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State: Replica has read all relay log; waiting for more updates
           Master_Retry_Count: 86400
                  Master_Bind: 
      Last_IO_Error_Timestamp: 
     Last_SQL_Error_Timestamp: 
               Master_SSL_Crl: 
           Master_SSL_Crlpath: 
           Retrieved_Gtid_Set: 
            Executed_Gtid_Set: 
                Auto_Position: 0
         Replicate_Rewrite_DB: 
                 Channel_Name: 
           Master_TLS_Version: 
       Master_public_key_path: 
        Get_master_public_key: 1
            Network_Namespace: 
1 row in set, 1 warning (0.00 sec)

ERROR: 
No query specified

#主服务器上创建wordpress数据库

mysql> create database wordpress;
Query OK, 1 row affected (0.01 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| wordpress          |
+--------------------+
5 rows in set (0.01 sec)

#查看从服务器数据库

root@mysql-node3:~# mysql -uroot -p123456
mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| wordpress          |
+--------------------+
5 rows in set (0.00 sec)

#创建wordpress 数据库和账号

root@mysql-node2:~# mysql -uroot -p123456
mysql> create user 'wordpress'@'%' identified with mysql_native_password BY 'Wordpress@2023';
Query OK, 0 rows affected (0.02 sec)

mysql> grant all privileges on wordpress.* to 'wordpress'@'%' with grant option;
Query OK, 0 rows affected (0.00 sec)

#修改mysql secret配置文件,把创建的dbname,user等以base64格式编码写入

root@k8s-master01:~/learning-k8s/wordpress/mysql# cat 01-secret-mysql.yaml 
apiVersion: v1
kind: Secret
metadata:
  creationTimestamp: null
  name: mysql-user-pass
data:
  database.name: d29yZHByZXNz
  root.password: 4oCcMTIzNDU24oCd
  user.name: d29yZHByZXNz
  user.password: V29yZHByZXNzQDIwMjM=

#编辑mysql service 资源编排文件

root@k8s-master1:~/learning-k8s/wordpress/mysql# vi 03-service-mysql.yaml 
apiVersion: v1
kind: Endpoints
metadata:
  name: mysql
subsets:
- addresses:
  - ip: 192.168.6.102
  ports:
  - name: mysql
    port: 3306
    protocol: TCP
---
apiVersion: v1
kind: Service
metadata:
  labels:
    app: mysql
  name: mysql
spec:
  ports:
  - name: mysql
    port: 3306
    protocol: TCP
    targetPort: 3306
  type: ClusterIP

#应用yaml文件

root@k8s-master1:~/learning-k8s/wordpress/mysql# kubectl apply -f 03-service-mysql.yaml -n ns-job

#查看创建的资源

root@k8s-master01:~/learning-k8s/wordpress/mysql# kubectl get svc,ep -n ns-job
NAME            TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)    AGE
service/mysql   ClusterIP   10.107.119.111   <none>        3306/TCP   33s

NAME              ENDPOINTS            AGE
endpoints/mysql   192.168.6.102:3306   33s

#修改nginx service yaml文件,注意使用externalIPs:

root@k8s-master1:~/learning-k8s/wordpress# vi nginx/02-service-nginx.yaml
apiVersion: v1
kind: Service
metadata:
  labels:
    app: nginx
  name: nginx
spec:
  ports:
  - name: http-80
    port: 80
    protocol: TCP
    targetPort: 80
  selector:
    app: nginx
  type: NodePort
  externalIPs:
  - 192.168.6.100

#部署nginx

root@k8s-master01:~/learning-k8s/wordpress/wordpress# kubectl apply -f . -n ns-job
service/wordpress created
persistentvolumeclaim/wordpress-app-data created
deployment.apps/wordpress created
root@k8s-master01:~/learning-k8s/wordpress/wordpress# kubectl get svc,pvc,deployment -n ns-job
NAME                TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)    AGE
service/mysql       ClusterIP   10.107.119.111   <none>        3306/TCP   2m17s
service/wordpress   ClusterIP   10.111.224.30    <none>        9000/TCP   36s

NAME                                       STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
persistentvolumeclaim/wordpress-app-data   Bound    pvc-0bd5d474-6ad2-4629-8a62-9b85044f2f79   10Gi       RWX            nfs-csi        36s

NAME                        READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/wordpress   1/3     3            1           36s
root@k8s-master01:~/learning-k8s/wordpress/wordpress# kubectl get svc,pvc,pods -n ns-job
NAME                TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)    AGE
service/mysql       ClusterIP   10.107.119.111   <none>        3306/TCP   2m34s
service/wordpress   ClusterIP   10.111.224.30    <none>        9000/TCP   53s

NAME                                       STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
persistentvolumeclaim/wordpress-app-data   Bound    pvc-0bd5d474-6ad2-4629-8a62-9b85044f2f79   10Gi       RWX            nfs-csi        53s

NAME                             READY   STATUS              RESTARTS   AGE
pod/wordpress-664cfb496b-rnv48   0/1     ContainerCreating   0          53s
pod/wordpress-664cfb496b-srlm7   0/1     ContainerCreating   0          53s
pod/wordpress-664cfb496b-xrhtd   1/1     Running             0          53s
root@k8s-master01:~/learning-k8s/wordpress/wordpress# 

#验证和访问wordpress,正常
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二. wordpress 实例扩展至多个,测试应用是否工作正常。

#wordpress deployment的yaml文件

root@k8s-master01:~/learning-k8s/wordpress/wordpress# cat 03-deployment-wordpress.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: wordpress
  name: wordpress
spec:
  replicas: 3
  selector:
    matchLabels:
      app: wordpress
  template:
    metadata:
      labels:
        app: wordpress
    spec:
      containers:
      - image: wordpress:5.8-fpm
        name: wordpress
        env:
        - name: WORDPRESS_DB_HOST
          value: mysql
        - name: WORDPRESS_DB_USER
          valueFrom:
            secretKeyRef:
              name: mysql-user-pass
              key: user.name
        - name: WORDPRESS_DB_PASSWORD
          valueFrom:
            secretKeyRef:
              name: mysql-user-pass
              key: user.password
        - name: WORDPRESS_DB_NAME
          valueFrom:
            secretKeyRef:
              name: mysql-user-pass
              key: database.name
        volumeMounts:
        - name: wordpress-app-data
          mountPath: /var/www/html/
      volumes:
      - name: wordpress-app-data
        persistentVolumeClaim:
          claimName: wordpress-app-data

#创建wordpress deployment资源

root@k8s-master01:~/learning-k8s/wordpress/wordpress# kubectl apply -f . -n blog
service/wordpress created
persistentvolumeclaim/wordpress-app-data created
deployment.apps/wordpress created

#查看wordpress pods信息

root@k8s-master01:~/learning-k8s/wordpress/wordpress# kubectl get pods -n blog
NAME                         READY   STATUS    RESTARTS   AGE
mysql-97b69dcc8-trb2q        1/1     Running   0          2m51s
nginx-5b9c7b4c8f-xdg9s       1/1     Running   0          119s
wordpress-664cfb496b-ghbkj   1/1     Running   0          97s
wordpress-664cfb496b-ksx7x   1/1     Running   0          97s
wordpress-664cfb496b-w4pm7   1/1     Running   0          97s

#登录svc 地址,验证wordpress服务,正常。
在这里插入图片描述
在这里插入图片描述

三. Nginx 实例扩展至多个,测试应用是否工作正常;额外为 nginx 添加 https 虚拟主机。

#mysql cm,pvc,svc yaml同上面保持不变

root@k8s-master01:~/learning-k8s/wordpress/mysql# cat 01-secret-mysql.yaml 
apiVersion: v1
kind: Secret
metadata:
  creationTimestamp: null
  name: mysql-user-pass
data:
  database.name: d29yZHByZXNz
  root.password: 4oCcMTIzNDU24oCd
  user.name: d29yZHByZXNz
  user.password: V29yZHByZXNzQDIwMjM=
root@k8s-master01:~/learning-k8s/wordpress/mysql# cat 02-pvc-mysql-data.yaml 
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mysql-data
spec:
  volumeMode: Filesystem
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi
  storageClassName: nfs-csi
root@k8s-master01:~/learning-k8s/wordpress/mysql# cat 03-service-mysql.yaml 
apiVersion: v1
kind: Endpoints
metadata:
  name: mysql
subsets:
- addresses:
  - ip: 192.168.6.102
  ports:
  - name: mysql
    port: 3306
    protocol: TCP

---
apiVersion: v1
kind: Service
metadata:
  labels:
    app: mysql
  name: mysql
spec:
  ports:
  - name: mysql
    port: 3306
    protocol: TCP
    targetPort: 3306
  type: ClusterIP

#kubectl apply应用上面三个资源

root@k8s-master01:~/learning-k8s/wordpress/mysql# kubectl apply -f 01-service-mysql.yaml -n test 
root@k8s-master01:~/learning-k8s/wordpress/mysql# kubectl apply -f 02-pvc-mysql-data.yaml -n test
root@k8s-master01:~/learning-k8s/wordpress/mysql# kubectl apply -f 03-service-mysql.yaml -n test

#生成IP 自签名证书

root@k8s-master1:~# mkdir ssl
root@k8s-master1:~# cd ssl/
root@k8s-master1:~/ssl# openssl req \
-newkey rsa:2048 \
-x509 \
-nodes \
-keyout file.key \
-new \
-out file.crt \
-subj /CN=Hostname \
-reqexts SAN \
-extensions SAN \
-config <(cat /etc/ssl/openssl.cnf \
    <(printf '[SAN]\nsubjectAltName=DNS:hostname,IP:192.168.6.100')) \
-sha256 \
-days 3650

#创建secret

root@k8s-master1:~/ssl# k create secret tls wordpress-ssl --key file.key --cert file.crt
secret/wordpress-ssl created

#修改nginx configmap资源编排文件

root@k8s-master1:~/learning-k8s/wordpress# cd nginx/
root@k8s-master1:~/learning-k8s/wordpress/nginx# vi 01-configmap-nginx-conf.yaml
apiVersion: v1
data:
  nginx.conf: |
    server {
            listen 80;
            listen 443 ssl;

            server_name 192.168.6.100;
            ssl_certificate /etc/ssl/tls.crt;
            ssl_certificate_key /etc/ssl/tls.key;

            index index.php index.html index.htm;

            root /var/www/html;

            location ~ /.well-known/acme-challenge {
                    allow all;
                    root /var/www/html;
            }

            location / {
                    try_files $uri $uri/ /index.php$is_args$args;
            }

            location ~ \.php$ {
                    try_files $uri =404;
                    fastcgi_split_path_info ^(.+\.php)(/.+)$;
                    fastcgi_pass wordpress:9000;
                    fastcgi_index index.php;
                    include fastcgi_params;
                    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                    fastcgi_param PATH_INFO $fastcgi_path_info;
            }

            location ~ /\.ht {
                    deny all;
            }

            location = /favicon.ico {
                    log_not_found off; access_log off;
            }
            location = /robots.txt {
                    log_not_found off; access_log off; allow all;
            }
            location ~* \.(css|gif|ico|jpeg|jpg|js|png)$ {
                    expires max;
                    log_not_found off;
            }
    }
kind: ConfigMap
metadata:
  creationTimestamp: null
  name: nginx-conf

#修改nginx service资源编排文件

root@k8s-master1:~/learning-k8s/wordpress/nginx# vi 02-service-nginx.yaml
apiVersion: v1
kind: Service
metadata:
  labels:
    app: nginx
  name: nginx
spec:
  ports:
  - name: http-80
    port: 80
    protocol: TCP
    targetPort: 80
  - name: https-443
    port: 443
    protocol: TCP
    targetPort: 443
  selector:
    app: nginx
  type: NodePort
  externalIPs:
  - 192.168.6.100

#修改nginx deployment资源编排文件

root@k8s-master1:~/learning-k8s/wordpress/nginx# vi 03-deployment-nginx.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: nginx
  name: nginx
spec:
  replicas: 5
  selector:
    matchLabels:
      app: nginx
  strategy:
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 0
  template:
    metadata:
      labels:
        app: nginx
    spec:
      volumes:
      - name: ngxconf
        configMap:
          name: nginx-conf
      - name: wordpress-app-data
        persistentVolumeClaim:
          claimName: wordpress-app-data
      - name: wordpress-ssl
        secret:
          secretName: wordpress-ssl
      containers:
      - image: nginx:1.20-alpine
        name: nginx
        volumeMounts:
        - name: ngxconf
          mountPath: /etc/nginx/conf.d/
        - name: wordpress-app-data
          mountPath: /var/www/html/
        - name: wordpress-ssl
          mountPath: /etc/ssl/
          readOnly: true

#应用nginx 资源编排文件

root@k8s-master1:~/learning-k8s/wordpress# kubectl apply -f nginx/ -n test
configmap/nginx-conf configured
service/nginx configured
deployment.apps/nginx configured

#wordpress svc,pvc,deployment资源yaml文件

root@k8s-master01:~/learning-k8s/wordpress/wordpress# cat 01-service-wordpress.yaml 
apiVersion: v1
kind: Service
metadata:
  labels:
    app: wordpress
  name: wordpress
spec:
  ports:
  - name: fpm 
    port: 9000
    protocol: TCP
    targetPort: 9000
  selector:
    app: wordpress
root@k8s-master01:~/learning-k8s/wordpress/wordpress# cat 02-pvc-wordpress-app-data.yaml 
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: wordpress-app-data
spec:
  volumeMode: Filesystem
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 10Gi
  storageClassName: nfs-csi
root@k8s-master01:~/learning-k8s/wordpress/wordpress# cat 03-deployment-wordpress.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: wordpress
  name: wordpress
spec:
  replicas: 3
  selector:
    matchLabels:
      app: wordpress
  template:
    metadata:
      labels:
        app: wordpress
    spec:
      containers:
      - image: wordpress:5.8-fpm
        name: wordpress
        env:
        - name: WORDPRESS_DB_HOST
          value: mysql
        - name: WORDPRESS_DB_USER
          valueFrom:
            secretKeyRef:
              name: mysql-user-pass
              key: user.name
        - name: WORDPRESS_DB_PASSWORD
          valueFrom:
            secretKeyRef:
              name: mysql-user-pass
              key: user.password
        - name: WORDPRESS_DB_NAME
          valueFrom:
            secretKeyRef:
              name: mysql-user-pass
              key: database.name
        volumeMounts:
        - name: wordpress-app-data
          mountPath: /var/www/html/
      volumes:
      - name: wordpress-app-data
        persistentVolumeClaim:
          claimName: wordpress-app-data

#应用wordpress svc,pvc,deployment yaml文件,生成资源

root@k8s-master01:~/learning-k8s/wordpress/wordpress# kubectl apply -f 01-service-wordpress.yaml -n test
root@k8s-master01:~/learning-k8s/wordpress/wordpress# kubectl apply -f 02-pvc-wordpress-app-data.yaml -n test
root@k8s-master01:~/learning-k8s/wordpress/wordpress# kubectl apply -f 03-deployment-wordpress.yaml -n test

#查看资源状态

root@k8s-master01:~/learning-k8s/wordpress/mysql# kubectl get pods,svc,pvc,cm,secret -n test
NAME                             READY   STATUS                   RESTARTS   AGE
pod/mysql-sts-0                  0/1     ContainerCreating        0          3h55m
pod/nginx-5fb8fbcdf5-h9tgw       1/1     Running                  0          50m
pod/nginx-5fb8fbcdf5-lcz6q       1/1     Running                  0          51m
pod/nginx-5fb8fbcdf5-nfvgk       1/1     Running                  0          45m
pod/nginx-5fb8fbcdf5-qbkm8       1/1     Running                  0          51m
pod/nginx-5fb8fbcdf5-rqb4k       1/1     Running                  0          49m
pod/nginx-5fb8fbcdf5-vtnsc       0/1     ContainerStatusUnknown   1          51m
pod/wordpress-664cfb496b-675zs   1/1     Running                  0          64m
pod/wordpress-664cfb496b-bjll5   1/1     Running                  0          66m
pod/wordpress-664cfb496b-xxjdj   1/1     Running                  0          66m

NAME                TYPE        CLUSTER-IP      EXTERNAL-IP     PORT(S)        AGE
service/mysql       ClusterIP   10.111.9.100    <none>          3306/TCP       68m
service/mysql-sts   ClusterIP   None            <none>          3306/TCP       7d22h
service/nginx       NodePort    10.105.27.151   192.168.6.100   80:32666/TCP   3d
service/wordpress   ClusterIP   10.108.39.245   <none>          9000/TCP       120m

NAME                                       STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
persistentvolumeclaim/mysql-data           Bound    pvc-0291573d-ea9e-4775-b462-453519a8182d   10Gi       RWO            nfs-csi        68m
persistentvolumeclaim/mysql-data-sts       Bound    pvc-e33b1096-8d90-498f-9e40-c680be27f471   3Gi        RWO            nfs-csi        7d23h
persistentvolumeclaim/wordpress-app-data   Bound    pvc-f1b1f0f7-5183-463b-b536-0b900470b78b   10Gi       RWX            nfs-csi        120m

NAME                         DATA   AGE
configmap/kube-root-ca.crt   1      7d23h
configmap/nginx-conf         1      73m

NAME                     TYPE                DATA   AGE
secret/mysql-user-pass   Opaque              4      7d23h
secret/wordpress-ssl     kubernetes.io/tls   2      79m

#访问wordpress服务,验证服务
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一、前置条件 1、已经有K8S环境,可参考K8S安装手册; 2、需要安装Helm,可以参考Helm安装手册。 二、创建MySQL主从部署 1、创建mysql-operator 通过mysql-operator可以方便的管理MySQL集群,它的安装方式可以参考mysql-operator安装手册。 2、创建MySQL主从部署 在K8S中搭建MySQL主从,一般使用MySQL官方提供的镜像,可以使用以下命令创建MySQL主从部署。 ``` helm install mysql-replication --set primary.mysqlRootPassword=root,secondary.mysqlRootPassword=root custom-mysql ``` 执行上述命令后,会在K8S中创建mysql-replication的部署实例。 三、验证MySQL主从 1、查看MySQL主从状态 可以使用以下命令查看MySQL主从状态。 ``` kubectl exec -it mysql-replication-0 -- bash -c "mysql -uroot -p'root' -e 'SHOW MASTER STATUS\G'" kubectl exec -it mysql-replication-1 -- bash -c "mysql -uroot -p'root' -e 'SHOW SLAVE STATUS\G'" ``` 2、测试主从复制 可以使用以下命令在MySQL主节点上创建一个测试表。 ``` kubectl exec -it mysql-replication-0 -- bash -c "mysql -uroot -p'root' -e 'CREATE DATABASE test;USE test;CREATE TABLE t1 (id int primary key,name varchar(20));INSERT INTO t1 VALUES (1,\"test\");'" ``` 然后在MySQL从节点上查询该表。 ``` kubectl exec -it mysql-replication-1 -- bash -c "mysql -uroot -p'root' -e 'SELECT * FROM test.t1;'" ``` 如果查询结果和主节点上的结果一致,则说明主从复制已经成功。 四、总结 通过上述步骤,我们可以在K8S中搭建MySQL主从部署,并且验证了主从复制的功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值