code: def start(self):
      try:
          self._create_namespace()
          self._create_roles_and_bindings()
  
          self._create_services()
          self._create_kube_service()
  
          self._wait_services_ready()
  
          self._external_web_endpoint = self._get_web_address()
          self._wait_web_ready()
          return self._external_web_endpoint
      except:  # noqa: E722
          if self._log_when_fail:  # pargma: no cover
              logger.error("Error when creating cluster")
              for name, log in self._load_cluster_logs().items():
                  logger.error("Error logs for %s:\n%s", name, log)
          self.stop()
          raise
  
imports: import asyncio
  import functools
  import logging
  import random
  import time
  import uuid
  from urllib.parse import urlparse
  from ...lib.aio import new_isolation, stop_isolation
  from ...services.cluster.api import WebClusterAPI
  from ...session import new_session
  from ...utils import calc_size_by_str
  from ..utils import wait_services_ready
  from .config import NamespaceConfig, RoleConfig, RoleBindingConfig, ServiceConfig, MarsSupervisorsConfig, MarsWorkersConfig
label_desc: Use image node_id 15 for calling the KubernetesCluster obj's underlying member method code with example usage: obj.start() and returns: self