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

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云原生多模数据库 Lindorm,多引擎 多规格 0-4节点
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
简介: 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/

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
26天前
|
运维 Kubernetes Cloud Native
云原生时代下,如何高效构建与部署微服务
【9月更文挑战第8天】随着云计算技术的飞速发展,云原生已成为现代软件架构的重要趋势。本文将深入浅出地介绍云原生概念、微服务架构的优势以及如何在云平台上高效构建和部署微服务。我们将通过实际的代码示例,展示在Kubernetes集群上部署一个简单的微服务应用的过程,帮助读者理解云原生环境下的微服务开发和运维实践。
|
18天前
|
Kubernetes Cloud Native Linux
云原生入门:Kubernetes的简易部署与应用
【8月更文挑战第49天】在云原生的世界里,Kubernetes(K8s)是一颗璀璨的星。本文将带你走进K8s的世界,从安装到简单应用,轻松驾驭这个强大的容器编排工具。让我们一起探索云原生的奥秘,解锁新技能!
|
15天前
|
存储 Kubernetes Cloud Native
部署Kubernetes客户端和Docker私有仓库的步骤
这个指南涵盖了部署Kubernetes客户端和配置Docker私有仓库的基本步骤,是基于最新的实践和工具。根据具体的需求和环境,还可能需要额外的配置和调整。
29 1
|
23天前
|
Kubernetes 应用服务中间件 nginx
Kubernetes上安装Metallb和Ingress并部署应用程序
Kubernetes上安装Metallb和Ingress并部署nginx应用程序,使用LoadBalancer类型的KubernetesService
93 3
|
23天前
|
运维 Cloud Native Devops
云原生架构的崛起与实践云原生架构是一种通过容器化、微服务和DevOps等技术手段,帮助应用系统实现敏捷部署、弹性扩展和高效运维的技术理念。本文将探讨云原生的概念、核心技术以及其在企业中的应用实践,揭示云原生如何成为现代软件开发和运营的主流方式。##
云原生架构是现代IT领域的一场革命,它依托于容器化、微服务和DevOps等核心技术,旨在解决传统架构在应对复杂业务需求时的不足。通过采用云原生方法,企业可以实现敏捷部署、弹性扩展和高效运维,从而大幅提升开发效率和系统可靠性。本文详细阐述了云原生的核心概念、主要技术和实际应用案例,并探讨了企业在实施云原生过程中的挑战与解决方案。无论是正在转型的传统企业,还是寻求创新的互联网企业,云原生都提供了一条实现高效能、高灵活性和高可靠性的技术路径。 ##
29 3
|
9天前
|
Cloud Native 持续交付 开发者
云端之旅:探索云原生应用的构建与部署
【9月更文挑战第26天】在这篇文章中,我们将一起踏上一段激动人心的旅程,深入探讨云原生应用的构建和部署。通过实际的代码示例和详细的步骤说明,我们将揭开云原生技术的神秘面纱,展示如何利用这些技术来创建灵活、可扩展的应用。无论你是云原生领域的新手还是希望深化理解的开发者,这篇文章都将为你提供宝贵的知识和技能。
18 0
|
26天前
|
Cloud Native API 持续交付
云原生技术:开启现代软件部署的新篇章
在数字化浪潮中,云计算已从简单的资源共享进化到支持复杂应用的平台。云原生技术作为这一演变的核心,不仅重塑了软件开发、部署的方式,还为业务敏捷性、可伸缩性和可靠性设定了新的标准。本文将探讨云原生的基本概念、核心技术及实践方法,揭示它如何引领企业走在数字化转型的前列。
|
2天前
|
Kubernetes Cloud Native Ubuntu
云原生之旅:Kubernetes集群搭建与应用部署
【8月更文挑战第65天】本文将带你进入云原生的世界,通过一步步指导如何在本地环境中搭建Kubernetes集群,并部署一个简单的应用。我们将使用Minikube和Docker作为工具,探索云原生技术的魅力所在。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的信息和实践技巧。
|
5天前
|
存储 Kubernetes 关系型数据库
阿里云ACK备份中心,K8s集群业务应用数据的一站式灾备方案
阿里云ACK备份中心,K8s集群业务应用数据的一站式灾备方案
|
1月前
|
存储 Kubernetes 负载均衡
CentOS 7.9二进制部署K8S 1.28.3+集群实战
本文详细介绍了在CentOS 7.9上通过二进制方式部署Kubernetes 1.28.3+集群的全过程,包括环境准备、组件安装、证书生成、高可用配置以及网络插件部署等关键步骤。
181 3
CentOS 7.9二进制部署K8S 1.28.3+集群实战
下一篇
无影云桌面