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/28 11:19:49 UTC
stratos git commit: Adding session affinity property to Kubernetes
services and making it configurable via cartridge definition
Repository: stratos
Updated Branches:
refs/heads/master a0b210d3b -> b00dd2d29
Adding session affinity property to Kubernetes services and making it configurable via cartridge definition
Project: http://git-wip-us.apache.org/repos/asf/stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/b00dd2d2
Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/b00dd2d2
Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/b00dd2d2
Branch: refs/heads/master
Commit: b00dd2d2992aba3150a183aa969b98850a17c309
Parents: a0b210d
Author: Imesh Gunaratne <im...@apache.org>
Authored: Thu May 28 14:44:12 2015 +0530
Committer: Imesh Gunaratne <im...@apache.org>
Committed: Thu May 28 14:44:12 2015 +0530
----------------------------------------------------------------------
.../controller/iaases/kubernetes/KubernetesIaas.java | 10 +++++++++-
.../stratos/kubernetes/client/KubernetesApiClient.java | 7 +++++--
.../stratos/kubernetes/client/KubernetesConstants.java | 1 +
.../client/interfaces/KubernetesAPIClientInterface.java | 3 ++-
.../apache/stratos/kubernetes/client/model/Service.java | 11 ++++++++++-
.../stratos/kubernetes/client/live/AbstractLiveTest.java | 3 ++-
6 files changed, 29 insertions(+), 6 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/stratos/blob/b00dd2d2/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 e06d2d1..6a90c73 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
@@ -64,6 +64,7 @@ public class KubernetesIaas extends Iaas {
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_SERVICE_SESSION_AFFINITY = "KUBERNETES_SERVICE_SESSION_AFFINITY";
private static final String KUBERNETES_CONTAINER_CPU_DEFAULT = "kubernetes.container.cpu.default";
private static final String KUBERNETES_CONTAINER_MEMORY_DEFAULT = "kubernetes.container.memory.default";
@@ -463,6 +464,12 @@ public class KubernetesIaas extends Iaas {
throw new RuntimeException(message);
}
+ String sessionAffinity = null;
+ Property sessionAffinityProperty = cartridge.getProperties().getProperty(KUBERNETES_SERVICE_SESSION_AFFINITY);
+ if(sessionAffinityProperty != null) {
+ sessionAffinity = sessionAffinityProperty.getValue();
+ }
+
List<KubernetesService> kubernetesServices = clusterContext.getKubernetesServices();
if (kubernetesServices == null) {
kubernetesServices = new ArrayList<KubernetesService>();
@@ -511,8 +518,9 @@ public class KubernetesIaas extends Iaas {
String containerPortName = KubernetesIaasUtil.preparePortNameFromPortMapping(portMapping);
try {
+ String[] publicIPs = minionPrivateIPList.toArray(new String[minionPrivateIPList.size()]);
kubernetesApi.createService(serviceId, serviceLabel, servicePort, containerPortName,
- minionPrivateIPList.toArray(new String[minionPrivateIPList.size()]));
+ publicIPs, sessionAffinity);
} finally {
// Persist kubernetes service sequence no
CloudControllerContext.getInstance().persist();
http://git-wip-us.apache.org/repos/asf/stratos/blob/b00dd2d2/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 99f156f..9a8eb46 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
@@ -513,12 +513,14 @@ public class KubernetesApiClient implements KubernetesAPIClientInterface {
* @param serviceLabel Service name to be used by the label name
* @param servicePort Port to be exposed by the service
* @param containerPortName Container port name defined in the port label
- * @param publicIPs
+ * @param publicIPs Public IP addresses of the minions
+ * @param sessionAffinity Session affinity configuration
* @throws KubernetesClientException
*/
@Override
public void createService(String serviceId, String serviceLabel, int servicePort,
- String containerPortName, String[] publicIPs) throws KubernetesClientException {
+ String containerPortName, String[] publicIPs, String sessionAffinity)
+ throws KubernetesClientException {
try {
if (log.isDebugEnabled()) {
log.debug(String.format("Creating kubernetes service: [service-id] %s [service-name] %s [service-port] %d " +
@@ -534,6 +536,7 @@ public class KubernetesApiClient implements KubernetesAPIClientInterface {
service.setPort(servicePort);
service.setPublicIPs(publicIPs);
service.setContainerPort(containerPortName);
+ service.setSessionAffinity(sessionAffinity);
// Set service labels
Labels serviceLabels = new Labels();
http://git-wip-us.apache.org/repos/asf/stratos/blob/b00dd2d2/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/KubernetesConstants.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/KubernetesConstants.java b/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/KubernetesConstants.java
index 66e4556..422a9f2 100644
--- a/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/KubernetesConstants.java
+++ b/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/KubernetesConstants.java
@@ -30,4 +30,5 @@ public class KubernetesConstants {
public static final String KIND_REPLICATION_CONTROLLER = "ReplicationController";
public static final String KIND_POD = "Pod";
public static final String POLICY_PULL_IF_NOT_PRESENT = "PullIfNotPresent";
+ public static final String SESSION_AFFINITY_CLIENT_IP = "ClientIP";
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/b00dd2d2/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 df9f3de..efcc239 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
@@ -135,10 +135,11 @@ public interface KubernetesAPIClientInterface {
* @param servicePort
* @param containerPortName
* @param publicIPs
+ * @param sessionAffinity
* @throws KubernetesClientException
*/
public void createService(String serviceId, String serviceLabel, int servicePort,
- String containerPortName, String[] publicIPs) throws KubernetesClientException;
+ String containerPortName, String[] publicIPs, String sessionAffinity) throws KubernetesClientException;
/**
* Get the Service with the given id.
http://git-wip-us.apache.org/repos/asf/stratos/blob/b00dd2d2/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/model/Service.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/model/Service.java b/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/model/Service.java
index e21c01d..6d04544 100644
--- a/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/model/Service.java
+++ b/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/model/Service.java
@@ -44,6 +44,7 @@ public class Service implements Serializable {
private Labels labels;
private String[] publicIPs;
private String portalIP;
+ private String sessionAffinity;
public String getKind() {
return kind;
@@ -141,11 +142,19 @@ public class Service implements Serializable {
this.portalIP = portalIP;
}
+ public void setSessionAffinity(String sessionAffinity) {
+ this.sessionAffinity = sessionAffinity;
+ }
+
+ public String getSessionAffinity() {
+ return sessionAffinity;
+ }
+
@Override
public String toString() {
return "Service [kind=" + kind + ", id=" + id + ", creationTimestamp=" + creationTimestamp + ", selfLink="
+ selfLink + ", name=" + name + ", port=" + port + ", containerPort=" + containerPort + ", selector="
+ selector + ", apiVersion=" + apiVersion + ", labels=" + labels + ", publicIPs="
- + Arrays.toString(publicIPs) + "portalIP=" + portalIP + "]";
+ + Arrays.toString(publicIPs) + "portalIP=" + portalIP + ", sessionAffinity=" + sessionAffinity + "]";
}
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/b00dd2d2/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 85ae645..03a2b0f 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
@@ -182,7 +182,8 @@ public class AbstractLiveTest extends TestCase {
protected void createService(String serviceId, String serviceName, int servicePort, String containerPortName,
String[] publicIPs) throws KubernetesClientException, InterruptedException, IOException {
log.info("Creating service...");
- client.createService(serviceId, serviceName, servicePort, containerPortName, publicIPs);
+ client.createService(serviceId, serviceName, servicePort, containerPortName, publicIPs,
+ KubernetesConstants.SESSION_AFFINITY_CLIENT_IP);
serviceIdList.add(serviceId);
sleep(1000);