使用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) 。当然上生产,我们还需要进一步检验有状态服务到底适不适合容器化。
- Title: 使用aliyun容器服务搭建mysql
 - Author: Kopei
 - Created at : 2018-03-10 00:00:00
 - Updated at : 2018-03-12 00:00:00
 - Link: https://kopei.github.io/2018/03/09/kubernetes-2018-03-10-k8s-mysql/
 - License: This work is licensed under CC BY-NC-SA 4.0.
 
        Comments
    
    
        
            
    
    
        
    





