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 <[email protected]> Authored: Thu May 28 14:44:12 2015 +0530 Committer: Imesh Gunaratne <[email protected]> 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);
