首页 > 其他分享 >OpenMLDB 基于 Kubernetes 的部署全攻略

OpenMLDB 基于 Kubernetes 的部署全攻略

时间:2023-09-07 11:46:16浏览次数:59  
标签:Kubernetes 部署 离线 openmldb OpenMLDB -- 全攻略

简介

Kubernetes 作为当前工业界流行的云原生容器编排和管理工具,在大量项目实践中被使用。目前,OpenMLDB 的离线引擎和在线引擎,均已经完整支持了基于 Kubernetes 的部署,可以实现更为方便的管理功能。本文将分别介绍离线和在线引擎基于 Kubernetes 的部署攻略。

注意,离线和在线引擎基于 Kubernetes 的部署是两个完全解耦的部署策略,用户可以分别针对不同的需求,为离线或者在线引擎使用基于 Kubernetes 的部署。除了基于 Kubernetes 部署,离线引擎也支持基于 local 本地模式和基于 yarn 模式进行部署;在线引擎也支持原生的不依赖容器的部署方式。这些部署策略可以在实际场景中灵活混合使用,以满足生产环境需求。

离线引擎使用 Kubernetes 后端

部署管理 Spark 任务的 Operator

请参考 spark-on-k8s-operator 官方文档。以下是使用 Helm 部署到 default 命令空间的命令,可以根据需要修改命令空间以及权限信息。

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 名称和文件路径,创建命令示例如下:

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 配置文件相关项的配置示例如下:

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 中使用。

例如提交数据导入任务:

LOAD DATA INFILE 'hdfs:///hosts' INTO TABLE db1.t1 OPTIONS(delimiter = ',', mode='overwrite');

检查 Hadoop ConfigMap 内容:

kubectl get configmap hdfs-config -o yaml

查看 Spark 任务以及 Pod 内容和日志:

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,可跳过此步。否则进行安装:

helm install zookeeper oci://registry-1.docker.io/bitnamicharts/zookeeper --set persistence.enabled=false

如果要把数据持久化,可以指定已创建的storage class

helm install zookeeper oci://registry-1.docker.io/bitnamicharts/zookeeper --set persistence.storageClass=local-storage

更多关于 ZooKeeper 的参数设置参考这里

部署 OpenMLDB

下载 repo 源代码

下载本 repo 源代码,并且将后续工作目录设置在本 repo 的根目录:

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 基于如下命令,可以进行一键化部署:

helm install openmldb ./charts/openmldb

用户可以通过 --set 命令设置更多的部署选项(比如 OpenMLDB 的副本数等) ,具体支持的选项查看 OpenMLDB Chart 配置文档

其中比较重要的配置项需要注意:

  • 默认使用临时文件保存数据,因此当pod重启后数据会丢失。推荐通过如下方式绑定pvc到指定storageclass
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 来指定使用的镜像名称。可以使用我们的镜像制作工具来制作本地镜像。
helm install openmldb ./charts/openmldb --set image.openmldbImage=openmldb-online:0.8.2

注意事项

  • 部署的 OpenMLDB 服务只能在 Kubernetes 内部同一个 namespace 下访问
  • 通过此方式部署的 OpenMLDB 集群没有部署 TaskManager 模块,所以不能用LOAD DATASELECT 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

比如:

cd docker
sh build.sh 0.8.2

相关阅读

标签:Kubernetes,部署,离线,openmldb,OpenMLDB,--,全攻略
From: https://www.cnblogs.com/4paradigm-opensource/p/17684410.html

相关文章

  • 导出手机微信的聊天记录全攻略
    12-5在我们日常使用微信的过程中,有时候很需要把聊天记录导出到电脑的Excel表格中,或者导出到网页中。但是有个软件叫【微信的聊天记录快速提取工具】,可以把微信电脑版的聊天记录导出,那在手机微信中的聊天记录怎么办呢?其实微信本身就带有迁移功能,只需要把手机微信上的聊天记录迁移到......
  • 关于Kubernetes-v1.23.6-StartupProbe-启动探针的效果演示及说明
    本文,还是以一个nginx为例,创建一个nginx-demo的pod,并且引入启动探针StartupProbe,探针选项,位于spec:下面的containers:下面,与image选项同级的位置1、先看如下nginx-demo.yaml文件,内容如下:[root@k8s-masterqq-5201351]#catnginx-demo.yamlapiVersion:v1#api文档......
  • 【Azure Kubernetes】通过 kubelogin 进行非交互式登录AKS
    问题描述当对AKS的登录方式(认证和授权)从“LocalAccountwithKubernetesRBAC”改变为“AzureADauthenticationwithAzureRBAC”.通过kubectl连接AKS会要求交互式登录,需要通过浏览器输入认证码后关联azure登录用户。那么,是否有办法可以避免这种交互式登录呢?  问......
  • 【Azure Kubernetes】通过 kubelogin 进行非交互式登录AKS
    问题描述当对AKS的登录方式(认证和授权)从“LocalAccountwithKubernetesRBAC”改变为“AzureADauthenticationwithAzureRBAC”.通过kubectl连接AKS会要求交互式登录,需要通过浏览器输入认证码后关联azure登录用户。那么,是否有办法可以避免这种交互式登录呢? 问题解答答......
  • VMware Tanzu Kubernetes Grid (TKG) 2.3 - 企业级 Kubernetes 解决方案
    VMwareTanzuKubernetesGrid(TKG)2.3-企业级Kubernetes解决方案VMware构建、签名和支持的开源Kubernetes容器编排平台的完整分发版请访问原文链接:https://sysin.org/blog/vmware-tkg-2/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgTanzuKubernetes集......
  • kubernetes(K8s)快速入门
    ......
  • kubernetes存储方案(一): Heketi+glusterfs
    环境介绍主机名ip安装软件gluster-server110.1.30.30gluster-server,Heketigluster-server210.1.30.32gluster gluster安装GlusterFS(所有节点)配置hosts解析cat>>/etc/hosts<<EOF10.1.30.30gluster-server110.1.30.32gluster-server2E......
  • kubernetes存储方案(二):StorageClass的使用
    StorageClass介绍创建StorageClass#catstorageclass-glusterfs.yamlapiVersion:v1kind:Secretmetadata:name:heketi-secretnamespace:defaultdata:key:YWRtaW5rZXk=type:kubernetes.io/glusterfs---apiVersion:storage.k8s.io/v1beta1kind:Storag......
  • [kubernetes]服务健康检查
    前言进程在运行,但是不代表应用是正常的,对此pod提供的探针可用来检测容器内的应用是否正常。k8s对pod的健康状态可以通过三类探针来检查:LivenessProbe、ReadinessProbe和StartupProbe。健康检查探针LivenessProbe用于判断容器是否存活(Running状态),如果LivenessProbe探针检测到容......
  • 在Kubernetes(K8S)上安装和部署MySQL
    摘要:本文将介绍如何在Kubernetes(K8S)上安装和部署MySQL。我们将通过以下步骤实现这一目标:准备工作、安装MySQL、配置MySQL以及在K8S上部署MySQL。通过本文,您将了解如何使用K8S来管理MySQL的容器化部署,提高应用程序的性能、可靠性和安全性。一、引言MySQL是一种流行的关系型数据库,广......