在K8s集群上部署¶
为了在分布式环境中处理大规模图数据,GraphScope被设计为可部署在Kubernetes(K8s)集群上。
如图所示,您可以通过Python客户端部署和管理GraphScope的工作负载,该客户端通过gRPC服务与K8s集群上的GraphScope引擎进行通信。
GraphScope 在 Kubernetes 上的部署。¶
k8s上的集群包含一个运行协调器的pod,以及一个GraphScope引擎的deployment。
GraphScope中的协调器是后端的端点。它通过grpc管理来自Python客户端的连接,并负责为交互式、分析和学习引擎申请或释放pod资源。
本文档介绍如何在K8s集群上部署GraphScope。
前提条件¶
Linux 或 macOS 系统。
Python 3.7 ~ 3.11。
安装GraphScope客户端¶
与独立模式不同,您只需安装GraphScope的客户端包。
python3 -m pip install graphscope-client
提示
如需加速下载,可使用阿里云镜像。
python3 -m pip install graphscope-client -i http://mirrors.aliyun.com/pypi/simple/ \
--trusted-host=mirrors.aliyun.com
准备一个Kubernetes集群¶
要在Kubernetes上部署GraphScope,您必须拥有一个kubernetes集群。
提示
如果您已经拥有K8s集群,可以直接跳过本节继续部署。
我们推荐使用minikube。 请按照minikube的说明为您的平台下载合适的二进制文件。
然后,通过以下命令启动minikube
minikube start
在macOS上,您可以直接使用Docker Desktop,它包含一个独立的Kubernetes服务器和客户端。
使用此命令验证minikube是否正在运行。
minikube status
正常状态应如下所示
minikube 状态¶
输出应显示集群正在运行,且kubectl上下文已设置为minikube上下文。 启动后,minikube会生成一个kubeconfig文件供您与集群通信和交互。
该文件的默认位置是 ~/.kube/config,其内容应如下所示:
apiVersion: v1
clusters:
- cluster:
certificate-authority: /root/.minikube/ca.crt
extensions:
- extension:
last-update: Thu, 16 Mar 2023 16:44:05 CST
provider: minikube.sigs.k8s.io
version: v1.28.0
name: cluster_info
server: https://172.21.67.111:8443
name: minikube
contexts:
- context:
cluster: minikube
extensions:
- extension:
last-update: Thu, 16 Mar 2023 16:44:05 CST
provider: minikube.sigs.k8s.io
version: v1.28.0
name: context_info
namespace: default
user: minikube
name: minikube
current-context: minikube
kind: Config
preferences: {}
users:
- name: minikube
user:
client-certificate: /root/.minikube/profiles/minikube/client.crt
client-key: /root/.minikube/profiles/minikube/client.key
部署GraphScope¶
使用默认参数启动¶
GraphScope的引擎以Docker镜像形式分发。graphscope Python客户端会在镜像不存在时自动拉取。如果您在k8s集群上运行GraphScope,请确保集群能够访问公共镜像仓库。
会话(session)封装了GraphScope引擎的控制和状态。它作为Python客户端访问GraphScope的入口点。通过会话,您可以在k8s集群上部署和连接GraphScope。
import graphscope
sess = graphscope.session()
默认情况下,它会在~/.kube/config中查找kubeconfig文件,将使用上一步中由minikube生成的文件。
如上所示,一个会话可以轻松在k8s上启动集群。
常用参数¶
自定义镜像URI¶
考虑到您可能希望使用默认标签以外的其他标签,或在无法访问互联网的内网环境中部署,可能需要自定义镜像URI。
您可以通过一组与镜像相关的参数来配置引擎的镜像URI。默认配置如下:
sess = graphscope.session(
k8s_image_registry="registry.cn-hongkong.aliyuncs.com",
k8s_image_repository="graphscope",
k8s_image_tag="0.20.0",
)
更多详情请参阅Session。
指定工作节点数量¶
GraphScope 旨在处理无法容纳在单个工作节点内存中的超大规模图数据。要处理此类图数据,您可以增加工作节点数量以及各节点的CPU和内存资源。
要实现这一点,请使用num_workers参数:
sess = graphscope.session(
num_workers=4,
k8s_engine_cpu=32,
k8s_engine_mem="256Gi",
vineyard_shared_mem="256Gi",
)
提供默认以外的kubeconfig配置文件¶
如果您想在已有集群上部署,且kubeconfig文件位于非默认位置,可以手动指定kubeconfig文件路径如下:
sess = graphscope.session(k8s_client_config='/path/to/config')
挂载卷¶
有时您可能希望使用本地磁盘上的数据集,为此我们提供了将主机目录挂载到集群的选项。
假设我们希望将主机上的~/test_data挂载到pod中的/testingdata目录,可以按如下方式定义一个dict,然后将其作为k8s_volumes参数传入session构造函数。
请注意,主机路径是相对于Kubernetes节点的,也就是说,如果您有一个通过VM驱动创建的集群,那么您需要将该目录复制到minikube虚拟机,或者将该路径挂载到minikube虚拟机。更多详情请参见此处。
import os
import graphscope
k8s_volumes = {
"data": {
"type": "hostPath",
"field": {
"path": os.path.expanduser("~/test_data/"),
"type": "Directory"
},
"mounts": {
"mountPath": "/testingdata"
}
}
}
sess = graphscope.session(k8s_volumes=k8s_volumes)
检查部署情况¶
GraphScope的启动时间取决于拉取所需Docker镜像的耗时。 拉取时间受网络条件影响。 一旦镜像拉取完成,GraphScope将在10秒内完成启动并运行。
使用以下命令监控部署状态:
kubectl get pods
输出应显示GraphScope pod的状态。以下是一个示例
GraphScope的Pods¶
在继续之前,请等待所有pod都处于运行状态。
您可以使用kubectl describe pod 进一步检查pod的状态。
搞定!您现在已经在Kubernetes集群中运行了一个GraphScope实例。
您可以像往常一样使用GraphScope分析图数据。 更多详情请参阅入门指南。
清理¶
当您完成使用GraphScope后,可以通过执行以下命令来移除部署。
sess.close()
您可以通过以下方式检查是否还有剩余资源:
kubectl get deployments
kubectl get statefulsets
kubectl get svc
如果仍有资源剩余,您可能需要手动删除它们:
kubectl delete deployment <deployment-name>
kubectl delete statefulsets <statefulsets-name>
kubectl delete svc <svc-name>
要停止并删除minikube集群,请运行:
minikube stop
minikube delete