Пример #1
0
def scheduler(name, node, namespace="default"):
    body = client.V1Binding()

    target = client.V1ObjectReference()
    target.kind = 'Node'
    target.apiVersion = 'v1'
    target.name = node

    meta = client.V1ObjectMeta()
    meta.name = name

    body.target = target
    body.metadata = meta

    try:
        # Method changed in clinet v6.0
        # return v1.create_namespaced_binding(body, namespace)
        # For v2.0
        res = v1.create_namespaced_binding_binding(name, namespace, body)
        if res:
            # print 'POD '+name+' scheduled and placed on '+node
            return True

    except Exception as a:
        print(
            "Exception when calling CoreV1Api->create_namespaced_binding: %s\n"
            % a)
        return False
Пример #2
0
def scheduler(name, model, ns):

    ##
    #Step 3 - Selecting a node
    ##
    node = get_nodes(model)
    logging.info("Putting {0} on {1} in namespace: {2}".format(name, node, ns))

    #
    #https://github.com/kubernetes-client/python/issues/547
    #https://github.com/kubernetes-client/python/issues/547#issuecomment-455362558
    ##

    target = client.V1ObjectReference()
    target.kind = "Node"
    target.apiVersion = "v1"
    target.name = node

    meta = client.V1ObjectMeta()
    meta.name = name
    body = client.V1Binding(target=target, metadata=meta)

    ##
    #Step 4 - Bind the pod to a node
    #Finished
    ##
    return v1_api.create_namespaced_binding(namespace=ns, body=body)
Пример #3
0
    def bind_to_node(self, pod_name, node_name, namespace='default'):
        """
        Bind Pod to a Node
        :param str pod_name: pod name which we are binding
        :param str node_name: node name which pod has to be binded
        :param str namespace: namespace of pod
        :return: True if pod was bound successfully, False otherwise
        """
        target = client.V1ObjectReference()
        target.kind = "Node"
        target.api_version = "v1"
        target.name = node_name

        meta = client.V1ObjectMeta()
        meta.name = pod_name
        body = client.V1Binding(target=target)
        body.target = target
        body.metadata = meta
        try:
            self.v1.create_namespaced_binding(namespace, body)
            return True
        except Exception as e:
            """
            create_namespaced_binding() throws exception:
            Invalid value for `target`, must not be `None`
            or 
            despite the fact this exception is being thrown,
            Pod is bound to a Node and Pod is running
            """
            print('here')
            print('exception' + str(e))
            return False
Пример #4
0
    def BindPodToNode(self, podname, node, ns):
        """ Binds a pod to a node to start the deployment process. """
        try:
            target = client.V1ObjectReference()
            target.kind = "Node"
            target.apiVersion = "v1"
            target.name = node

            meta = client.V1ObjectMeta()
            meta.name = podname
            body = client.V1Binding(target=target, metadata=meta)
            body.target = target
            body.metadata = meta

            return self.v1.create_namespaced_binding(namespace=ns, body=body)

        except ApiException as e:
            self.logger.error(
                f'Failed to bind pod {podname} to node {node} in namespace {ns}: {e}'
            )
            return False
        except ValueError as e:
            # This is not a real error. It's a problem in the API waiting to be fixed:
            # https://github.com/kubernetes-client/python/issues/547
            pass

        return True
def scheduler(name, node, namespace):
    
    target=client.V1ObjectReference(api_version='v1', kind="Node", name=node)
    meta=client.V1ObjectMeta()
    meta.name=name
    body=client.V1Binding(metadata=meta,  target=target)
    return core_api.create_namespaced_binding(namespace, body, _preload_content=False)
Пример #6
0
def schedule(name, node, namespace='default'):
    target = client.V1ObjectReference(kind = 'Node', api_version = 'v1', name = node)
    meta = client.V1ObjectMeta(name = name)
    body = client.V1Binding(target = target, metadata = meta)
    try:
        client.CoreV1Api().create_namespaced_binding(namespace=namespace, body=body)
    except ValueError:
        print ("Exception")
Пример #7
0
 def create_k8s_binding(name, node):
     target = client.V1ObjectReference()
     target.kind = "Node"
     target.apiVersion = "v1"
     target.name = node
     meta = client.V1ObjectMeta()
     meta.name = name
     body = client.V1Binding(metadata=meta, target=target)
     return body
def schedule_pod(cli, name):
    target = client.V1ObjectReference()
    target.kind = 'Node'
    target.apiVersion = 'v1'
    target.name = 'k3d-k3s-default-worker-1'
    meta = client.V1ObjectMeta()
    meta.name = name
    body = client.V1Binding(metadata=meta, target=target)
    return cli.create_namespaced_binding('default', body)
Пример #9
0
def scheduler(name, node, namespace='default'):
    target = client.V1ObjectReference()
    target.kind = 'Node'
    target.apiVersion = 'corev1'
    target.name = node
    print('target', target)
    meta = client.V1ObjectMeta()
    meta.name = name
    body = client.V1Binding(metadata=meta, target=target)
    return corev1.create_namespaced_binding(namespace=namespace, body=body)
Пример #10
0
 def schedule(self, name, node, namespace='default'):
     '''Create a binding object to schedule the pod.'''
     target = client.V1ObjectReference(kind='Node',
                                       api_version='v1',
                                       name=node)
     meta = client.V1ObjectMeta(name=name)
     body = client.V1Binding(target=target, metadata=meta)
     self.api.create_namespaced_binding(namespace=namespace,
                                        body=body,
                                        _preload_content=False)
def scheduler(name, node, namespace="custom-scheduler"):
    body = client.V1Binding()
    target = client.V1ObjectReference()
    target.kind = "Node"
    target.apiVersion = "v1"
    target.name = node
    meta = client.V1ObjectMeta()
    meta.name = name
    body.target = target
    body.metadata = meta
    return v1.create_namespaced_binding(namespace, body)
