You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@karaf.apache.org by jb...@apache.org on 2015/03/20 10:22:54 UTC

karaf-cellar git commit: [KARAF-3609] Upgrade documentation and fixed issues on cloud and kubernetes discovery services

Repository: karaf-cellar
Updated Branches:
  refs/heads/cellar-3.0.x add697a37 -> 971bd7b21


[KARAF-3609] Upgrade documentation and fixed issues on cloud and kubernetes discovery services


Project: http://git-wip-us.apache.org/repos/asf/karaf-cellar/repo
Commit: http://git-wip-us.apache.org/repos/asf/karaf-cellar/commit/971bd7b2
Tree: http://git-wip-us.apache.org/repos/asf/karaf-cellar/tree/971bd7b2
Diff: http://git-wip-us.apache.org/repos/asf/karaf-cellar/diff/971bd7b2

Branch: refs/heads/cellar-3.0.x
Commit: 971bd7b217c52dd886f0788cc6b4b4494fb59d5e
Parents: add697a
Author: Jean-Baptiste Onofré <jb...@apache.org>
Authored: Fri Mar 20 10:22:09 2015 +0100
Committer: Jean-Baptiste Onofré <jb...@apache.org>
Committed: Fri Mar 20 10:22:09 2015 +0100

----------------------------------------------------------------------
 assembly/pom.xml                                |  5 ---
 assembly/src/main/resources/features.xml        |  3 --
 assembly/src/main/resources/kubernetes.cfg      |  5 ---
 .../karaf/cellar/kubernetes/Activator.java      |  5 ++-
 .../kubernetes/KubernetesDiscoveryService.java  |  2 +-
 .../KubernetesDiscoveryServiceFactory.java      | 25 ++++++++++--
 manual/src/main/webapp/user-guide/cloud.conf    | 43 ++++++++++++++------
 7 files changed, 58 insertions(+), 30 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/karaf-cellar/blob/971bd7b2/assembly/pom.xml
----------------------------------------------------------------------
diff --git a/assembly/pom.xml b/assembly/pom.xml
index 86a7976..a9f6eff 100644
--- a/assembly/pom.xml
+++ b/assembly/pom.xml
@@ -95,11 +95,6 @@
                                     <type>xml</type>
                                     <classifier>hazelcast</classifier>
                                 </artifact>
-                                <artifact>
-                                    <file>target/classes/kubernetes.cfg</file>
-                                    <type>cfg</type>
-                                    <classifier>kubernetes</classifier>
-                                </artifact>
                             </artifacts>
                         </configuration>
                     </execution>

http://git-wip-us.apache.org/repos/asf/karaf-cellar/blob/971bd7b2/assembly/src/main/resources/features.xml
----------------------------------------------------------------------
diff --git a/assembly/src/main/resources/features.xml b/assembly/src/main/resources/features.xml
index f66c05f..0a81fe4 100644
--- a/assembly/src/main/resources/features.xml
+++ b/assembly/src/main/resources/features.xml
@@ -99,9 +99,6 @@
     </feature>
 
     <feature name="cellar-kubernetes" description="Cellar kubernetes support in clusters" version="${project.version}" resolver="(obr)">
-        <configfile finalname="/etc/org.apache.karaf.cellar.kubernetes.cfg">
-            mvn:org.apache.karaf.cellar/apache-karaf-cellar/${project.version}/cfg/kubernetes
-        </configfile>
         <feature version="${project.version}">cellar-core</feature>
         <feature>fabric8-kubernetes-api</feature>
         <bundle>mvn:org.apache.karaf.cellar/org.apache.karaf.cellar.kubernetes/${project.version}</bundle>

http://git-wip-us.apache.org/repos/asf/karaf-cellar/blob/971bd7b2/assembly/src/main/resources/kubernetes.cfg
----------------------------------------------------------------------
diff --git a/assembly/src/main/resources/kubernetes.cfg b/assembly/src/main/resources/kubernetes.cfg
deleted file mode 100644
index 9e83ff8..0000000
--- a/assembly/src/main/resources/kubernetes.cfg
+++ /dev/null
@@ -1,5 +0,0 @@
-#
-# Label selector used to idenfity Cellar nodes in Kubernetes cluster
-#
-pod.label.key = name
-pod.label.value = cellar
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/karaf-cellar/blob/971bd7b2/kubernetes/src/main/java/org/apache/karaf/cellar/kubernetes/Activator.java
----------------------------------------------------------------------
diff --git a/kubernetes/src/main/java/org/apache/karaf/cellar/kubernetes/Activator.java b/kubernetes/src/main/java/org/apache/karaf/cellar/kubernetes/Activator.java
index 7769668..c4dfbc2 100644
--- a/kubernetes/src/main/java/org/apache/karaf/cellar/kubernetes/Activator.java
+++ b/kubernetes/src/main/java/org/apache/karaf/cellar/kubernetes/Activator.java
@@ -18,6 +18,8 @@ import org.osgi.framework.BundleContext;
 import org.osgi.framework.Constants;
 import org.osgi.framework.ServiceRegistration;
 import org.osgi.service.cm.ManagedServiceFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import java.util.Hashtable;
 
