From eb2df43c7830b34556629bfd9a983ffd85700423 Mon Sep 17 00:00:00 2001 From: Marcin Wielgus Date: Tue, 23 Jun 2015 17:52:06 +0200 Subject: [PATCH] Fix IP field name and add namespace support in Cassandra example --- examples/cassandra/README.md | 10 +++++++++- examples/cassandra/cassandra-controller.yaml | 4 ++++ examples/cassandra/cassandra.yaml | 4 ++++ .../cassandra/image/kubernetes-cassandra.jar | Bin 8418 -> 8636 bytes .../k8s/cassandra/KubernetesSeedProvider.java | 13 +++++++++---- 5 files changed, 26 insertions(+), 5 deletions(-) diff --git a/examples/cassandra/README.md b/examples/cassandra/README.md index 19495b21908..0277e13bb8b 100644 --- a/examples/cassandra/README.md +++ b/examples/cassandra/README.md @@ -44,6 +44,10 @@ spec: value: 512M - name: HEAP_NEWSIZE value: 100M + - name: POD_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace volumes: - name: data emptyDir: {} @@ -51,7 +55,7 @@ spec: There are a few things to note in this description. First is that we are running the ```kubernetes/cassandra``` image. This is a standard Cassandra installation on top of Debian. However it also adds a custom [```SeedProvider```](https://svn.apache.org/repos/asf/cassandra/trunk/src/java/org/apache/cassandra/locator/SeedProvider.java) to Cassandra. In Cassandra, a ```SeedProvider``` bootstraps the gossip protocol that Cassandra uses to find other nodes. The ```KubernetesSeedProvider``` discovers the Kubernetes API Server using the built in Kubernetes discovery service, and then uses the Kubernetes API to find new nodes (more on this later) -You may also note that we are setting some Cassandra parameters (```MAX_HEAP_SIZE``` and ```HEAP_NEWSIZE```). We also tell Kubernetes that the container exposes both the ```CQL``` and ```Thrift``` API ports. Finally, we tell the cluster manager that we need 0.5 cpu (0.5 core). +You may also note that we are setting some Cassandra parameters (```MAX_HEAP_SIZE``` and ```HEAP_NEWSIZE```) and adding information about the [namespace](https://github.com/GoogleCloudPlatform/kubernetes/blob/master/docs/namespaces.md). We also tell Kubernetes that the container exposes both the ```CQL``` and ```Thrift``` API ports. Finally, we tell the cluster manager that we need 0.5 cpu (0.5 core). Given this configuration, we can create the pod from a file specification as follows @@ -157,6 +161,10 @@ spec: value: 512M - name: HEAP_NEWSIZE value: 100M + - name: POD_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace image: gcr.io/google_containers/cassandra:v4 name: cassandra ports: diff --git a/examples/cassandra/cassandra-controller.yaml b/examples/cassandra/cassandra-controller.yaml index 1fcfa65dbc8..6b11a7604ca 100644 --- a/examples/cassandra/cassandra-controller.yaml +++ b/examples/cassandra/cassandra-controller.yaml @@ -24,6 +24,10 @@ spec: value: 512M - name: HEAP_NEWSIZE value: 100M + - name: POD_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace image: gcr.io/google_containers/cassandra:v4 name: cassandra ports: diff --git a/examples/cassandra/cassandra.yaml b/examples/cassandra/cassandra.yaml index 6358a19bae1..52d0e9ff796 100644 --- a/examples/cassandra/cassandra.yaml +++ b/examples/cassandra/cassandra.yaml @@ -26,6 +26,10 @@ spec: value: 512M - name: HEAP_NEWSIZE value: 100M + - name: POD_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace volumes: - name: data emptyDir: {} diff --git a/examples/cassandra/image/kubernetes-cassandra.jar b/examples/cassandra/image/kubernetes-cassandra.jar index ba63d544fb26b96106bd9f5dde257e2480e47aca..09e1aa203cf9914e03a33a13d837c47d0ecb6a3f 100644 GIT binary patch delta 4853 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 Z11M)i-ei?Vf*FaB1FYnD!A!rp{{ua+)W-k- delta 4649 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 a<@xVq{r?vI?Nk~$1Ht>4l9aKX8UF)ld@N=F diff --git a/examples/cassandra/java/src/io/k8s/cassandra/KubernetesSeedProvider.java b/examples/cassandra/java/src/io/k8s/cassandra/KubernetesSeedProvider.java index 209b3f64888..0d1dd924d88 100644 --- a/examples/cassandra/java/src/io/k8s/cassandra/KubernetesSeedProvider.java +++ b/examples/cassandra/java/src/io/k8s/cassandra/KubernetesSeedProvider.java @@ -35,7 +35,7 @@ public class KubernetesSeedProvider implements SeedProvider { @JsonIgnoreProperties(ignoreUnknown = true) static class Address { - public String IP; + public String ip; } @JsonIgnoreProperties(ignoreUnknown = true) @@ -102,7 +102,8 @@ public class KubernetesSeedProvider implements SeedProvider { List list = new ArrayList(); String host = "https://kubernetes.default.cluster.local"; String serviceName = getEnvOrDefault("CASSANDRA_SERVICE", "cassandra"); - String path = "/api/v1/namespaces/default/endpoints/"; + String podNamespace = getEnvOrDefault("POD_NAMESPACE", "default"); + String path = String.format("/api/v1/namespaces/%s/endpoints/", podNamespace); try { String token = getServiceAccountToken(); @@ -110,6 +111,7 @@ public class KubernetesSeedProvider implements SeedProvider { ctx.init(null, trustAll, new SecureRandom()); URL url = new URL(host + path + serviceName); + logger.info("Getting endpoints from " + url); HttpsURLConnection conn = (HttpsURLConnection)url.openConnection(); // TODO: Remove this once the CA cert is propogated everywhere, and replace @@ -125,11 +127,14 @@ public class KubernetesSeedProvider implements SeedProvider { if (endpoints.subsets != null && !endpoints.subsets.isEmpty()){ for (Subset subset : endpoints.subsets) { for (Address address : subset.addresses) { - list.add(InetAddress.getByName(address.IP)); + list.add(InetAddress.getByName(address.ip)); } } } - } + logger.info("Available endpoints: " + list); + } else { + logger.warn("Endpoints are not available"); + } } catch (IOException | NoSuchAlgorithmException | KeyManagementException ex) { logger.warn("Request to kubernetes apiserver failed", ex); }