kubernetes
  • Introduction
  • 安装
    • 组件端口
    • 二进制安装
    • Kubeadm
      • 安装单Master集群
      • 安装高可用集群(手动分发证书)
      • 安装高可用集群(自动上传证书)
      • 安装ETCD集群
      • 安装高可用集群(外部ETCD)
    • 启动参数解析
      • ETCD相关参数
  • 负载均衡
    • Service
    • Ingress
    • 安装MetalLB
    • Nginx-ingress-controller
      • 转发TCP与UDP服务
      • 启动参数
      • 自定义Nginx模板
  • 存储
    • Volume
    • PV与PVC
    • StorageClass
    • Local-PV
      • Static-Provisioner
    • 实践
      • Ceph-RBD
      • NFS
  • 有状态服务
    • Mysql实践
    • Operator
      • Etcd
      • Zookeeper
      • Mysql
  • 认证与授权
    • 认证
      • 实践
    • 授权
  • Helm
    • 安装
    • Chart
      • 依赖
    • Helm命令
    • Repository
  • 日志
  • 监控
    • Prometheus体系
      • Prometheus
        • 内置函数
        • 配置
          • 规则文件
        • PromQL
      • Exporter
        • Metrics
      • Grafana
        • 配置
      • AlertManager
        • 配置
    • 容器监控
      • Cadvisor的指标
      • k8s中部署Prom与Cadvisor
  • Istio
  • 资源预留
    • imagefs与nodefs
    • 总结
  • 集群联邦
    • 联邦DNS原理
    • 联邦DNS安装
    • 安装federation-v1
  • Other
    • ImagePullSecret
    • QOS
    • Apiserver的代理
    • 资源配额
Powered by GitBook
On this page
  • 创建CRD
  • 创建命名空间
  • RBAC
  • 安装Operator
  • 创建MysqlCluster
  • 连接Mysql
  • Reference

Was this helpful?

  1. 有状态服务
  2. Operator

Mysql

Mysql-Operator目前还处于alpha阶段,当前最新版本为0.3.0。本文将介绍0.3.0版本的安装。

Github上介绍的安装方法为Helm,不过为了简单起见,本文把Chart里面的Yaml文件抽了出来,直接使用Kubernetes的命令进行安装。

环境信息如下:

  • kubernetes: v1.14.0

  • docker-ce: 18.06

创建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

PreviousZookeeperNext认证与授权

Last updated 5 years ago

Was this helpful?