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);