use of io.kubernetes.client.models.V1PodTemplateSpec in project twister2 by DSC-SPIDAL.
the class KubernetesUtils method createStatefulSetObjectForJob.
/**
* TBD: calculate containers per pod or issue error
* when the numberOfContainers can not be divisible by the number of containersPerPod
* @param jobName
* @param resourceRequest
* @return
*/
public static V1beta2StatefulSet createStatefulSetObjectForJob(String jobName, RequestedResources resourceRequest, long jobFileSize, Config config) {
V1beta2StatefulSet statefulSet = new V1beta2StatefulSet();
statefulSet.setApiVersion("apps/v1beta2");
statefulSet.setKind("StatefulSet");
// construct metadata and set for jobName setting
V1ObjectMeta meta = new V1ObjectMeta();
meta.setName(jobName);
statefulSet.setMetadata(meta);
// construct JobSpec and set
V1beta2StatefulSetSpec setSpec = new V1beta2StatefulSetSpec();
setSpec.serviceName(createServiceName(jobName));
// pods will be started in parallel
// by default they are started sequentially
setSpec.setPodManagementPolicy("Parallel");
// number of containers has to be divisible by the containersPerPod
// all pods will have equal number of containers
// all pods will be identical
int containersPerPod = KubernetesContext.containersPerPod(config);
if (resourceRequest.getNoOfContainers() % containersPerPod != 0) {
LOG.log(Level.SEVERE, "Number of containers has to be divisible by containersPerPod.\n" + "Number of containers: " + resourceRequest.getNoOfContainers() + "\n" + "containersPerPod: " + containersPerPod + "\n" + "Aborting submission.");
return null;
}
int numberOfPods = resourceRequest.getNoOfContainers() / containersPerPod;
setSpec.setReplicas(numberOfPods);
// add selector for the job
V1LabelSelector selector = new V1LabelSelector();
String serviceLabel = createServiceLabel(jobName);
selector.putMatchLabelsItem("app", serviceLabel);
setSpec.setSelector(selector);
// construct the pod template
V1PodTemplateSpec template = constructPodTemplate(resourceRequest.getContainer(), serviceLabel, jobFileSize, config);
setSpec.setTemplate(template);
statefulSet.setSpec(setSpec);
return statefulSet;
}
use of io.kubernetes.client.models.V1PodTemplateSpec in project twister2 by DSC-SPIDAL.
the class KubernetesUtils method constructPodTemplate.
public static V1PodTemplateSpec constructPodTemplate(ResourceContainer reqContainer, String serviceLabel, long jobFileSize, Config config) {
V1PodTemplateSpec template = new V1PodTemplateSpec();
V1ObjectMeta templateMetaData = new V1ObjectMeta();
HashMap<String, String> labels = new HashMap<String, String>();
labels.put("app", serviceLabel);
templateMetaData.setLabels(labels);
template.setMetadata(templateMetaData);
V1PodSpec podSpec = new V1PodSpec();
podSpec.setTerminationGracePeriodSeconds(0L);
V1Volume volume = new V1Volume();
volume.setName(POD_SHARED_VOLUME_NAME);
V1EmptyDirVolumeSource volumeSource = new V1EmptyDirVolumeSource();
volumeSource.setMedium("Memory");
volume.setEmptyDir(volumeSource);
podSpec.setVolumes(Arrays.asList(volume));
int containersPerPod = KubernetesContext.containersPerPod(config);
int basePort = KubernetesContext.workerBasePort(config);
ArrayList<V1Container> containers = new ArrayList<V1Container>();
for (int i = 0; i < containersPerPod; i++) {
containers.add(constructContainer(i, reqContainer, jobFileSize, basePort + 1, config));
}
podSpec.setContainers(containers);
template.setSpec(podSpec);
return template;
}
use of io.kubernetes.client.models.V1PodTemplateSpec in project incubator-heron by apache.
the class AppsV1beta1Controller method createStatefulSet.
private V1beta1StatefulSet createStatefulSet(Resource containerResource, int numberOfInstances) {
final String topologyName = getTopologyName();
final Config runtimeConfiguration = getRuntimeConfiguration();
final V1beta1StatefulSet statefulSet = new V1beta1StatefulSet();
// setup stateful set metadata
final V1ObjectMeta objectMeta = new V1ObjectMeta();
objectMeta.name(topologyName);
statefulSet.metadata(objectMeta);
// create the stateful set spec
final V1beta1StatefulSetSpec statefulSetSpec = new V1beta1StatefulSetSpec();
statefulSetSpec.serviceName(topologyName);
statefulSetSpec.setReplicas(Runtime.numContainers(runtimeConfiguration).intValue());
// Parallel pod management tells the StatefulSet controller to launch or terminate
// all Pods in parallel, and not to wait for Pods to become Running and Ready or completely
// terminated prior to launching or terminating another Pod.
statefulSetSpec.setPodManagementPolicy("Parallel");
// add selector match labels "app=heron" and "topology=topology-name"
// so the we know which pods to manage
final V1LabelSelector selector = new V1LabelSelector();
selector.matchLabels(getMatchLabels(topologyName));
statefulSetSpec.selector(selector);
// create a pod template
final V1PodTemplateSpec podTemplateSpec = new V1PodTemplateSpec();
// set up pod meta
final V1ObjectMeta templateMetaData = new V1ObjectMeta().labels(getLabels(topologyName));
templateMetaData.annotations(getPrometheusAnnotations());
podTemplateSpec.setMetadata(templateMetaData);
final List<String> command = getExecutorCommand("$" + ENV_SHARD_ID);
podTemplateSpec.spec(getPodSpec(command, containerResource, numberOfInstances));
statefulSetSpec.setTemplate(podTemplateSpec);
statefulSet.spec(statefulSetSpec);
return statefulSet;
}
use of io.kubernetes.client.models.V1PodTemplateSpec in project seldon-core by SeldonIO.
the class ProtoBufUtils method convertProtoToModel.
public static V1PodTemplateSpec convertProtoToModel(PodTemplateSpec protoTemplateSpec) throws InvalidProtocolBufferException, SeldonDeploymentException {
Printer jsonPrinter = JsonFormat.printer().preservingProtoFieldNames();
String ptsJson = jsonPrinter.print(protoTemplateSpec);
JSON json = new JSON();
Type returnType = new TypeToken<V1PodTemplateSpec>() {
}.getType();
V1PodTemplateSpec podTemplateSpec = (V1PodTemplateSpec) json.deserialize(ptsJson, returnType);
// return fixProbes(protoTemplateSpec, podTemplateSpec);
return podTemplateSpec;
}
Aggregations