Este blog es parte de una serie de blogs de varias partes que muestra cómo ejecutar sus aplicaciones en Kubernetes. Se utilizará el Couchbaseuna base de datos documental distribuida NoSQL de código abierto, como contenedor Docker.
La primera parte (Couchbase en Kubernetes) se explica cómo iniciar el clúster Kubernetes utilizando Vagrant. La segunda parte (Kubernetes en Amazon) explicó cómo ejecutar esa configuración en Amazon Web Services.
Esta tercera parte lo demostrará:
- Cómo configurar e iniciar el clúster Kubernetes en Google Cloud
- Ejecutar el contenedor Docker en el clúster Kubernetes
- Exponer Pod en Kubernetes como Servicio
- Apagar el clúster
He aquí un breve resumen:
Entremos en detalles.
Introducción a Google Compute Engine proporcionan instrucciones detalladas sobre cómo configurar Kubernetes en Google Cloud.
Descargar y configurar Google Cloud SDK
Hay un poco de configuración necesaria si nunca has accedido a Google Cloud en su máquina. Esto fue un poco abrumador y deseo se puede simplificar.
- Crear una cuenta facturable en Nube de Google
- Instale SDK de Google Cloud
- Configurar credenciales: gcloud auth login
- Crea un nuevo proyecto de Google Cloud y nómbralo
couchbase-on-kubernetes
- Fija el proyecto:
gcloud config set project couchbase-on-kubernetes
- Establecer zona por defecto:
gcloud config set compute/zone us-central1-a
- Crea una instancia:
gcloud compute instances create example-instance --machine-type n1-standard-1 --image debian-8
- SSH en la instancia:
gcloud compute ssh ejemplo-instancia
- Elimina la instancia:
gcloud compute instances delete ejemplo-instancia
Configuración del clúster Kubernetes en Google Cloud
El clúster Kubernetes se puede crear en Google Cloud como:
1 2 |
configure KUBERNETES_PROVIDER=gce ./grupo/kube-arriba.sh |
Asegúrese de que KUBERNETES_PROVIDER
se establece en gce
o no establecerlo en absoluto. Por defecto, esto aprovisiona un clúster Kubernetes de 4 nodos con un maestro. Esto significa que se crean 5 máquinas virtuales.
Si ha descargado Kubernetes desde github.com/kubernetes/kubernetes/releasestodos los valores pueden modificarse en cluster/aws/config-default.sh
.
Iniciar Kubernetes en Google Cloud muestra el siguiente registro. Google Cloud SDK se comportaba un poco raro, pero tomando los valores predeterminados parecen funcionar:
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 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 |
./kubernetes/grupo/kube-arriba.sh ... Inicio grupo utilizando proveedor: gce ... llamando a verifique-prerrequisitos Usted tienen especificado individual componentes a actualización. Si usted son probando a instale nuevo componentes, utilice: $ gcloud componentes instale alfa Visite usted desea a ejecute instale en su lugar (y/N)? Su actual Nube SDK versión es: 99.0.0 Instalación de componentes de versión: 99.0.0 ┌──────────────────────────────────────────────┐ │ Estos componentes se sea instalado. │ ├───────────────────────┬────────────┬─────────┤ │ Nombre │ Versión │ Talla │ ├───────────────────────┼────────────┼─────────┤ │ gcloud Alfa Comandos │ 2016.01.12 │ < 1 MiB │ └───────────────────────┴────────────┴─────────┘ Para el última completo liberar notas, por favor visite: https://cloud.google.com/sdk/release_notes Visite usted desea a continuar (Y/n)? ╔════════════════════════════════════════════════════════════╗ ╠═ Creación de actualización puesta en escena zona ═╣ ╠════════════════════════════════════════════════════════════╣ ╠═ Instalación de: gcloud Alfa Comandos ═╣ ╠════════════════════════════════════════════════════════════╣ ╠═ Creación de copia de seguridad y activación de nuevo instalación ═╣ ╚════════════════════════════════════════════════════════════╝ Performing Correo electrónico: procesamiento pasos...hecho. Actualización hecho! Usted tienen especificado individual componentes a actualización. Si usted son probando a instale nuevo componentes, utilice: $ gcloud componentes instale beta Visite usted desea a ejecute instale en su lugar (y/N)? Su actual Nube SDK versión es: 99.0.0 Instalación de componentes de versión: 99.0.0 ┌─────────────────────────────────────────────┐ │ Estos componentes se sea instalado. │ ├──────────────────────┬────────────┬─────────┤ │ Nombre │ Versión │ Talla │ ├──────────────────────┼────────────┼─────────┤ │ gcloud Beta Comandos │ 2016.01.12 │ < 1 MiB │ └──────────────────────┴────────────┴─────────┘ Para el última completo liberar notas, por favor visite: https://cloud.google.com/sdk/release_notes Visite usted desea a continuar (Y/n)? ╔════════════════════════════════════════════════════════════╗ ╠═ Creación de actualización puesta en escena zona ═╣ ╠════════════════════════════════════════════════════════════╣ ╠═ Instalación de: gcloud Beta Comandos ═╣ ╠════════════════════════════════════════════════════════════╣ ╠═ Creación de copia de seguridad y activación de nuevo instalación ═╣ ╚════════════════════════════════════════════════════════════╝ Performing Correo electrónico: procesamiento pasos...hecho. Actualización hecho! Todos componentes son arriba a fecha. ... llamando a kube-arriba Su activo configuración es: [por defecto] Proyecto: couchbase-en-kubernetes Zona: us-central1-b Creación de gs://kubernetes-staging-9479406781 Creación de gs://kubernetes-staging-9479406781/... +++ Puesta en escena servidor alquitranes a Google Almacenamiento: gs://kubernetes-staging-9479406781/devel +++ kubernetes-servidor-linux-amd64.alquitrán.gz cargado (sha1 = 1ff42f7c31837851d919a66fc07f34b9dbdacf28) +++ kubernetes-sal.alquitrán.gz cargado (sha1 = f307380ad6af7dabcf881b132146fa775c18dca8) En para ya existente recursos Inicio maestro y configuración de cortafuegos Creado [https://www.googleapis.com/compute/v1/projects/couchbase-on-kubernetes/zones/us-central1-b/disks/kubernetes-master-pd]. NOMBRE ZONA TAMAÑO_GB TIPO ESTADO kubernetes-maestro-pd us-central1-b 20 pd-ssd LISTO Creado [https://www.googleapis.com/compute/v1/projects/couchbase-on-kubernetes/regions/us-central1/addresses/kubernetes-master-ip]. Creado [https://www.googleapis.com/compute/v1/projects/couchbase-on-kubernetes/global/firewalls/default-default-ssh]. Creado [https://www.googleapis.com/compute/v1/projects/couchbase-on-kubernetes/global/firewalls/kubernetes-master-https]. NOMBRE RED SRC_RANGES REGLAS SRC_TAGS TARGET_TAGS por defecto-por defecto-ssh por defecto 0.0.0.0/0 tcp:22 NOMBRE RED SRC_RANGES REGLAS SRC_TAGS TARGET_TAGS kubernetes-maestro-https por defecto 0.0.0.0/0 tcp:443 kubernetes-maestro +++ Registro utilizando Fluentd a gcp ./kubernetes/grupo/../grupo/../grupo/gce/util.sh: línea 434: @: sin encuadernar variable ./kubernetes/grupo/../grupo/../grupo/gce/util.sh: línea 434: @: sin encuadernar variable ./kubernetes/grupo/../grupo/../grupo/gce/util.sh: línea 434: @: sin encuadernar variable ./kubernetes/grupo/../grupo/../grupo/gce/util.sh: línea 434: @: sin encuadernar variable Creado [https://www.googleapis.com/compute/v1/projects/couchbase-on-kubernetes/global/firewalls/default-default-internal]. NOMBRE RED SRC_RANGES REGLAS SRC_TAGS TARGET_TAGS por defecto-por defecto-interno por defecto 10.0.0.0/8 tcp:1-65535,udp:1-65535,icmp Creado [https://www.googleapis.com/compute/v1/projects/couchbase-on-kubernetes/global/firewalls/kubernetes-minion-all]. NOMBRE RED SRC_RANGES REGLAS SRC_TAGS TARGET_TAGS kubernetes-súbdito-todos por defecto 10.244.0.0/16 tcp,udp,icmp,esp,ah,sctp kubernetes-súbdito Creado [https://www.googleapis.com/compute/v1/projects/couchbase-on-kubernetes/zones/us-central1-b/instances/kubernetes-master]. NOMBRE ZONA TIPO_MÁQUINA PREEMPTIBLE INTERNAL_IP EXTERNAL_IP ESTADO kubernetes-maestro us-central1-b n1-estándar-1 10.128.0.2 104.197.213.249 RUNNING Creación de esbirros. ./kubernetes/grupo/../grupo/../grupo/gce/util.sh: línea 434: @: sin encuadernar variable ./kubernetes/grupo/../grupo/../grupo/gce/util.sh: línea 434: @: sin encuadernar variable Inténtelo 1 a crear kubernetes-súbdito-plantilla ADVERTENCIA: Usted tienen seleccionado a disco talla de en [200 GB]. Este mayo resultado en pobre I/O rendimiento. Para más información, véase: https://developers.google.com/compute/docs/disks/persistent-disks#pdperformance. Creado [https://www.googleapis.com/compute/v1/projects/couchbase-on-kubernetes/global/instanceTemplates/kubernetes-minion-template]. NOMBRE TIPO_MÁQUINA PREEMPTIBLE FECHA_CREACIÓN kubernetes-súbdito-plantilla n1-estándar-1 2016-03-03T14:01:14.322-08:00 Creado [https://www.googleapis.com/compute/v1/projects/couchbase-on-kubernetes/zones/us-central1-b/instanceGroupManagers/kubernetes-minion-group]. NOMBRE ZONA NOMBRE_INSTANCIA_BASE TALLA TARGET_SIZE PLANTILLA_DE_INSTANCIA AUTOSCALADO kubernetes-súbdito-grupo us-central1-b kubernetes-súbdito 4 kubernetes-súbdito-plantilla En espera para grupo a become estable, actual operaciones: crear: 4 En espera para grupo a become estable, actual operaciones: crear: 4 En espera para grupo a become estable, actual operaciones: crear: 4 En espera para grupo a become estable, actual operaciones: crear: 4 En espera para grupo a become estable, actual operaciones: crear: 4 En espera para grupo a become estable, actual operaciones: crear: 4 En espera para grupo a become estable, actual operaciones: crear: 3 Grupo es estable NOMBRES_MINION=kubernetes-súbdito-1hmm kubernetes-súbdito-3x1d kubernetes-súbdito-h1ov kubernetes-súbdito-nshn Utilizando maestro: kubernetes-maestro (externo IP: 104.197.213.249) En espera para grupo inicialización. Este se continuamente consulte a véase si el API para kubernetes es accesible. Este puede bucle para siempre si allí fue algunos no capturado error durante iniciar arriba. Kubernetes grupo creado. grupo "couchbase-on-kubernetes_kubernetes" configure. usuario "couchbase-on-kubernetes_kubernetes" configure. contexto "couchbase-on-kubernetes_kubernetes" configure. conmutado a contexto "couchbase-on-kubernetes_kubernetes". usuario "couchbase-on-kubernetes_kubernetes-basic-auth" configure. Escribió config para couchbase-en-kubernetes_kubernetes a /Usuarios/arungupta/.kube/config Kubernetes grupo es corriendo. En maestro es corriendo en: https://104.197.213.249 En usuario nombre y contraseña a utilice es situado en /Usuarios/arungupta/.kube/config. ... llamando a valide-grupo En espera para 4 listo nodos. 0 listo nodos, 0 registrado. Reintento. En espera para 4 listo nodos. 0 listo nodos, 2 registrado. Reintento. En espera para 4 listo nodos. 0 listo nodos, 3 registrado. Reintento. En espera para 4 listo nodos. 0 listo nodos, 4 registrado. Reintento. En espera para 4 listo nodos. 3 listo nodos, 4 registrado. Reintento. En espera para 4 listo nodos. 3 listo nodos, 4 registrado. Reintento. Encontrado 4 nodo(s). NOMBRE ETIQUETAS ESTADO EDAD kubernetes-súbdito-1hmm kubernetes.io/nombre de host=kubernetes-súbdito-1hmm Listo 1m kubernetes-súbdito-3x1d kubernetes.io/nombre de host=kubernetes-súbdito-3x1d Listo 52s kubernetes-súbdito-h1ov kubernetes.io/nombre de host=kubernetes-súbdito-h1ov Listo 1m kubernetes-súbdito-nshn kubernetes.io/nombre de host=kubernetes-súbdito-nshn Listo 1m Validar salida: NOMBRE ESTADO MENSAJE ERROR controlador-director Saludable ok nil programador Saludable ok nil etcd-0 Saludable {"salud": "true"} nil etcd-1 Saludable {"salud": "true"} nil Grupo validación sucedió a Hecho, listado grupo servicios: Kubernetes maestro es corriendo en https://104.197.213.249 GLBCDefaultBackend es corriendo en https://104.197.213.249/api/v1/proxy/namespaces/kube-system/services/default-http-backend Heapster es corriendo en https://104.197.213.249/api/v1/proxy/namespaces/kube-system/services/heapster KubeDNS es corriendo en https://104.197.213.249/api/v1/proxy/namespaces/kube-system/services/kube-dns KubeUI es corriendo en https://104.197.213.249/api/v1/proxy/namespaces/kube-system/services/kube-ui Grafana es corriendo en https://104.197.213.249/api/v1/proxy/namespaces/kube-system/services/monitoring-grafana InfluxDB es corriendo en https://104.197.213.249/api/v1/proxy/namespaces/kube-system/services/monitoring-influxdb |
Hay un par de variables no vinculadas y un mensaje de ADVERTENCIA, pero eso no parece romper el script. Google Cloud Console muestra:
Se crean cinco instancias como se muestra - una para el nodo maestro y cuatro para los nodos trabajadores.
Ejecutar un contenedor Docker en un clúster Kubernetes en Google Cloud
Ahora que el clúster está en marcha, obtenga una lista de todos los nodos:
1 2 3 4 5 6 |
./kubernetes/grupo/kubectl.sh consiga no NOMBRE ETIQUETAS ESTADO EDAD kubernetes-súbdito-1hmm kubernetes.io/nombre de host=kubernetes-súbdito-1hmm Listo 47m kubernetes-súbdito-3x1d kubernetes.io/nombre de host=kubernetes-súbdito-3x1d Listo 46m kubernetes-súbdito-h1ov kubernetes.io/nombre de host=kubernetes-súbdito-h1ov Listo 47m kubernetes-súbdito-nshn kubernetes.io/nombre de host=kubernetes-súbdito-nshn Listo 47m |
Muestra cuatro nodos trabajadores. Crea un pod de Couchbase:
1 2 |
./kubernetes/grupo/kubectl.sh ejecute couchbase --imagen=arungupta/couchbase controlador de réplica "couchbase" creado |
Observe que el nombre de la imagen puede especificarse en la CLI. Este comando crea un controlador de replicación con un único pod. El pod utiliza arungupta/couchbase Imagen Docker que proporciona un servidor Couchbase preconfigurado. Aquí se puede especificar cualquier imagen Docker.
Consigue todos los recursos de RC:
1 2 3 |
./kubernetes/grupo/kubectl.sh consiga rc CONTROLADOR CONTENEDOR(S) IMAGEN(S) SELECTOR RÉPLICAS EDAD couchbase couchbase arungupta/couchbase ejecute=couchbase 1 48s |
Esto muestra el Controlador de Replicación que se crea para usted.
Consigue todos los Pods:
1 2 3 |
./kubernetes/grupo/kubectl.sh consiga po NOMBRE LISTO ESTADO RESTARTS EDAD couchbase-s8v9r 1/1 Ejecutar 0 1m |
La salida muestra el Pod que se crea como parte del Replication Controller.
Más información sobre el 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 |
./kubernetes/grupo/kubectl.sh describa po couchbase-s8v9r Nombre: couchbase-s8v9r Espacio de nombres: por defecto Imagen(s): arungupta/couchbase Nodo: kubernetes-súbdito-3x1d/10.128.0.3 Inicio Tiempo: Jue, 03 Mar 2016 14:53:36 -0800 Etiquetas: ejecute=couchbase Estado: Ejecutar Razón: Mensaje: IP: 10.244.3.3 Replicación Controladores: couchbase (1/1 réplicas creado) Contenedores: couchbase: Contenedor ID: docker://601ee2e4c822814c3969a241e37c97bf4d0d209f952f24707ab308192d289098 Imagen: arungupta/couchbase Imagen ID: docker://298618e67e495c2535abd17b60241565e456a4c9ee96c923ecf844a9dbcccced QoS Nivel: cpu: Burstable Solicitudes: cpu: 100m Estado: Ejecutar Comenzó: Jue, 03 Mar 2016 14:54:46 -0800 Listo: Verdadero Reinicie Cuenta: 0 Medio ambiente Variables: Condiciones: Tipo Estado Listo Verdadero Volúmenes: por defecto-ficha-frsd7: Tipo: Secreto (a secreto que debe rellenar este volumen) NombreSecreto: por defecto-ficha-frsd7 Eventos: PrimeraVista Última visita Cuenta En SubobjectPath Razón Mensaje ───────── ──────── ───── ──── ───────────── ────── ─────── 1m 1m 1 {kubelet kubernetes-súbdito-3x1d} implícitamente obligatorio contenedor POD Tirado Contenedor imagen "gcr.io/google_containers/pause:0.8.0" ya presente en máquina 1m 1m 1 {programador } Programado Con éxito asignado couchbase-s8v9r a kubernetes-súbdito-3x1d 1m 1m 1 {kubelet kubernetes-súbdito-3x1d} implícitamente obligatorio contenedor POD Creado Creado con docker id c1de9da87f1e 1m 1m 1 {kubelet kubernetes-súbdito-3x1d} spec.contenedores{couchbase} Tirando de Tirando de imagen "arungupta/couchbase" 1m 1m 1 {kubelet kubernetes-súbdito-3x1d} implícitamente obligatorio contenedor POD Comenzó Comenzó con docker id c1de9da87f1e 29s 29s 1 {kubelet kubernetes-súbdito-3x1d} spec.contenedores{couchbase} Tirado Con éxito tirado imagen "arungupta/couchbase" 29s 29s 1 {kubelet kubernetes-súbdito-3x1d} spec.contenedores{couchbase} Creado Creado con docker id 601ee2e4c822 29s 29s 1 {kubelet kubernetes-súbdito-3x1d} spec.contenedores{couchbase} Comenzó Comenzó con docker id 601ee2e4c822 |
Exponer Pod en Kubernetes como Servicio
Ahora que nuestro pod está funcionando, ¿cómo accedo al servidor Couchbase? Necesitas exponerlo fuera del cluster Kubernetes. El kubectl exponer
toma un pod, servicio o controlador de replicación y lo expone como un Servicio Kubernetes.
Vamos a exponer el controlador de replicación creado anteriormente y exponerlo:
1 2 |
./kubernetes/grupo/kubectl.sh exponer rc couchbase --objetivo-puerto=8091 --puerto=8091 --tipo=LoadBalancer servicio "couchbase" expuesto |
Más información sobre el Servicio:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
./kubernetes/grupo/kubectl.sh describa svc couchbase Nombre: couchbase Espacio de nombres: por defecto Etiquetas: ejecute=couchbase Selector: ejecute=couchbase Tipo: LoadBalancer IP: 10.0.37.150 LoadBalancer Entrada: 104.197.118.35 Puerto: 8091/TCP PuertoNodo: 30808/TCP Puntos finales: 10.244.3.3:8091 Sesión Afinidad: Ninguno Eventos: PrimeraVista Última visita Cuenta En SubobjectPath Razón Mensaje ───────── ──────── ───── ──── ───────────── ────── ─────── 2m 2m 1 {servicio-controlador } Creación de LoadBalancer Creación de carga equilibrador 1m 1m 1 {servicio-controlador } CreadoLoadBalancer Creado carga equilibrador |
En Entrada del Loadbalancer
le proporciona la dirección IP del equilibrador de carga que ahora es de acceso público. Espera 3 minutos para que el equilibrador de carga se asiente. Accede a él usando el puerto 8091 y aparecerá la página de inicio de sesión de la Consola Web de Couchbase:
Introduzca las credenciales como "Administrador" y "contraseña" para ver la Consola Web:
Y así acabas de acceder a tu pod fuera del clúster Kubernetes.
Apagar el clúster Kubernetes
Por último, apague el clúster mediante cluster/kube-down.sh
guión.
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 |
./kubernetes/grupo/kube-abajo.sh En abajo grupo utilizando proveedor: gce Usted tienen especificado individual componentes a actualización. Si usted son probando a instale nuevo componentes, utilice: $ gcloud componentes instale alfa Visite usted desea a ejecute instale en su lugar (y/N)? Todos componentes son arriba a fecha. Usted tienen especificado individual componentes a actualización. Si usted son probando a instale nuevo componentes, utilice: $ gcloud componentes instale beta Visite usted desea a ejecute instale en su lugar (y/N)? Todos componentes son arriba a fecha. Todos componentes son arriba a fecha. Su activo configuración es: [por defecto] Proyecto: couchbase-en-kubernetes Zona: us-central1-b En abajo grupo Suprimido [https://www.googleapis.com/compute/v1/projects/couchbase-on-kubernetes/zones/us-central1-b/instanceGroupManagers/kubernetes-minion-group]. Suprimido [https://www.googleapis.com/compute/v1/projects/couchbase-on-kubernetes/global/instanceTemplates/kubernetes-minion-template]. Actualizado [https://www.googleapis.com/compute/v1/projects/couchbase-on-kubernetes/zones/us-central1-b/instances/kubernetes-master]. Suprimido [https://www.googleapis.com/compute/v1/projects/couchbase-on-kubernetes/zones/us-central1-b/instances/kubernetes-master]. Suprimido [https://www.googleapis.com/compute/v1/projects/couchbase-on-kubernetes/global/firewalls/kubernetes-master-https]. Suprimido [https://www.googleapis.com/compute/v1/projects/couchbase-on-kubernetes/global/firewalls/kubernetes-minion-all]. Borrado de rutas kubernetes-ad3beb92-e18b-11e5-8e71-42010a800002 Suprimido [https://www.googleapis.com/compute/v1/projects/couchbase-on-kubernetes/global/routes/kubernetes-ad3beb92-e18b-11e5-8e71-42010a800002]. Suprimido [https://www.googleapis.com/compute/v1/projects/couchbase-on-kubernetes/regions/us-central1/addresses/kubernetes-master-ip]. propiedad "clusters.couchbase-on-kubernetes_kubernetes" unset. propiedad "users.couchbase-on-kubernetes_kubernetes" unset. propiedad "users.couchbase-on-kubernetes_kubernetes-basic-auth" unset. propiedad "contexts.couchbase-on-kubernetes_kubernetes" unset. propiedad "contexto-actual" unset. Despejado config para couchbase-en-kubernetes_kubernetes de /Usuarios/arungupta/.kube/config Hecho |
¡Que aproveche!