You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stratos.apache.org by im...@apache.org on 2015/05/20 21:13:31 UTC
stratos git commit: Introducing parameters to specify cpu and memory
allocations for docker containers
Repository: stratos
Updated Branches:
refs/heads/master c868c7af4 -> 7dc0c9a1f
Introducing parameters to specify cpu and memory allocations for docker containers
Project: http://git-wip-us.apache.org/repos/asf/stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/7dc0c9a1
Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/7dc0c9a1
Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/7dc0c9a1
Branch: refs/heads/master
Commit: 7dc0c9a1ff230e9e2b3b57072f6eed12e518848a
Parents: c868c7a
Author: Imesh Gunaratne <im...@apache.org>
Authored: Thu May 21 00:51:43 2015 +0530
Committer: Imesh Gunaratne <im...@apache.org>
Committed: Thu May 21 00:54:51 2015 +0530
----------------------------------------------------------------------
.../controller/domain/InstanceMetadata.java | 9 ++++++
.../iaases/kubernetes/KubernetesIaas.java | 31 ++++++++++++++++--
.../kubernetes/client/KubernetesApiClient.java | 13 ++++++--
.../KubernetesAPIClientInterface.java | 12 ++++---
.../kubernetes/client/model/Container.java | 33 ++++++++++++++++---
.../client/live/AbstractLiveTest.java | 4 +--
.../live/KubernetesApiClientLiveTest.java | 8 ++---
.../autoscaling-policy-1.json | 6 ++--
samples/cartridges/kubernetes/php.json | 34 +++++++++++++-------
9 files changed, 113 insertions(+), 37 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/stratos/blob/7dc0c9a1/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 4c0895b..02022af 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,6 +30,7 @@ public class InstanceMetadata implements Serializable {
private String hostname;
private String hypervisor;
+ private int cpu;
private int ram;
private String imageId;
private int loginPort;
@@ -109,4 +110,12 @@ public class InstanceMetadata implements Serializable {
public void setOperatingSystem64bit(boolean operatingSystem64bit) {
this.operatingSystem64bit = operatingSystem64bit;
}
+
+ public void setCpu(int cpu) {
+ this.cpu = cpu;
+ }
+
+ public int getCpu() {
+ return cpu;
+ }
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/7dc0c9a1/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 b756121..4aa4c4c 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
@@ -62,6 +62,10 @@ public class KubernetesIaas extends Iaas {
private static final String PAYLOAD_PARAMETER_NAME_VALUE_SEPARATOR = "=";
private static final String PAYLOAD_PARAMETER_PREFIX = "payload_parameter.";
private static final String PORT_MAPPINGS = "PORT_MAPPINGS";
+ private static final String KUBERNETES_CONTAINER_CPU = "KUBERNETES_CONTAINER_CPU";
+ private static final String KUBERNETES_CONTAINER_MEMORY = "KUBERNETES_CONTAINER_MEMORY";
+ private static final String KUBERNETES_CONTAINER_CPU_DEFAULT = "kubernetes.container.cpu.default";
+ private static final String KUBERNETES_CONTAINER_MEMORY_DEFAULT = "kubernetes.container.memory.default";
private PartitionValidator partitionValidator;
private List<NameValuePair> payload;
@@ -224,9 +228,11 @@ public class KubernetesIaas extends Iaas {
// Update member context
updateMemberContext(memberContext, pod, kubernetesCluster);
- log.info(String.format("Container started successfully: [application] %s [cartridge] %s [member] %s [pod]",
+ log.info(String.format("Container started successfully: [application] %s [cartridge] %s [member] %s " +
+ "[pod] %s [cpu] %d [memory] %d MB",
memberContext.getApplicationId(), memberContext.getCartridgeType(),
- memberContext.getMemberId(), memberContext.getKubernetesPodId()));
+ memberContext.getMemberId(), memberContext.getKubernetesPodId(),
+ memberContext.getInstanceMetadata().getCpu(), memberContext.getInstanceMetadata().getRam()));
return memberContext;
} catch (Exception e) {
String msg = String.format("Could not start container: [application] %s [cartridge] %s [member] %s",
@@ -373,6 +379,17 @@ public class KubernetesIaas extends Iaas {
throw new RuntimeException(message);
}
+ int cpu = Integer.getInteger(KUBERNETES_CONTAINER_CPU_DEFAULT, 1);
+ int memory = Integer.getInteger(KUBERNETES_CONTAINER_MEMORY_DEFAULT, 1024);
+ Property cpuProperty = cartridge.getProperties().getProperty(KUBERNETES_CONTAINER_CPU);
+ if(cpuProperty != null) {
+ cpu = Integer.parseInt(cpuProperty.getValue());
+ }
+ Property memoryProperty = cartridge.getProperties().getProperty(KUBERNETES_CONTAINER_MEMORY);
+ if(memoryProperty != null) {
+ memory = Integer.parseInt(memoryProperty.getValue());
+ }
+
IaasProvider iaasProvider = CloudControllerContext.getInstance().getIaasProviderOfPartition(cartridge.getType(), partition.getId());
if (iaasProvider == null) {
String message = "Could not find iaas provider: [partition] " + partition.getId();
@@ -392,11 +409,19 @@ public class KubernetesIaas extends Iaas {
clusterContext, memberContext);
List<Port> ports = KubernetesIaasUtil.convertPortMappings(Arrays.asList(cartridge.getPortMappings()));
- kubernetesApi.createPod(podId, podLabel, dockerImage, ports, environmentVariables);
+ kubernetesApi.createPod(podId, podLabel, dockerImage, cpu, memory, ports, environmentVariables);
// Add pod id to member context
memberContext.setKubernetesPodId(podId);
memberContext.setKubernetesPodLabel(podLabel);
+
+ // Create instance metadata
+ InstanceMetadata instanceMetadata = new InstanceMetadata();
+ instanceMetadata.setImageId(dockerImage);
+ instanceMetadata.setCpu(cpu);
+ instanceMetadata.setRam(memory);
+ memberContext.setInstanceMetadata(instanceMetadata);
+
// Persist cloud controller context
CloudControllerContext.getInstance().persist();
http://git-wip-us.apache.org/repos/asf/stratos/blob/7dc0c9a1/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 aec99eb..99f156f 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
@@ -54,17 +54,22 @@ public class KubernetesApiClient implements KubernetesAPIClientInterface {
* @param podId Identifier of the pod
* @param podLabel Pod name to be used by the pod label
* @param dockerImage Docker image to be used by the pod
+ * @param cpu Number of cpu cores
+ * @param memory Memory allocation in megabytes
* @param ports Ports exposed by the pod
* @param environmentVariables Environment variables to be passed to the pod
* @throws KubernetesClientException
*/
@Override
- public void createPod(String podId, String podLabel, String dockerImage, List<Port> ports,
+ public void createPod(String podId, String podLabel, String dockerImage, int cpu, int memory, List<Port> ports,
EnvironmentVariable[] environmentVariables)
throws KubernetesClientException {
+
+ int memoryInMB = 1024 * 1024 * memory;
if (log.isDebugEnabled()) {
- log.debug(String.format("Creating kubernetes pod: [pod-id] %s [pod-name] %s [docker-image] %s [ports] %s",
- podId, podLabel, dockerImage, ports));
+ 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));
}
// Create pod definition
@@ -87,6 +92,8 @@ public class KubernetesApiClient implements KubernetesAPIClientInterface {
Container containerTemplate = new Container();
containerTemplate.setName(podLabel);
containerTemplate.setImage(dockerImage);
+ containerTemplate.setCpu(cpu);
+ containerTemplate.setMemory(memoryInMB);
containerTemplate.setPorts(ports);
containerTemplate.setImagePullPolicy(KubernetesConstants.POLICY_PULL_IF_NOT_PRESENT);
if (environmentVariables != null) {
http://git-wip-us.apache.org/repos/asf/stratos/blob/7dc0c9a1/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 739677e..df9f3de 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
@@ -31,13 +31,15 @@ public interface KubernetesAPIClientInterface {
/**
* Create pod.
*
- * @param podId
- * @param podLabel
- * @param dockerImage
- * @param ports
+ * @param podId id of the pod
+ * @param podLabel pod label
+ * @param dockerImage docker image name
+ * @param cpu number of cpu cores
+ * @param memory memory allocation in mega bytes
+ * @param ports ports to be opened
* @throws KubernetesClientException
*/
- public void createPod(String podId, String podLabel, String dockerImage, List<Port> ports,
+ public void createPod(String podId, String podLabel, String dockerImage, int cpu, int memory, List<Port> ports,
EnvironmentVariable[] environmentVariables)
throws KubernetesClientException;
http://git-wip-us.apache.org/repos/asf/stratos/blob/7dc0c9a1/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/model/Container.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/model/Container.java b/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/model/Container.java
index 45e4bca..fd8d591 100644
--- a/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/model/Container.java
+++ b/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/model/Container.java
@@ -30,6 +30,8 @@ public class Container {
private String name;
private String image;
+ private int cpu;
+ private int memory;
private String workingDir;
private String[] command;
private VolumeMount[] volumeMounts;
@@ -57,6 +59,23 @@ public class Container {
this.image = image;
}
+
+ public int getCpu() {
+ return cpu;
+ }
+
+ public void setCpu(int cpu) {
+ this.cpu = cpu;
+ }
+
+ public int getMemory() {
+ return memory;
+ }
+
+ public void setMemory(int memory) {
+ this.memory = memory;
+ }
+
public String getWorkingDir() {
return workingDir;
}
@@ -103,11 +122,15 @@ public class Container {
@Override
public String toString() {
- return "Container [name=" + name + ", image=" + image + ", workingDir="
- + workingDir + ", command=" + Arrays.toString(command)
- + ", volumeMounts=" + Arrays.toString(volumeMounts)
- + ", ports=" + ports + ", env="
- + Arrays.toString(env) + "]";
+ return "Container [name=" + name +
+ ", image=" + image +
+ ", cpu=" + cpu +
+ ", memory=" + memory +
+ ", workingDir=" + workingDir +
+ ", command=" + Arrays.toString(command) +
+ ", volumeMounts=" + Arrays.toString(volumeMounts) +
+ ", ports=" + ports +
+ ", env=" + Arrays.toString(env) + "]";
}
public String getImagePullPolicy() {
http://git-wip-us.apache.org/repos/asf/stratos/blob/7dc0c9a1/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 faab5ab..0ab978e 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
@@ -123,10 +123,10 @@ public class AbstractLiveTest extends TestCase {
log.info("Kubernetes resources cleaned");
}
- protected void createPod(String podId, String podName, String containerPortName) throws KubernetesClientException {
+ protected void createPod(String podId, String podName, String containerPortName, int cpu, int memory) throws KubernetesClientException {
log.info("Creating pod: [pod] " + podId);
List<Port> ports = createPorts(containerPortName);
- client.createPod(podId, podName, dockerImage, ports, null);
+ client.createPod(podId, podName, dockerImage, cpu, memory, ports, null);
podIdList.add(podId);
sleep(2000);
http://git-wip-us.apache.org/repos/asf/stratos/blob/7dc0c9a1/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 5c425aa..7983194 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
@@ -47,8 +47,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");
- createPod("stratos-test-pod-2", "stratos-test-pod", "http-1");
+ createPod("stratos-test-pod-2", "stratos-test-pod", "http-1", 1, 512);
+ createPod("stratos-test-pod-2", "stratos-test-pod", "http-1", 2, 512);
deletePod("stratos-test-pod-1");
deletePod("stratos-test-pod-2");
@@ -73,8 +73,8 @@ public class KubernetesApiClientLiveTest extends AbstractLiveTest {
createService(serviceId, serviceName, SERVICE_PORT, containerPortName, minionPublicIPs);
- createPod("stratos-test-pod-1", serviceName, containerPortName);
- createPod("stratos-test-pod-2", serviceName, containerPortName);
+ createPod("stratos-test-pod-1", serviceName, containerPortName, 1, 512);
+ createPod("stratos-test-pod-2", serviceName, containerPortName, 2, 512);
if (testServiceSocket) {
// test service accessibility
http://git-wip-us.apache.org/repos/asf/stratos/blob/7dc0c9a1/samples/autoscaling-policies/autoscaling-policy-1.json
----------------------------------------------------------------------
diff --git a/samples/autoscaling-policies/autoscaling-policy-1.json b/samples/autoscaling-policies/autoscaling-policy-1.json
index 9f6a370..495ed7b 100644
--- a/samples/autoscaling-policies/autoscaling-policy-1.json
+++ b/samples/autoscaling-policies/autoscaling-policy-1.json
@@ -2,13 +2,13 @@
"id": "autoscaling-policy-1",
"loadThresholds": {
"requestsInFlight": {
- "threshold": 50
+ "threshold": 20
},
"memoryConsumption": {
- "threshold": 40
+ "threshold": 70
},
"loadAverage": {
- "threshold": 40
+ "threshold": 70
}
}
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/7dc0c9a1/samples/cartridges/kubernetes/php.json
----------------------------------------------------------------------
diff --git a/samples/cartridges/kubernetes/php.json b/samples/cartridges/kubernetes/php.json
index fd3905f..8d2c9a0 100755
--- a/samples/cartridges/kubernetes/php.json
+++ b/samples/cartridges/kubernetes/php.json
@@ -7,7 +7,7 @@
"description": "php Cartridge",
"version": "7",
"multiTenant": "false",
- "loadBalancingIPType" : "public",
+ "loadBalancingIPType": "public",
"portMapping": [
{
"protocol": "http",
@@ -15,17 +15,27 @@
"proxyPort": "8281"
}
],
- "deployment":{
- "baseDir":"/var/www"
+ "deployment": {
+ "baseDir": "/var/www"
},
- "iaasProvider":[
- {
- "type":"kubernetes",
- "imageId":"stratos/php:4.1.0-beta",
- "networkInterfaces":[
- ],
- "property":[
- ]
- }
+ "iaasProvider": [
+ {
+ "type": "kubernetes",
+ "imageId": "stratos/php:4.1.0-beta",
+ "networkInterfaces": [
+ ],
+ "property": [
+ ]
+ }
+ ],
+ "property": [
+ {
+ "name": "KUBERNETES_CONTAINER_CPU",
+ "value": "1"
+ },
+ {
+ "name": "KUBERNETES_CONTAINER_MEMORY",
+ "value": "512"
+ }
]
}