예제 #1
0
def new_deploy(request):
    if request.method == 'POST':

        deploy_form = DeployForm(request.POST)

        config.load_kube_config()
        extension = client.ExtensionsV1beta1Api()
        deployment = client.ExtensionsV1beta1Deployment()

        if deploy_form.is_valid():
            deployment.api_version = "extentions/v1beta1"
            deployment.kind = "Deployment"
            deployment.metadata = client.V1ObjectMeta(
                name=str(deploy_form.cleaned_data['deploy_name']))
            # TO BE DONE 20180316
            spec = client.ExtensionsV1beta1DeploymentSpec()
            spec.replicas = int(deploy_form.cleaned_data['deploy_replicas'])

            spec.template = client.V1PodTemplateSpec()
            spec.template.metadata = client.V1ObjectMeta(
                labels={
                    "app": str(deploy_form.cleaned_data['deploy_label_app'])
                })
            spec.template.spec = client.V1PodSpec()

            container = client.V1Container()
            container.name = str(deploy_form.cleaned_data['deploy_image_name'])
            container.image = str(
                deploy_form.cleaned_data['deploy_image_version'])
            container.ports = [
                client.V1ContainerPort(container_port=int(
                    deploy_form.cleaned_data['deploy_container_port']))
            ]

            spec.template.spec.containers = [container]
            deployment.spec = spec

            extension.create_namespaced_deployment(namespace=str(
                deploy_form.cleaned_data['deploy_namespace']),
                                                   body=deployment)
    else:
        deploy_form = DeployForm()
    return render(request, 'new_deploy_form.html',
                  {'deploy_form': deploy_form})
예제 #2
0
    def init_deployment(self, tosca_kube_obj, kube_obj_name):
        """Instantiate the deployment object"""

        deployment_name = kube_obj_name
        # Create a list of container, which made a Pod
        containers = list()
        for container_prop in tosca_kube_obj.containers:
            limit_resource = self.init_resource_requirements(container_prop)
            container = self.init_containers(container_props=container_prop,
                                             limit_resource=limit_resource,
                                             name=deployment_name)
            containers.append(container)

        # Make a label with pattern {"selector": "deployment_name"}
        if tosca_kube_obj.scaling_object:
            scaling_name = tosca_kube_obj.scaling_object.scaling_name
            update_label = self.config_labels(deployment_name=deployment_name,
                                              scaling_name=scaling_name)
        else:
            update_label = self.config_labels(deployment_name=deployment_name)
        if tosca_kube_obj.labels:
            if 'selector' in update_label:
                del update_label['selector']
            update_label.update(tosca_kube_obj.labels)
        labels = update_label

        # Create and configure a spec section
        pod_template = client.V1PodTemplateSpec(
            metadata=client.V1ObjectMeta(labels=labels),
            spec=client.V1PodSpec(containers=containers))

        # Create the specification of deployment
        deployment_spec = client.ExtensionsV1beta1DeploymentSpec(
            template=pod_template)
        metadata = client.V1ObjectMeta(name=deployment_name)

        # Instantiate the deployment object
        deployment = client.ExtensionsV1beta1Deployment(
            api_version="extensions/v1beta1",
            kind="Deployment",
            metadata=metadata,
            spec=deployment_spec)
        return deployment
예제 #3
0
def create_deployment_object(scale, cpu, gpu, instance_name, mem, isSSD):
    container = client.V1Container(name = instance_name,
                                    resource = client.V1ResourceRequirements(requests = \
                                                                    dict(cpu = cpu, memory = mem)))
    if isSSD:
        volume_medium = 'SSD'
    else:
        volume_medium = 'memory'

    volume = client.V1Volume(name = instance_name,
                            emptyDir = client.V1EmptyDirVolumeSource(medium=volume_medium))
    template = client.V1PodTemplateSpec(spec = client.V1PodSpec(containers=[container], volumes =[volume]))
    spec = client.ExtensionsV1beta1DeploymentSpec(replicas=scale, 
                                                template=template)
    deployment = client.ExtensionsV1beta1Deployment(api_version="extensions/v1beta1",
                                                    kind="Deployment",
                                                    spec=spec)

    return deployment
예제 #4
0
def generate_deployment(deploy_name):

    container = client.V1Container(
        name=f"hls-splitter",
        image=f"genericacr.azurecr.io/image_name:latest",
        image_pull_policy="Always",
        working_dir="/image_name",
        env=[],
        command=["/bin/bash"],
        args=["-c", f"python3 main.py"],
        resources=client.V1ResourceRequirements(
            limits={
                "memory": "350M",
                "cpu": "0.30"
            },
            requests={
                "memory": "350M",
                "cpu": "0.30"
            },
        ),
    )

    pod_spec = client.V1PodSpec(containers=[container])

    template = client.V1PodTemplateSpec(
        metadata=client.V1ObjectMeta(labels={"stream_name": deploy_name}),
        spec=pod_spec)

    selector = client.V1LabelSelector(
        match_labels={"stream_name": deploy_name})

    spec = client.ExtensionsV1beta1DeploymentSpec(replicas=1,
                                                  template=template,
                                                  min_ready_seconds=10,
                                                  selector=selector)

    metadata = client.V1ObjectMeta(name=f"deployment-{deploy_name}",
                                   labels={"stream_name": deploy_name})

    return client.ExtensionsV1beta1Deployment(kind="Deployment",
                                              metadata=metadata,
                                              spec=spec)
