Merge pull request #10832 from mwielgus/rethinkdb

Examples/rethinkdb fixes - namespaces, api update, curl params
This commit is contained in:
Piotr Szczesniak 2015-07-08 10:45:48 +02:00
commit 03c27916a0
7 changed files with 43 additions and 37 deletions

View File

@ -10,16 +10,10 @@ Setting up a [rethinkdb](http://rethinkdb.com/) cluster on [kubernetes](http://k
Quick start Quick start
----------- -----------
**Step 0**
change the namespace of the current context to "rethinkdb"
```
$kubectl config view -o template --template='{{index . "current-context"}}' | xargs -I {} kubectl config set-context {} --namespace=rethinkdb
```
**Step 1** **Step 1**
antmanler/rethinkdb will discover peer using endpoints provided by kubernetes_ro service, Rethinkdb will discover peer using endpoints provided by kubernetes service,
so first create a service so the following pod can query its endpoint so first create a service so the following pod can query its endpoint
```shell ```shell
@ -29,8 +23,9 @@ $kubectl create -f driver-service.yaml
check out: check out:
```shell ```shell
$kubectl get se $kubectl get services
NAME LABELS SELECTOR IP(S) PORT(S) NAME LABELS SELECTOR IP(S) PORT(S)
[...]
rethinkdb-driver db=influxdb db=rethinkdb 10.0.27.114 28015/TCP rethinkdb-driver db=influxdb db=rethinkdb 10.0.27.114 28015/TCP
``` ```
@ -47,10 +42,10 @@ Actually, you can start servers as many as you want at one time, just modify the
check out again: check out again:
```shell ```shell
$kubectl get po $kubectl get pods
POD IP CONTAINER(S) IMAGE(S) HOST LABELS STATUS CREATED MESSAGE NAME READY REASON RESTARTS AGE
rethinkdb-rc-1.16.0-6odi0 kubernetes-minion-s59e/ db=rethinkdb,role=replicas Pending 11 seconds [...]
rethinkdb antmanler/rethinkdb:1.16.0 rethinkdb-rc-r4tb0 1/1 Running 0 1m
``` ```
**Done!** **Done!**
@ -65,16 +60,15 @@ You can scale up you cluster using `kubectl scale`, and new pod will join to exs
```shell ```shell
$kubectl scale rc rethinkdb-rc-1.16.0 --replicas=3 $kubectl scale rc rethinkdb-rc --replicas=3
scaled scaled
$kubectl get po
POD IP CONTAINER(S) IMAGE(S) HOST LABELS STATUS CREATED MESSAGE $kubectl get pods
rethinkdb-rc-1.16.0-6odi0 10.244.3.3 kubernetes-minion-s59e/104.197.79.42 db=rethinkdb,role=replicas Running About a minute NAME READY REASON RESTARTS AGE
rethinkdb antmanler/rethinkdb:1.16.0 Running About a minute [...]
rethinkdb-rc-1.16.0-e3mxv kubernetes-minion-d7ub/ db=rethinkdb,role=replicas Pending 6 seconds rethinkdb-rc-f32c5 1/1 Running 0 1m
rethinkdb antmanler/rethinkdb:1.16.0 rethinkdb-rc-m4d50 1/1 Running 0 1m
rethinkdb-rc-1.16.0-manu6 kubernetes-minion-cybz/ db=rethinkdb,role=replicas Pending 6 seconds rethinkdb-rc-r4tb0 1/1 Running 0 3m
rethinkdb antmanler/rethinkdb:1.16.0
``` ```
Admin Admin
@ -92,6 +86,7 @@ find the service
```shell ```shell
$kubectl get se $kubectl get se
NAME LABELS SELECTOR IP(S) PORT(S) NAME LABELS SELECTOR IP(S) PORT(S)
[...]
rethinkdb-admin db=influxdb db=rethinkdb,role=admin 10.0.131.19 8080/TCP rethinkdb-admin db=influxdb db=rethinkdb,role=admin 10.0.131.19 8080/TCP
104.197.19.120 104.197.19.120
rethinkdb-driver db=influxdb db=rethinkdb 10.0.27.114 28015/TCP rethinkdb-driver db=influxdb db=rethinkdb 10.0.27.114 28015/TCP
@ -124,8 +119,6 @@ since the ui is not stateless when playing with Web Admin UI will cause `Connect
**BTW** **BTW**
* All services and pods are placed under namespace `rethinkdb`.
* `gen_pod.sh` is using to generate pod templates for my local cluster, * `gen_pod.sh` is using to generate pod templates for my local cluster,
the generated pods which is using `nodeSelector` to force k8s to schedule containers to my designate nodes, for I need to access persistent data on my host dirs. Note that one needs to label the node before 'nodeSelector' can work, see this [tutorial](../node-selection/) the generated pods which is using `nodeSelector` to force k8s to schedule containers to my designate nodes, for I need to access persistent data on my host dirs. Note that one needs to label the node before 'nodeSelector' can work, see this [tutorial](../node-selection/)

View File

@ -4,12 +4,16 @@ metadata:
labels: labels:
db: rethinkdb db: rethinkdb
role: admin role: admin
name: rethinkdb-admin-1.16.0 name: rethinkdb-admin
namespace: rethinkdb
spec: spec:
containers: containers:
- image: antmanler/rethinkdb:1.16.0 - image: gcr.io/google_containers/rethinkdb:1.16.0_1
name: rethinkdb name: rethinkdb
env:
- name: POD_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
ports: ports:
- containerPort: 8080 - containerPort: 8080
name: admin-port name: admin-port

View File

@ -4,7 +4,6 @@ metadata:
labels: labels:
db: influxdb db: influxdb
name: rethinkdb-admin name: rethinkdb-admin
namespace: rethinkdb
spec: spec:
ports: ports:
- port: 8080 - port: 8080

View File

@ -4,7 +4,6 @@ metadata:
labels: labels:
db: influxdb db: influxdb
name: rethinkdb-driver name: rethinkdb-driver
namespace: rethinkdb
spec: spec:
ports: ports:
- port: 28015 - port: 28015

View File

@ -11,4 +11,4 @@ RUN apt-get update && \
COPY ./run.sh /usr/bin/run.sh COPY ./run.sh /usr/bin/run.sh
RUN chmod u+x /usr/bin/run.sh RUN chmod u+x /usr/bin/run.sh
CMD ["/usr/bin/run.sh"] CMD "/usr/bin/run.sh"

View File

@ -16,14 +16,21 @@
set -o pipefail set -o pipefail
echo Checking for other nodes
IP="" IP=""
if [[ -n "${KUBERNETES_RO_SERVICE_HOST}" ]]; then if [[ -n "${KUBERNETES_SERVICE_HOST}" ]]; then
: ${NAMESPACE:=rethinkdb} POD_NAMESPACE=${POD_NAMESPACE:-default}
# try to pick up first different ip from endpoints
MYHOST=$(ip addr | grep 'state UP' -A2 | tail -n1 | awk '{print $2}' | cut -f1 -d'/') MYHOST=$(ip addr | grep 'state UP' -A2 | tail -n1 | awk '{print $2}' | cut -f1 -d'/')
URL="${KUBERNETES_RO_SERVICE_HOST}/api/v1/namespaces/${NAMESPACE}/endpoints/rethinkdb-driver" echo My host: ${MYHOST}
IP=$(curl -s ${URL} | jq -s -r --arg h "${MYHOST}" '.[0].subsets | .[].addresses | [ .[].IP ] | map(select(. != $h)) | .[0]') || exit 1
URL="https://${KUBERNETES_SERVICE_HOST}:${KUBERNETES_SERVICE_PORT}/api/v1/namespaces/${POD_NAMESPACE}/endpoints/rethinkdb-driver"
echo "Endpont url: ${URL}"
echo "Looking for IPs..."
token=$(cat /var/run/secrets/kubernetes.io/serviceaccount/token)
# try to pick up first different ip from endpoints
IP=$(curl -s ${URL} --cacert /var/run/secrets/kubernetes.io/serviceaccount/ca.crt --header "Authorization: Bearer ${token}" \
| jq -s -r --arg h "${MYHOST}" '.[0].subsets | .[].addresses | [ .[].ip ] | map(select(. != $h)) | .[0]') || exit 1
[[ "${IP}" == null ]] && IP="" [[ "${IP}" == null ]] && IP=""
fi fi

View File

@ -3,8 +3,7 @@ kind: ReplicationController
metadata: metadata:
labels: labels:
db: rethinkdb db: rethinkdb
name: rethinkdb-rc-1.16.0 name: rethinkdb-rc
namespace: rethinkdb
spec: spec:
replicas: 1 replicas: 1
selector: selector:
@ -17,8 +16,13 @@ spec:
role: replicas role: replicas
spec: spec:
containers: containers:
- image: antmanler/rethinkdb:1.16.0 - image: gcr.io/google_containes/rethinkdb:1.16.0_1
name: rethinkdb name: rethinkdb
env:
- name: POD_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
ports: ports:
- containerPort: 8080 - containerPort: 8080
name: admin-port name: admin-port