Skip to content

Commit b47f1e6

Browse files
authored
Add a parameter to helm to use prelaunched vineyar DaemonSet. (#204)
Signed-off-by: Tao He <[email protected]>
1 parent d64742c commit b47f1e6

File tree

8 files changed

+82
-19
lines changed

8 files changed

+82
-19
lines changed

charts/graphscope/templates/coordinator.yaml

+2
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,8 @@ spec:
108108
- {{ .Values.engines.gie.graph_manager.resources.requests.cpu | quote }}
109109
- "--k8s_gie_graph_manager_mem"
110110
- {{ .Values.engines.gie.graph_manager.resources.requests.memory }}
111+
- "--k8s_vineyard_daemonset"
112+
- {{ .Values.vineyard.daemonset }}
111113
- "--k8s_vineyard_cpu"
112114
- {{ .Values.vineyard.resources.requests.cpu | quote }}
113115
- "--k8s_vineyard_mem"

charts/graphscope/values.yaml

+6
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,12 @@ engines:
8484

8585

8686
vineyard:
87+
# When `vineyard.daemonset` is set to the Helm release name, the coordinator will
88+
# tries to discover the vineyard DaemonSet in current namespace, then use it if
89+
# found, and fallback to bundled vineyard container otherwise.
90+
#
91+
# The vineyard IPC socket is placed on host at /var/run/vineyard-{namespace}-{release}.
92+
daemonset: ""
8793
image:
8894
name: registry.cn-hongkong.aliyuncs.com/graphscope/graphscope
8995
# Overrides the image tag whose default is the chart appVersion.

coordinator/gscoordinator/cluster.py

+49-19
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,7 @@ def __init__(
170170
gie_graph_manager_mem=None,
171171
engine_cpu=None,
172172
engine_mem=None,
173+
vineyard_daemonset=None,
173174
vineyard_cpu=None,
174175
vineyard_mem=None,
175176
vineyard_shared_mem=None,
@@ -203,12 +204,6 @@ def __init__(
203204
self._gie_graph_manager_name = (
204205
self._gie_graph_manager_name_prefix + self._instance_id
205206
)
206-
self._gie_graph_manager_service_name = (
207-
self._gie_graph_manager_service_name_prefix + self._instance_id
208-
)
209-
self._vineyard_service_name = (
210-
self._vineyard_service_name_prefix + self._instance_id
211-
)
212207

213208
self._namespace = namespace
214209
self._service_type = service_type
@@ -226,6 +221,7 @@ def __init__(
226221
self._engine_mem = engine_mem
227222

228223
# vineyard container info
224+
self._vineyard_daemonset = vineyard_daemonset
229225
self._vineyard_cpu = vineyard_cpu
230226
self._vineyard_mem = vineyard_mem
231227
self._vineyard_shared_mem = vineyard_shared_mem
@@ -278,6 +274,17 @@ def __init__(
278274
self._graphlearn_services = dict()
279275
self._learning_instance_processes = {}
280276

277+
# component service name
278+
self._gie_graph_manager_service_name = (
279+
self._gie_graph_manager_service_name_prefix + self._instance_id
280+
)
281+
if self._exists_vineyard_daemonset(self._vineyard_daemonset):
282+
self._vineyard_service_name = self._vineyard_daemonset + "-rpc"
283+
else:
284+
self._vineyard_service_name = (
285+
self._vineyard_service_name_prefix + self._instance_id
286+
)
287+
281288
def __del__(self):
282289
self.stop()
283290

@@ -318,11 +325,21 @@ def _create_engine_replicaset(self):
318325
)
319326
# volume1 is for vineyard ipc socket
320327
# MaxGraph: /home/maxgraph/data/vineyard
328+
if self._exists_vineyard_daemonset(self._vineyard_daemonset):
329+
vineyard_socket_volume_type = "hostPath"
330+
vineyard_socket_volume_fields = {
331+
"type": "Directory",
332+
"path": "/var/run/vineyard-%s-%s"
333+
% (self._namespace, self._vineyard_daemonset),
334+
}
335+
else:
336+
vineyard_socket_volume_type = "emptyDir"
337+
vineyard_socket_volume_fields = {}
321338
engine_builder.add_volume(
322339
VolumeBuilder(
323340
name="vineyard-ipc-volume",
324-
type="emptyDir",
325-
field={},
341+
type=vineyard_socket_volume_type,
342+
field=vineyard_socket_volume_fields,
326343
mounts_list=[
327344
{"mountPath": "/tmp/vineyard_workspace"},
328345
{"mountPath": "/home/maxgraph/data/vineyard"},
@@ -347,16 +364,17 @@ def _create_engine_replicaset(self):
347364
# add env
348365
engine_builder.add_simple_envs({"GLOG_v": str(self._glog_level)})
349366
# add vineyard container
350-
engine_builder.add_vineyard_container(
351-
name=self._vineyard_container_name,
352-
image=self._gs_image,
353-
cpu=self._vineyard_cpu,
354-
mem=self._vineyard_mem,
355-
shared_mem=self._vineyard_shared_mem,
356-
preemptive=self._preemptive,
357-
etcd_endpoint=self._etcd_endpoint,
358-
port=self._vineyard_service_port,
359-
)
367+
if not self._exists_vineyard_daemonset(self._vineyard_daemonset):
368+
engine_builder.add_vineyard_container(
369+
name=self._vineyard_container_name,
370+
image=self._gs_image,
371+
cpu=self._vineyard_cpu,
372+
mem=self._vineyard_mem,
373+
shared_mem=self._vineyard_shared_mem,
374+
preemptive=self._preemptive,
375+
etcd_endpoint=self._etcd_endpoint,
376+
port=self._vineyard_service_port,
377+
)
360378
# add engine container
361379
engine_builder.add_engine_container(
362380
name=self._engine_container_name,
@@ -606,7 +624,8 @@ def _create_services(self):
606624
logger.info("Etcd is ready, endpoint is {}".format(self._etcd_endpoint))
607625

608626
self._create_engine_replicaset()
609-
self._create_vineyard_service()
627+
if not self._exists_vineyard_daemonset(self._vineyard_daemonset):
628+
self._create_vineyard_service()
610629

611630
def _waiting_for_services_ready(self):
612631
start_time = time.time()
@@ -796,6 +815,17 @@ def _delete_dangling_coordinator(self):
796815
)
797816
)
798817

818+
def _exists_vineyard_daemonset(self, release):
819+
# check if vineyard daemonset exists.
820+
if not release:
821+
return False
822+
try:
823+
self._app_api.read_namespaced_daemon_set(release, self._namespace)
824+
except K8SApiException:
825+
return False
826+
else:
827+
return True
828+
799829
def start(self):
800830
try:
801831
self._create_services()

coordinator/gscoordinator/coordinator.py

+7
Original file line numberDiff line numberDiff line change
@@ -818,6 +818,12 @@ def parse_sys_args():
818818
default="graphscope",
819819
help="A list of secret name, comma separated.",
820820
)
821+
parser.add_argument(
822+
"--k8s_vineyard_daemonset",
823+
type=str,
824+
default="",
825+
help="Try to use the existing vineyard DaemonSet with name 'k8s_vineyard_daemonset'.",
826+
)
821827
parser.add_argument(
822828
"--k8s_vineyard_cpu",
823829
type=float,
@@ -950,6 +956,7 @@ def launch_graphscope():
950956
gie_graph_manager_mem=args.k8s_gie_graph_manager_mem,
951957
engine_cpu=args.k8s_engine_cpu,
952958
engine_mem=args.k8s_engine_mem,
959+
vineyard_daemonset=args.k8s_vineyard_daemonset,
953960
vineyard_cpu=args.k8s_vineyard_cpu,
954961
vineyard_mem=args.k8s_vineyard_mem,
955962
vineyard_shared_mem=args.k8s_vineyard_shared_mem,

python/graphscope/client/session.py

+7
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,7 @@ def __init__(
168168
k8s_zookeeper_mem=gs_config.k8s_zookeeper_mem,
169169
k8s_gie_graph_manager_cpu=gs_config.k8s_gie_graph_manager_cpu,
170170
k8s_gie_graph_manager_mem=gs_config.k8s_gie_graph_manager_mem,
171+
k8s_vineyard_daemonset=gs_config.k8s_vineyard_daemonset,
171172
k8s_vineyard_cpu=gs_config.k8s_vineyard_cpu,
172173
k8s_vineyard_mem=gs_config.k8s_vineyard_mem,
173174
k8s_vineyard_shared_mem=gs_config.k8s_vineyard_shared_mem,
@@ -218,6 +219,10 @@ def __init__(
218219
219220
k8s_zookeeper_image (str, optional): The image of zookeeper, which used by GIE graph manager.
220221
222+
k8s_vineyard_daemonset (str, optional): The name of vineyard Helm deployment to use. GraphScope will try to
223+
discovery the daemonset from kubernetes cluster, then use it if exists, and fallback to launching
224+
a bundled vineyard container otherwise.
225+
221226
k8s_vineyard_cpu (float, optional): Minimum number of CPU cores request for vineyard container. Defaults to 0.5.
222227
223228
k8s_vineyard_mem (str, optional): Minimum number of memory request for vineyard container. Defaults to '512Mi'.
@@ -355,6 +360,7 @@ def __init__(
355360
"k8s_zookeeper_mem",
356361
"k8s_gie_graph_manager_cpu",
357362
"k8s_gie_graph_manager_mem",
363+
"k8s_vineyard_daemonset",
358364
"k8s_vineyard_cpu",
359365
"k8s_vineyard_mem",
360366
"k8s_vineyard_shared_mem",
@@ -729,6 +735,7 @@ def _connect(self):
729735
zookeeper_image=self._config_params["k8s_zookeeper_image"],
730736
image_pull_policy=self._config_params["k8s_image_pull_policy"],
731737
image_pull_secrets=self._config_params["k8s_image_pull_secrets"],
738+
vineyard_daemonset=self._config_params["k8s_vineyard_daemonset"],
732739
vineyard_cpu=self._config_params["k8s_vineyard_cpu"],
733740
vineyard_mem=self._config_params["k8s_vineyard_mem"],
734741
vineyard_shared_mem=self._config_params["k8s_vineyard_shared_mem"],

python/graphscope/config.py

+1
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ class GSConfig(object):
6464
k8s_gie_gremlin_server_mem = "1Gi"
6565

6666
# vineyard resource configuration
67+
k8s_vineyard_daemonset = ""
6768
k8s_vineyard_cpu = 0.5
6869
k8s_vineyard_mem = "512Mi"
6970
k8s_vineyard_shared_mem = "4Gi"

python/graphscope/deploy/kubernetes/cluster.py

+6
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,9 @@ class KubernetesCluster(object):
110110
gie_graph_manager_mem: str
111111
Minimum number of memory request for graph manager container.
112112
113+
vineyard_daemonset: str
114+
The name of Helm deployment for vineyard DaemonSet.
115+
113116
vineyard_cpu: float
114117
Minimum number of CPU cores request for vineyard container.
115118
@@ -174,6 +177,7 @@ def __init__(
174177
zookeeper_image=None,
175178
image_pull_policy=None,
176179
image_pull_secrets=None,
180+
vineyard_daemonset=None,
177181
vineyard_cpu=None,
178182
vineyard_mem=None,
179183
vineyard_shared_mem=None,
@@ -223,6 +227,7 @@ def __init__(
223227
self._gie_graph_manager_cpu = gie_graph_manager_cpu
224228
self._gie_graph_manager_mem = gie_graph_manager_mem
225229

230+
self._vineyard_daemonset = vineyard_daemonset
226231
self._vineyard_cpu = vineyard_cpu
227232
self._vineyard_mem = vineyard_mem
228233
self._vineyard_shared_mem = vineyard_shared_mem
@@ -464,6 +469,7 @@ def _create_coordinator(self):
464469
zookeeper_mem=self._zookeeper_mem,
465470
gie_graph_manager_cpu=self._gie_graph_manager_cpu,
466471
gie_graph_manager_mem=self._gie_graph_manager_mem,
472+
vineyard_daemonset=self._vineyard_daemonset,
467473
vineyard_cpu=self._vineyard_cpu,
468474
vineyard_mem=self._vineyard_mem,
469475
vineyard_shared_mem=self._vineyard_shared_mem,

python/graphscope/deploy/kubernetes/resource_builder.py

+4
Original file line numberDiff line numberDiff line change
@@ -1056,6 +1056,7 @@ def add_coordinator_container(
10561056
zookeeper_mem,
10571057
gie_graph_manager_cpu,
10581058
gie_graph_manager_mem,
1059+
vineyard_daemonset,
10591060
vineyard_cpu,
10601061
vineyard_mem,
10611062
vineyard_shared_mem,
@@ -1091,6 +1092,7 @@ def add_coordinator_container(
10911092
self._zookeeper_mem = zookeeper_mem
10921093
self._gie_graph_manager_cpu = gie_graph_manager_cpu
10931094
self._gie_graph_manager_mem = gie_graph_manager_mem
1095+
self._vineyard_daemonset = vineyard_daemonset
10941096
self._vineyard_cpu = vineyard_cpu
10951097
self._vineyard_mem = vineyard_mem
10961098
self._vineyard_shared_mem = vineyard_shared_mem
@@ -1200,6 +1202,8 @@ def build_container_command(self):
12001202
str(self._gie_graph_manager_cpu),
12011203
"--k8s_gie_graph_manager_mem",
12021204
self._gie_graph_manager_mem,
1205+
"--k8s_vineyard_daemonset",
1206+
str(self._vineyard_daemonset),
12031207
"--k8s_vineyard_cpu",
12041208
str(self._vineyard_cpu),
12051209
"--k8s_vineyard_mem",

0 commit comments

Comments
 (0)