Repository: stratos Updated Branches: refs/heads/stratos-4.1.x d9fb5f014 -> 3af354cf0
Fixing memory allocation limit in kubernetes and allowing users to specify cpu and memory with units Project: http://git-wip-us.apache.org/repos/asf/stratos/repo Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/3af354cf Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/3af354cf Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/3af354cf Branch: refs/heads/stratos-4.1.x Commit: 3af354cf037b27c235e743d311ec141dd505471a Parents: d9fb5f0 Author: Imesh Gunaratne <[email protected]> Authored: Wed Sep 9 16:54:43 2015 +0530 Committer: Imesh Gunaratne <[email protected]> Committed: Wed Sep 9 16:54:43 2015 +0530 ---------------------------------------------------------------------- .../cloud/controller/domain/InstanceMetadata.java | 12 ++++++------ .../stratos/cloud/controller/iaases/JcloudsIaas.java | 2 +- .../controller/iaases/kubernetes/KubernetesIaas.java | 8 ++++---- .../stratos/kubernetes/client/KubernetesApiClient.java | 12 ++++++------ .../client/interfaces/KubernetesAPIClientInterface.java | 2 +- .../kubernetes/client/live/AbstractLiveTest.java | 7 +++---- .../client/live/KubernetesApiClientLiveTest.java | 8 ++++---- 7 files changed, 25 insertions(+), 26 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/stratos/blob/3af354cf/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/InstanceMetadata.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/InstanceMetadata.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/InstanceMetadata.java index 02022af..9ff171f 100644 --- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/InstanceMetadata.java +++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/InstanceMetadata.java @@ -30,8 +30,8 @@ public class InstanceMetadata implements Serializable { private String hostname; private String hypervisor; - private int cpu; - private int ram; + private String cpu; + private String ram; private String imageId; private int loginPort; private String operatingSystemName; @@ -55,11 +55,11 @@ public class InstanceMetadata implements Serializable { this.hypervisor = hypervisor; } - public int getRam() { + public String getRam() { return ram; } - public void setRam(int ram) { + public void setRam(String ram) { this.ram = ram; } @@ -111,11 +111,11 @@ public class InstanceMetadata implements Serializable { this.operatingSystem64bit = operatingSystem64bit; } - public void setCpu(int cpu) { + public void setCpu(String cpu) { this.cpu = cpu; } - public int getCpu() { + public String getCpu() { return cpu; } } http://git-wip-us.apache.org/repos/asf/stratos/blob/3af354cf/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/JcloudsIaas.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/JcloudsIaas.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/JcloudsIaas.java index fbd5fc1..562ae81 100644 --- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/JcloudsIaas.java +++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/JcloudsIaas.java @@ -158,7 +158,7 @@ public abstract class JcloudsIaas extends Iaas { instanceMetadata.setLoginPort(nodeMetadata.getLoginPort()); if (nodeMetadata.getHardware() != null) { instanceMetadata.setHypervisor(nodeMetadata.getHardware().getHypervisor()); - instanceMetadata.setRam(nodeMetadata.getHardware().getRam()); + instanceMetadata.setRam(String.valueOf(nodeMetadata.getHardware().getRam())); } if (nodeMetadata.getOperatingSystem() != null) { instanceMetadata.setOperatingSystemName(nodeMetadata.getOperatingSystem().getName()); http://git-wip-us.apache.org/repos/asf/stratos/blob/3af354cf/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/kubernetes/KubernetesIaas.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/kubernetes/KubernetesIaas.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/kubernetes/KubernetesIaas.java index fa1a9b3..8d81ceb 100644 --- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/kubernetes/KubernetesIaas.java +++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/kubernetes/KubernetesIaas.java @@ -384,15 +384,15 @@ public class KubernetesIaas extends Iaas { } // Set default values to zero to avoid cpu and memory restrictions - int cpu = Integer.getInteger(KUBERNETES_CONTAINER_CPU_DEFAULT, 0); - int memory = Integer.getInteger(KUBERNETES_CONTAINER_MEMORY_DEFAULT, 0); + String cpu = System.getProperty(KUBERNETES_CONTAINER_CPU_DEFAULT, "0"); + String memory = System.getProperty(KUBERNETES_CONTAINER_MEMORY_DEFAULT, "0"); Property cpuProperty = cartridge.getProperties().getProperty(KUBERNETES_CONTAINER_CPU); if (cpuProperty != null) { - cpu = Integer.parseInt(cpuProperty.getValue()); + cpu = cpuProperty.getValue(); } Property memoryProperty = cartridge.getProperties().getProperty(KUBERNETES_CONTAINER_MEMORY); if (memoryProperty != null) { - memory = Integer.parseInt(memoryProperty.getValue()); + memory = memoryProperty.getValue(); } IaasProvider iaasProvider = CloudControllerContext.getInstance().getIaasProviderOfPartition(cartridge.getType(), partition.getId()); http://git-wip-us.apache.org/repos/asf/stratos/blob/3af354cf/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/KubernetesApiClient.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/KubernetesApiClient.java b/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/KubernetesApiClient.java index cfdaf77..7dffd60 100644 --- a/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/KubernetesApiClient.java +++ b/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/KubernetesApiClient.java @@ -55,16 +55,16 @@ public class KubernetesApiClient implements KubernetesAPIClientInterface { * @throws KubernetesClientException */ @Override - public void createPod(String podId, String podLabel, String dockerImage, int cpu, int memory, List<ContainerPort> ports, + public void createPod(String podId, String podLabel, String dockerImage, String cpu, String memory, List<ContainerPort> ports, List<EnvVar> environmentVariables) throws KubernetesClientException { try { - int memoryInMB = 1024 * 1024 * memory; + if (log.isDebugEnabled()) { log.debug(String.format("Creating kubernetes pod: [pod-id] %s [pod-name] %s [docker-image] %s " + - "[cpu] %d [memory] %d MB [ports] %s", - podId, podLabel, dockerImage, cpu, memoryInMB, ports)); + "[cpu] %s [memory] %s [ports] %s", + podId, podLabel, dockerImage, cpu, memory, ports)); } // Create pod definition @@ -93,8 +93,8 @@ public class KubernetesApiClient implements KubernetesAPIClientInterface { // Set resource limits ResourceRequirements resources = new ResourceRequirements(); Map<String, Quantity> limits = new HashMap<String, Quantity>(); - limits.put(KubernetesConstants.RESOURCE_CPU, new Quantity(String.valueOf(cpu))); - limits.put(KubernetesConstants.RESOURCE_MEMORY, new Quantity(String.valueOf(memoryInMB))); + limits.put(KubernetesConstants.RESOURCE_CPU, new Quantity(cpu)); + limits.put(KubernetesConstants.RESOURCE_MEMORY, new Quantity(memory)); resources.setLimits(limits); containerTemplate.setResources(resources); http://git-wip-us.apache.org/repos/asf/stratos/blob/3af354cf/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/interfaces/KubernetesAPIClientInterface.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/interfaces/KubernetesAPIClientInterface.java b/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/interfaces/KubernetesAPIClientInterface.java index ceeca1c..dd980fe 100644 --- a/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/interfaces/KubernetesAPIClientInterface.java +++ b/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/interfaces/KubernetesAPIClientInterface.java @@ -42,7 +42,7 @@ public interface KubernetesAPIClientInterface { * @param environmentVariables environment variables * @throws KubernetesClientException */ - public void createPod(String podId, String podLabel, String dockerImage, int cpu, int memory, + public void createPod(String podId, String podLabel, String dockerImage, String cpu, String memory, List<ContainerPort> ports, List<EnvVar> environmentVariables) throws KubernetesClientException; http://git-wip-us.apache.org/repos/asf/stratos/blob/3af354cf/components/org.apache.stratos.kubernetes.client/src/test/java/org/apache/stratos/kubernetes/client/live/AbstractLiveTest.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.kubernetes.client/src/test/java/org/apache/stratos/kubernetes/client/live/AbstractLiveTest.java b/components/org.apache.stratos.kubernetes.client/src/test/java/org/apache/stratos/kubernetes/client/live/AbstractLiveTest.java index 0ee580d..2fc2cc43 100644 --- a/components/org.apache.stratos.kubernetes.client/src/test/java/org/apache/stratos/kubernetes/client/live/AbstractLiveTest.java +++ b/components/org.apache.stratos.kubernetes.client/src/test/java/org/apache/stratos/kubernetes/client/live/AbstractLiveTest.java @@ -124,7 +124,7 @@ public class AbstractLiveTest extends TestCase { log.info("Kubernetes resources cleaned"); } - protected void createPod(String podId, String podName, String containerPortName, int cpu, int memory) + protected void createPod(String podId, String podName, String containerPortName, String cpu, String memory) throws KubernetesClientException { log.info("Creating pod: [pod] " + podId); @@ -141,11 +141,10 @@ public class AbstractLiveTest extends TestCase { assertEquals(1, containers.size()); Map<String, Quantity> limits = containers.get(0).getResources().getLimits(); - int memoryInMb = memory * 1024 * 1024; log.info("Verifying container resource limits..."); - assertEquals(String.valueOf(cpu), limits.get(KubernetesConstants.RESOURCE_CPU).getAmount()); - assertEquals(String.valueOf(memoryInMb), limits.get(KubernetesConstants.RESOURCE_MEMORY).getAmount()); + assertEquals(cpu, limits.get(KubernetesConstants.RESOURCE_CPU).getAmount()); + assertEquals(memory, limits.get(KubernetesConstants.RESOURCE_MEMORY).getAmount()); log.info("Container resource limits verified successfully"); if (testPodActivation) { http://git-wip-us.apache.org/repos/asf/stratos/blob/3af354cf/components/org.apache.stratos.kubernetes.client/src/test/java/org/apache/stratos/kubernetes/client/live/KubernetesApiClientLiveTest.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.kubernetes.client/src/test/java/org/apache/stratos/kubernetes/client/live/KubernetesApiClientLiveTest.java b/components/org.apache.stratos.kubernetes.client/src/test/java/org/apache/stratos/kubernetes/client/live/KubernetesApiClientLiveTest.java index 79c32a7..c7ae1da 100644 --- a/components/org.apache.stratos.kubernetes.client/src/test/java/org/apache/stratos/kubernetes/client/live/KubernetesApiClientLiveTest.java +++ b/components/org.apache.stratos.kubernetes.client/src/test/java/org/apache/stratos/kubernetes/client/live/KubernetesApiClientLiveTest.java @@ -48,8 +48,8 @@ public class KubernetesApiClientLiveTest extends AbstractLiveTest { public void testPodCreation() throws Exception { log.info("Testing pod creation..."); - createPod("stratos-test-pod-1", "stratos-test-pod", "http-1", 1, 512); - createPod("stratos-test-pod-2", "stratos-test-pod", "http-1", 2, 512); + createPod("stratos-test-pod-1", "stratos-test-pod", "http-1", "1", "512Mi"); + createPod("stratos-test-pod-2", "stratos-test-pod", "http-1", "2", "4Gi"); deletePod("stratos-test-pod-1"); deletePod("stratos-test-pod-2"); @@ -75,8 +75,8 @@ public class KubernetesApiClientLiveTest extends AbstractLiveTest { createService(serviceId, serviceName, SERVICE_PORT, serviceType, containerPortName, containerPort, minionPublicIPs); - createPod("stratos-test-pod-3", serviceName, containerPortName, 1, 512); - createPod("stratos-test-pod-4", serviceName, containerPortName, 2, 512); + createPod("stratos-test-pod-3", serviceName, containerPortName, "1", "512"); + createPod("stratos-test-pod-4", serviceName, containerPortName, "2", "512"); if (testServiceSocket) { // test service accessibility
