Пример #1
0
    def _create_engine_replicaset(self):
        logger.info("Launching GraphScope engines pod ...")
        labels = {"name": self._engine_name}
        # create engine replicaset
        engine_builder = self._gs_engine_builder_cls(
            name=self._engine_name,
            labels=labels,
            num_workers=self._num_workers,
            image_pull_policy=self._image_pull_policy,
        )
        # volume1 is for vineyard ipc socket
        # MaxGraph: /home/maxgraph/data/vineyard
        engine_builder.add_volume(
            VolumeBuilder(
                name="vineyard-ipc-volume",
                type="emptyDir",
                field={},
                mounts_list=[
                    {
                        "mountPath": "/tmp/vineyard_workspace"
                    },
                    {
                        "mountPath": "/home/maxgraph/data/vineyard"
                    },
                ],
            ))
        # volume2 is for shared memory
        engine_builder.add_volume(
            VolumeBuilder(
                name="host-shm",
                type="emptyDir",
                field={"medium": "Memory"},
                mounts_list=[{
                    "mountPath": "/dev/shm"
                }],
            ))
        # volumes for test data
        for name, volume in self._volumes.items():
            volume_builder = resolve_volume_builder(name, volume)
            if volume_builder is not None:
                engine_builder.add_volume(volume_builder)

        # add env
        engine_builder.add_simple_envs({"GLOG_v": str(self._glog_level)})
        # add vineyard container
        engine_builder.add_vineyard_container(
            self._vineyard_container_name,
            self._gs_image,
            self._vineyard_cpu,
            self._vineyard_mem,
            self._vineyard_shared_mem,
            self._etcd_endpoint,
            self._vineyard_service_port,
        )
        # add engine container
        engine_builder.add_engine_container(
            self._engine_container_name,
            self._gs_image,
            self._engine_cpu,
            self._engine_mem,
        )
        for name in self._image_pull_secrets:
            engine_builder.add_image_pull_secret(name)

        self._resource_object.append(
            self._app_api.create_namespaced_replica_set(
                self._namespace, engine_builder.build()))
Пример #2
0
    def _create_engine_replicaset(self):
        logger.info("Launching GraphScope engines pod ...")

        labels = {
            "app.kubernetes.io/name": "graphscope",
            "app.kubernetes.io/instance": self._instance_id,
            "app.kubernetes.io/version": __version__,
            "app.kubernetes.io/component": "engine",
        }

        # create engine replicaset
        engine_builder = self._gs_engine_builder_cls(
            name=self._engine_name,
            labels=labels,
            num_workers=self._num_workers,
            image_pull_policy=self._saved_locals["image_pull_policy"],
        )
        # volume1 is for vineyard ipc socket
        # MaxGraph: /home/maxgraph/data/vineyard
        if self._exists_vineyard_daemonset(
                self._saved_locals["vineyard_daemonset"]):
            vineyard_socket_volume_type = "hostPath"
            vineyard_socket_volume_fields = {
                "type":
                "Directory",
                "path":
                "/var/run/vineyard-%s-%s" % (
                    self._saved_locals["namespace"],
                    self._saved_locals["vineyard_daemonset"],
                ),
            }
        else:
            vineyard_socket_volume_type = "emptyDir"
            vineyard_socket_volume_fields = {}
        engine_builder.add_volume(
            VolumeBuilder(
                name="vineyard-ipc-volume",
                volume_type=vineyard_socket_volume_type,
                field=vineyard_socket_volume_fields,
                mounts_list=[
                    {
                        "mountPath": "/tmp/vineyard_workspace"
                    },
                ],
            ))
        # volume2 is for shared memory
        engine_builder.add_volume(
            VolumeBuilder(
                name="host-shm",
                volume_type="emptyDir",
                field={"medium": "Memory"},
                mounts_list=[{
                    "mountPath": "/dev/shm"
                }],
            ))

        # Mount aliyun demo dataset bucket
        if self._saved_locals["mount_dataset"] is not None:
            self._volumes["dataset"] = {
                "type": "emptyDir",
                "field": {},
                "mounts": {
                    "mountPath": self._saved_locals["mount_dataset"],
                    "readOnly": True,
                    "mountPropagation": "HostToContainer",
                },
            }

        # Mount user specified volumes
        for name, volume in self._volumes.items():
            volume_builder = resolve_volume_builder(name, volume)
            if volume_builder is not None:
                engine_builder.add_volume(volume_builder)

        # add env
        env = {
            "GLOG_v":
            str(self._glog_level),
            "VINEYARD_IPC_SOCKET":
            os.path.join(get_tempdir(), "vineyard_workspace", "vineyard.sock"),
            "WITH_VINEYARD":
            "ON",
            "PATH":
            os.environ["PATH"],
            "LD_LIBRARY_PATH":
            os.environ["LD_LIBRARY_PATH"],
            "DYLD_LIBRARY_PATH":
            os.environ["DYLD_LIBRARY_PATH"],
        }
        if "OPAL_PREFIX" in os.environ:
            env.update({"OPAL_PREFIX": os.environ["OPAL_PREFIX"]})
        if "OPAL_BINDIR" in os.environ:
            env.update({"OPAL_BINDIR": os.environ["OPAL_BINDIR"]})

        engine_builder.add_simple_envs(env)

        # add engine container
        engine_builder.add_engine_container(
            cmd=["tail", "-f", "/dev/null"],
            name=self._engine_container_name,
            image=self._saved_locals["gs_image"],
            cpu=self._saved_locals["engine_cpu"],
            mem=self._saved_locals["engine_mem"],
            preemptive=self._saved_locals["preemptive"],
        )

        # add vineyard container
        if not self._exists_vineyard_daemonset(
                self._saved_locals["vineyard_daemonset"]):
            engine_builder.add_vineyard_container(
                name=self._vineyard_container_name,
                image=self._saved_locals["gs_image"],
                cpu=self._saved_locals["vineyard_cpu"],
                mem=self._saved_locals["vineyard_mem"],
                shared_mem=self._saved_locals["vineyard_shared_mem"],
                preemptive=self._saved_locals["preemptive"],
                etcd_endpoints=self._get_etcd_endpoints(),
                port=self._vineyard_service_port,
            )

        # add mars worker container
        if self._saved_locals["with_mars"]:
            engine_builder.add_mars_worker_container(
                name=self._mars_worker_container_name,
                image=self._saved_locals["gs_image"],
                cpu=self._saved_locals["mars_worker_cpu"],
                mem=self._saved_locals["mars_worker_mem"],
                preemptive=self._saved_locals["preemptive"],
                port=self._mars_worker_port,
                scheduler_endpoint="%s:%s" %
                (self._mars_service_name, self._mars_scheduler_port),
            )

        if self._saved_locals["mount_dataset"]:
            engine_builder.add_container({
                "name":
                "dataset",
                "image":
                self._saved_locals["dataset_image"],
                "imagePullPolicy":
                self._saved_locals["image_pull_policy"],
                "resources": {
                    "requests": {
                        "memory": "64Mi",
                        "cpu": "250m",
                    },
                    "limits": {
                        "memory": "64Mi",
                        "cpu": "250m",
                    },
                },
                "volumeMounts": [{
                    "name": "dataset",
                    "mountPath": "/dataset",
                    "mountPropagation": "Bidirectional",
                }],
                "securityContext": {
                    "privileged": True
                },
            })
        for name in self._image_pull_secrets:
            engine_builder.add_image_pull_secret(name)

        self._resource_object.append(
            self._app_api.create_namespaced_replica_set(
                self._saved_locals["namespace"], engine_builder.build()))