mysql-operator chart 说明
安装 mysql-operator 的操作命令在官方仓库和官网都有说明,具体安装命令如下:
| |
在安装的chart包中,values.yaml文件有些内容可以自定义配置。
- 如果想要在一个k8s集群里面启动多个mysql-operator,不想让不用operator互相干扰,就可以指定watchNamespace参数
- 如果k8s集群使用的storageClass不支持动态迁移,那么operator的replicaCount就得设置为3,否则节点挂掉后无法拉起新的pod
- 因为mysql高可用是基于orchestrator实现的,orchestrator又需要一个元数据库,元数据库的账号密码可以通过 orchestrator.topologyUser 和 orchestrator.topologyPassword 指定。topologyUser默认值是 orchestrator,如果密码不指定会随机生成
- (其他参数以后用到再说明)… …
在本地部署 mysql-operator
- 添加 repo
| |
- 安装 mysql-operator
安装之前先创建一个namespace,然后将mysql-operator安装到这个ns中
| |
执行成功后,可以用kubectl工具查询pod状态,直到Running
| |
至此 mysql-operator 就算安装完成了。
mysql-operator 依赖资源解读
上述的安装流程步骤很简单,但是运行起来的mysql-operator对我们来说就是一个黑盒,下面通过执行 helm template 对其被安装的内容进行梳理。
CRD 资源
CRD 全程叫做 CustomResourceDefinition,详细信息可以从官网获取,这里不进行解释。
| |
从上面可以看到,安装mysql-operator的时候会创建4个CRD资源。从名称可以看出是分别是关于backup、cluster、database、user 相关的,也是本系列在后续篇章中要重点讲解的内容。
其他资源
查看 mysql-operator 依赖的其他资源
| |
从上可以看出,计算资源由StatefulSet管理,有2个Service资源,1个ConfigMap,1个Secret。其余3个是跟权限管理相关的配置。
接下来详细聊聊每个资源的作用。
StatefulSet
helm install 安装时的内容如下:
| |
从描述中可以看到,一个pod里面会有两个container,分别启动 orchestrator 和 operator。
operator 容器
- 使用名字为 mysql-operator 的 serviceAccount 来做事件处理
- 声明 8080 的 prometheus 端口
- 在 livenessProbe 和 readinessProbe 里面出现了 8081 端口,但没有声明,所以只能 locahost 使用。
- 需要从 mysql-operator-orc secret 获取两个值当做自己的环境变量 ORC_TOPOLOGY_USER 和 ORC_TOPOLOGY_PASSWORD;
- 同时还有一些启动参数
| |
orchestrator 容器
- 声明 3000 的 http 服务端口
- 声明 10008 的 raft 消息同步端口
- 也需要从 mysql-operator-orc secret 获取值当做自己的环境变量
- 声明一个 volume 并挂载到 /var/lib/orchestrator(这里是为了存储 orchestrator 管理的元数据)
- 从 mysql-operator-orc configmap 获取配置并挂载到 /usr/local/share/orchestrator/templates(orchestrator启动的配置文件)
ConfigMap
helm install 安装时的内容如下:
| |
在 StatefulSet 部分已经解释
- orchestrator.conf.json 是 orchestrator 启动需要使用的配置文件。
- orc-topology.cnf 是 orchestrator 访问数据库的账号密码。
配置信息如下(相关描述可以从官网查阅):
| |
Secret
helm install 安装时的内容如下:
| |
从 key 可以看出这就是 orchestrator 需要的元数据账号密码信息,使用base64解析出原文
| |
Service
helm install 安装时的内容如下:
| |
以上有2个service,虽然 type 都是 ClusterIP,但是 mysql-operator-orc 还有个 clusterIP: None,这个配置表示该 service 是个 Headless Service,不需要额外的 ip。
- mysql-operator-orc 有两个端口
- 80:targetPort 是 3000,orchestrator 的可视化页面和api服务接口
- 10008:targetPort 是 10008,这个端口是 orchestrator 多副本之前进行 raft 消息同步使用
- mysql-operator 也有两个端口
- 80:targetPort 是 http,查询发现还是 orchestrator 的 3000 端口
- 9125:targetPort 是 prometheus,prometheus 在 StatefulSet中被定义到了 operator 容器的 8080 端口,通过
curl http://127.0.0.1:8080/metrics可以查看到 operator 的指标数据
ServiceAccount、ClusterRole、ClusterRoleBinding
helm install 安装时的内容如下:
| |
在这里要引入k8s一个重要的概念 RBAC(Role Base Access Control),是一种权限控制机制,用于实现账户和权限的组合管理
- 通过 ClusterRole 来声明都能操作那些api;
- 通过 ServiceAccount 创建一个账户;
- 最后通过 ClusterRoleBinding 将两者绑定。
补充
另外每次创建一个 sa 的时候都会生成一个对应的 token secret:
| |
使用时就是上面的 StatefulSet 用法,指定好 serviceAccountName
| |
在运行起来后,查看pod描述,每个container都会有多一个volumeMount,并且可以看到 volume 的声明
| |
登录容器内部可以看到配置已经挂载
| |
operator 启动时会从这个位置读取配置然后初始化k8s-client。
这里不得不夸赞下k8s
- sa的获取的保存不用我们操心
- sa的存储路径不用我们管理
- sa配置载入的逻辑不用我们自己写
总结
至此,通过安装mysql-operator和分析chart初步了解了资源组成,后续文章我们进入到mysql-operator内部,看看原理是如何实现的。