def terminate_node(self, node_id): logger.info(log_prefix + "calling delete_namespaced_pod") core_api().delete_namespaced_pod(node_id, self.namespace) try: core_api().delete_namespaced_service(node_id, self.namespace) except ApiException: pass try: extensions_beta_api().delete_namespaced_ingress( node_id, self.namespace, ) except ApiException: pass
def create_node(self, node_config, tags, count): conf = node_config.copy() pod_spec = conf.get("pod", conf) service_spec = conf.get("service") ingress_spec = conf.get("ingress") node_uuid = str(uuid4()) tags[TAG_RAY_CLUSTER_NAME] = self.cluster_name tags["ray-node-uuid"] = node_uuid pod_spec["metadata"]["namespace"] = self.namespace if "labels" in pod_spec["metadata"]: pod_spec["metadata"]["labels"].update(tags) else: pod_spec["metadata"]["labels"] = tags logger.info(log_prefix + "calling create_namespaced_pod " "(count={}).".format(count)) new_nodes = [] for _ in range(count): pod = core_api().create_namespaced_pod(self.namespace, pod_spec) new_nodes.append(pod) new_svcs = [] if service_spec is not None: logger.info(log_prefix + "calling create_namespaced_service " "(count={}).".format(count)) for new_node in new_nodes: metadata = service_spec.get("metadata", {}) metadata["name"] = new_node.metadata.name service_spec["metadata"] = metadata service_spec["spec"]["selector"] = {"ray-node-uuid": node_uuid} svc = core_api().create_namespaced_service( self.namespace, service_spec) new_svcs.append(svc) if ingress_spec is not None: logger.info(log_prefix + "calling create_namespaced_ingress " "(count={}).".format(count)) for new_svc in new_svcs: metadata = ingress_spec.get("metadata", {}) metadata["name"] = new_svc.metadata.name ingress_spec["metadata"] = metadata ingress_spec = _add_service_name_to_service_port( ingress_spec, new_svc.metadata.name) extensions_beta_api().create_namespaced_ingress( self.namespace, ingress_spec)