Пример #12
0
def scheduler(name, node, namespace='default'):
    body = client.V1Binding()
    target = client.V1ObjectReference()
    target.kind = 'Node'
    target.apiVersion = 'v1'
    target.name = node
    meta = client.V1ObjectMeta()
    meta.name = name
    body.target = target
    body.metadata = meta
    return v1.create_namespaced_binding(name, namespace, body)
Пример #13
0
def scheduler(name, node, namespace="default"):
    print(name)
    print(node)
    target=client.V1ObjectReference()
    target.kind="Node"
    target.apiVersion="v1"
    target.name= node
    meta=client.V1ObjectMeta()
    meta.name=name
    body=client.V1Binding(metadata=meta, target=target)
    return v1.create_namespaced_binding(namespace, body)
Пример #14
0
def scheduler(name, node, namespace="default"):
    target = client.V1ObjectReference(kind="Node", api_version="v1", name=node)
    meta = client.V1ObjectMeta(name=name)
    body = client.V1Binding(metadata=meta, target=target)

    print("assign {} to {}".format(body.target.name, body.metadata.name))
    res = None
    try:
        res = v1.create_namespaced_binding(namespace, body)
    except client.rest.ApiException:
        print('ValueError as Expected')
    finally:
        return res
Пример #15
0
def schedule_pod(pod_name, node_name):
    body = client.V1Binding(target=client.V1ObjectReference(kind="Node",
                                                            api_version="v1",
                                                            name=node_name),
                            metadata=client.V1ObjectMeta(name=pod_name))

    # From issue https://github.com/kubernetes-client/python/issues/547
    try:
        v1.create_namespaced_binding(namespace=namespace_name, body=body)
    except ValueError:
        pass

    print("Scheduled {} into {}".format(pod_name, node_name))
Пример #16
0
def scheduler(name, node, namespace='default'):
    target = client.V1ObjectReference()
    target.kind = "Node"
    target.api_version = "v1"
    target.name = node

    meta = client.V1ObjectMeta()
    meta.name = name

    body = client.V1Binding(metadata=meta, target=target)
    body.target = target
    body.metadata = meta

    return v1.create_namespaced_binding(namespace, body)
def scheduler(name, node, namespace):
    
    target=client.V1ObjectReference(api_version='v1', kind="Node", name=node)
    #target.kind="Node"
    #target.apiVersion="v1"
    #target.name= node
    #pprint(target)
    meta=client.V1ObjectMeta()
    meta.name=name
    #pprint(meta)
    body=client.V1Binding(metadata=meta,  target=target)
    #body.target=target
    #body.metadata=meta
    return apis_api.create_namespaced_binding(namespace, body, _preload_content=False)
Пример #18
0
def scheduler(t_name, t_node, t_namespace="default"):
    
    target = client.V1ObjectReference()
    
    target.kind = "Node"
    target.apiVersion = "v1"
    target.name = t_node

    meta = client.V1ObjectMeta()
    meta.name = t_name

    body = client.V1Binding(target=target, metadata=meta)

    return v1.create_namespaced_binding(namespace=t_namespace, body=body, _preload_content=False)
Пример #19
0
def scheduler(name, node, namespace='default'):
    """
    Bind a pod to a node
    :param name: pod name
    :param node: node name
    :param namespace: kubernetes namespace
    :return:
    """

    target = client.V1ObjectReference(kind = 'Node', api_version = 'v1', name = node)
    meta = client.V1ObjectMeta(name = name)
    body = client.V1Binding(target = target, metadata = meta)
    try:
        client.CoreV1Api().create_namespaced_binding(namespace=namespace, body=body)
    except ValueError:
        # PRINT SOMETHING or PASS
        pass
Пример #20
0
def scheduler(name, node, namespace="default"):
    #body = client.V1ConfigMap()
    body = client.V1Binding()

    target = client.V1ObjectReference()
    target.kind = "Node"
    target.apiVersion = "v1"
    target.name = node

    meta = client.V1ObjectMeta()
    meta.name = name

    body.target = target
    body.metadata = meta

    return v1.create_namespaced_binding(namespace,
                                        body,
                                        _preload_content=False)
Пример #21
0
    def bind(self, pod, node, namespace="default"):
        target = client.V1ObjectReference(api_version='v1',
                                          kind='Node',
                                          name=node)
        meta = client.V1ObjectMeta()
        meta.name = pod.metadata.name

        body = client.V1Binding(target=target, metadata=meta)

        try:
            print("INFO Pod: %s placed on: %s\n" % (pod.metadata.name, node))
            api_response = self.v1.create_namespaced_pod_binding(
                name=pod.metadata.name, namespace=namespace, body=body)
            print(api_response)
            return api_response
        except Exception as e:
            print(
                "Warning when calling CoreV1Api->create_namespaced_pod_binding: %s\n"
                % e)
Пример #22
0
    def place_pod_on_node(self, pod: Pod, node: Node):
        # Update the internal state of the super class
        super(KubeClusterContext, self).place_pod_on_node(pod, node)

        # But also actually create the placmement in kubernetes
        target = client.V1ObjectReference()
        target.kind = ''
        target.apiVersion = 'v1'
        target.name = node.name

        meta = client.V1ObjectMeta()
        meta.name = pod.name
        body = client.V1Binding(target=target, metadata=meta)
        logging.info('Creating namespaced binding: Pod %s on Node %s',
                     pod.name, node.name)
        try:
            self.api.create_namespaced_binding(pod.namespace, body)
        except ValueError:
            # Due to a bug in the library, an error was thrown (but everything most likely worked fine).
            # https://github.com/kubernetes-client/python/issues/547
            pass