예제 #5
0
파일: compute.py 프로젝트: stevencox/tycho
    def pod_to_deployment (self, name, template):
        
        """ Create a deployment specification. """
        deployment_spec = k8s_client.ExtensionsV1beta1DeploymentSpec(
            replicas=1,
            template=template)
        
        """ Instantiate the deployment object """
        deployment = k8s_client.ExtensionsV1beta1Deployment(
            api_version="extensions/v1beta1",
            kind="Deployment",
            metadata=k8s_client.V1ObjectMeta(name=name),
            spec=deployment_spec)

        """ Create the deployment. """
        api_response = self.extensions_api.create_namespaced_deployment(
            body=deployment,
            namespace="default")
        print(f"Deployment created. status={api_response.status}")
        return deployment
예제 #6
0
def createDeploymentConfig(name, namespace, replicas, image):
    container = client.V1Container(
        name="nginx",
        image="nginx:1.7.9",
        ports=[client.V1ContainerPort(container_port=80)])

    template = client.V1PodTemplateSpec(
        metadata=client.V1ObjectMeta(labels={"name": name}),
        spec=client.V1PodSpec(containers=[container]))

    spec = client.ExtensionsV1beta1DeploymentSpec(replicas=3,
                                                  template=template)

    deployemnt = client.ExtensionsV1beta1Deployment(
        api_version="extensions/v1beta1",
        kind="Deployment",
        metadata=client.V1ObjectMeta(name=DEPLOYMENT_NAME),
        spec=spec)

    return deployemnt
예제 #7
0
def create_deployment_object(dname, dnamespace, dreplicas, dimage, denv_name,
                             dcpu, dmemory):

    str_dname = str(dname)
    str_dnamespace = str(dnamespace)
    str_dreplicas = str(dreplicas)
    str_dimage = str(dimage)
    str_denv_name = str(denv_name)
    str_dcpu = str(dcpu)
    str_dmemory = str(dmemory)

    # Configureate Pod template container
    container = client.V1Container(
        name=str.lower(str_denv_name),
        image=str_dimage,
        # image_pull_policy="IfNotPresent",
        env=[client.V1EnvVar(name=str_denv_name, value=str_dreplicas)],
        resources={"limits": {
            "cpu": str_dcpu,
            "memory": str_dmemory
        }})
    # ports=[client.V1ContainerPort(container_port=80)])

    # Create and configurate a spec section
    # get nodename from horizon local_settings.py
    node_name_ = getattr(settings, "NODE_NAME", None)
    template = client.V1PodTemplateSpec(
        metadata=client.V1ObjectMeta(labels={"clusterType": str_denv_name}),
        spec=client.V1PodSpec(containers=[container], node_name=node_name_))

    # Create the specification of deployment
    spec = client.ExtensionsV1beta1DeploymentSpec(replicas=int(str_dreplicas),
                                                  template=template)

    # Instantiate the deployment object
    deployment = client.ExtensionsV1beta1Deployment(
        api_version="extensions/v1beta1",
        kind="Deployment",
        metadata=client.V1ObjectMeta(name=str_dname, namespace=str_dnamespace),
        spec=spec)
    return deployment
def main():
    # Fetching and loading Kubernetes Information
    config.load_kube_config()

    extension = client.ExtensionsV1beta1Api()

    # Container
    container = client.V1Container(
        name="nginx",
        image="nginx:1.7.9",
        image_pull_policy="IfNotPresent",
        ports=[client.V1ContainerPort(container_port=80)])

    # Template
    template = client.V1PodTemplateSpec(
        metadata=client.V1ObjectMeta(labels={
            "app": "nginx",
            "version": "v2.0"
        }),
        spec=client.V1PodSpec(containers=[container]))

    # Spec
    spec = client.ExtensionsV1beta1DeploymentSpec(
        replicas=3,
        selector=client.V1LabelSelector(match_labels={"app": "nginx"}),
        strategy=client.ExtensionsV1beta1DeploymentStrategy(
            rolling_update=client.ExtensionsV1beta1RollingUpdateDeployment(
                max_surge=1, max_unavailable=0)),
        template=template)

    #Deployment
    deployment = client.ExtensionsV1beta1Deployment(
        api_version="extensions/v1beta1",
        kind="Deployment",
        metadata=client.V1ObjectMeta(name="nginx-deployment"),
        spec=spec)

    # Creation of the Deployment in specified namespace
    extension.patch_namespaced_deployment(name="nginx-deployment",
                                          namespace="ratanb",
                                          body=deployment)
