OpenMLDB 基于 Kubernetes 的部署全攻略

人工智能
数据库
机器学习
开源
0
0
# 简介 Kubernetes 作为当前工业界流行的云原生容器编排和管理工具,在大量项目实践中被使用。目前,OpenMLDB 的离线引擎和在线引擎,均已经完整支持了基于 Kubernetes 的部署,可以实现更为方便的管理功能。本文将分别介绍离线和在线引擎基于 Kubernetes 的部署攻略。 注意,离线和在线引擎基于 Kubernetes 的部署是两个完全解耦的部署策略,用户可以分别针对不同的需求,为离线或者在线引擎使用基于 Kubernetes 的部署。除了基于 Kubernetes 部署,离线引擎也支持基于 `local` 本地模式和基于 `yarn` 模式进行部署;在线引擎也支持原生的不依赖容器的部署方式。这些部署策略可以在实际场景中灵活混合使用,以满足生产环境需求。 # 离线引擎使用 Kubernetes 后端 ## 部署管理 Spark 任务的 Operator 请参考 [spark-on-k8s-operator 官方文档](https://github.com/GoogleCloudPlatform/spark-on-k8s-operator)。以下是使用 `Helm` 部署到 `default` 命令空间的命令,可以根据需要修改命令空间以及权限信息。 ```Bash helm install my-release spark-operator/spark-operator --namespace default --create-namespace --set webhook.enable=true kubectl create serviceaccount spark --namespace default kubectl create clusterrolebinding binding --clusterrole=edit --serviceaccount=default:spark ``` 部署成功后,可以使用 spark-operator 提供的代码示例测试 Spark 任务是否可以正常提交。 ## HDFS 支持 如果需要配置 Kubernetes 任务读写 HDFS 数据,需要提前准备 Hadoop 配置文件并且创建 ConfigMap 。根据需要可修改 ConfigMap 名称和文件路径,创建命令示例如下: ```Bash kubectl create configmap hadoop-config --from-file=/tmp/hadoop/etc/ ``` ## 离线引擎配置 Kubernetes 支持 离线引擎的 TaskManager 配置文件中可以指定 Kubernetes 相关配置,相关配置项如下 | Config | Type | Note | | -------------------- | ------ | -------------------------- | | spark.master | String | 可支持”kuberenetes”或”k8s” | | offline.data.prefix | String | 建议使用 HDFS 路径 | | k8s.hadoop.configmap | String | 默认为”hadoop-config” | | k8s.mount.local.path | String | 默认为”/tmp” | 如果使用 Kubernetes 运行离线引擎,用户的计算任务会运行在集群上,因此建议配置离线存储路径为 HDFS 路径,否则可能导致任务读写数据失败。TaskManager 配置文件相关项的配置示例如下: ```Bash offline.data.prefix=hdfs:///foo/bar/ ``` **Note**: OpenMLDB 离线引擎的 TaskManager 的完整配置文件可参考:https://openmldb.ai/docs/zh/main/deploy/conf.html#taskmanager-conf-taskmanager-properties ## 任务提交和管理 配置 TaskManager 和 Kubernetes 后,可在命令行提交离线任务,用法与 Local 或 Yarn 模式一样,不仅可以在 SQL 命令行客户端中使用,也可以通过各种语言的 SDK 中使用。 例如提交数据导入任务: ```SQL LOAD DATA INFILE 'hdfs:///hosts' INTO TABLE db1.t1 OPTIONS(delimiter = ',', mode='overwrite'); ``` 检查 Hadoop ConfigMap 内容: ```Bash kubectl get configmap hdfs-config -o yaml ``` 查看 Spark 任务以及 Pod 内容和日志: ```Bash kubectl get SparkApplicationkubectl get pods ``` # 在线引擎基于 **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,可跳过此步。否则进行安装: ```Plaintext helm install zookeeper oci://registry-1.docker.io/bitnamicharts/zookeeper --set persistence.enabled=false ``` 如果要把数据持久化,可以指定已创建的storage class ```Plaintext helm install zookeeper oci://registry-1.docker.io/bitnamicharts/zookeeper --set persistence.storageClass=local-storage ``` 更多关于 ZooKeeper 的参数设置参考[这里](https://github.com/bitnami/charts/tree/main/bitnami/zookeeper) ## **部署 OpenMLDB** ### **下载** **repo** **源代码** 下载本 repo 源代码,并且将后续工作目录设置在本 repo 的根目录: ```SQL git clone https://github.com/4paradigm/openmldb-k8s.git cd openmldb-k8s ``` ### **配置** **ZooKeeper** **地址** 修改 charts/openmldb/conf/tablet.flags 和 charts/openmldb/conf/nameserver.flags 文件中 `zk_cluster` 为实际 ZooKeeper 地址,其默认 `zk_root_path` 为 `/openmldb` 。 ### **部署OpenMLDB** 使用 Helm 基于如下命令,可以进行一键化部署: ```Plaintext helm install openmldb ./charts/openmldb ``` 用户可以通过 `--set` 命令设置更多的部署选项(比如 OpenMLDB 的副本数等) ,具体支持的选项查看 [OpenMLDB Chart 配置文档](https://github.com/4paradigm/openmldb-k8s/blob/main/charts/openmldb/README.md)。 其中比较重要的配置项需要注意: - 默认使用临时文件保存数据,因此当pod重启后数据会丢失。推荐通过如下方式绑定pvc到指定storageclass ```Plaintext helm install openmldb ./charts/openmldb --set persistence.dataDir.enabled=true --set persistence.dataDir.storageClass=local-storage ``` - 默认使用 Docker Hub 上的 `4pdosc/openmldb-online` 镜像(仅支持 OpenMLDB >= 0.8.2),如果要用自己的镜像,可以在 `install` 时通过 `--set image.openmldbImage` 来指定使用的镜像名称。可以使用我们的镜像制作工具来制作本地镜像。 ```Plaintext helm install openmldb ./charts/openmldb --set image.openmldbImage=openmldb-online:0.8.2 ``` ### **注意事项** - 部署的 OpenMLDB 服务只能在 Kubernetes 内部同一个 namespace 下访问 - 通过此方式部署的 OpenMLDB 集群没有部署 TaskManager 模块,所以不能用[LOAD DATA](https://openmldb.ai/docs/zh/main/openmldb_sql/dml/LOAD_DATA_STATEMENT.html)和[SELECT INTO](https://openmldb.ai/docs/zh/main/openmldb_sql/dql/SELECT_INTO_STATEMENT.html)语句,也不能使用离线相关功能。如果要将数据导入到 OpenMLDB 可以使用 OpenMLDB 的[在线导入工具](https://openmldb.ai/docs/zh/main/tutorial/data_import.html)、[OpenMLDB Connector](https://openmldb.ai/docs/zh/main/integration/online_datasources/index.html) 或者 SDK。如果要导出表的数据,可以使用[在线数据导出工具](https://openmldb.ai/docs/zh/main/tutorial/data_export.html)。 - 如果要上生产环境,需要在 Kubernetes 部署 tablet 的物理节点上关闭 THP,否则可能存在删除的表内存不能完全释放问题。关闭方式参考[这里](https://openmldb.ai/docs/zh/main/deploy/install_deploy.html#thp-transparent-huge-pages) ## 镜像制作工具 部署默认将会使用 Docker Hub 上的 OpenMLDB 镜像,用户也可以自己制作本地镜像。镜像制作工具是位于代码仓库(https://github.com/4paradigm/openmldb-k8s)下的脚本 `docker/build.sh`。 该脚本支持两个参数: - 第一个参数为OpenMLDB版本号。 - 第二个参数是OpenMLDB部署包的源,默认是从中国大陆镜像地址拉取,如果要从 GitHub 拉取可以设置第二个参数为 `github` 比如: ```SQL cd docker sh build.sh 0.8.2 ``` # 相关阅读 - OpenMLDB 官网: https://openmldb.ai/ - OpenMLDB GitHub 主页: https://github.com/4paradigm/OpenMLDB - OpenMLDB 文档 https://openmldb.ai/docs/zh/ - OpenMLDB 微信交流群: ![V QR.png](https://dev-media.amazoncloud.cn/a265e4da483845cfa7a533ba141cec23_V%20QR.png "V QR.png")
目录
亚马逊云科技解决方案 基于行业客户应用场景及技术领域的解决方案
联系亚马逊云科技专家
亚马逊云科技解决方案
基于行业客户应用场景及技术领域的解决方案
联系专家
0
目录
关闭