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

本文涉及的产品
云原生多模数据库 Lindorm,多引擎 多规格 0-4节点
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: TuGraph Analytics作业可以通过Console提交部署到K8S集群,但Console是一个独立的Web系统,部署形态上相对较重。在平台工具系统接入或大数据生态集成场景中,需要更轻量级的快速接入TuGraph Analytics的方案。

作者:丁一

背景

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/v1
kind: GeaflowJob
metadata:
    # 作业名称
  name: geaflow-example
spec:
    # 作业使用的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:latest
docker 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/

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
3月前
|
运维 Dubbo Cloud Native
Dubbo 云原生重构出击:更快部署、更强控制台、更智能运维
Apache Dubbo 最新升级支持云原生,提供一键部署微服务集群与全新可视化控制台,提升全生命周期管理体验,助力企业高效构建云原生应用。
347 25
|
9月前
|
Cloud Native Serverless 数据中心
阿里云ACK One:注册集群支持ACS算力——云原生时代的计算新引擎
ACK One注册集群已正式支持ACS(容器计算服务)算力,为企业的容器化工作负载提供更多选择和更强大的计算能力。
|
10月前
|
存储 运维 Kubernetes
正式开源,Doris Operator 支持高效 Kubernetes 容器化部署方案
飞轮科技推出了 Doris 的 Kubernetes Operator 开源项目(简称:Doris Operator),并捐赠给 Apache 基金会。该工具集成了原生 Kubernetes 资源的复杂管理能力,并融合了 Doris 组件间的分布式协同、用户集群形态的按需定制等经验,为用户提供了一个更简洁、高效、易用的容器化部署方案。
478 16
正式开源,Doris Operator 支持高效 Kubernetes 容器化部署方案
|
9月前
|
Cloud Native Serverless 数据中心
阿里云ACK One:注册集群支持ACS算力——云原生时代的计算新引擎
阿里云ACK One:注册集群支持ACS算力——云原生时代的计算新引擎
304 10
|
9月前
|
Kubernetes 持续交付 开发工具
阿里云协同万兴科技落地ACK One GitOps方案,全球多机房应用自动化发布,效率提升50%
阿里云协同万兴科技落地ACK One GitOps方案,全球多机房应用自动化发布,效率提升50%
363 2
|
9月前
|
Cloud Native 安全 Serverless
云原生应用实战:基于阿里云Serverless的API服务开发与部署
随着云计算的发展,Serverless架构日益流行。阿里云函数计算(Function Compute)作为Serverless服务,让开发者无需管理服务器即可运行代码,按需付费,简化开发运维流程。本文从零开始,介绍如何使用阿里云函数计算开发简单的API服务,并探讨其核心优势与最佳实践。通过Python示例,演示创建、部署及优化API的过程,涵盖环境准备、代码实现、性能优化和安全管理等内容,帮助读者快速上手Serverless开发。
|
9月前
|
Kubernetes 持续交付 开发工具
阿里云协同万兴科技落地ACK One GitOps方案,全球多机房应用自动化发布,效率提升50%
阿里云协同万兴科技落地ACK One GitOps方案,全球多机房应用自动化发布,效率提升50%
|
11月前
|
存储 Kubernetes 开发者
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
Docker 是一种开源的应用容器引擎,允许开发者将应用程序及其依赖打包成可移植的镜像,并在任何支持 Docker 的平台上运行。其核心概念包括镜像、容器和仓库。镜像是只读的文件系统,容器是镜像的运行实例,仓库用于存储和分发镜像。Kubernetes(k8s)则是容器集群管理系统,提供自动化部署、扩展和维护等功能,支持服务发现、负载均衡、自动伸缩等特性。两者结合使用,可以实现高效的容器化应用管理和运维。Docker 主要用于单主机上的容器管理,而 Kubernetes 则专注于跨多主机的容器编排与调度。尽管 k8s 逐渐减少了对 Docker 作为容器运行时的支持,但 Doc
449 5
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
|
10月前
|
缓存 容灾 网络协议
ACK One多集群网关:实现高效容灾方案
ACK One多集群网关可以帮助您快速构建同城跨AZ多活容灾系统、混合云同城跨AZ多活容灾系统,以及异地容灾系统。
|
11月前
|
人工智能 缓存 异构计算
云原生AI加速生成式人工智能应用的部署构建
本文探讨了云原生技术背景下,尤其是Kubernetes和容器技术的发展,对模型推理服务带来的挑战与优化策略。文中详细介绍了Knative的弹性扩展机制,包括HPA和CronHPA,以及针对传统弹性扩展“滞后”问题提出的AHPA(高级弹性预测)。此外,文章重点介绍了Fluid项目,它通过分布式缓存优化了模型加载的I/O操作,显著缩短了推理服务的冷启动时间,特别是在处理大规模并发请求时表现出色。通过实际案例,展示了Fluid在vLLM和Qwen模型推理中的应用效果,证明了其在提高模型推理效率和响应速度方面的优势。
云原生AI加速生成式人工智能应用的部署构建

推荐镜像

更多