code: def _create_service(self):
      scheduler_cfg = MarsSchedulerSpecConfig(
          self._image,
          self._scheduler_num,
          cpu=self._scheduler_cpu,
          memory=self._scheduler_mem,
          node_selectors=self._node_selectors,
          modules=self._scheduler_extra_modules,
      )
      scheduler_cfg.add_simple_envs(self._scheduler_extra_env)
  
      worker_cfg = MarsWorkerSpecConfig(
          self._image,
          self._worker_num,
          cpu=self._worker_cpu,
          memory=self._worker_mem,
          cache_mem=self._worker_cache_mem,
          spill_dirs=self._worker_spill_paths,
          node_selectors=self._node_selectors,
          modules=self._worker_extra_modules,
      )
      worker_cfg.add_simple_envs(self._worker_extra_env)
  
      web_cfg = MarsWebSpecConfig(
          self._image,
          self._web_num,
          cpu=self._web_cpu,
          memory=self._web_mem,
          node_selectors=self._node_selectors,
          modules=self._web_extra_modules,
      )
      web_cfg.add_simple_envs(self._web_extra_env)
  
      job_cfg = MarsJobConfig(
          job_name=self._job_name,
          scheduler_config=scheduler_cfg,
          worker_config=worker_cfg,
          web_config=web_cfg,
          web_host=self._slb_endpoint,
      )
  
      api, version = KUBEDL_API_VERSION.rsplit("/", 1)
  
      cfg_json = job_cfg.build()
      cfg_json["apiVersion"] = KUBEDL_API_VERSION
  
      response = self._custom_api.create_namespaced_custom_object(
          api, version, self._namespace, KUBEDL_MARS_PLURAL, cfg_json
      )
      self._job_name = response["metadata"]["name"]
  
imports: import logging
  import time
  import warnings
  import requests
  from ...session import new_session
  from .config import MarsSchedulerSpecConfig, MarsWorkerSpecConfig, MarsWebSpecConfig, MarsJobConfig
label_desc: Use image node_id 4 for calling the KubeDLCluster obj's underlying member method code with example usage: obj._create_service() without return types