使用aliyun容器服务搭建mysql
前言
本文简单介绍用aliyun的Kubernetes容器服务搭建mysql集群。首先确保k8s集群已经创建,并且已经开通了相关服务如NAS、容器镜像仓库等服务。
第一步 创建数据卷
- k8s有个nodeSelector的功能,如果mysql由于单点故障漂移了node,原来的存储会自动重新挂载到新的node(这一步骤是在转移node之前做的). 这样避免了漂移node导致有状态服务不可用的情况。
- aliyun支持k8s三种存储:网盘, NAS, OSS. 基于性能考虑,我们选择NAS。首先需要在NAS控制台右上角选择
创建文件系统
, 注意所创建的文件系统所在区域必须和k8s集群所在的区域在同一地域:
然后在新生成的文件系统选择添加挂载点
,如图已经有两个挂载点,还不是很清楚为什么不能再添加新的挂载点了。添加的挂载点必须和k8s集群在同一个VPC! 记住挂载地址
后续创建k8s数据卷时用到。 - 然后在k8s控制台右上角选中
创建
, 填上新创建的挂载点域名,点击确定数据卷就创建了:
第二步 使用aliyun的镜像创建mysql
- 在容器服务控制台点击
使用镜像
,选择mysql部署应用, 第一步填应用名称和选择命名空间: - 然后设置应用配置,注意在这里的环境变量必须设置MYSQL_ROOT_PASSWORD或MYSQL_ALLOW_EMPTY_PASSWORD或MYSQL_RANDOM_ROOT_PASSWORD之一,否则会创建失败。这个页面暂时没有找到设置k8s secret的地方,所以可能如编排模块那样使用secret。其它的资源和网络按需设置, 注意填上上一步创建的pv
mysql-pv
, 点击创建,然后在控制台应该能看到绿色的部署成功,若有错误,请点进容器组查看相关log。(插一句,如果使用k8s secret创建私密信息,也不能把Secret模板commit到git, 因为base64不是真的加密啊!)
第三部,创建service
- 现在创建的mysql还只能通过172docker的网段访问, 想要所有pods通过域名访问,则需要给mysql加一个k8s service.可以通过k8s控制台的
服务
创建,编排示例如下:
1 | apiVersion: v1 |
- 这样,基本上容器集群mysql搭建完成了。登入master, 使用k8s端口映射可以验证一下:
1 | [root@iZuf626rqqtw2yxzeeeqtoZ ~]# kubectl port-forward `kubectl get pods|grep -v NAME|cut -d " " -f 1` 3306:3306 |
小结
可能对阿里云的容器服务还不是很熟悉,感觉控制台有些细节还能够改进。本文还未涉及mysql的HA方案(可选Galera+StatefulSet) 。当然上生产,我们还需要进一步检验有状态服务到底适不适合容器化。
- Post title:使用aliyun容器服务搭建mysql
- Post author:Kopei
- Create time:2018-03-10 00:00:00
- Post link:https://kopei.github.io/2018/03/09/kubernetes-2018-03-10-k8s-mysql/
- Copyright Notice:All articles in this blog are licensed under BY-NC-SA unless stating additionally.
Comments