使用aliyun容器服务搭建mysql

Kopei article

前言

本文简单介绍用aliyun的Kubernetes容器服务搭建mysql集群。首先确保k8s集群已经创建,并且已经开通了相关服务如NAS、容器镜像仓库等服务。

第一步 创建数据卷

  • k8s有个nodeSelector的功能,如果mysql由于单点故障漂移了node,原来的存储会自动重新挂载到新的node(这一步骤是在转移node之前做的). 这样避免了漂移node导致有状态服务不可用的情况。
  • aliyun支持k8s三种存储:网盘, NAS, OSS. 基于性能考虑,我们选择NAS。首先需要在NAS控制台右上角选择创建文件系统, 注意所创建的文件系统所在区域必须和k8s集群所在的区域在同一地域:
    https://s3.ap-southeast-1.amazonaws.com/kopei-public/%E5%B1%8F%E5%B9%95%E5%BF%AB%E7%85%A7%202018-03-10%20%E4%B8%8B%E5%8D%884.36.40.png
    然后在新生成的文件系统选择添加挂载点,如图已经有两个挂载点,还不是很清楚为什么不能再添加新的挂载点了。添加的挂载点必须和k8s集群在同一个VPC! 记住挂载地址后续创建k8s数据卷时用到。
    https://s3.ap-southeast-1.amazonaws.com/kopei-public/%E5%B1%8F%E5%B9%95%E5%BF%AB%E7%85%A7%202018-03-10%20%E4%B8%8B%E5%8D%884.38.33.png
    https://s3.ap-southeast-1.amazonaws.com/kopei-public/%E5%B1%8F%E5%B9%95%E5%BF%AB%E7%85%A7%202018-03-10%20%E4%B8%8B%E5%8D%884.40.44.png
  • 然后在k8s控制台右上角选中创建, 填上新创建的挂载点域名,点击确定数据卷就创建了:
    https://s3.ap-southeast-1.amazonaws.com/kopei-public/%E5%B1%8F%E5%B9%95%E5%BF%AB%E7%85%A7%202018-03-10%20%E4%B8%8B%E5%8D%884.44.29.png

第二步 使用aliyun的镜像创建mysql

  • 在容器服务控制台点击使用镜像,选择mysql部署应用, 第一步填应用名称和选择命名空间:
    https://s3.ap-southeast-1.amazonaws.com/kopei-public/%E5%B1%8F%E5%B9%95%E5%BF%AB%E7%85%A7%202018-03-10%20%E4%B8%8B%E5%8D%884.51.42.png
  • 然后设置应用配置,注意在这里的环境变量必须设置MYSQL_ROOT_PASSWORD或MYSQL_ALLOW_EMPTY_PASSWORD或MYSQL_RANDOM_ROOT_PASSWORD之一,否则会创建失败。这个页面暂时没有找到设置k8s secret的地方,所以可能如编排模块那样使用secret。其它的资源和网络按需设置, 注意填上上一步创建的pvmysql-pv, 点击创建,然后在控制台应该能看到绿色的部署成功,若有错误,请点进容器组查看相关log。(插一句,如果使用k8s secret创建私密信息,也不能把Secret模板commit到git, 因为base64不是真的加密啊!)
    https://s3.ap-southeast-1.amazonaws.com/kopei-public/%E5%B1%8F%E5%B9%95%E5%BF%AB%E7%85%A7%202018-03-10%20%E4%B8%8B%E5%8D%885.04.38.png

第三部,创建service

  • 现在创建的mysql还只能通过172docker的网段访问, 想要所有pods通过域名访问,则需要给mysql加一个k8s service.可以通过k8s控制台的服务创建,编排示例如下:
1
2
3
4
5
6
7
8
9
10
11
apiVersion: v1
kind: Service
metadata:
name: mysql
labels:
name: mysql
spec:
ports:
- port: 3306
selector:
app: app-mysql # 注意,这里是pod的label
  • 这样,基本上容器集群mysql搭建完成了。登入master, 使用k8s端口映射可以验证一下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@iZuf626rqqtw2yxzeeeqtoZ ~]# kubectl port-forward `kubectl get pods|grep -v NAME|cut -d " " -f 1` 3306:3306
Forwarding from 127.0.0.1:3306 -> 3306

[root@iZuf626rqqtw2yxzeeeqtoZ ~]# mysql -h 127.0.0.1 -u root -P 3306 -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.7.18 MySQL Community Server (GPL)

Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MySQL [(none)]>

小结

可能对阿里云的容器服务还不是很熟悉,感觉控制台有些细节还能够改进。本文还未涉及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