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
kubeadm
comando. Esto se suma al mecanismo habitual de descarga desde https://github.com/kubernetes/kubernetes/releases. La dirección
kubeadm init
ykubeadm unirse
es muy similar adocker swarm init
ydocker swarm join
para 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