예제 #9
0
def create_deployment_object():
    # Configureate Pod template container
    container = client.V1Container(
        name="lala",
        image=
        "gcr.io/spacemesh-198810/node:46f1ad099cdfefc65dda5f726d26ecea7b1f35fb",
        ports=[client.V1ContainerPort(container_port=9091)])
    # Create and configurate a spec section
    template = client.V1PodTemplateSpec(
        metadata=client.V1ObjectMeta(labels={"app": "nginx"}),
        spec=client.V1PodSpec(containers=[container]))
    # Create the specification of deployment
    spec = client.ExtensionsV1beta1DeploymentSpec(replicas=1,
                                                  template=template)
    # Instantiate the deployment object
    deployment = client.ExtensionsV1beta1Deployment(
        api_version="extensions/v1beta1",
        kind="Deployment",
        metadata=client.V1ObjectMeta(name=DEPLOYMENT_NAME),
        spec=spec)
    return deployment
예제 #10
0
def create_deployment_object(image, name, ports=[], replicas=1):
    container_ports = [client.V1ContainerPort(container_port=p) for p in ports]
    # Configure Pod template container
    container = client.V1Container(name=name,
                                   image=image,
                                   ports=container_ports)
    # Create and configurate a spec section
    template = client.V1PodTemplateSpec(
        metadata=client.V1ObjectMeta(labels={"app": name}),
        spec=client.V1PodSpec(containers=[container]))
    # Create the specification of deployment
    spec = client.ExtensionsV1beta1DeploymentSpec(replicas=replicas,
                                                  template=template)
    # Instantiate the deployment object
    deployment = client.ExtensionsV1beta1Deployment(
        api_version="extensions/v1beta1",
        kind="Deployment",
        metadata=client.V1ObjectMeta(name='{}-deployment'.format(name)),
        spec=spec)

    return deployment
예제 #11
0
def create_deployment_object(count):
    # Configureate Pod template container
    container = client.V1Container(
        name="nginx",
        image="nginx:1.7.9",
        ports=[client.V1ContainerPort(container_port=80)])
    # Create and configurate a spec section
    template = client.V1PodTemplateSpec(
        metadata=client.V1ObjectMeta(labels={"app": "nginx"}),
        spec=client.V1PodSpec(containers=[container]))
    # Create the specification of deployment
    spec = client.ExtensionsV1beta1DeploymentSpec(replicas=int(count),
                                                  template=template)
    # Instantiate the deployment object
    deployment = client.ExtensionsV1beta1Deployment(
        api_version="extensions/v1beta1",
        kind="Deployment",
        metadata=client.V1ObjectMeta(name=DEPLOYMENT_NAME),
        spec=spec)

    return deployment
예제 #12
0
def create_deployment_object():
    """
    Creates the LB service and exposes the external IP
    """
    container = client.V1Container(
        name="my-nginx",
        image="nginx:1.15",
        ports=[client.V1ContainerPort(container_port=80)])
    template = client.V1PodTemplateSpec(
        metadata=client.V1ObjectMeta(labels={"app": "nginx"}),
        spec=client.V1PodSpec(containers=[container]))
    spec = client.ExtensionsV1beta1DeploymentSpec(replicas=1,
                                                  template=template)
    set_progress("Instantiate the deployment object")
    deployment = client.ExtensionsV1beta1Deployment(
        api_version="extensions/v1beta1",
        kind="Deployment",
        metadata=client.V1ObjectMeta(name="nginx-deployment"),
        spec=spec)
    time.sleep(60)
    return deployment
예제 #13
0
def create_deployment_object(unique_name):
    # Configureate Pod template container
    container = client.V1Container(
        name=unique_name,
        image="openhack/minecraft-server:2.0",
        ports=[
            client.V1ContainerPort(container_port=25565),
            client.V1ContainerPort(container_port=25575)
        ],
        env=[client.V1EnvVar(name='EULA', value='TRUE')],
        volume_mounts=[
            client.V1VolumeMount(mount_path="data", name=unique_name)
        ])

    # Create and configurate a spec section
    template = client.V1PodTemplateSpec(
        metadata=client.V1ObjectMeta(labels={
            "app": unique_name,
            "type": "minecraft"
        }),
        spec=client.V1PodSpec(
            containers=[container],
            volumes=[
                client.V1Volume(
                    name=unique_name,
                    persistent_volume_claim=(
                        client.V1PersistentVolumeClaimVolumeSource(
                            claim_name="azure-managed-disk-" + unique_name)))
            ]))
    # Create the specification of deployment
    spec = client.ExtensionsV1beta1DeploymentSpec(replicas=1,
                                                  template=template)
    # Instantiate the deployment object
    deployment = client.ExtensionsV1beta1Deployment(
        api_version="extensions/v1beta1",
        kind="Deployment",
        metadata=client.V1ObjectMeta(name=unique_name),
        spec=spec)

    return deployment
