A principios de esta semana se publicó Kubernetes 1.4. Lea la anuncio del blog y CHANGELOG.
Hay bastantes novedades en esta versión, pero las principales que me entusiasman son:
- Instalar Kubernetes con
kubeadmcomando. Esto se suma al mecanismo habitual de descarga desde https://github.com/kubernetes/kubernetes/releases. La dirección
kubeadm initykubeadm unirsees muy similar adocker swarm initydocker swarm joinpara Modo enjambre Docker. - Conjuntos de réplicas federadas
- ScheduledJob permite ejecutar trabajos por lotes a intervalos regulares.
- Limitación de pods a un nodo y afinidad y antiafinidad de las vainas
- Programación prioritaria de vainas
- Bonito aspecto Panel de control de Kubernetes (más información más adelante)
Este blog lo demostrará:
- Crear un clúster Kubernetes utilizando Amazon Web Services
- Crear un servicio Couchbase
- Ejecutar una aplicación Spring Boot que almacena un documento JSON en Couchbase.
Todos los archivos de descripción de recursos de este blog se encuentran en github.com/arun-gupta/kubernetes-java-sample/tree/master/maven.
Iniciar clúster Kubernetes
Descargar binario github.com/kubernetes/kubernetes/releases/download/v1.4.0/kubernetes.tar.gz y extracto Incluir kubernetes/cluster en PATH Start
un clúster Kubernetes de 2 nodos:
|
1 |
NUM_NODOS=2 TAMAÑO_NODO=m3.medio KUBERNETES_PROVIDER=aws kube-arriba.sh |
El registro se mostrará como:
|
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 |
... Inicio grupo en us-oeste-2a utilizando proveedor aws ... llamando a verifique-prerrequisitos ... llamando a kube-arriba Inicio grupo utilizando os distro: jessie Cargar a Amazon S3 +++ Puesta en escena servidor alquitranes a S3 Almacenamiento: kubernetes-puesta en escena-0eaf81fbc51209dd47c13b6d8b424149/devel cargar: ../../../../../var/carpetas/81/ttv4n16x7p390cttrm_675y00000gn/T/kubernetes.XXXXXX.bCmvLbtK/s3/arranque-script a s3://kubernetes-staging-0eaf81fbc51209dd47c13b6d8b424149/devel/bootstrap-script Subido a servidor alquitranes: SERVER_BINARY_TAR_URL: https://s3.amazonaws.com/kubernetes-staging-0eaf81fbc51209dd47c13b6d8b424149/devel/kubernetes-server-linux-amd64.tar.gz SALT_TAR_URL: https://s3.amazonaws.com/kubernetes-staging-0eaf81fbc51209dd47c13b6d8b424149/devel/kubernetes-salt.tar.gz BOOTSTRAP_SCRIPT_URL: https://s3.amazonaws.com/kubernetes-staging-0eaf81fbc51209dd47c13b6d8b424149/devel/bootstrap-script PERFIL DE INSTANCIA arn:aws:Soy::598307997273:instancia-perfil/kubernetes-maestro 2016-07-29T15:13:35Z AIPAJF3XKLNKOXOTQOCT4 kubernetes-maestro / ROLES arn:aws:Soy::598307997273:papel/kubernetes-maestro 2016-07-29T15:13:33Z / AROAI3Q2KFBD5PCKRXCRM kubernetes-maestro ASSUMEROLEPOLICYDOCUMENT 2012-10-17 DECLARACIÓN sts:AsumirRol Permitir PRINCIPAL ec2.amazonaws.com PERFIL DE INSTANCIA arn:aws:Soy::598307997273:instancia-perfil/kubernetes-súbdito 2016-07-29T15:13:39Z AIPAIYSH5DJA4UPQIP4BE kubernetes-súbdito / ROLES arn:aws:Soy::598307997273:papel/kubernetes-súbdito 2016-07-29T15:13:37Z / AROAIQ57MPQYSHRPQCT2Q kubernetes-súbdito ASSUMEROLEPOLICYDOCUMENT 2012-10-17 DECLARACIÓN sts:AsumirRol Permitir PRINCIPAL ec2.amazonaws.com Utilizando SSH clave con (AWS) huella dactilar: SHA256:dX/5wpWuUxYar2NFuGwiZuRiydiZCyx4DGoZ5/jL/j8 Creación de vpc. Añadir etiqueta a vpc-6b5b4b0f: Nombre=kubernetes-vpc Añadir etiqueta a vpc-6b5b4b0f: KubernetesCluster=kubernetes Utilizando VPC vpc-6b5b4b0f Añadir etiqueta a dopt-8fe770eb: Nombre=kubernetes-dhcp-opción-configure Añadir etiqueta a dopt-8fe770eb: KubernetesCluster=kubernetes Utilizando DHCP opción configure dopt-8fe770eb Creación de subred. Añadir etiqueta a subred-623a0206: KubernetesCluster=kubernetes Utilizando subred subred-623a0206 Creación de Internet Pasarela. Utilizando Internet Pasarela igw-251eab41 Asociar ruta tabla. Creación de ruta tabla Añadir etiqueta a rtb-d43cedb3: KubernetesCluster=kubernetes Asociar ruta tabla rtb-d43cedb3 a subred subred-623a0206 Añadir ruta a ruta tabla rtb-d43cedb3 Utilizando Ruta Cuadro rtb-d43cedb3 Creación de maestro seguridad grupo. Creación de seguridad grupo kubernetes-maestro-kubernetes. Añadir etiqueta a sg-d20ca0ab: KubernetesCluster=kubernetes Creación de súbdito seguridad grupo. Creación de seguridad grupo kubernetes-súbdito-kubernetes. Añadir etiqueta a sg-cd0ca0b4: KubernetesCluster=kubernetes Utilizando maestro seguridad grupo: kubernetes-maestro-kubernetes sg-d20ca0ab Utilizando súbdito seguridad grupo: kubernetes-súbdito-kubernetes sg-cd0ca0b4 Creación de maestro disco: talla 20 GB, tipo gp2 Añadir etiqueta a vol-99a30b11: Nombre=kubernetes-maestro-pd Añadir etiqueta a vol-99a30b11: KubernetesCluster=kubernetes Asignado Elástico IP para maestro: 52.40.9.27 Añadir etiqueta a vol-99a30b11: kubernetes.io/maestro-ip=52.40.9.27 Generar certificados para alternativa-nombres: IP:52.40.9.27,IP:172.20.0.9,IP:10.0.0.1,DNS:kubernetes,DNS:kubernetes.por defecto,DNS:kubernetes.por defecto.svc,DNS:kubernetes.por defecto.svc.grupo.local,DNS:kubernetes-maestro Inicio Maestro Añadir etiqueta a i-f95bdae1: Nombre=kubernetes-maestro Añadir etiqueta a i-f95bdae1: Papel=kubernetes-maestro Añadir etiqueta a i-f95bdae1: KubernetesCluster=kubernetes En espera para maestro a sea listo Inténtelo 1 a consulte para maestro nodeWaiting para instancia i-f95bdae1 a sea corriendo (actualmente pendiente) Para dormir para 3 segundos... En espera para instancia i-f95bdae1 a sea corriendo (actualmente pendiente) Para dormir para 3 segundos... [maestro corriendo] Adjuntar IP 52.40.9.27 a instancia i-f95bdae1 Adjuntar persistente datos volumen (vol-99a30b11) a maestro 2016-09-29T05:14:28.098Z /dev/sdb i-f95bdae1 adjuntando vol-99a30b11 grupo "aws_kubernetes" configure. usuario "aws_kubernetes" configure. contexto "aws_kubernetes" configure. conmutado a contexto "aws_kubernetes". usuario "aws_kubernetes-basic-auth" configure. Escribió config para aws_kubernetes a /Usuarios/arungupta/.kube/config 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 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. Cordura comprobación grupo... Inténtelo 1 a consulte Docker en nodo @ 54.70.225.33 ...trabajando Inténtelo 1 a consulte Docker en nodo @ 54.71.36.48 ...trabajando Kubernetes grupo es corriendo. En maestro es corriendo en: https://52.40.9.27 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. 0 listo nodos, 0 registrado. Reintento. En espera para 2 listo nodos. 0 listo nodos, 0 registrado. Reintento. En espera para 2 listo nodos. 0 listo nodos, 0 registrado. Reintento. En espera para 2 listo nodos. 0 listo nodos, 2 registrado. Reintento. En espera para 2 listo nodos. 0 listo nodos, 2 registrado. Reintento. Encontrado 2 nodo(s). NOMBRE ESTADO EDAD ip-172-20-0-111.us-oeste-2.informática.interna Listo 39s ip-172-20-0-112.us-oeste-2.informática.interna Listo 42s Validar salida: NOMBRE ESTADO MENSAJE ERROR programador Saludable ok controlador-director Saludable ok etcd-0 Saludable {"salud": "true"} etcd-1 Saludable {"salud": "true"} Grupo validación sucedió a Hecho, listado grupo servicios: Kubernetes maestro es corriendo en https://52.40.9.27 Elasticsearch es corriendo en https://52.40.9.27/api/v1/proxy/namespaces/kube-system/services/elasticsearch-logging Heapster es corriendo en https://52.40.9.27/api/v1/proxy/namespaces/kube-system/services/heapster Kibana es corriendo en https://52.40.9.27/api/v1/proxy/namespaces/kube-system/services/kibana-logging KubeDNS es corriendo en https://52.40.9.27/api/v1/proxy/namespaces/kube-system/services/kube-dns kubernetes-salpicadero es corriendo en https://52.40.9.27/api/v1/proxy/namespaces/kube-system/services/kubernetes-dashboard Grafana es corriendo en https://52.40.9.27/api/v1/proxy/namespaces/kube-system/services/monitoring-grafana InfluxDB es corriendo en https://52.40.9.27/api/v1/proxy/namespaces/kube-system/services/monitoring-influxdb A más depurar y diagnosticar grupo problemas, utilice 'kubectl cluster-info dump'. |
Esto muestra que el clúster Kubernetes se ha iniciado correctamente.
Despliegue del servicio Couchbase
Crear el servicio Couchbase y el controlador de replicación:
|
1 2 3 |
kubectl.sh crear -f couchbase-servicio.yml servicio "couchbase-service" creado controlador de réplica "couchbase-rc" creado |
El archivo de configuración se encuentra en github.com/arun-gupta/kubernetes-java-sample/blob/master/maven/couchbase-service.yml. Esto crea un servicio Couchbase y
el controlador de replicación de respaldo. El nombre del servicio es servicio couchbase. Esto será utilizado más tarde por la aplicación Spring Boot para comunicarse con la base de datos. Compruebe el estado de los pods:
|
1 2 3 4 5 |
kubectl.sh consiga -w vainas NOMBRE LISTO ESTADO RESTARTS EDAD couchbase-rc-gu9gl 0/1 ContenedorCrear 0 6s NOMBRE LISTO ESTADO RESTARTS EDAD couchbase-rc-gu9gl 1/1 Ejecutar 0 2m |
Observe cómo el estado del pod cambia de ContainerCreating a Running. Mientras tanto, la imagen se descarga y se inicia.
Ejecutar aplicación Spring Boot
Ejecuta la aplicación:
|
1 2 |
kubectl.sh crear -f bootiful-couchbase.yml vaina "bootiful-couchbase" creado |
El archivo de configuración se encuentra en github.com/arun-gupta/kubernetes-java-sample/blob/master/maven/bootiful-couchbase.yml. En este servicio,
COUCHBASE_URI se establece en servicio couchbase. Este es el nombre del servicio creado anteriormente. La imagen Docker utilizada para este servicio es arungupta/bootiful-couchbase y se crea utilizando
fabric8-maven-plugin como se muestra en github.com/arun-gupta/kubernetes-java-sample/blob/master/maven/webapp/pom.xml#L57-L68.
En concreto, el comando para la imagen Docker es:
|
1 |
java -Dspring.couchbase.arranque-alberga=$COUCHBASE_URI -tarro /maven/${proyecto.artifactId}.tarro |
Esto garantiza que COUCHBASE_URI anula la variable de entorno spring.couchbase.bootstrap-hosts tal y como se define en aplicación.propiedades de la aplicación Spring Boot. Obtenga los registros:
|
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 |
kubectl.sh Registros -f bootiful-couchbase . ____ _ __ _ _ /\ / ___'_ __ _ _(_)_ __ __ _ ( ( )___ | '_ | '_| | '_ / _` | \/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |___, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v1.4.0.RELEASE) 2016-09-29 05:37:29.227 INFO 5 --- [ main] org.example.webapp.Application : Starting Application v1.0-SNAPSHOT on bootiful-couchbase with PID 5 (/maven/bootiful-couchbase.jar started by root in /) 2016-09-29 05:37:29.259 INFO 5 --- [ main] org.example.webapp.Application : No hay perfiles activos, volviendo a los perfiles por defecto: default 2016-09-29 05:37:29.696 INFO 5 --- [ main] s.c.a.AnnotationConfigApplicationContext : Refrescando org.springframework.context.annotation.AnnotationConfigApplicationContext@4ccabbaa: fecha de inicio [Thu Sep 29 05:37:29 UTC 2016]; raíz de la jerarquía del contexto. 2016-09-29 05:37:34.375 INFO 5 --- [ main] c.c.client.core.env.CoreEnvironment : ioPoolSize es menor que 3 (1), estableciendo a: 3 2016-09-29 05:37:34.376 INFO 5 --- [ main] c.c.client.core.env.CoreEnvironment : computationPoolSize es menor que 3 (1), estableciendo a: 3 2016-09-29 05:37:35.026 INFO 5 --- [ main] com.couchbase.client.core.CouchbaseCore : CouchbaseEnvironment: {sslEnabled=false, sslKeystoreFile='null', sslKeystorePassword='null', queryEnabled=falso, queryPort=8093, bootstrapHttpEnabled=verdadero, bootstrapCarrierEnabled=verdadero, bootstrapHttpDirectPort=8091, bootstrapHttpSslPort=18091, bootstrapCarrierDirectPort=11210, bootstrapCarrierSslPort=11207, ioPoolSize=3, computationPoolSize=3, responseBufferSize=16384, requestBufferSize=16384, kvServiceEndpoints=1, viewServiceEndpoints=1, queryServiceEndpoints=1, searchServiceEndpoints=1, ioPool=NioEventLoopGroup, coreScheduler=CoreScheduler, eventBus=DefaultEventBus, packageNameAndVersion=couchbase-java-cliente/2.2.8 (git: 2.2.8, núcleo: 1.2.9), dcpEnabled=falso, retryStrategy=BestEffort, maxRequestLifetime=75000, retryDelay=Retardo exponencial{growBy 1.0 MICROSEGUNDOS, poderes de 2; inferior=100, superior=100000}, reconnectDelay=Retardo exponencial{growBy 1.0 MILLISEGUNDOS, poderes de 2; inferior=32, superior=4096}, observeIntervalDelay=Retardo exponencial{growBy 1.0 MICROSEGUNDOS, poderes de 2; inferior=10, superior=100000}, keepAliveInterval=30000, autoreleaseAfter=2000, bufferPoolingEnabled=verdadero, tcpNodelayEnabled=verdadero, mutationTokensEnabled=falso, socketConnectTimeout=1000, dcpConnectionBufferSize=20971520, dcpConnectionBufferAckThreshold=0.2, dcpConnectionName=dcp/núcleo-io, callbacksOnIoPool=falso, queryTimeout=7500, viewTimeout=7500, kvTimeout=2500, connectTimeout=5000, disconnectTimeout=25000, dnsSrvEnabled=falso} 2016-09-29 05:37:36.063 INFO 5 --- [ cb-io-1-1] com.couchbase.cliente.núcleo.nodo.Nodo : Conectado a Nodo couchbase-servicio 2016-09-29 05:37:36.256 INFO 5 --- [ cb-io-1-1] com.couchbase.cliente.núcleo.nodo.Nodo : Desconectado de Nodo couchbase-servicio 2016-09-29 05:37:37.727 INFO 5 --- [ cb-io-1-2] com.couchbase.cliente.núcleo.nodo.Nodo : Conectado a Nodo couchbase-servicio 2016-09-29 05:37:38.316 INFO 5 --- [-cálculos-3] c.c.c.núcleo.config.ConfigurationProvider : Abierto cubo libros 2016-09-29 05:37:40.655 INFO 5 --- [ principal] o.s.j.e.a.AnnotationMBeanExporter : Registro judías para JMX exposición en inicio Reserve{isbn=978-1-4919-1889-0, nombre=Minecraft Modificación con Forja, coste=29.99} 2016-09-29 05:37:41.497 INFO 5 --- [ principal] org.ejemplo.aplicación web.Aplicación : Comenzó Aplicación en 14.64 segundos (JVM corriendo para 16.631) 2016-09-29 05:37:41.514 INFO 5 --- [ Hilo-5] s.c.a.AnnotationConfigApplicationContext : Cerrar org.springframework.contexto.anotación.AnnotationConfigApplicationContext@4ccabbaa: inicio fecha [Jue Sep 29 05:37:29 UTC 2016]; raíz de contexto jerarquía 2016-09-29 05:37:41.528 INFO 5 --- [ Hilo-5] o.s.j.e.a.AnnotationMBeanExporter : Anulación del registro JMX-expuesto judías en cierre 2016-09-29 05:37:41.577 INFO 5 --- [ cb-io-1-2] com.couchbase.cliente.núcleo.nodo.Nodo : Desconectado de Nodo couchbase-servicio 2016-09-29 05:37:41.578 INFO 5 --- [ Hilo-5] c.c.c.núcleo.config.ConfigurationProvider : Cerrado cubo libros |
La principal sentencia de salida que hay que buscar en esto es
|
1 |
Reserve{isbn=978-1-4919-1889-0, nombre=Minecraft Modificación con Forja, coste=29.99} |
Esto indica que el documento JSON es upserted (insertado o actualizado) en la base de datos Couchbase.
Panel de control de Kubernetes
Panel de control de Kubernetes se ve más completa y afirmó tener 90% paridad con la CLI. Utilice kubectl.sh vista de configuración para ver la información de configuración del clúster. Tiene el aspecto siguiente:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
apiVersion: v1 racimos: - grupo: certificado-autoridad-datos: REDACTED servidor: https://52.40.9.27 nombre: aws_kubernetes contextos: - contexto: grupo: aws_kubernetes usuario: aws_kubernetes nombre: aws_kubernetes actual-contexto: aws_kubernetes amable: Configurar preferencias: {} usuarios: - nombre: aws_kubernetes usuario: cliente-certificado-datos: REDACTED cliente-clave-datos: REDACTED ficha: 3GuTCLvFnINHed9dWICICidlrSv8C0kg - nombre: aws_kubernetes-básico-auth usuario: contraseña: 8pxC121Oj7kN0nCa nombre de usuario: admin |
En clusters.cluster.server muestra la ubicación del maestro Kubernetes. La dirección usuarios muestran dos usuarios que se pueden utilizar para acceder al panel de control. El segundo utiliza autenticación básica y por lo tanto copia la propiedad
nombre de usuario y contraseña valor de la propiedad. En nuestro caso, Dashboard UI es accesible en https://52.40.9.27/ui.

Todos los recursos de Kubernetes se pueden ver fácilmente en este elegante panel.
Apagar el clúster Kubernetes
Por último, apague el clúster Kubernetes:
|
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 |
kube-abajo.sh En abajo grupo utilizando proveedor: aws Borrado de instancias en VPC: vpc-6b5b4b0f Borrado de auto-escalado grupo: kubernetes-súbdito-grupo-us-oeste-2a Borrado de auto-escalado lanzar configuración: kubernetes-súbdito-grupo-us-oeste-2a Borrado de auto-escalado grupo: kubernetes-súbdito-grupo-us-oeste-2a En espera para instancias a sea suprimido En espera para instancia i-f95bdae1 a sea terminado (actualmente cerrando-abajo) Para dormir para 3 segundos... En espera para instancia i-f95bdae1 a sea terminado (actualmente cerrando-abajo) Para dormir para 3 segundos... En espera para instancia i-f95bdae1 a sea terminado (actualmente cerrando-abajo) Para dormir para 3 segundos... En espera para instancia i-f95bdae1 a sea terminado (actualmente cerrando-abajo) Para dormir para 3 segundos... En espera para instancia i-f95bdae1 a sea terminado (actualmente cerrando-abajo) Para dormir para 3 segundos... En espera para instancia i-f95bdae1 a sea terminado (actualmente cerrando-abajo) Para dormir para 3 segundos... En espera para instancia i-f95bdae1 a sea terminado (actualmente cerrando-abajo) Para dormir para 3 segundos... En espera para instancia i-f95bdae1 a sea terminado (actualmente cerrando-abajo) Para dormir para 3 segundos... En espera para instancia i-f95bdae1 a sea terminado (actualmente cerrando-abajo) Para dormir para 3 segundos... En espera para instancia i-f95bdae1 a sea terminado (actualmente cerrando-abajo) Para dormir para 3 segundos... En espera para instancia i-f95bdae1 a sea terminado (actualmente cerrando-abajo) Para dormir para 3 segundos... En espera para instancia i-f95bdae1 a sea terminado (actualmente cerrando-abajo) Para dormir para 3 segundos... En espera para instancia i-f95bdae1 a sea terminado (actualmente cerrando-abajo) Para dormir para 3 segundos... Todos instancias suprimido Liberar Elástico IP: 52.40.9.27 Borrado de volumen vol-99a30b11 Limpieza arriba recursos en VPC: vpc-6b5b4b0f Limpieza arriba seguridad grupo: sg-cd0ca0b4 Limpieza arriba seguridad grupo: sg-d20ca0ab Borrado de seguridad grupo: sg-cd0ca0b4 Borrado de seguridad grupo: sg-d20ca0ab Borrado de VPC: vpc-6b5b4b0f Hecho |
https://www.couchbase.com/products/cloud/kubernetes proporcionan más detalles sobre cómo ejecutar Couchbase utilizando diferentes marcos de orquestación. Más referencias:
- Foros de Couchbase o StackOverflow
- Síguenos en @couchbasedev o @couchbase
- Más información Servidor Couchbase