Search in sources :

Example 6 with ResourceRequirements

use of io.fabric8.kubernetes.api.model.ResourceRequirements in project flink by apache.

the class KubernetesUtils method getResourceRequirements.

/**
 * Get resource requirements from memory and cpu.
 *
 * @param resourceRequirements resource requirements in pod template
 * @param mem Memory in mb.
 * @param memoryLimitFactor limit factor for the memory, used to set the limit resources.
 * @param cpu cpu.
 * @param cpuLimitFactor limit factor for the cpu, used to set the limit resources.
 * @param externalResources external resources
 * @param externalResourceConfigKeys config keys of external resources
 * @return KubernetesResource requirements.
 */
public static ResourceRequirements getResourceRequirements(ResourceRequirements resourceRequirements, int mem, double memoryLimitFactor, double cpu, double cpuLimitFactor, Map<String, ExternalResource> externalResources, Map<String, String> externalResourceConfigKeys) {
    final Quantity cpuQuantity = new Quantity(String.valueOf(cpu));
    final Quantity cpuLimitQuantity = new Quantity(String.valueOf(cpu * cpuLimitFactor));
    final Quantity memQuantity = new Quantity(mem + Constants.RESOURCE_UNIT_MB);
    final Quantity memQuantityLimit = new Quantity(((int) (mem * memoryLimitFactor)) + Constants.RESOURCE_UNIT_MB);
    ResourceRequirementsBuilder resourceRequirementsBuilder = new ResourceRequirementsBuilder(resourceRequirements).addToRequests(Constants.RESOURCE_NAME_MEMORY, memQuantity).addToRequests(Constants.RESOURCE_NAME_CPU, cpuQuantity).addToLimits(Constants.RESOURCE_NAME_MEMORY, memQuantityLimit).addToLimits(Constants.RESOURCE_NAME_CPU, cpuLimitQuantity);
    // Add the external resources to resource requirement.
    for (Map.Entry<String, ExternalResource> externalResource : externalResources.entrySet()) {
        final String configKey = externalResourceConfigKeys.get(externalResource.getKey());
        if (!StringUtils.isNullOrWhitespaceOnly(configKey)) {
            final Quantity resourceQuantity = new Quantity(String.valueOf(externalResource.getValue().getValue().longValue()));
            resourceRequirementsBuilder.addToRequests(configKey, resourceQuantity).addToLimits(configKey, resourceQuantity);
            LOG.info("Request external resource {} with config key {}.", resourceQuantity.getAmount(), configKey);
        }
    }
    return resourceRequirementsBuilder.build();
}
Also used : ResourceRequirementsBuilder(io.fabric8.kubernetes.api.model.ResourceRequirementsBuilder) Quantity(io.fabric8.kubernetes.api.model.Quantity) KubernetesConfigMap(org.apache.flink.kubernetes.kubeclient.resources.KubernetesConfigMap) Map(java.util.Map) HashMap(java.util.HashMap) ExternalResource(org.apache.flink.api.common.resources.ExternalResource)

Example 7 with ResourceRequirements

use of io.fabric8.kubernetes.api.model.ResourceRequirements in project flink by apache.

the class InitTaskManagerDecoratorTest method testMainContainerResourceRequirements.

@Test
public void testMainContainerResourceRequirements() {
    final ResourceRequirements resourceRequirements = this.resultMainContainer.getResources();
    final Map<String, Quantity> requests = resourceRequirements.getRequests();
    assertEquals(Double.toString(TASK_MANAGER_CPU), requests.get("cpu").getAmount());
    assertEquals(String.valueOf(TOTAL_PROCESS_MEMORY), requests.get("memory").getAmount());
    final Map<String, Quantity> limits = resourceRequirements.getLimits();
    assertEquals(Double.toString(TASK_MANAGER_CPU * TASK_MANAGER_CPU_LIMIT_FACTOR), limits.get("cpu").getAmount());
    assertEquals(Integer.toString((int) (TOTAL_PROCESS_MEMORY * TASK_MANAGER_MEMORY_LIMIT_FACTOR)), limits.get("memory").getAmount());
}
Also used : Quantity(io.fabric8.kubernetes.api.model.Quantity) ResourceRequirements(io.fabric8.kubernetes.api.model.ResourceRequirements) Test(org.junit.Test)

Example 8 with ResourceRequirements

use of io.fabric8.kubernetes.api.model.ResourceRequirements in project flink by apache.

the class InitTaskManagerDecoratorTest method testExternalResourceInResourceRequirements.