예제 #14
0
def _create_deployment_object(component_name,
                              containers,
                              init_containers,
                              replicas,
                              volumes,
                              labels={},
                              pull_secrets=[]):

    deployment_name = _create_deployment_name(component_name)

    # Label the pod with the deployment name, so we can find it easily
    labels.update({"k8sdeployment": deployment_name})

    # pull_secrets is a list of the names of the k8s secrets containing docker registry credentials
    # See https://kubernetes.io/docs/concepts/containers/images/#specifying-imagepullsecrets-on-a-pod
    ips = []
    for secret in pull_secrets:
        ips.append(client.V1LocalObjectReference(name=secret))

    # Define pod template
    template = client.V1PodTemplateSpec(
        metadata=client.V1ObjectMeta(labels=labels),
        spec=client.V1PodSpec(hostname=component_name,
                              containers=containers,
                              init_containers=init_containers,
                              volumes=volumes,
                              image_pull_secrets=ips))

    # Define deployment spec
    spec = client.ExtensionsV1beta1DeploymentSpec(replicas=replicas,
                                                  template=template)

    # Create deployment object
    deployment = client.ExtensionsV1beta1Deployment(
        kind="Deployment",
        metadata=client.V1ObjectMeta(name=deployment_name),
        spec=spec)

    return deployment
    def deploy(self,
               image,
               name,
               ns,
               port,
               replicas=1,
               svc_type="NodePort",
               traffic_policy="Local",
               cluster_ip=None):
        """
        Creates a deployment and corresponding service with the given
        parameters.
        """
        # Run a deployment with <replicas> copies of <image>, with the
        # pods labelled with "app": <name>.
        deployment = client.ExtensionsV1beta1Deployment(
            api_version="extensions/v1beta1",
            kind="Deployment",
            metadata=client.V1ObjectMeta(name=name),
            spec=client.ExtensionsV1beta1DeploymentSpec(
                replicas=replicas,
                template=client.V1PodTemplateSpec(
                    metadata=client.V1ObjectMeta(labels={"app": name}),
                    spec=client.V1PodSpec(containers=[
                        client.V1Container(name=name,
                                           image=image,
                                           ports=[
                                               client.V1ContainerPort(
                                                   container_port=port)
                                           ]),
                    ]))))
        api_response = client.ExtensionsV1beta1Api(
        ).create_namespaced_deployment(body=deployment, namespace=ns)
        logger.debug("Deployment created. status='%s'" %
                     str(api_response.status))

        # Create a service called <name> whose endpoints are the pods
        # with "app": <name>; i.e. those just created above.
        self.create_service(name, name, ns, port, svc_type, traffic_policy)
예제 #16
0
def deploy_and_wait_until_ready(api_instance, deployment_name, image_tag, namespace, timeout=60):
    container = client.V1Container(
        name=f'{deployment_name}',
        image=f'{image_tag}',
        ports=[client.V1ContainerPort(container_port=9999)]
    )
    # Create and configurate a spec section
    template = client.V1PodTemplateSpec(
        metadata=client.V1ObjectMeta(labels={'app': f'{deployment_name}'}),
        spec=client.V1PodSpec(containers=[container])
    )
    # Create the specification of deployment
    spec = client.ExtensionsV1beta1DeploymentSpec(
        replicas=3,
        template=template
    )
    # Instantiate the deployment object
    deployment_body = client.ExtensionsV1beta1Deployment(
        api_version='extensions/v1beta1',
        kind='Deployment',
        metadata=client.V1ObjectMeta(name=f'{deployment_name}'),
        spec=spec
    )
    api_response = api_instance.create_namespaced_deployment(
        body=deployment_body,
        namespace=namespace
    )
    print(f'Deployment created. status={api_response.status}')
    start = time.time()
    while time.time() - start < timeout:
        time.sleep(1)
        response = api_instance.read_namespaced_deployment_status(deployment_name, namespace)
        if deployment_is_ready(response):
            return True
        else:
            print(f'[updated_replicas:{response.status.updated_replicas},replicas:{response.status.replicas}'
                  f',available_replicas:{response.status.available_replicas},observed_generation:{response.status.observed_generation}] waiting...')

    raise RuntimeError(f'Waiting timeout for deployment {deployment_name}')
예제 #17
0
def create_nlu_deployment_object(image_full_name, secret_name, tag_name, mem_allocation):
    memory = str(int(mem_allocation)) + "Mi"
    mcpu = "80m"
    if secret_name is not None:
        env_list = create_env_list(secret_name)
    else:
        env_list = [client.V1EnvVar(name="no-nlu-variables", value="true")]

    resourse = client.V1ResourceRequirements(
        requests={"memory": memory, "cpu": mcpu},
        limits={"memory": memory})
    liveness = client.V1Probe(
        http_get=client.V1HTTPGetAction(
            path="/healthcheck",
            port=5000),
        failure_threshold=3,
        period_seconds=3,
        initial_delay_seconds=7,
        timeout_seconds=2)
    container = client.V1Container(
        name=tag_name,
        image=image_full_name,
        image_pull_policy="IfNotPresent",
        liveness_probe=liveness,
        resources=resourse,
        ports=[client.V1ContainerPort(container_port=5000)],
        env=env_list)
    template = client.V1PodTemplateSpec(
        metadata=client.V1ObjectMeta(labels={"app": tag_name}),
        spec=client.V1PodSpec(containers=[container]))
    spec = client.ExtensionsV1beta1DeploymentSpec(
        replicas=1,
        template=template)
    deployment = client.ExtensionsV1beta1Deployment(
        api_version="extensions/v1beta1",
        kind="Deployment",
        metadata=client.V1ObjectMeta(name=tag_name),
        spec=spec)
    return deployment
