在现有Vineyard集群上部署¶
如果您已经部署了一个vineyard集群,可以轻松地在现有集群上部署GraphScope,并通过多个GraphScope会话复用vineyard中的数据(如图数据)。这样您就能将图数据加载到现有的vineyard集群中,然后在多个GraphScope会话中重复使用,无需为每个会话单独部署vineyard集群。
创建一个默认的GraphScope会话¶
如果您创建一个默认的GraphScope会话,所有引擎(包括Vineyard)都会捆绑在同一个pod中,这样它们就可以部署在Kubernetes集群内的任何节点上。然而,这会创建一个封闭的Vineyard集群,该集群仅能被GraphScope会话访问。当会话关闭时,Vineyard集群也会被删除,其他GraphScope会话将无法访问它。
将GraphScope会话连接到现有的vineyard集群以实现数据共享¶
上图显示,GraphScope会话可以共享同一vineyard集群中的数据,因为不同会话中的引擎部署在Kubernetes集群内的同一节点上,并连接到相同的vineyard套接字。只要vineyard集群保持运行,多个会话就可以重复使用同一张图。这是vineyard在Kubernetes上的常见使用模式。
如果您不想长时间保留vineyard集群,可以将vineyard集群中的图数据存储到持久化存储中,待需要时再从持久化存储加载到vineyard集群。更多详情请参阅Kubernetes集群上的图数据持久化存储。
接下来提供逐步指导说明如何完成此操作。
前提条件¶
在开始之前,请确保您已具备以下条件:
Linux 或 macOS 系统。
Python 3.7 ~ 3.11。
安装GraphScope客户端¶
GraphScope的部署由Python API管理,请确保您已安装GraphScope的Python包。
python3 -m pip install graphscope-client
详情请参阅安装GraphScope客户端。
准备一个Kubernetes集群¶
如果您手头没有Kubernetes集群,我们推荐使用minikube。
详情请参阅准备Kubernetes集群。
部署Vineyard集群¶
为了简化vineyard集群的部署,您需要安装vineyard软件包。
python3 -m pip install vineyard
默认情况下,Vineyard集群包含三个Vineyard实例和三个etcd实例。但由于Kubernetes集群中只有一个节点,我们需要通过replicas和etcd_replicas参数来指定Vineyard实例和etcd实例的数量。注意不要将Vineyard实例和etcd实例的数量设置为超过Kubernetes集群中的节点数。此外,vineyard副本数和引擎pod数可以独立设置。
按如下方式创建并检查命名空间 vineyard-system。
$ kubectl create namespace vineyard-system
namespace/vineyard-system created
$ kubectl get namespace vineyard-system
NAME STATUS AGE
vineyard-system Active 33s
要部署一个包含一个Vineyard实例和一个etcd实例的简单Vineyard集群,请按照以下步骤操作:
import vineyard
# The default deployment name is `vineyardd-sample` and the default namespace is `vineyard-system`. Also, you can specify the deployment name and namespace by `name` parameter and `namespace` parameter. For more details about the parameters, please refer to the doc of vineyardctl
# https://github.com/v6d-io/v6d/blob/main/k8s/cmd/README.md
# Notice, all character `-` in the parameter of vineyardctl should be replaced with `_` in the python API
vineyard.deploy.vineyardctl.deploy.vineyard_deployment(
replicas=1,
)
然后你可以在命名空间 vineyard-system 中获得一个包含一个vineyard实例和一个etcd实例的vineyard集群。
按以下步骤检查所有vineyard pods。
$ kubectl get pod -n vineyard-system
NAME READY STATUS RESTARTS AGE
etcd0 1/1 Running 0 73m
vineyardd-sample-5db59987f-vr2fg 1/1 Running 0 73m
Vineyard集群的生命周期¶
如果您通过vineyardctl API部署vineyard集群,该集群将持续存在,直到您手动删除它。退出GraphScope会话不会影响vineyard集群。您可以使用以下命令删除vineyard集群:
import vineyard
vineyard.deploy.vineyardctl.delete.vineyard_deployment()
但是,如果您没有预先部署vineyard集群,它会在您创建具有指定vineyard部署名称和命名空间的GraphScope会话时被创建。当您关闭GraphScope会话时,该vineyard集群将被删除。
将数据集加载到Kubernetes集群¶
根据Kubernetes集群的创建方式,您可能需要采取不同的步骤使数据集在集群内可用。如果集群不是使用minikube创建的,您需要将数据集复制到Kubernetes集群的节点上或挂载到节点上。另一方面,如果集群是使用minikube创建的,您可以直接将数据集挂载到minikube虚拟机,无需进行额外的复制或挂载操作。
将数据集下载到本地机器。
$ git clone https://github.com/GraphScope/gstest.git
然后将数据集挂载到minikube虚拟机。
提示
挂载进程必须保持活动状态才能访问挂载点。在将图加载到vineyard集群之前,请不要停止挂载进程。
$ minikube mount $(pwd)/gstest:/testingdata
将图数据加载到现有的vineyard集群¶
您可以创建一个GraphScope会话,然后指定k8s_namespace和k8s_vineyard_deployment参数来连接目标vineyard集群。接着按以下方式将图数据加载到现有的vineyard集群中。图数据加载完成后,您可以获取其vineyard ID以便通过另一个GraphScope会话重新加载。
import os
import graphscope
from graphscope.dataset import load_modern_graph
k8s_volumes = {
"data": {
"type": "hostPath",
"field": {
"path": "/testingdata",
"type": "Directory"
},
"mounts": {
"mountPath": "/testingdata"
}
}
}
# the step will be long as it will create a graphscope cluster
# Make sure the vineyard cluster is created before creating the GraphScope session
# if it's not exist, a new vineyard cluster will be created and the graph will be loaded to the new vineyard cluster
sess = graphscope.session(
k8s_namespace='vineyard-system',
k8s_vineyard_deployment='vineyardd-sample',
k8s_volumes=k8s_volumes
)
# load a graph to the vineyard cluster
graph = load_modern_graph(sess, "/testingdata/modern_graph")
# print the vineyard id of the graph
print(graph.vineyard_id)
连接到现有的vineyard集群并使用另一个GraphScope会话¶
创建一个新的GraphScope会话,并指定k8s_namespace和k8s_vineyard_deployment连接到上一个GraphScope会话所关联的vineyard集群。同时,您需要记住该图的vineyard id,然后在新GraphScope会话中使用该vineyard id加载图数据。
import graphscope
import vineyard
# the step will be long as it will create a graphscope cluster
new_sess = graphscope.session(
k8s_namespace='vineyard-system',
k8s_vineyard_deployment='vineyardd-sample',
)
# Use the vineyard id of the graph the last GraphScope session loaded
# assume the vineyard id is 22731319746904674, you can load it as follows
graph = new_sess.load_from(vineyard.ObjectID(22731319746904674))
按以下步骤检查图表。
>> graph
graphscope.Graph
ARROW_PROPERTY
VERTEX: person
VERTEX: software
EDGE: knows src: person dst: person
EDGE: created src: person dst: software
如果您看到上述输出,这意味着您已成功通过新的GraphScope会话在vineyard集群中复用了现有图数据。之后您可以在该图上运行各种图算法。
清理¶
通过以下方式删除Vineyard集群
# the default vineyard deployment name is `vineyardd-sample` and namespace is `vineyard-system`, if you don't specify the arguments when you create the vineyard cluster, you can delete it as follows
vineyard.deploy.vineyardctl.delete.vineyard_deployment()
通过以下方式删除GraphScope集群
sess.close()
new_sess.close()
按照以下步骤删除由minikube创建的Kubernetes集群。
minikube delete