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 el Docker
contenedor.
La primera parte (Couchbase en Kubernetes) explicó cómo iniciar el clúster Kubernetes utilizando Vagrant. Esa es una manera simple y fácil de desarrollar, probar y desplegar...
Kubernetes cluster en su máquina local. Pero esto podría ser de uso limitado bastante pronto como los recursos están limitados por la máquina local. Entonces, ¿qué hacer?
El clúster Kubernetes también se puede instalar en Amazon. Esta segunda parte mostrará:
- Cómo configurar e iniciar el clúster Kubernetes en Amazon Web Services
- Ejecutar el contenedor Docker en el clúster Kubernetes
- Exponer Pod en Kubernetes como Servicio
- Apagar el clúster
He aquí un breve resumen:
Profundicemos en los detalles.
Configuración del clúster Kubernetes en Amazon Web Services
Introducción a AWS EC2 proporcionan instrucciones completas para iniciar el clúster Kubernetes en Amazon. Asegúrese de tener los requisitos previos (cuenta de AWS, AWS CLI, acceso completo a EC2).
met antes de seguir estas instrucciones. El clúster Kubernetes se puede crear en Amazon como:
|
1 2 |
configure KUBERNETES_PROVIDER=aws ./grupo/kube-arriba.sh |
Por defecto, esto aprovisiona una nueva VPC y un clúster Kubernetes de 4 nodos en us-oeste-2a (Oregón) con t2.micro ejecutándose en Ubuntu. Esto significa que se crean 5 AMIs (una para el maestro y 4 para los nodos trabajadores). Algunos
propiedades que merece la pena actualizar:
- Establecer
NUM_MINIONSal número de nodos necesarios para el clúster. Establézcala en 2 si sólo desea que se creen dos nodos trabajadores. - El tamaño de cada instancia es 1.1.x es
t2.micro. EstablecerMASTER_SIZEyTAMAÑO_MINIONvariables de entorno am3.mediode lo contrario los nodos se arrastrarán.
Si ha descargado Kubernetes desde github.com/kubernetes/kubernetes/releasestodos los valores pueden modificarse en cluster/aws/config-default.sh. Inicio de Kubernetes en
Amazon muestra el siguiente registro:
|
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 184 185 186 187 188 |
./kubernetes/grupo/kube-arriba.sh ... Inicio grupo utilizando proveedor: aws ... llamando a verifique-prerrequisitos ... llamando a kube-arriba Inicio grupo utilizando os distro: vivo Cargar a Amazon S3 +++ Puesta en escena servidor alquitranes a S3 Almacenamiento: kubernetes-puesta en escena-0eaf81fbc51209dd47c13b6d8b424149/devel { "InstanceProfile": { "InstanceProfileId": "AIPAJMNMKZSXNWXQBHXHI", "Roles": [ { "RoleName": "kubernetes-master", "AssumeRolePolicyDocument": { "Versión": "2012-10-17", "Declaración": [ { "Acción": "sts:AssumeRole", "Efecto": "Permitir", "Principal": { "Servicio": "ec2.amazonaws.com" } } ] }, "FechaCreación": "2016-02-29T23:19:17Z", "Camino": "/", "RoleId": "AROAJW7ER37BPXX5KFTFS", "Arn": "arn:aws:iam::598307997273:role/kubernetes-master" } ], "Arn": "arn:aws:iam::598307997273:instance-profile/kubernetes-master", "FechaCreación": "2016-02-29T23:19:19Z", "Camino": "/", "InstanceProfileName": "kubernetes-master" } } { "InstanceProfile": { "InstanceProfileId": "AIPAILRAU7RF4R2SDCULG", "Camino": "/", "Arn": "arn:aws:iam::598307997273:instance-profile/kubernetes-minion", "Roles": [ { "Camino": "/", "AssumeRolePolicyDocument": { "Declaración": [ { "Efecto": "Permitir", "Acción": "sts:AssumeRole", "Principal": { "Servicio": "ec2.amazonaws.com" } } ], "Versión": "2012-10-17" }, "RoleName": "kubernetes-minion", "Arn": "arn:aws:iam::598307997273:role/kubernetes-minion", "RoleId": "AROAIBEPV6VW4IEE6MRHS", "FechaCreación": "2016-02-29T23:19:21Z" } ], "InstanceProfileName": "kubernetes-minion", "FechaCreación": "2016-02-29T23:19:22Z" } } Utilizando SSH clave con (AWS) huella dactilar: 39:b3:cb:c1:af:6a:86:de:98:95:01:3d:9a:56:bb:8b Creación de vpc. Añadir etiqueta a vpc-7b46ac1f: Nombre=kubernetes-vpc Añadir etiqueta a vpc-7b46ac1f: KubernetesCluster=kubernetes Utilizando VPC vpc-7b46ac1f Creación de subred. Añadir etiqueta a subred-cc906fa8: KubernetesCluster=kubernetes Utilizando subred subred-cc906fa8 Creación de Internet Pasarela. Utilizando Internet Pasarela igw-40055525 Asociar ruta tabla. Creación de ruta tabla Añadir etiqueta a rtb-f2dc1596: KubernetesCluster=kubernetes Asociar ruta tabla rtb-f2dc1596 a subred subred-cc906fa8 Añadir ruta a ruta tabla rtb-f2dc1596 Utilizando Ruta Cuadro rtb-f2dc1596 Creación de maestro seguridad grupo. Creación de seguridad grupo kubernetes-maestro-kubernetes. Añadir etiqueta a sg-308b3357: KubernetesCluster=kubernetes Creación de súbdito seguridad grupo. Creación de seguridad grupo kubernetes-súbdito-kubernetes. Añadir etiqueta a sg-3b8b335c: KubernetesCluster=kubernetes Utilizando maestro seguridad grupo: kubernetes-maestro-kubernetes sg-308b3357 Utilizando súbdito seguridad grupo: kubernetes-súbdito-kubernetes sg-3b8b335c Inicio Maestro Añadir etiqueta a i-b71a6f70: Nombre=kubernetes-maestro Añadir etiqueta a i-b71a6f70: Papel=kubernetes-maestro Añadir etiqueta a i-b71a6f70: KubernetesCluster=kubernetes En espera para maestro a sea listo Inténtelo 1 a consulte para maestro nodeWaiting para instancia i-b71a6f70 a desovar Para dormir para 3 segundos... En espera para instancia i-b71a6f70 a desovar Para dormir para 3 segundos... En espera para instancia i-b71a6f70 a desovar Para dormir para 3 segundos... En espera para instancia i-b71a6f70 a desovar Para dormir para 3 segundos... En espera para instancia i-b71a6f70 a desovar Para dormir para 3 segundos... En espera para instancia i-b71a6f70 a desovar Para dormir para 3 segundos... [maestro corriendo @52.34.244.195] Adjuntar persistente datos volumen (vol-e072d316) a maestro { "Dispositivo": "/dev/sdb", "Estado": "adjuntando", "InstanceId": "i-b71a6f70", "VolumeId": "vol-e072d316", "AttachTime": "2016-03-02T18:10:15.985Z" } Inténtelo 1 a consulte para SSH a maestro [ssh a maestro trabajando] Inténtelo 1 a consulte para sal-maestro [sal-maestro no trabajando pero] Inténtelo 2 a consulte para sal-maestro [sal-maestro no trabajando pero] Inténtelo 3 a consulte para sal-maestro [sal-maestro no trabajando pero] Inténtelo 4 a consulte para sal-maestro [sal-maestro no trabajando pero] Inténtelo 5 a consulte para sal-maestro [sal-maestro no trabajando pero] Inténtelo 6 a consulte para sal-maestro [sal-maestro no trabajando pero] Inténtelo 7 a consulte para sal-maestro [sal-maestro no trabajando pero] Inténtelo 8 a consulte para sal-maestro [sal-maestro no trabajando pero] Inténtelo 9 a consulte para sal-maestro [sal-maestro no trabajando pero] Inténtelo 10 a consulte para sal-maestro [sal-maestro no trabajando pero] Inténtelo 11 a consulte para sal-maestro [sal-maestro no trabajando pero] Inténtelo 12 a consulte para sal-maestro [sal-maestro no trabajando pero] Inténtelo 13 a consulte para sal-maestro [sal-maestro no trabajando pero] Inténtelo 14 a consulte para sal-maestro [sal-maestro corriendo] Creación de súbdito configuración Creación de autoescalado grupo 0 esbirros iniciado; a la espera 0 esbirros iniciado; a la espera 0 esbirros iniciado; a la espera 0 esbirros iniciado; a la espera 2 esbirros iniciado; listo En espera 3 minutos para grupo a resolver ..................Re-corriendo sal highstate 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 "aws_kubernetes" configure. usuario "aws_kubernetes" configure. contexto "aws_kubernetes" configure. conmutado a contexto "aws_kubernetes". Escribió config para aws_kubernetes a /Usuarios/arungupta/.kube/config Cordura comprobación grupo... Inténtelo 1 a consulte Docker en nodo @ 52.37.172.215 ...no trabajando pero Inténtelo 2 a consulte Docker en nodo @ 52.37.172.215 ...no trabajando pero Inténtelo 3 a consulte Docker en nodo @ 52.37.172.215 ...trabajando Inténtelo 1 a consulte Docker en nodo @ 52.27.90.19 ...trabajando Kubernetes grupo es corriendo. En maestro es corriendo en: https://52.34.244.195 En usuario nombre y contraseña a utilice es situado en /Usuarios/arungupta/.kube/config. ... llamando a valide-grupo En espera para 2 listo nodos. 1 listo nodos, 2 registrado. Reintento. Encontrado 2 nodo(s). NOMBRE ETIQUETAS ESTADO EDAD ip-172-20-0-92.us-oeste-2.informática.interna kubernetes.io/nombre de host=ip-172-20-0-92.us-oeste-2.informática.interna Listo 56s ip-172-20-0-93.us-oeste-2.informática.interna kubernetes.io/nombre de host=ip-172-20-0-93.us-oeste-2.informática.interna Listo 35s 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://52.34.244.195 Elasticsearch es corriendo en https://52.34.244.195/api/v1/proxy/namespaces/kube-system/services/elasticsearch-logging Heapster es corriendo en https://52.34.244.195/api/v1/proxy/namespaces/kube-system/services/heapster Kibana es corriendo en https://52.34.244.195/api/v1/proxy/namespaces/kube-system/services/kibana-logging KubeDNS es corriendo en https://52.34.244.195/api/v1/proxy/namespaces/kube-system/services/kube-dns KubeUI es corriendo en https://52.34.244.195/api/v1/proxy/namespaces/kube-system/services/kube-ui Grafana es corriendo en https://52.34.244.195/api/v1/proxy/namespaces/kube-system/services/monitoring-grafana InfluxDB es corriendo en https://52.34.244.195/api/v1/proxy/namespaces/kube-system/services/monitoring-influxdb |
Amazon Console muestra:
Se crean tres instancias como se muestra - una para el nodo maestro y dos para los nodos trabajadores. El nombre de usuario y la contraseña para el maestro Kubernetes se almacenan en /Usuarios/arungupta/.kube/config. Busca una sección como:
|
1 2 3 4 5 6 |
- nombre: aws_kubernetes usuario: cliente-certificado-datos: DATOS cliente-clave-datos: DATOS contraseña: 3FkxcAURLCWBXc9H nombre de usuario: admin |
Ejecutar un contenedor Docker en un clúster Kubernetes en Amazon
Ahora que el clúster está en marcha, obtenga una lista de todos los nodos:
|
1 2 3 4 |
./kubernetes/grupo/kubectl.sh consiga no NOMBRE ETIQUETAS ESTADO EDAD ip-172-20-0-92.us-oeste-2.informática.interna kubernetes.io/nombre de host=ip-172-20-0-92.us-oeste-2.informática.interna Listo 18m ip-172-20-0-93.us-oeste-2.informática.interna kubernetes.io/nombre de host=ip-172-20-0-93.us-oeste-2.informática.interna Listo 18m |
Muestra dos nodos trabajadores. Crea un nuevo 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. Obtén todos los recursos 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 12m |
Esto muestra el Controlador de Replicación que se crea para usted. Obtenga todos los Pods:
|
1 2 3 |
./kubernetes/grupo/kubectl.sh consiga po NOMBRE LISTO ESTADO RESTARTS EDAD couchbase-kil4y 1/1 Ejecutar 0 12m |
La salida muestra el Pod que se crea como parte del Replication Controller. Obtenga más detalles 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-kil4y Nombre: couchbase-kil4y Espacio de nombres: por defecto Imagen(s): arungupta/couchbase Nodo: ip-172-20-0-93.us-oeste-2.informática.interna/172.20.0.93 Inicio Tiempo: Miércoles, 02 Mar 2016 10:25:47 -0800 Etiquetas: ejecute=couchbase Estado: Ejecutar Razón: Mensaje: IP: 10.244.1.4 Replicación Controladores: couchbase (1/1 réplicas creado) Contenedores: couchbase: Contenedor ID: docker://1c33e4f28978a5169a5d166add7c763de59839ed1f12865f4643456efdc0c60e Imagen: arungupta/couchbase Imagen ID: docker://080e2e96b3fc22964f3dec079713cdf314e15942d6eb135395134d629e965062 QoS Nivel: cpu: Burstable Solicitudes: cpu: 100m Estado: Ejecutar Comenzó: Miércoles, 02 Mar 2016 10:26:18 -0800 Listo: Verdadero Reinicie Cuenta: 0 Medio ambiente Variables: Condiciones: Tipo Estado Listo Verdadero Volúmenes: por defecto-ficha-xuxn5: Tipo: Secreto (a secreto que debe rellenar este volumen) NombreSecreto: por defecto-ficha-xuxn5 Eventos: PrimeraVista Última visita Cuenta En SubobjectPath Razón Mensaje ───────── ──────── ───── ──── ───────────── ────── ─────── 13m 13m 1 {programador } Programado Con éxito asignado couchbase-kil4y a ip-172-20-0-93.us-oeste-2.informática.interna 13m 13m 1 {kubelet ip-172-20-0-93.us-oeste-2.informática.interna} implícitamente obligatorio contenedor POD Tirado Contenedor imagen "gcr.io/google_containers/pause:0.8.0" ya presente en máquina 13m 13m 1 {kubelet ip-172-20-0-93.us-oeste-2.informática.interna} implícitamente obligatorio contenedor POD Creado Creado con docker id 3830f504a7b6 13m 13m 1 {kubelet ip-172-20-0-93.us-oeste-2.informática.interna} implícitamente obligatorio contenedor POD Comenzó Comenzó con docker id 3830f504a7b6 13m 13m 1 {kubelet ip-172-20-0-93.us-oeste-2.informática.interna} spec.contenedores{couchbase} Tirando de Tirando de imagen "arungupta/couchbase" 12m 12m 1 {kubelet ip-172-20-0-93.us-oeste-2.informática.interna} spec.contenedores{couchbase} Tirado Con éxito tirado imagen "arungupta/couchbase" 12m 12m 1 {kubelet ip-172-20-0-93.us-oeste-2.informática.interna} spec.contenedores{couchbase} Creado Creado con docker id 1c33e4f28978 12m 12m 1 {kubelet ip-172-20-0-93.us-oeste-2.informática.interna} spec.contenedores{couchbase} Comenzó Comenzó con docker id 1c33e4f28978 |
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. Veamos
exponer el controlador de replicación previamente creado 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.158.93 LoadBalancer Entrada: a44d3f016e0a411e5888f0206c9933da-1869988881.us-oeste-2.elb.amazonaws.com Puerto: 8091/TCP PuertoNodo: 32415/TCP Puntos finales: 10.244.1.4:8091 Sesión Afinidad: Ninguno Eventos: PrimeraVista Última visita Cuenta En SubobjectPath Razón Mensaje ───────── ──────── ───── ──── ───────────── ────── ─────── 7s 7s 1 {servicio-controlador } Creación de LoadBalancer Creación de carga equilibrador 5s 5s 1 {servicio-controlador } CreadoLoadBalancer Creado carga equilibrador |
En Balanceador de carga atributo Ingress le da la dirección del equilibrador de carga que ahora es de acceso público. Espere 3 minutos para que el equilibrador de carga se asiente. Acceda a él utilizando el puerto 8091 y la página de inicio de sesión de
Aparece 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 42 43 44 |
./kubernetes/grupo/kube-abajo.sh En abajo grupo utilizando proveedor: aws Borrado de ELBs en: vpc-7b46ac1f En espera para ELBs a sea suprimido Todos ELBs suprimido Borrado de auto-escalado grupo: kubernetes-súbdito-grupo Borrado de auto-escalado lanzar configuración: kubernetes-súbdito-grupo Borrado de instancias en VPC: vpc-7b46ac1f En espera para instancias a sea suprimido Instancias no pero suprimido: i-45077282 i-44077283 i-b71a6f70 Para dormir para 3 segundos... Instancias no pero suprimido: i-45077282 i-44077283 i-b71a6f70 Para dormir para 3 segundos... Instancias no pero suprimido: i-45077282 i-44077283 i-b71a6f70 Para dormir para 3 segundos... Instancias no pero suprimido: i-45077282 i-44077283 i-b71a6f70 Para dormir para 3 segundos... Instancias no pero suprimido: i-45077282 i-44077283 i-b71a6f70 Para dormir para 3 segundos... Instancias no pero suprimido: i-45077282 i-44077283 i-b71a6f70 Para dormir para 3 segundos... Instancias no pero suprimido: i-45077282 i-44077283 i-b71a6f70 Para dormir para 3 segundos... Instancias no pero suprimido: i-45077282 i-44077283 i-b71a6f70 Para dormir para 3 segundos... Instancias no pero suprimido: i-45077282 i-44077283 i-b71a6f70 Para dormir para 3 segundos... Instancias no pero suprimido: i-45077282 i-44077283 i-b71a6f70 Para dormir para 3 segundos... Instancias no pero suprimido: i-45077282 i-44077283 i-b71a6f70 Para dormir para 3 segundos... Instancias no pero suprimido: i-45077282 i-44077283 i-b71a6f70 Para dormir para 3 segundos... Instancias no pero suprimido: i-44077283 i-b71a6f70 Para dormir para 3 segundos... Todos instancias suprimido Borrado de VPC: vpc-7b46ac1f Limpieza arriba seguridad grupo: sg-308b3357 Limpieza arriba seguridad grupo: sg-3b8b335c Limpieza arriba seguridad grupo: sg-e3813984 Borrado de seguridad grupo: sg-308b3357 Borrado de seguridad grupo: sg-3b8b335c Borrado de seguridad grupo: sg-e3813984 Hecho |
Para una limpieza completa, sigue siendo necesario eliminar explícitamente el bucket de S3 donde se almacenan los binarios de Kubernetes.
¡Que aproveche!