예제 #18
0
def create_deployment_object(images, tags, rc, envs, name):
    image = images + ':' + tags

    container = client.V1Container(
        name=name,
        image='hub.cbble.com/' + image,
        env=[{
            'name': 'CONFIG_ENV',
            'value': envs
        }],
        # args=["sleep", "600000"],
        resources=client.V1ResourceRequirements(requests={
            'cpu': '1000m',
            'memory': '1024M'
        },
                                                limits={
                                                    'cpu': '1500m',
                                                    'memory': '2048M'
                                                }))

    template = client.V1PodTemplateSpec(
        metadata=client.V1ObjectMeta(labels={"app": name}),
        spec=client.V1PodSpec(containers=[container],
                              image_pull_secrets=[{
                                  'name': 'regsecret'
                              }]))
    # 指定 specific
    spec = client.ExtensionsV1beta1DeploymentSpec(replicas=rc,
                                                  template=template)
    # Instantiate the deployment object

    deployment = client.ExtensionsV1beta1Deployment(
        api_version="extensions/v1beta1",
        kind="Deployment",
        metadata=client.V1ObjectMeta(name=name),
        spec=spec)

    return deployment
예제 #19
0
파일: client.py 프로젝트: yuecaikun/cello
    def create_deployment(self, namespace=None, *args, **kwargs):
        deploy_name = kwargs.get("name")
        deployment_metadata = client.V1ObjectMeta(name=deploy_name)
        template_spec = self._generate_pod_template(*args, **kwargs)
        body = client.ExtensionsV1beta1Deployment(
            api_version="extensions/v1beta1",
            kind="Deployment",
            metadata=deployment_metadata,
            spec=client.ExtensionsV1beta1DeploymentSpec(
                template=template_spec),
        )

        api_instance = client.ExtensionsV1beta1Api()

        try:
            api_instance.create_namespaced_deployment(namespace=namespace,
                                                      body=body,
                                                      pretty="true")
        except ApiException as e:
            LOG.error("Exception when call AppsV1beta1Api: %s", e)
            raise e

        return True
예제 #20
0
def create_deployment(body=None, name="", pod_template=None, replicas=1, labels={}, namespace="default", timeout=K8S_API_TIMEOUT):
    api = kube_client.ExtensionsV1beta1Api()
    if body:
        name = body["metadata"]["name"]
        body["apiVersion"] = "extensions/v1beta1"
        try:
            namespace = body["metadata"]["namespace"]
        except:
            body["metadata"]["namespace"] = namespace
    else:
        spec = kube_client.ExtensionsV1beta1DeploymentSpec(
            replicas=replicas,
            template=pod_template)
        body = kube_client.ExtensionsV1beta1Deployment(
            api_version="extensions/v1beta1",
            kind="Deployment",
            metadata=kube_client.V1ObjectMeta(name=name, labels=labels),
            spec=spec)
    deployment = api.create_namespaced_deployment(
        body=body,
        namespace=namespace)
    assert wait_for(p(has_deployment, name, namespace=namespace), timeout_seconds=timeout), "timed out waiting for deployment \"%s\" to be created!" % name
    return deployment
예제 #21
0
def template():
    values = Values().values
    # Configureate Pod template container
    container = client.V1Container(
        name='nginx',
        image='{}:{}'.format(values.nginx.image.repository, values.nginx.image.tag),
        ports=[client.V1ContainerPort(container_port=80)])
    # Create and configurate a spec section
    template = client.V1PodTemplateSpec(
        metadata=client.V1ObjectMeta(labels={'app': 'nginx'}),
        spec=client.V1PodSpec(containers=[container]))
    # Create the specification of deployment
    spec = client.ExtensionsV1beta1DeploymentSpec(
        replicas=3,
        template=template)
    # Instantiate the deployment object
    deployment = client.ExtensionsV1beta1Deployment(
        api_version='extensions/v1beta1',
        kind='Deployment',
        metadata=client.V1ObjectMeta(name='nginx-deployment'),
        spec=spec)

    return deployment # [deployment], (deployment, deployment) are valid
