Search in sources :

Example 11 with V1PodTemplateSpec

use of io.kubernetes.client.openapi.models.V1PodTemplateSpec in project twister2 by DSC-SPIDAL.

the class RequestObjectBuilder method createStatefulSetForWorkers.

/**
 * create StatefulSet object for a job
 */
public static V1StatefulSet createStatefulSetForWorkers(ComputeResource computeResource) {
    if (config == null) {
        LOG.severe("RequestObjectBuilder.init method has not been called.");
        return null;
    }
    String statefulSetName = KubernetesUtils.createWorkersStatefulSetName(jobID, computeResource.getIndex());
    V1StatefulSet statefulSet = new V1StatefulSet();
    // set labels for the worker stateful set
    HashMap<String, String> labels = KubernetesUtils.createJobLabels(jobID);
    // worker statefulset
    labels.put("t2-wss", jobID);
    // construct metadata and set for jobID setting
    V1ObjectMeta meta = new V1ObjectMeta();
    meta.setName(statefulSetName);
    meta.setLabels(labels);
    statefulSet.setMetadata(meta);
    // construct JobSpec and set
    V1StatefulSetSpec setSpec = new V1StatefulSetSpec();
    setSpec.serviceName(KubernetesUtils.createServiceName(jobID));
    // pods will be started in parallel
    // by default they are started sequentially
    setSpec.setPodManagementPolicy("Parallel");
    int numberOfPods = computeResource.getInstances();
    setSpec.setReplicas(numberOfPods);
    // add selector for the job
    V1LabelSelector selector = new V1LabelSelector();
    selector.putMatchLabelsItem("t2-wp", jobID);
    setSpec.setSelector(selector);
    // construct the pod template
    V1PodTemplateSpec template = constructPodTemplate(computeResource);
    setSpec.setTemplate(template);
    statefulSet.setSpec(setSpec);
    return statefulSet;
}
Also used : V1StatefulSet(io.kubernetes.client.openapi.models.V1StatefulSet) V1ObjectMeta(io.kubernetes.client.openapi.models.V1ObjectMeta) V1StatefulSetSpec(io.kubernetes.client.openapi.models.V1StatefulSetSpec) V1PodTemplateSpec(io.kubernetes.client.openapi.models.V1PodTemplateSpec) V1LabelSelector(io.kubernetes.client.openapi.models.V1LabelSelector)

Example 12 with V1PodTemplateSpec

use of io.kubernetes.client.openapi.models.V1PodTemplateSpec in project twister2 by DSC-SPIDAL.

the class RequestObjectBuilder method constructPodTemplate.

/**
 * construct pod template
 */
public static V1PodTemplateSpec constructPodTemplate(ComputeResource computeResource) {
    V1PodTemplateSpec template = new V1PodTemplateSpec();
    V1ObjectMeta templateMetaData = new V1ObjectMeta();
    HashMap<String, String> labels = KubernetesUtils.createJobLabels(jobID);
    // worker pod
    labels.put("t2-wp", jobID);
    templateMetaData.setLabels(labels);
    template.setMetadata(templateMetaData);
    V1PodSpec podSpec = new V1PodSpec();
    podSpec.setTerminationGracePeriodSeconds(0L);
    ArrayList<V1Volume> volumes = new ArrayList<>();
    V1Volume memoryVolume = new V1Volume();
    memoryVolume.setName(KubernetesConstants.POD_MEMORY_VOLUME_NAME);
    V1EmptyDirVolumeSource volumeSource1 = new V1EmptyDirVolumeSource();
    volumeSource1.setMedium("Memory");
    memoryVolume.setEmptyDir(volumeSource1);
    volumes.add(memoryVolume);
    // create it if the requested disk space is positive
    if (computeResource.getDiskGigaBytes() > 0) {
        double volumeSize = computeResource.getDiskGigaBytes() * computeResource.getWorkersPerPod();
        V1Volume volatileVolume = createVolatileVolume(volumeSize);
        volumes.add(volatileVolume);
    }
    if (SchedulerContext.persistentVolumeRequested(config)) {
        String claimName = jobID;
        V1Volume persistentVolume = createPersistentVolume(claimName);
        volumes.add(persistentVolume);
    }
    // if openmpi is used, we initialize a Secret volume on each pod
    if (SchedulerContext.usingOpenMPI(config)) {
        String secretName = KubernetesContext.secretName(config);
        V1Volume secretVolume = createSecretVolume(secretName);
        volumes.add(secretVolume);
    }
    podSpec.setVolumes(volumes);
    int containersPerPod = computeResource.getWorkersPerPod();
    // if openmpi is used, we initialize only one container for each pod
    if (SchedulerContext.usingOpenMPI(config)) {
        containersPerPod = 1;
    }
    ArrayList<V1Container> containers = new ArrayList<V1Container>();
    for (int i = 0; i < containersPerPod; i++) {
        containers.add(constructContainer(computeResource, i));
    }
    podSpec.setContainers(containers);
    if (computeResource.getIndex() == 0) {
        constructAffinity(podSpec);
    }
    template.setSpec(podSpec);
    return template;
}
Also used : V1ObjectMeta(io.kubernetes.client.openapi.models.V1ObjectMeta) ArrayList(java.util.ArrayList) V1EmptyDirVolumeSource(io.kubernetes.client.openapi.models.V1EmptyDirVolumeSource) V1Container(io.kubernetes.client.openapi.models.V1Container) V1Volume(io.kubernetes.client.openapi.models.V1Volume) V1PodTemplateSpec(io.kubernetes.client.openapi.models.V1PodTemplateSpec) V1PodSpec(io.kubernetes.client.openapi.models.V1PodSpec)

Aggregations

V1PodTemplateSpec (io.kubernetes.client.openapi.models.V1PodTemplateSpec)12 V1ObjectMeta (io.kubernetes.client.openapi.models.V1ObjectMeta)6 Test (org.junit.Test)5 V1LabelSelector (io.kubernetes.client.openapi.models.V1LabelSelector)4 V1StatefulSet (io.kubernetes.client.openapi.models.V1StatefulSet)4 EqualToPattern (com.github.tomakehurst.wiremock.matching.EqualToPattern)3 V1ConfigMap (io.kubernetes.client.openapi.models.V1ConfigMap)3 V1Container (io.kubernetes.client.openapi.models.V1Container)3 V1PodSpec (io.kubernetes.client.openapi.models.V1PodSpec)3 V1StatefulSetSpec (io.kubernetes.client.openapi.models.V1StatefulSetSpec)3 V1Volume (io.kubernetes.client.openapi.models.V1Volume)3 IntOrString (io.kubernetes.client.custom.IntOrString)2 ApiException (io.kubernetes.client.openapi.ApiException)2 V1Deployment (io.kubernetes.client.openapi.models.V1Deployment)2 V1EmptyDirVolumeSource (io.kubernetes.client.openapi.models.V1EmptyDirVolumeSource)2 ArrayList (java.util.ArrayList)2 LinkedList (java.util.LinkedList)2 VisibleForTesting (com.google.common.annotations.VisibleForTesting)1 V1Patch (io.kubernetes.client.custom.V1Patch)1 ApiClient (io.kubernetes.client.openapi.ApiClient)1