OpenMLDB 基于 Kubernetes 的部署全攻略
简介
Kubernetes 作为当前工业界流行的云原生容器编排和管理工具,在大量项目实践中被使用。目前,OpenMLDB 的离线引擎和在线引擎,均已经完整支持了基于 Kubernetes 的部署,可以实现更为方便的管理功能。本文将分别介绍离线和在线引擎基于 Kubernetes 的部署攻略。
注意,离线和在线引擎基于 Kubernetes 的部署是两个完全解耦的部署策略,用户可以分别针对不同的需求,为离线或者在线引擎使用基于 Kubernetes 的部署。除了基于 Kubernetes 部署,离线引擎也支持基于 local
本地模式和基于 yarn
模式进行部署;在线引擎也支持原生的不依赖容器的部署方式。这些部署策略可以在实际场景中灵活混合使用,以满足生产环境需求。
离线引擎使用 Kubernetes 后端
部署管理 Spark 任务的 Operator
请参考 spark-on-k8s-operator 官方文档。以下是使用 Helm
部署到 default
命令空间的命令,可以根据需要修改命令空间以及权限信息。
部署成功后,可以使用 spark-operator 提供的代码示例测试 Spark 任务是否可以正常提交。
HDFS 支持
如果需要配置 Kubernetes 任务读写 HDFS 数据,需要提前准备 Hadoop 配置文件并且创建 ConfigMap 。根据需要可修改 ConfigMap 名称和文件路径,创建命令示例如下:
离线引擎配置 Kubernetes 支持
离线引擎的 TaskManager 配置文件中可以指定 Kubernetes 相关配置,相关配置项如下
如果使用 Kubernetes 运行离线引擎,用户的计算任务会运行在集群上,因此建议配置离线存储路径为 HDFS 路径,否则可能导致任务读写数据失败。TaskManager 配置文件相关项的配置示例如下:
Note: OpenMLDB 离线引擎的 TaskManager 的完整配置文件可参考:https://openmldb.ai/docs/zh/main/deploy/conf.html#taskmanager-conf-taskmanager-properties
任务提交和管理
配置 TaskManager 和 Kubernetes 后,可在命令行提交离线任务,用法与 Local 或 Yarn 模式一样,不仅可以在 SQL 命令行客户端中使用,也可以通过各种语言的 SDK 中使用。
例如提交数据导入任务:
检查 Hadoop ConfigMap 内容:
查看 Spark 任务以及 Pod 内容和日志:
在线引擎基于 Kubernetes 部署
项目仓库
在线引擎基于 Kubernetes 的部署方案作为一个单独的部署工具对 OpenMLDB 进行支持,其源代码仓库地址为:https://github.com/4paradigm/openmldb-k8s
要求
本部署工具提供 OpenMLDB 在线引擎基于 Kubernetes 的部署方案,基于 Helm Charts 实现。在以下版本通过测试(其他低版本未验证):
Kubernetes 1.19+
Helm 3.2.0+
另外,如果用户使用 Docker Hub 上的预编译 OpenMLDB 镜像,目前仅支持 OpenMLDB >= 0.8.2。用户也可以通过我们的工具自己制作其他版本的 OpenMLDB 镜像(见章节“镜像制作工具”)。
准备工作:部署 ZooKeeper
如果用户已经有可用的 ZooKeeper,可跳过此步。否则进行安装:
如果要把数据持久化,可以指定已创建的 storage class
更多关于 ZooKeeper 的参数设置参考这里
部署 OpenMLDB
下载 repo 源代码
下载本 repo 源代码,并且将后续工作目录设置在本 repo 的根目录:
配置 ZooKeeper 地址
修改 charts/openmldb/conf/tablet.flags 和 charts/openmldb/conf/nameserver.flags 文件中 zk_cluster
为实际 ZooKeeper 地址,其默认 zk_root_path
为 /openmldb
。
部署 OpenMLDB
使用 Helm 基于如下命令,可以进行一键化部署:
用户可以通过 --set
命令设置更多的部署选项(比如 OpenMLDB 的副本数等) ,具体支持的选项查看 OpenMLDB Chart 配置文档。
其中比较重要的配置项需要注意:
默认使用临时文件保存数据,因此当 pod 重启后数据会丢失。推荐通过如下方式绑定 pvc 到指定 storageclass
默认使用 Docker Hub 上的
4pdosc/openmldb-online
镜像(仅支持 OpenMLDB >= 0.8.2),如果要用自己的镜像,可以在install
时通过--set image.openmldbImage
来指定使用的镜像名称。可以使用我们的镜像制作工具来制作本地镜像。
注意事项
部署的 OpenMLDB 服务只能在 Kubernetes 内部同一个 namespace 下访问
通过此方式部署的 OpenMLDB 集群没有部署 TaskManager 模块,所以不能用LOAD DATA和SELECT INTO语句,也不能使用离线相关功能。如果要将数据导入到 OpenMLDB 可以使用 OpenMLDB 的在线导入工具、OpenMLDB Connector 或者 SDK。如果要导出表的数据,可以使用在线数据导出工具。
如果要上生产环境,需要在 Kubernetes 部署 tablet 的物理节点上关闭 THP,否则可能存在删除的表内存不能完全释放问题。关闭方式参考这里
镜像制作工具
部署默认将会使用 Docker Hub 上的 OpenMLDB 镜像,用户也可以自己制作本地镜像。镜像制作工具是位于代码仓库(https://github.com/4paradigm/openmldb-k8s)下的脚本 docker/build.sh
。
该脚本支持两个参数:
第一个参数为 OpenMLDB 版本号。
第二个参数是 OpenMLDB 部署包的源,默认是从中国大陆镜像地址拉取,如果要从 GitHub 拉取可以设置第二个参数为
github
比如:
相关阅读
OpenMLDB 官网: https://openmldb.ai/
OpenMLDB GitHub 主页: https://github.com/4paradigm/OpenMLDB
OpenMLDB 文档 https://openmldb.ai/docs/zh/
OpenMLDB 微信交流群:
评论