예제 #22
0
    def create_deployment_object(*args):
        """
        Function to create deplyment with replication
        configuration details fetch from yaml input
        """
        fh = sys.argv[2]
        fh1 = sys.argv[3]
        if fh.lower() == '-f':
            with open(fh1)as f:
                config = yaml.load(f)
                name = config["metadata"]["name"]
                image = config["metadata"]["image"]
                app = config["metadata"]["app"]
                namespace = config["metadata"]["namespace"]
                port = config["spec"]["port"]
                replicas = config["spec"]["replicas"]
                container = client.V1Container(
                    name=name,
                    image=image,
                    ports=[client.V1ContainerPort(container_port=port)])

                template = client.V1PodTemplateSpec(
                    metadata=client.V1ObjectMeta(labels={"app": app}),
                    spec=client.V1PodSpec(containers=[container]))

                spec = client.ExtensionsV1beta1DeploymentSpec(
                    replicas=replicas,
                    template=template)

                deployment = client.ExtensionsV1beta1Deployment(
                    api_version="extensions/v1beta1",
                    kind="Deployment",
                    metadata=client.V1ObjectMeta(name=name),
                    spec=spec)

        return deployment
예제 #23
0
def create_deployment(extensions_v1_beta1):
    container = client.V1Container(
        name="deployment",
        image="ratanboddu/flaskapp:basic",
        image_pull_policy="Never",
        ports=[client.V1ContainerPort(container_port=5678)],
    )
    # Template
    template = client.V1PodTemplateSpec(
        metadata=client.V1ObjectMeta(labels={"app": "deployment"}),
        spec=client.V1PodSpec(containers=[container]))
    # Spec
    spec = client.ExtensionsV1beta1DeploymentSpec(replicas=1,
                                                  template=template)
    # Deployment
    deployment = client.ExtensionsV1beta1Deployment(
        api_version="extensions/v1beta1",
        kind="Deployment",
        metadata=client.V1ObjectMeta(name="deployment"),
        spec=spec)
    # Creation of the Deployment in specified namespace
    # (Can replace "default" with a namespace you may have created)
    extensions_v1_beta1.create_namespaced_deployment(namespace="default",
                                                     body=deployment)
예제 #24
0
def create_deployment_object():
    # In older to avoid the situation that
    # Configure Pod template container
    container = client.V1Container(
        name="nginx",
        image="nginx:1.7.9",
        image_pull_policy="IfNotPresent",
        ports=[client.V1ContainerPort(container_port=80, protocol="TCP")])
    # Create and config a spec section [Deployment.template]
    template = client.V1PodTemplateSpec(
        metadata=client.V1ObjectMeta(labels={"app": "nginx"},
                                     namespace=NAMESPACE),
        spec=client.V1PodSpec(containers=[container]))
    # Create the specification of deployment
    spec = client.ExtensionsV1beta1DeploymentSpec(replicas=3,
                                                  template=template)
    # Instantiate the deployment object
    deployment = client.ExtensionsV1beta1Deployment(
        api_version="extensions/v1beta1",
        kind="Deployment",
        metadata=client.V1ObjectMeta(name=DEPLOYMENT_NAME),
        spec=spec)

    return deployment
예제 #25
0
def main():
    config.load_kube_config()
    api_instance = client.ExtensionsV1beta1Api()
    dep = client.ExtensionsV1beta1Deployment()

    container = client.V1Container(
        name="pocket-datanode-dram",
        image="anakli/pocket-datanode-dram",
        ports=[client.V1ContainerPort(container_port=50030)])
    template = client.V1PodTemplateSpec(
        metadata=client.V1ObjectMeta(labels={"app": "pocket-datanode-dram"}),
        spec=client.V1PodSpec(containers=[container]))
    spec = client.ExtensionsV1beta1DeploymentSpec(replicas=2,
                                                  template=template)
    deployment = client.ExtensionsV1beta1Deployment(
        api_version="extensions/v1beta1",
        kind="Deployment",
        metadata=client.V1ObjectMeta(name="pocket-datanode-dram-deployment"),
        spec=spec)

    api_response = api_instance.patch_namespaced_deployment(
        name="pocket-datanode-dram-deployment",
        namespace="default",
        body=deployment)
예제 #26
0
    def _build_deployment(self) -> ExtensionsV1beta1Deployment:

        # Define our probes for when the container is ready for action
        probe_action = client.V1HTTPGetAction(path="/healthz", port=self.port)
        probe = client.V1Probe(httpGet=probe_action,
                               initial_delay_seconds=60,
                               period_seconds=60)

        container = client.V1Container(
            name=self.name,
            image="nginx:1.7.9",
            ports=[client.V1ContainerPort(container_port=self.port)],
            liveness_probe=probe,
            readiness_probe=probe,
        )

        # Create and configurate a spec section
        template = client.V1PodTemplateSpec(
            metadata=client.V1ObjectMeta(labels={"app": self.name}),
            spec=client.V1PodSpec(containers=[container]),
        )

        # Create the specification of deployment
        spec = client.ExtensionsV1beta1DeploymentSpec(replicas=1,
                                                      template=template)

        # Instantiate the deployment object
        deployment = client.ExtensionsV1beta1Deployment(
            api_version="extensions/v1beta1",
            kind="Deployment",
            metadata=client.V1ObjectMeta(name=self.name,
                                         namespace=self.namespace),
            spec=spec,
        )

        return deployment
