Mysql-Operator
目前还处于alpha
阶段,当前最新版本为0.3.0
。本文将介绍0.3.0
版本的安装。
Github上介绍的安装方法为Helm
,不过为了简单起见,本文把Chart
里面的Yaml文件抽了出来,直接使用Kubernetes的命令进行安装。
环境信息如下:
创建CRD
$ kubectl apply crd.yaml
crd.yaml
文件如下
创建命名空间
$ kubectl create namespace mysql-operator
RBAC
$ kubectl apply -f rbac.yaml
rbac.yaml
文件的内容如下:
安装Operator
首先,使用以下的yaml文件安装mysql-operator
创建MysqlCluster
接下来我们在default
命名空间中创建一个Mysql
集群。首先要在default
命名空间中创建如下的ServiceAccount
与RoleBinding
然后,我们就可以创建一个一主两从的Mysql集群了(注意这里使用了rbd分布式存储,所以k8s集群要对接好ceph-rbd)
此时,在集群中我们会看到一个Statefulset
与Headless Service
以及PersistentVolumeClaim
$ kubectl get statefulset
NAME READY AGE
mysql-test-cluster 3/3 177m
$ kubectl get pod
NAME READY STATUS RESTARTS AGE
mysql-test-cluster-0 2/2 Running 0 178m
mysql-test-cluster-1 2/2 Running 0 177m
mysql-test-cluster-2 2/2 Running 0 154m
$ kubectl get service
NAME TYPE CLUSTER-IP EXTERNAL-IP
mysql-test-cluster ClusterIP None <none> 3306/TCP 172m
$ kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
data-mysql-test-cluster-0 Bound pvc-a2414ffc-8cdc-11e9-9eb0-000c29a3131e 1Gi RWO rbd 8m25s
data-mysql-test-cluster-1 Bound pvc-c9c89485-8cdc-11e9-9eb0-000c29a3131e 1Gi RWO rbd 7m19s
data-mysql-test-cluster-2 Bound pvc-f9d27bac-8cdc-11e9-9eb0-000c29a3131e 1Gi RWO rbd 5m58s
连接Mysql
首先获取root密码
$ kubectl get secret mysql-test-cluster-root-password -o jsonpath="{.data.password}" | base64 --decode
VaVfYsV76v19Zh68
然后创建一个Pod
进入到Pod里面,连接mysql集群的主节点
$ kubectl exec -it mysql-client bash
root@mysql-client:/# mysql -h mysql-test-cluster-0.mysql-test-cluster -uroot -pVaVfYsV76v19Zh68
然后创建一个database
mysql> create database peng;
Query OK, 1 row affected (0.06 sec)
mysql> show database;
+-------------------------------+
| Database |
+-------------------------------+
| information_schema |
| mysql |
| mysql_innodb_cluster_metadata |
| peng |
| performance_schema |
| sys |
+-------------------------------+
6 rows in set (0.01 sec)
接下来,我们从mysql-client
连接mysql集群的一个从节点mysql-test-cluster-1
$ kubectl exec -it mysql-client bash
root@mysql-client:/# mysql -h mysql-test-cluster-1.mysql-test-cluster -uroot -pVaVfYsV76v19Zh68
然后查看里面的database,发现有了peng
这个database(即已经同步了主节点的数据)
mysql > show databases;
+-------------------------------+
| Database |
+-------------------------------+
| information_schema |
| mysql |
| mysql_innodb_cluster_metadata |
| peng |
| performance_schema |
| sys |
+-------------------------------+
6 rows in set (0.01 sec)
接下来我们尝试在该从节点上创建一个database试试,发现报如下的错
mysql> create database test;
ERROR 1290 (HY000): The MySQL server is running with the --super-read-only option so it cannot execute this statement
Reference
https://github.com/oracle/mysql-operator
https://github.com/oracle/mysql-operator/blob/master/docs/tutorial.md
https://github.com/oracle/mysql-operator/blob/master/docs/user/clusters.md#clusters