写点什么

TuGraph Analytics 云原生部署:基于 K8S Operator 的轻量级作业启动方案

  • 2023-11-29
    浙江
  • 本文字数:2519 字

    阅读完需:约 8 分钟

作者:丁一

背景

TuGraph Analytics 作业可以通过 Console 提交部署到 K8S 集群,但 Console 是一个独立的 Web 系统,部署形态上相对较重。在平台工具系统接入或大数据生态集成场景中,需要更轻量级的快速接入 TuGraph Analytics 的方案。


我们新增了模块 geaflow-kubernetes-operator,可以通过更轻量级的 YAML 文件配置方式,对 TuGraph Analytics 作业进行描述配置。同时更方便地监控和管理集群下的所有 TuGraph Analytics 作业,并通过 CR(Custom Resource)的创建/修改/删除来管理作业的生命周期和元信息,可以实现只通过 kubectl 命令实现任务操纵。我们也提供了一个实时 dashboard 页面,可以方便地白屏化查看所有作业状态和信息。

部署 K8S Operator

TuGraph Analytics 提供了 geaflow-kubernetes-operator 模块,可通过 Helm 命令一键部署到 K8S。部署完成中,会向 K8S 集群注册一个名为 geaflowjob 的自定义资源。(相对于 K8S 内置 pod、service、deployment 等系统资源而言)安装完成后,我们只需要编写一个 CR 的 YAML 配置文件提交给 K8S,就可以自动拉起作业了。


  • 执行以下命令构建 Operator 镜像,项目代码构建要求 JDK11 版本,因此需要单独切换 JDK 版本编译构建。


$ ./build-operator.sh
复制代码


  • 进入项目目录 geaflow-kubernetes-operator 下,通过 Helm 一键安装 operator。


$ helm install geaflow-kubernetes-operator helm/geaflow-kubernetes-operator
复制代码



  • 在 K8S Dashboard 中查看 pod 是否正常运行。


提交作业

K8S Operator 成功部署并运行后,就可以编写 CR 的 YAML 文件进行作业提交了。


$ kubectl apply geaflow-example.yml
复制代码


这里使用项目内置示例作业举例,其 YAML 文件格式如下:


apiVersion: geaflow.antgroup.com/v1kind: GeaflowJobmetadata:    # 作业名称  name: geaflow-examplespec:    # 作业使用的GeaFlow镜像  image: geaflow:0.1  # 作业拉取镜像的策略  imagePullPolicy: IfNotPresent  # 作业使用的k8s service account  serviceAccount: geaflow  # 作业java进程的主类  entryClass: com.antgroup.geaflow.example.graph.statical.compute.sssp.SSSP  clientSpec:    # client pod相关的资源设置    resource:      cpuCores: 1      memoryMb: 1000      jvmOptions: -Xmx800m,-Xms800m,-Xmn300m  masterSpec:    # master pod相关的资源设置    resource:      cpuCores: 1      memoryMb: 1000      jvmOptions: -Xmx800m,-Xms800m,-Xmn300m  driverSpec:    # driver pod相关的资源设置    resource:      cpuCores: 1      memoryMb: 1000      jvmOptions: -Xmx800m,-Xms800m,-Xmn300m    # driver个数    driverNum: 1  containerSpec:    # container pod相关的资源设置    resource:      cpuCores: 1      memoryMb: 1000      jvmOptions: -Xmx800m,-Xms800m,-Xmn300m    # container个数    containerNum: 1    # 每个container内部的worker个数(线程数)    workerNumPerContainer: 4  userSpec:    # 作业指标相关配置    metricConfig:      geaflow.metric.reporters: slf4j      geaflow.metric.stats.type: memory    # 作业存储相关配置    stateConfig:      geaflow.file.persistent.type: LOCAL          geaflow.store.redis.host: host.minikube.internal      geaflow.store.redis.port: 6379    # 用户自定义参数配置    additionalArgs:      geaflow.system.state.backend.type: MEMORY
复制代码


K8S 环境上的作业强依赖于 Redis 组件,若你已经部署了 Redis,则可以在 geaflow-example.yaml 中提供 Redis 主机和端口号。你也可以通过 Docker 快速启动一个本地 Redis 服务,默认地址 host.minikube.internal 可直接访问。


docker pull redis:latestdocker run -p 6379:6379 --name geaflow_redis redis:latest
复制代码

提交 API 任务

对于提交 HLA 任务的情况,需要额外注意以下几个参数:


  • spec.entryClass:必填。

  • spec.udfJars:选填,一般填写 API 任务的 JAR 文件的 url 地址。


spec:    # 必填    entryClass: com.example.MyEntryClass    # 可选    udfJars:       - name: myJob.jar        url: http://url-path-to-myJob.jar
复制代码

提交 DSL 任务

对于提交 DSL 任务的情况,需要额外注意以下几个参数:


  • spec.entryClass:不填,留空(用于区分是 API 作业还是 DSL 作业)。

  • spec.gqlFile:必填,请填写自己文件的名称和 url 地址。

  • spec.udfJars:选填,如需 UDF 的话,请填写 UDF JAR 文件的 url 地址。


spec:    # 不填    # entryClass: com.example.MyEntryClass    # 必填  gqlFile:    # name必须填写正确,否则无法找到对应文件    name: myGql.gql    url: http://url-path-to-myGql.gql    # 可选    udfJars:       - name: myUdf.jar        url: http://url-path-to-myUdf.jar
复制代码


关于 DSL 任务和 HLA 任务的更多参数,我们在项目目录 geaflow-kubernetes-operator/example 目录中准备了两个 demo 作业供大家参考,请分别参考项目中的示例文件:


  • example/example-dsl.yml

  • example/example-hla.yml。

查看作业状态

可以访问 K8S Dashboard 查看 pod 是否被拉起,执行以下命令可以查看 CR 的状态是否已经正常运行。


$ kubectl get geaflowjob geaflow-example
复制代码




若在提交过程中失败,则状态会变为 FAILED。若需定位原因,可通过以下命令查看。


$ kubectl get geaflowjobs geaflow-example -o yaml
复制代码

查看集群状态

Operator 自带一个前端页面,可以展示集群的基本信息、所有作业的状态、错误信息、以及完整的配置,并做了分类统计。可以通过访问 Operator 的 service 或者 pod 的 8089 端口来打开页面。



备注


在 minikube 环境中,需要通过 portforward 将 Operator 的 pod 代理到本地端口(默认为 8089 端口),请将 operator-pod-name 替换为实际的 operator pod 名称,然后通过浏览器访问 localhost:8089 即可打开页面。


$kubectl port-forward ${operator-pod-name} 8089:8089
复制代码


至此,我们完成了 TuGraph Analytics 作业的轻量级提交和运行!是不是超简单!快来试一试吧!


GeaFlow(品牌名 TuGraph-Analytics) 已正式开源,欢迎大家关注!!!


欢迎给我们 Star 哦! GitHub👉 https://github.com/TuGraph-family/tugraph-analytics


更多精彩内容,关注我们的博客 https://geaflow.github.io/


用户头像

欢迎访问:geaflow.github.io 2023-07-05 加入

TuGraph Analytics是一个OLAP图数据库 GitHub👉 github.com/TuGraph-family/tugraph-analytics

评论

发布
暂无评论
TuGraph Analytics云原生部署:基于K8S Operator的轻量级作业启动方案_云原生_TuGraph Analytics_InfoQ写作社区