¡Este blog es posible gracias a este tweet!
Tuve una gran #Cbase táctil #Kubernetes sesión de hacking con @saturnism, aprendí mucho, espero con interés algunos blogs agradables.
- Arun Gupta (@arungupta) 27 de febrero de 2016

Kubernetes es un sistema de orquestación de código abierto de Google para contenedores Docker. Gestiona aplicaciones en contenedores a través de múltiples hosts y proporciona mecanismos básicos para el despliegue, mantenimiento y escalado de aplicaciones. Permite al usuario proporcionar primitivas declarativas para el estado deseado, por ejemplo "necesito 5 servidores Couchbase". Los mecanismos de autorreparación de Kubernetes, como el reinicio automático, la reprogramación y la replicación de contenedores, garantizan que se cumpla este estado. El usuario sólo tiene que definir el estado y Kubernetes se asegura de que se cumpla en todo momento en el clúster. Conceptos clave de Kubernetes explica los conceptos clave de Kubernetes. Esta serie de blogs de varias partes mostrará cómo ejecutar Couchbase en Kubernetes de múltiples maneras. La primera parte comienza con una configuración sencilla utilizando Vagrant.
Introducción a Kubernetes
Hay múltiples maneras de ejecutar Kubernetes, pero he encontrado la forma más sencilla (no necesariamente predecible ;) es ejecutar utilizando Vagrant.
- Descargar la última Lanzamiento de Kubernetes1.1.8 a partir de este momento, y ampliar el archivo.
- Inicie el clúster Kubernetes como:
1234cd kubernetesexport KUBERNETES_PROVIDER=vagrant./cluster/kube-up.sh
Esto muestra la salida como:
12345678910111213141516171819202122232425kubernetes-1.1.8 > ./kubernetes/cluster/kube-up.sh... Starting cluster using provider: vagrant... calling verify-prereqs... calling kube-upBringing machine 'master' up with 'virtualbox' provider...Bringing machine 'minion-1' up with 'virtualbox' provider...==> master: Importing base box 'kube-fedora21'.... . .Validate output:NAME STATUS MESSAGE ERRORcontroller-manager Healthy ok nilscheduler Healthy ok niletcd-0 Healthy {"health": "true"} niletcd-1 Healthy {"health": "true"} nilCluster validation succeededDone, listing cluster services:Kubernetes master is running at https://10.245.1.2Heapster is running at https://10.245.1.2/api/v1/proxy/namespaces/kube-system/services/heapsterKubeDNS is running at https://10.245.1.2/api/v1/proxy/namespaces/kube-system/services/kube-dnsKubeUI is running at https://10.245.1.2/api/v1/proxy/namespaces/kube-system/services/kube-uiGrafana is running at https://10.245.1.2/api/v1/proxy/namespaces/kube-system/services/monitoring-grafanaInfluxDB is running at https://10.245.1.2/api/v1/proxy/namespaces/kube-system/services/monitoring-influxdb
Ejecutar Couchbase en Kubernetes Cluster
La forma más sencilla de empezar a ejecutar un contenedor Docker en Kubernetes es utilizando el comando kubectl run comando. El uso del comando es:
|
1 |
kubectl run NAME --image=image [--env="key=value"] [--port=port] [--replicas=replicas] [--dry-run=bool] [--overrides=inline-json] [flags] |
El comando ejecuta una imagen particular, posiblemente replicada. La replicación de la imagen se realiza mediante la creación de un controlador de replicación para gestionar el contenedor o contenedores creados. La lista completa de opciones para ejecutar este comando se puede ver usando:
|
1 |
./cluster/kubectl.sh run --help |
Contenedor Docker Couchbase explica los diferentes contenedores Docker para Couchbase. Para este blog, usaremos arungupta/couchbase ya que está preconfigurado.
|
1 |
./cluster/kubectl.sh run couchbase --image=arungupta/couchbase |
Esto muestra la salida:
|
1 |
replicationcontroller "couchbase" created |
La salida confirma que se ha creado un controlador de replicación. Vamos a verificarlo:
|
1 2 3 |
./kubernetes/cluster/kubectl.sh get rc CONTROLLER CONTAINER(S) IMAGE(S) SELECTOR REPLICAS AGE couchbase couchbase arungupta/couchbase run=couchbase 1 17s |
Ahora, comprueba las vainas:
|
1 2 3 |
./kubernetes/cluster/kubectl.sh get po NAME READY STATUS RESTARTS AGE couchbase-tzdhl 0/1 Pending 0 36s |
Comprobemos el estado del pod:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
./kubernetes/cluster/kubectl.sh describe pod couchbase-tzdhl Name: couchbase-tzdhl Namespace: default Image(s): arungupta/couchbase Node: 10.245.1.4/10.245.1.4 Start Time: Fri, 26 Feb 2016 18:05:10 -0800 Labels: run=couchbase Status: Running Reason: Message: IP: 10.246.67.2 Replication Controllers: couchbase (1/1 replicas created) Containers: couchbase: Container ID: docker://56dddb66bf60a590e588b972d5cae997ec96149066a9fb8075548c982eb14961 Image: arungupta/couchbase Image ID: docker://080e2e96b3fc22964f3dec079713cdf314e15942d6eb135395134d629e965062 QoS Tier: cpu: Burstable Requests: cpu: 100m State: Running Started: Fri, 26 Feb 2016 18:05:56 -0800 Ready: True Restart Count: 0 Environment Variables: Conditions: Type Status Ready True Volumes: default-token-clfeb: Type: Secret (a secret that should populate this volume) SecretName: default-token-clfeb Events: FirstSeen LastSeen Count From SubobjectPath Reason Message ───────── ──────── ───── ──── ───────────── ────── ─────── 1m 1m 1 {scheduler } Scheduled Successfully assigned couchbase-tzdhl to 10.245.1.4 1m 1m 1 {kubelet 10.245.1.4} implicitly required container POD Pulling Pulling image "gcr.io/google_containers/pause:0.8.0" 59s 59s 1 {kubelet 10.245.1.4} implicitly required container POD Created Created with docker id 2dac5f81f4c2 59s 59s 1 {kubelet 10.245.1.4} spec.containers{couchbase} Pulling Pulling image "arungupta/couchbase" 59s 59s 1 {kubelet 10.245.1.4} implicitly required container POD Started Started with docker id 2dac5f81f4c2 59s 59s 1 {kubelet 10.245.1.4} implicitly required container POD Pulled Successfully pulled image "gcr.io/google_containers/pause:0.8.0" 19s 19s 1 {kubelet 10.245.1.4} spec.containers{couchbase} Pulled Successfully pulled image "arungupta/couchbase" 18s 18s 1 {kubelet 10.245.1.4} spec.containers{couchbase} Created Created with docker id 56dddb66bf60 18s 18s 1 {kubelet 10.245.1.4} spec.containers{couchbase} Started Started with docker id 56dddb66bf60 |
La quinta línea de la salida dice que la IP del nodo es 10.245.1.4. Esta dirección se utilizará más tarde para acceder a la consola web. La última línea de esta salida muestra que el pod ya está listo. Compruebe de nuevo el estado del pod:
|
1 2 3 |
./kubernetes/cluster/kubectl.sh get po NAME READY STATUS RESTARTS AGE couchbase-tzdhl 1/1 Running 0 2m |
Consola web de Couchbase en clúster Kubernetes
Ahora que su contenedor Couchbase se está ejecutando en el clúster Kubernetes, es posible que desee ver el archivo Consola web. A cada pod se le asigna una dirección IP única, pero esta dirección sólo es accesible dentro del cluster. Se puede exponer utilizando el kubectl exponer comando. Este comando toma un Controlador de Replicación, Servicio o Pod y lo expone como un nuevo Servicio Kubernetes. Esto se puede hacer dando el comando:
|
1 2 |
./cluster/kubectl.sh expose rc couchbase --target-port=8091 --port=8091 --external-ip=10.245.1.4 service "couchbase" exposed |
En este comando:
--target-portes el nombre o número del puerto del contenedor al que el servicio debe dirigir el tráfico--portes el puerto en el que debe servir el servicio--external-ipes la dirección IP externa a establecer para el servicio. Nota, esta dirección IP se obtuvo conkubectl describe podantes.
Ahora, puedes acceder a la Consola Web de Couchbase en https://10.245.1.4:8091 y su aspecto es el siguiente:

Introduzca las credenciales de contraseña como Administrador/contraseña.

¡Voilà!
Hable con nosotros en StackOverflow o Foros de Couchbase. También puede seguirnos en @couchbasedev y @couchbase.