@Test
public void testExternalResourceInResourceRequirements() {
    final ResourceRequirements resourceRequirements = this.resultMainContainer.getResources();
    final Map<String, Quantity> requests = resourceRequirements.getRequests();
    assertEquals(Long.toString(RESOURCE_AMOUNT), requests.get(RESOURCE_CONFIG_KEY).getAmount());
    final Map<String, Quantity> limits = resourceRequirements.getLimits();
    assertEquals(Long.toString(RESOURCE_AMOUNT), limits.get(RESOURCE_CONFIG_KEY).getAmount());
}
Also used : Quantity(io.fabric8.kubernetes.api.model.Quantity) ResourceRequirements(io.fabric8.kubernetes.api.model.ResourceRequirements) Test(org.junit.Test)

Example 9 with ResourceRequirements

use of io.fabric8.kubernetes.api.model.ResourceRequirements in project flink by apache.

the class InitJobManagerDecoratorTest method testMainContainerResourceRequirements.

@Test
public void testMainContainerResourceRequirements() {
    final ResourceRequirements resourceRequirements = this.resultMainContainer.getResources();
    final Map<String, Quantity> requests = resourceRequirements.getRequests();
    assertEquals(Double.toString(JOB_MANAGER_CPU), requests.get("cpu").getAmount());
    assertEquals(String.valueOf(JOB_MANAGER_MEMORY), requests.get("memory").getAmount());
    final Map<String, Quantity> limits = resourceRequirements.getLimits();
    assertEquals(Double.toString(JOB_MANAGER_CPU * JOB_MANAGER_CPU_LIMIT_FACTOR), limits.get("cpu").getAmount());
    assertEquals(Integer.toString((int) (JOB_MANAGER_MEMORY * JOB_MANAGER_MEMORY_LIMIT_FACTOR)), limits.get("memory").getAmount());
}
Also used : Quantity(io.fabric8.kubernetes.api.model.Quantity) ResourceRequirements(io.fabric8.kubernetes.api.model.ResourceRequirements) Test(org.junit.Test)

Example 10 with ResourceRequirements

use of io.fabric8.kubernetes.api.model.ResourceRequirements in project flink by apache.

the class DecoratorWithPodTemplateTestBase method testMainContainerResourceRequirementsMerging.

@Test
public void testMainContainerResourceRequirementsMerging() {
    final ResourceRequirements resourceRequirements = this.resultPod.getMainContainer().getResources();
    final Map<String, Quantity> requests = resourceRequirements.getRequests();
    assertThat(requests.get("cpu").getAmount(), is(String.valueOf(RESOURCE_CPU)));
    assertThat(requests.get("memory").getAmount(), is(String.valueOf(RESOURCE_MEMORY)));
    assertThat(requests.get("ephemeral-storage").getAmount(), is("256"));
    final Map<String, Quantity> limits = resourceRequirements.getLimits();
    assertThat(limits.get("cpu").getAmount(), is(String.valueOf(RESOURCE_CPU)));
    assertThat(limits.get("memory").getAmount(), is(String.valueOf(RESOURCE_MEMORY)));
    assertThat(limits.get("ephemeral-storage").getAmount(), is("256"));
}
Also used : Quantity(io.fabric8.kubernetes.api.model.Quantity) ResourceRequirements(io.fabric8.kubernetes.api.model.ResourceRequirements) Test(org.junit.Test)

Aggregations

ResourceRequirements (io.fabric8.kubernetes.api.model.ResourceRequirements)8 Quantity (io.fabric8.kubernetes.api.model.Quantity)7 Test (org.junit.Test)5 Map (java.util.Map)3 ContainerBuilder (io.fabric8.kubernetes.api.model.ContainerBuilder)2 ResourceRequirementsBuilder (io.fabric8.kubernetes.api.model.ResourceRequirementsBuilder)2 HashMap (java.util.HashMap)2 Then (io.cucumber.java.en.Then)1 EnvVarSourceBuilder (io.fabric8.kubernetes.api.model.EnvVarSourceBuilder)1 PersistentVolumeClaim (io.fabric8.kubernetes.api.model.PersistentVolumeClaim)1 PersistentVolumeClaimSpec (io.fabric8.kubernetes.api.model.PersistentVolumeClaimSpec)1 QuantityBuilder (io.fabric8.kubernetes.api.model.QuantityBuilder)1 ArrayList (java.util.ArrayList)1 List (java.util.List)1 Exchange (org.apache.camel.Exchange)1 Processor (org.apache.camel.Processor)1 ExternalResource (org.apache.flink.api.common.resources.ExternalResource)1 KubernetesConfigMap (org.apache.flink.kubernetes.kubeclient.resources.KubernetesConfigMap)1