使用 Helm 部署 GraphScope

本文将重点介绍如何使用 GraphScope 客户端连接到一个通过 Helm 工具部署的 GraphScope 集群。

Helm 作为 K8s 生态系统中的软件包管理工具,类似于 Ubuntu 的 apt 或 Python 的 pip,专门负责管理 K8s 的应用资源。使用 Helm 可以很容易地对 kubernetes 应用进行统一打包、分发、安装、升级以及回退等操作。GraphScope 也支持通过 Helm 进行部署和使用。

前置准备

在开始之前,请确保当前环境具备一个可操作的 K8s 集群,如果没有,则可以参考之前的文章进行安装;此外,为了完整运行本文中的示例,你还需要在本机上安装 GraphScope Python 客户端:

$ pip3 install graphscope

安装 Helm

根据 Helm 官方文档,可通过如下命令安装 Helm。

$ curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash

如果服务器无法连接网络,则可以在有网的环境中预下载 Helm,然后拷贝到服务器上,这里以安装 Helmv3.8.1 为例:

$ wget https://get.helm.sh/helm-v3.8.1-linux-amd64.tar.gz
$ tar zxvf helm-v3.8.1-linux-amd64.tar.gz

解压之后,可自行将 helm 文件拷贝到服务器上,并将其放到 /usr/local/bin 目录下即可,然后执行 helm version,如果正常输出则表示 Helm 安装成功。

$ helm version
version.BuildInfo{Version:"v3.8.1", GitCommit:"5cb9af4b1b271d11d7a97a71df3ac337dd94ad37", GitTreeState:"clean", GoVersion:"go1.17.5"}

配置 Helm repo

GraphScope 的 Helm Charts 托管在仓库 https://graphscope.oss-cn-beijing.aliyuncs.com/ 中,因此你可以通过如下命令添加该仓库:

$ helm repo add graphscope https://graphscope.oss-cn-beijing.aliyuncs.com/charts/
"graphscope" has been added to your repositories

添加完成后,可使用 helm search 搜索 GraphScope 提供的 Charts。

$ helm search repo graphscope
NAME                            CHART VERSION   APP VERSION     DESCRIPTION
graphscope/graphscope           0.11.0          0.11.0          A One-Stop Large-Scale Graph Computing System f...

Helm 常用操作

Helm 的常用操作有部署(helm install)、升级(helm upgrade)、销毁(helm uninstall)、查询(helm ls),同时往往某个 Helm Chart 有很多需要配置的参数,通过命名行方式配置比较繁琐,因此推荐使用 YAML 文件的形式来配置这些参数,本文接下来将用于配置 chart 的 YAML 文件称为 values.yaml,这也是 Helm 社区约定俗成的命名方式。

安装 GraphScope Chart

以 Helm 方式部署的 GraphScope 需要一些删除资源的权限,因此首先需要通过以下命令创建相应角色:

# example for `default` ServiceAccount with `default` namespace
$ wget https://raw.githubusercontent.com/alibaba/GraphScope/main/charts/role_and_binding.yaml

$ kubectl create -f ./role_and_binding.yaml
role.rbac.authorization.k8s.io/grole created
rolebinding.rbac.authorization.k8s.io/grole-binding created

角色创建完成后,我们便可以安装 GraphScope Chart,需要注意的是,Chart 的安装和升级操作必须指定 Chart 的名字(chart_name)和部署后的实例名字(release_name),还可以指定一个或多个values.yaml文件来配置 Chart,同时如果对 Chart 的版本有特定要求,则可以通过 --version 参数指定相应版本(chart_version,默认为最新版本),最终命令如下:

$ helm install graphscope graphscope/graphscope --namespace=default --version=0.11.0

在上述命令中,我们在 default 命名空间下安装了 0.11.0 版本的 GraphScope 实例,且实例名字为 graphscope。

获取 GraphScope 服务的地址

由于第一次安装 Chart 的过程中会拉取镜像,因此需要等待几分钟时间,这期间你可以通过多次执行 helm test 命令来观察状态:

$ helm test graphscope
NAME: graphscope
LAST DEPLOYED: Wed Mar 30 21:02:51 2022
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE:     graphscope-test-rpc-service
Last Started:   Thu Mar 17 13:10:39 2022
Last Completed: Thu Mar 17 13:10:46 2022
Phase:          Succeeded
NOTES:
The GraphScope has been deployed.

如果状态输出如上述所示,代表本地 GraphScope 实例已经安装成功,接下来以 default 命令空间为例,此时我们可以获取当前实例的服务地址:

$ export NODE_IP=$(kubectl --namespace default get pod -l graphscope.coordinator.name=graphscope-coordinator --no-headers=true | awk '/ /{print $1}' | xargs kubectl --namespace default get pod -o jsonpath="{.status.hostIP}")

$ export NODE_PORT=$(kubectl --namespace default get services -o jsonpath="{.spec.ports[0].nodePort}" graphscope-coordinator-service)

$ echo "GraphScope service listen on ${NODE_IP}:${NODE_PORT}"
GraphScope service listen on 192.168.0.65:30262

上述命令较为繁琐,不用担心,GraphScope Chart 安装成功后的控制台会显示服务获取所对应的命令,你只需要复制执行这些命令即可。

使用客户端连接服务

服务地址(在上述命令中是 192.168.0.65:30262)获取后,我们便可以使用 GraphScope Python 客户端连接到该服务:

>>> import graphscope
>>> graphscope.set_option(show_log=True)
>>> # sess = graphscope.session(addr='<ip>:<port>')
>>> sess = graphscope.session(addr='192.168.0.65:30262')
Connecting graphscope session with address: 192.168.0.65:30262
GraphScope coordinator service connected.

与通过 Python 客户端拉起 GraphScope 的方式不同,使用 Helm 工具部署的 GraphScope 实例不会和客户端的生命周期强绑定,因此我们可以多次的通过客户端连接到一个以 Helm 部署的 GraphScope 实例上,但同一时刻只能有一个客户端连接到该服务。

>>> import graphscope
>>> sess1 = graphscope.session(addr='192.168.0.65:30262')
>>> sess1.close()  # 前一个 session 关闭后,才允许后续 session 连接
>>> sess2 = graphscope.session(addr='192.168.0.65:30262')

释放 GraphScope 实例

释放实例只需要对应的实例名字:

$ helm uninstall graphscope
release "graphscope" uninstalled

参数配置

通过 Helm 部署 GraphScope 的方式同样可以配置定制集群的参数,如 CPU、内存,以及挂载卷等。目前支持的参数配置请参考values.yaml 文件。 这里我们以挂载数据集为例,说明如何通过 values.yaml 来配置 GraphScope Chart,这也是使用过程中最常见的情况之一。

首先我们需要创建values.yaml文件,文件内容如下:

volumes:
  enabled: true
  items:
    data:
      type: hostPath
      field:
        type: Directory
        path: /testingdata
      mounts:
      - mountPath: /tmp/testingdata

上述描述 volumes 将使用 K8s Hostpath 类型卷,并将对应节点的 /testingdata 路径挂载到 GraphScope 实例中的 /tmp/testingdata 路径上,有关挂载卷的详细细节可参考K8s 官方文档

接下来,我们便可以在安装 GraphScope Chart 的时候指定上述 values.yaml 文件:

$ helm install graphscope graphscope/graphscope -f values.yaml

其它有关资源的配置,如 CPU 和内存,同样可参考GraphScope 配置文件进行配置。

离线使用 Helm charts

如果服务器没有外网,就无法通过配置 Helm repo 的方式安装 GraphScope。这时,需要在有外网的机器上下载集群安装需要用到的 chart 文件,再拷贝到服务器上,以 0.11.0 版本为例,下载命令如下:

$  wget https://graphscope.oss-cn-beijing.aliyuncs.com/charts/graphscope-0.11.0.tgz

下载完成后,可自行拷贝到服务器对应的目录并解压,解压完成后,可以通过 helm install 命令使用这些 charts 安装 GraphScope 实例,命令如下。需要注意的是,安装实例的过程需要服务器预先下载好镜像,可参考这篇文章的离线部署章节进行预下载。

$ tar zxvf graphscope-0.11.0.tgz
$ helm install graphscope ./graphscope --namespace=default

结语

本文重点介绍了如何使用 GraphScope 客户端连接到一个通过 Helm 工具部署的 GraphScope 集群。此外,GraphScope 后续也会通过 GraphScope Operator 的方式让用户在 Kubernetes 上对 GraphScope 的部署、运维和使用更加简单,欢迎持续关注 GraphScope。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 224,467评论 6 522
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 96,079评论 3 402
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 171,600评论 0 366
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 60,835评论 1 300
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 69,848评论 6 399
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 53,348评论 1 314
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 41,735评论 3 428
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 40,705评论 0 279
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 47,238评论 1 324
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 39,268评论 3 345
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 41,395评论 1 354
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 37,012评论 5 350
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 42,704评论 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 33,177评论 0 25
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 34,309评论 1 275
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 49,925评论 3 381
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 46,457评论 2 365

推荐阅读更多精彩内容