作者: zhaorenhai
本文计划在arm64平台上创建MariaDB的Docker镜像,并在K8S环境上部署起来。测试一下整个流程,以验证下MariaDB在arm64平台上的容器相关的功能也都是正常的。
测试平台选择华为云鲲鹏虚拟机,OS采用openEuler20.03版本,MariaDB就用openEuler自带的10.3.9版本,镜像版本我们计划采用openEuler20.09的OS镜像作为基础镜像。
首先确保在虚拟机上安装好了docker
然后下载openEuler基础镜像,并用docker加载:
1 | curl -L -O https://repo.openeuler.org/openEuler-20.09/docker_img/aarch64/openEuler-docker.aarch64.tar.xz |
然后在同一目录下编辑一个Dockerfile文件和entrypoint.sh文件
内容分别如下(本文主要演示使用,内容较简单,仅仅是在OS镜像的基础上安装了一个数据库,并自动拉起,简单等待了10s,然后创建了一个默认用户,再把数据库重新在前台启动而已。各位有兴趣的小伙伴可以自行添加其他较复杂的功能):
1 | FROM openeuler-20.09:latest |
1 | !/bin/bash |
然后在这两个文件所在的目录下执行如下命令,创建一个docker镜像:
1 | docker build -t openeulermariadb:latest . |
如果没有错误,用docker images
命令可以看到刚刚创建的镜像,找到其中的镜像ID。
然后执行如下命令运行一个容器,这样MariaDB服务就运行起来了。
1 | docker run -itd 253e90ce4419 /bin/bash |
然后执行docker ps -a
可以看到刚刚起来的容器,找到其中的容器ID。
然后执行如下命令,进入容器,并测试相关数据库功能,是否都正常。
1 | docker exec -it 44d3c508436e /bin/bash |
如果一切正常,就可以参考如下链接:https://support.huaweicloud.com/usermanual-swr/swr_01_0011.html
将镜像上传到华为云的SWR镜像服务里面去。
并在SWR镜像管理页面,将私有镜像改为公开的。
然后我们尝试将此镜像在K8S里面部署。
首先确保K8S相关环境已安装,并正常运行。本文不是K8S指导文档,部署步骤在此略过。
然后创建一个内容如下的openeulermariadb.yaml文件,注意其中的镜像的地址就是刚刚上传到SWR的镜像地址,另外特意加了nodeSelector,选择arm64架构的节点,确保此容器只在arm64的节点上运行:
1 |
|
然后执行
1 | kubectl create -f openeulermariadb.yaml |
在K8S里面部署,提示如下代表部署成功
1 | namespace/mariadb created |
然后用如下命令可以查看部署成功的服务和POD
1 | kubectl get services -n mariadb |
输出分别如下:
1 | NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE |
1 | NAME READY STATUS RESTARTS AGE |
如果在K8S的容器内部网络,可以通过IP 10.106.88.47,端口3306访问数据库,如果是在容器外部网络,可以通过K8S的Master的IP地址和端口号30977来访问数据库。
也可以执行如下命令,进入容器,测试各项功能。
1 | kubectl exec -it mariadb-6cf778c658-wphnq -n mariadb -- /bin/bash |
至此整个流程基本完毕。