예제 #27
0
def create_deployment_object(package_name):
    # Configureate Pod template container
    container = client.V1Container(
        name=package_name,
        image="gazetest/" + package_name,
        ports=[client.V1ContainerPort(container_port=80)])

    # Create and configurate a spec section
    template = client.V1PodTemplateSpec(
        metadata=client.V1ObjectMeta(labels={"app": package_name + "-pod"}),
        spec=client.V1PodSpec(containers=[container]))

    # Create the specification of deployment
    spec = client.ExtensionsV1beta1DeploymentSpec(replicas=1,
                                                  template=template)

    # Instantiate the deployment object
    deployment = client.ExtensionsV1beta1Deployment(
        api_version="extensions/v1beta1",
        kind="Deployment",
        metadata=client.V1ObjectMeta(name=package_name + "-deploy"),
        spec=spec)

    return deployment
    def create_deployment_object(self, name, image_container, container_port,
                                 name_deployment):
        # Configureate Pod template container
        container = client.V1Container(
            name=name,
            image=image_container,
            ports=[client.V1ContainerPort(container_port=container_port)])
        # Create and configurate a spec section
        template = client.V1PodTemplateSpec(
            metadata=client.V1ObjectMeta(labels={"run": name}),
            spec=client.V1PodSpec(containers=[container]))
        # Create and configurate a selection sector
        selector = client.V1LabelSelector(match_labels={"run": name})
        # Create the specification of deployment
        spec = client.ExtensionsV1beta1DeploymentSpec(template=template,
                                                      selector=selector)
        # Instantiate the deployment object
        deployment = client.ExtensionsV1beta1Deployment(
            api_version="apps/v1",
            kind="Deployment",
            metadata=client.V1ObjectMeta(name=name_deployment),
            spec=spec)

        return deployment
예제 #29
0
    def deployment_object(self, instance_uuid, cnf_yaml, service_uuid):
        """
        CNF modeling method. This build a deployment object in kubernetes
        instance_uuid: k8s deployment name
        cnf_yaml: CNF Descriptor in yaml format
        """
        LOG.debug("CNFD: {}".format(cnf_yaml))
        container_list = []
        deployment_k8s = None
        if "cloudnative_deployment_units" in cnf_yaml:
            cdu = cnf_yaml.get('cloudnative_deployment_units')
            for cdu_obj in cdu:
                env_vars = env_from = cpu = memory = huge_pages = gpu = sr_iov = resources = None
                port_list = []
                environment = []
                cdu_id = cdu_obj.get('id')
                image = cdu_obj.get('image')
                cdu_conex = cdu_obj.get('connection_points')
                container_name = cdu_id
                config_map_id = cdu_id
                if cdu_obj.get('parameters'):
                    env_vars = cdu_obj['parameters'].get('env')
                if cdu_obj.get('resource_requirements'):
                    gpu = cdu_obj['resource_requirements'].get('gpu')
                    cpu = cdu_obj['resource_requirements'].get('cpu')
                    memory = cdu_obj['resource_requirements'].get('memory')
                    sr_iov = cdu_obj['resource_requirements'].get('sr-iov')
                    huge_pages = cdu_obj['resource_requirements'].get(
                        'huge-pages')
                if cdu_conex:
                    for po in cdu_conex:
                        port = po.get('port')
                        port_name = po.get('id')
                        port_list.append(
                            client.V1ContainerPort(container_port=port,
                                                   name=port_name))

                limits = {}
                requests = {}
                if gpu:
                    LOG.debug("Features requested: {}".format(gpu))
                    # gpu_type can be amd or nvidia
                    for gpu_type, amount in gpu.items():
                        limits["{}.com/gpu".format(gpu_type)] = amount
                if cpu:
                    # TODO
                    pass
                if memory:
                    # TODO
                    pass
                if sr_iov:
                    # TODO
                    pass
                if huge_pages:
                    # TODO
                    pass

                resources = client.V1ResourceRequirements(limits=limits,
                                                          requests=requests)

                # Environment variables from descriptor
                if env_vars:
                    LOG.debug("Configmap: {}".format(config_map_id))
                    KubernetesWrapperEngine.create_configmap(
                        self,
                        config_map_id,
                        instance_uuid,
                        env_vars,
                        service_uuid,
                        namespace="default")
                else:
                    env_vars = {"sonata": "rules"}
                    LOG.debug("Configmap: {}".format(config_map_id))
                    KubernetesWrapperEngine.create_configmap(
                        self,
                        config_map_id,
                        instance_uuid,
                        env_vars,
                        service_uuid,
                        namespace="default")
                env_from = client.V1EnvFromSource(
                    config_map_ref=client.V1ConfigMapEnvSource(
                        name=config_map_id, optional=False))

                # Default static environment variables
                environment.append(
                    client.V1EnvVar(name="instance_uuid", value=instance_uuid))
                environment.append(
                    client.V1EnvVar(name="service_uuid", value=service_uuid))
                environment.append(
                    client.V1EnvVar(name="container_name",
                                    value=container_name))
                environment.append(
                    client.V1EnvVar(name="vendor",
                                    value=KubernetesWrapperEngine.normalize(
                                        self, cnf_yaml.get('vendor'))))
                environment.append(
                    client.V1EnvVar(name="name",
                                    value=KubernetesWrapperEngine.normalize(
                                        self, cnf_yaml.get('name'))))
                environment.append(
                    client.V1EnvVar(name="version",
                                    value=KubernetesWrapperEngine.normalize(
                                        self, cnf_yaml.get('version'))))

                image_pull_policy = KubernetesWrapperEngine.check_connection(
                    self)

                # Configureate Pod template cont ainer
                container = client.V1Container(
                    env=environment,
                    name=container_name,
                    resources=resources,
                    image=image,
                    image_pull_policy=image_pull_policy,
                    ports=port_list,
                    env_from=[env_from])
                container_list.append(container)
        else:
            return deployment_k8s

        # Create and configurate a spec section
        deployment_label = ("{}-{}-{}-{}".format(
            cnf_yaml.get("vendor"), cnf_yaml.get("name"),
            cnf_yaml.get("version"),
            instance_uuid.split("-")[0])).replace(".", "-")
        template = client.V1PodTemplateSpec(
            metadata=client.V1ObjectMeta(
                labels={
                    'deployment': deployment_label,
                    'instance_uuid': cnf_yaml['instance_uuid'],
                    'service_uuid': service_uuid,
                    "sp": "sonata"
                }),
            spec=client.V1PodSpec(containers=container_list))
        # Create the specification of deployment
        spec = client.ExtensionsV1beta1DeploymentSpec(replicas=1,
                                                      template=template)
        # Instantiate the deployment object
        deployment_k8s = client.ExtensionsV1beta1Deployment(
            api_version="extensions/v1beta1",
            kind="Deployment",
            metadata=client.V1ObjectMeta(name=deployment_label),
            spec=spec)
        return deployment_k8s