@@ -25,7 +27,8 @@ public class Activator implements BundleActivator {
 
     private ServiceRegistration serviceRegistration;
 
-    @Override
+    private final static Logger LOGGER = LoggerFactory.getLogger(Activator.class);
+
     public void start(BundleContext bundleContext) throws Exception {
         Hashtable<String, Object> properties = new Hashtable<String, Object>();
         properties.put(Constants.SERVICE_PID, "org.apache.karaf.cellar.kubernetes");

http://git-wip-us.apache.org/repos/asf/karaf-cellar/blob/971bd7b2/kubernetes/src/main/java/org/apache/karaf/cellar/kubernetes/KubernetesDiscoveryService.java
----------------------------------------------------------------------
diff --git a/kubernetes/src/main/java/org/apache/karaf/cellar/kubernetes/KubernetesDiscoveryService.java b/kubernetes/src/main/java/org/apache/karaf/cellar/kubernetes/KubernetesDiscoveryService.java
index 40216d8..a42e2bf 100644
--- a/kubernetes/src/main/java/org/apache/karaf/cellar/kubernetes/KubernetesDiscoveryService.java
+++ b/kubernetes/src/main/java/org/apache/karaf/cellar/kubernetes/KubernetesDiscoveryService.java
@@ -48,7 +48,7 @@ public class KubernetesDiscoveryService implements DiscoveryService {
             String kubernetesUrl = "http://" + kubernetesHost + ":" + kubernetesPort;
             LOGGER.debug("CELLAR KUBERNETES: query API at {} ...", kubernetesUrl);
             kubernetesClient = new KubernetesClient(new KubernetesFactory(kubernetesUrl));
-            LOGGER.debug("CELLAR KUBERNETES: discovery service initalized");
+            LOGGER.debug("CELLAR KUBERNETES: discovery service initialized");
         } catch (Exception e) {
             LOGGER.error("CELLAR KUBERNETES: can't init discovery service", e);
         }

http://git-wip-us.apache.org/repos/asf/karaf-cellar/blob/971bd7b2/kubernetes/src/main/java/org/apache/karaf/cellar/kubernetes/KubernetesDiscoveryServiceFactory.java
----------------------------------------------------------------------
diff --git a/kubernetes/src/main/java/org/apache/karaf/cellar/kubernetes/KubernetesDiscoveryServiceFactory.java b/kubernetes/src/main/java/org/apache/karaf/cellar/kubernetes/KubernetesDiscoveryServiceFactory.java
index 054948b..57a79fc 100644
--- a/kubernetes/src/main/java/org/apache/karaf/cellar/kubernetes/KubernetesDiscoveryServiceFactory.java
+++ b/kubernetes/src/main/java/org/apache/karaf/cellar/kubernetes/KubernetesDiscoveryServiceFactory.java
@@ -38,6 +38,8 @@ public class KubernetesDiscoveryServiceFactory implements ManagedServiceFactory
 
     private static final Logger LOGGER = LoggerFactory.getLogger(KubernetesDiscoveryServiceFactory.class);
 
+    private static final String KUBERNETES_HOST = "host";
+    private static final String KUBERNETES_PORT = "port";
     private static final String KUBERNETES_POD_LABEL_KEY = "pod.label.key";
     private static final String KUBERNETES_POD_LABEL_VALUE = "pod.label.value";
 
@@ -56,9 +58,13 @@ public class KubernetesDiscoveryServiceFactory implements ManagedServiceFactory
 
     @Override
     public void updated(String pid, Dictionary properties) throws ConfigurationException {
+
         ServiceRegistration newServiceRegistration = null;
         try {
             if (properties != null) {
+
+                LOGGER.info("CELLAR KUBERNETES: creating the discovery service ...");
+
                 Properties serviceProperties = new Properties();
                 for (Map.Entry entry : serviceProperties.entrySet()) {
                     Object key = entry.getKey();
@@ -68,23 +74,36 @@ public class KubernetesDiscoveryServiceFactory implements ManagedServiceFactory
 
                 KubernetesDiscoveryService kubernetesDiscoveryService = new KubernetesDiscoveryService();
 
-                String kubernetesHost = getEnvOrDefault("KUBERNETES_RO_SERVICE_HOST", "localhost");
-                String kubernetesPort = getEnvOrDefault("KUBERNETES_RO_SERVICE_PORT", "8080");
+                String kubernetesHost = (String) properties.get(KUBERNETES_HOST);
+                String kubernetesPort = (String) properties.get(KUBERNETES_PORT);
+                if (kubernetesHost == null) {
+                    kubernetesHost = getEnvOrDefault("KUBERNETES_RO_SERVICE_HOST", "localhost");
+                }
+                if (kubernetesPort == null) {
+                    kubernetesPort = getEnvOrDefault("KUBERNETES_RO_SERVICE_PORT", "8080");
+                }
                 String kubernetesPodLabelKey = (String) properties.get(KUBERNETES_POD_LABEL_KEY);
+                if (kubernetesPodLabelKey == null) {
+                    kubernetesPodLabelKey = "name";
+                }
                 String kubernetesPodLabelValue = (String) properties.get(KUBERNETES_POD_LABEL_VALUE);
+                if (kubernetesPodLabelValue == null) {
+                    kubernetesPodLabelValue = "cellar";
+                }
 
                 kubernetesDiscoveryService.setKubernetesHost(kubernetesHost);
                 kubernetesDiscoveryService.setKubernetesPort(kubernetesPort);
                 kubernetesDiscoveryService.setKubernetesPodLabelKey(kubernetesPodLabelKey);
                 kubernetesDiscoveryService.setKubernetesPodLabelValue(kubernetesPodLabelValue);
+
                 kubernetesDiscoveryService.init();
 
                 newServiceRegistration = bundleContext.registerService(DiscoveryService.class.getName(), kubernetesDiscoveryService, (Dictionary) serviceProperties);
+                registrations.put(pid, newServiceRegistration);
             }
         } finally {
             ServiceRegistration oldServiceRegistration = (newServiceRegistration == null) ? registrations.remove(pid) : registrations.put(pid, newServiceRegistration);
             if (oldServiceRegistration != null) {
-                LOGGER.debug("CELLAR KUBERNETES: unregister discovery service {}", pid);
                 oldServiceRegistration.unregister();
             }
         }

http://git-wip-us.apache.org/repos/asf/karaf-cellar/blob/971bd7b2/manual/src/main/webapp/user-guide/cloud.conf
----------------------------------------------------------------------
diff --git a/manual/src/main/webapp/user-guide/cloud.conf b/manual/src/main/webapp/user-guide/cloud.conf
index 67a2ca6..d78f99a 100644
--- a/manual/src/main/webapp/user-guide/cloud.conf
+++ b/manual/src/main/webapp/user-guide/cloud.conf
@@ -36,6 +36,16 @@ credential=<the credential/password of the blobstore account)
 container=<the name of the bucket>
 validity=<the amount of time an entry is considered valid, after that time the entry is removed>
 
+For instance, you can create _etc/org.apache.karaf.cellar.cloud-mycloud.cfg_ containing:
+
+{code}
+provider=aws-s3
+identity=username
+credential=password
+container=cellar
+validity=360000
+{code}
+
 After creating the file the service will check for new nodes. If new nodes are found the Hazelcast instance configuration will be updated and the instance restarted.
 
 h2. Kubernetes & docker.io
@@ -55,13 +65,11 @@ create and manage docker.io images in and for Karaf).
 h3. Kubernetes discovery service
 
 In order to determine the IP address of each node, so that Hazelcast can connect to them, the Kubernetes discovery service queries
-the Kubernetes API for containers labeled with the _pod.label.key_ and _pod.label.key_ specified in _etc/org.apache.karaf.cellar.kubernetes.cfg_.
-So, you *must be sure* to label your containers (pods) accordingly.
-*NOTE*: Since environment variables are injected into all Kubernetes containers, they can access said API at:
+the Kubernetes API for containers labeled with the _pod.label.key_ and _pod.label.key_ specified in _etc/org.apache.karaf.cellar.kubernetes-name.cfg_.
+The name in _etc/org.apache.karaf.cellar.kubernetes-name.cfg_ is a name of the choice. It allows you to create multiple Kubernetes discovery services.
+Thanks to that, the Cellar nodes can be discovered on different Kubernetes.
 
-{code}
-http://$KUBERNETES_RO_SERVICE_HOST:$KUBERNETES_RO_SERVICE_PORT
-{code}
+So, you *must be sure* to label your containers (pods) accordingly.
 
 After a Cellar node starts up, Kubernetes discovery service will configure Hazelcast with currently running Cellar nodes.
 Since Hazelcast follows a peer-to-peer all-shared topology, whenever nodes come up and down, the cluster will remain up-to-date.
@@ -74,14 +82,25 @@ To install the Kubernetes discovery service, simply install cellar-kubernetes fe
 karaf@root()> feature:install cellar-kubernetes
 {code}
 
-Once the feature is installed, a new configuration file for the Kubernetes discovery service will live in etc/org.apache.karaf.cellar.kubernetes.cfg with the following contents:
+Once the cellar-kubernetes feature is installed, you have to create the Kubernetes provider configuration file.
+If you have multiple Kubernetes instances, you create one configuration file per instance.
+
+For instance, you can create _etc/org.apache.karaf.cellar.kubernetes-myfirstcluster.cfg_ containing:
+
+{code}
+host=localhost
+port=8080
+pod.label.key=name
+pod.label.value=cellar
+{code}
+
+and another one _etc/org.apache.karaf.cellar.kubernetes-mysecondcluster.cfg_ containing:
 
 {code}
-#
-# Label selector used to idenfity Cellar nodes in Kubernetes cluster
-#
-pod.label.key = name
-pod.label.value = cellar
+host=192.168.134.2
+port=8080
+pod.label.key=name
+pod.label.value=cellar
 {code}
 
 In case you change the file, the discovery service will check again for new nodes. If new nodes are found, Hazelcast configuration will be