예제 #30
0
def create_deployment_object(data):
    # Configureate Pod template container

    ports = []

    if "ports" in data:
        for port in data["ports"].split(','):
            portDefinition = client.V1ContainerPort(container_port=int(port))
            ports.append(portDefinition)

    envs = []

    if "environments" in data:
        envs_array = data["environments"].splitlines()
        tmp_envs = dict(s.split('=') for s in envs_array)

        for key in tmp_envs:
            envs.append(client.V1EnvVar(name=key, value=tmp_envs[key]))

    if "environments_secrets" in data:
        envs_array = data["environments_secrets"].splitlines()
        tmp_envs = dict(s.split('=') for s in envs_array)

        for key in tmp_envs:

            if (":" in tmp_envs[key]):
                # passing secret env
                value = tmp_envs[key]
                secrets = value.split(':')
                secrect_key = secrets[1]
                secrect_name = secrets[0]

                envs.append(
                    client.V1EnvVar(
                        name=key,
                        value="",
                        value_from=client.V1EnvVarSource(
                            secret_key_ref=client.V1SecretKeySelector(
                                key=secrect_key, name=secrect_name))))

    container = client.V1Container(name=data["container_name"],
                                   image=data["image"],
                                   ports=ports,
                                   env=envs)

    if "liveness_probe" in data:
        container.liveness_probe = common.load_liveness_readiness_probe(
            data["liveness_probe"])

    if "readiness_probe" in data:
        container.readiness_probe = common.load_liveness_readiness_probe(
            data["readiness_probe"])

    if "container_command" in data:
        container.command = data["container_command"].split(' ')

    if "container_args" in data:
        args_array = data["container_args"].splitlines()
        container.args = args_array

    if "resources_requests" in data:
        resources_array = data["resources_requests"].split(",")
        tmp_resources = dict(s.split('=', 1) for s in resources_array)
        container.resources = client.V1ResourceRequirements(
            requests=tmp_resources)

    labels = None
    if "labels" in data:
        labels_array = data["labels"].split(',')
        labels = dict(s.split('=') for s in labels_array)

    # Create and configurate a spec section
    template = client.V1PodTemplateSpec(spec=client.V1PodSpec(
        containers=[container]))
    if labels:
        template.metadata = client.V1ObjectMeta(labels=labels)

    # Create the specification of deployment
    spec = client.ExtensionsV1beta1DeploymentSpec(replicas=int(
        data["replicas"]),
                                                  template=template)
    # Instantiate the deployment object
    deployment = client.ExtensionsV1beta1Deployment(
        api_version=data["api_version"],
        kind="Deployment",
        metadata=client.V1ObjectMeta(labels=labels,
                                     namespace=data["namespace"],
                                     name=data["name"]),
        spec=spec)

    return deployment