¿Qué hace Kubernetes realmente? [cerrado]

134

Kubernetes se factura como un contenedor de clúster "planificador / orquestador", pero no tengo idea de lo que esto significa. Después de leer el sitio de Kubernetes y el wiki (vago) de GitHub, lo mejor que puedo decir es que de alguna manera descubre qué máquinas virtuales están disponibles / son capaces de ejecutar su contenedor Docker, y luego las implementa allí. Pero eso es solo mi suposición, y no he visto ninguna palabrería concreta en su documentación para respaldar eso.

Entonces, ¿qué es Kubernetes exactamente y cuáles son algunos problemas específicos que resuelve?

smeeb
fuente
Dado que todos los proyectos de docker-world (kubernetes / fleet / swarm / etc) tienen dificultades para explicar lo que hacen y lo que los distingue, creo que una pregunta un tanto floja es todo lo que los usuarios podemos proporcionar ... Uno pregunta "cuál es la diferencia entre flota y kubernetes" y la respuesta es "puedes usar la flota para lanzar kubernetes". Gorrón. ;-)
Torsten Bronger
3
Creo que es una pregunta perfectamente válida y señala algunas deficiencias en el doco. Cerrarlo como demasiado amplio es un mal servicio. El mejor enfoque para mí fue simplemente descargar la base de código k8s y buscar allí, por ejemplo, para descubrir qué era un pod. Eso me ayudó mucho.
Beezer

Respuestas:

113

El propósito de Kubernetes es facilitar la organización y programación de su aplicación en una flota de máquinas. En un nivel alto, es un sistema operativo para su clúster.

Básicamente, le permite no preocuparse por qué máquina específica en su centro de datos se ejecuta cada aplicación. Además, proporciona primitivas genéricas para verificar el estado y replicar su aplicación en estas máquinas, así como servicios para conectar su aplicación a microservicios para que cada capa de su aplicación se desacople de otras capas para que pueda escalarlas / actualizarlas / mantenerlas independientemente.

Si bien es posible hacer muchas de estas cosas en la capa de aplicación, tales soluciones tienden a ser únicas y frágiles, es mucho mejor tener una separación de preocupaciones, donde un sistema de orquestación se preocupa por cómo ejecutar su aplicación y le preocupa El código que conforma su aplicación.

Brendan
fuente
3
Gracias @brendan (+1): tu respuesta definitivamente ayuda. Sin embargo, una pregunta de seguimiento: ¿no es esto lo que hace Apache Mesos? ¿Son Kubernetes y Mesos competidores entre sí? Si no, ¿podrían usarse en concierto entre sí (y si es así, cómo)? ¡Gracias de nuevo!
smeeb
2
@smeeb Mesos y Kubernetes se complementan entre sí (este último es compatible como un marco de Mesos). Mesos proporciona una gestión de recursos más sofisticada. En otras palabras, Kubernetes le permite a Mesos decidir qué host se utiliza, en función de la capacidad disponible. Mesos es compatible con otros marcos. Si lee los documentos, verá que Marathon es otra forma de iniciar contenedores en un clúster de servidores administrados de Mesos.
Mark O'Connor el
18

Como lees de su página de Github :

Kubernetes es un sistema de código abierto para administrar aplicaciones en contenedores en varios hosts, que proporciona mecanismos básicos para la implementación, mantenimiento y escalado de aplicaciones.

Kubernetes es:

lean: lightweight, simple, accessible
portable: public, private, hybrid, multi cloud
extensible: modular, pluggable, hookable, composable
self-healing: auto-placement, auto-restart, auto-replication

Kubernetes se basa en una experiencia de una década y media en Google ejecutando cargas de trabajo de producción a escala, combinado con las mejores ideas y prácticas de la comunidad.

Para mí, Kubernetes es una herramienta de orquestación de contenedores de Google. Debido a su diseño, puede implementar la compatibilidad con cualquier motor de contenedor, pero creo que ahora está limitado a Docker. Hay algunos conceptos importantes en su arquitectura:

Kubernetes trabaja con los siguientes conceptos:

Los clústeres son los recursos informáticos sobre los cuales se construyen sus contenedores. ¡Kubernetes puede correr en cualquier lugar! Consulte las Guías de inicio para obtener instrucciones sobre una variedad de servicios.

Los pods son un grupo colocado de contenedores Docker con volúmenes compartidos. Son las unidades desplegables más pequeñas que se pueden crear, programar y administrar con Kubernetes. Los pods se pueden crear individualmente, pero se recomienda que use un controlador de replicación incluso si crea un solo pod. Más sobre las vainas.

Los controladores de replicación administran el ciclo de vida de los pods. Se aseguran de que se ejecute un número específico de pods en un momento dado, creando o eliminando los pods según sea necesario. Más información sobre los controladores de replicación.

Los servicios proporcionan un nombre y una dirección únicos y estables para un conjunto de pods. Actúan como equilibradores de carga básicos. Más sobre servicios.

Las etiquetas se utilizan para organizar y seleccionar grupos de objetos basados ​​en pares clave: valor. Más sobre etiquetas.

Entonces, tiene un grupo de máquinas que forman un clúster donde se ejecutan sus contenedores. También puede definir un grupo de contenedores que brindan un servicio, de manera similar a como lo hace con otras herramientas como la fig (es decir: el pod de webapp puede ser un servidor rails y una base de datos postgres). También tiene otras herramientas para garantizar una serie de contenedores / pods de un servicio que se ejecuta al mismo tiempo, un almacén de valores clave, una especie de equilibrador de carga incorporado ...

Si sabes algo sobre coreos, es una solución muy similar pero de Google. Algo Kubernetes tiene una buena integración con Google Cloud Engine.

Javier Cortejoso
fuente
2
Gracias @jcortejoso (+1). Sin embargo, tengo algunas preguntas de seguimiento si no te importa: (1) dices que Kubernetes es similar a CoreOS, pero de Google. Esto implica que Kubernetes y CoreOS resuelven el mismo problema. Pero desde [el propio sitio web de Kubernetes] (), dice que puedes instalar Kubernetes en CoreOS. Entonces, ¿cuál es? ¿Kubernetes es lo mismo que CoreOS, o Kubernetes se ejecuta en CoreOS y resuelve un problema específico?
smeeb
1
Además (2) todavía no veo el valor en la "orquestación" de Kubernetes aquí. Usted declara que puede usar Kubernetes para definir un grupo de contenedores que brindan un servicio, lo que me hace preguntarme dos cosas distintas: (2a) ¿No podría simplemente hacer este tipo de agrupación en la capa de la aplicación y colocar mi aplicación detrás de un equilibrador de carga nginx? Y (2b) ¿es esto todo lo que hay para la "orquestación"? Para mí, nuevamente, solo parece un equilibrio de carga que podría lograrse fácilmente en la capa de la aplicación. Pensamientos? Gracias de nuevo por la maravillosa respuesta!
smeeb
1
Si kubernetes es "ligero", me pregunto cuál sería la solución grasa.
Torsten Bronger
@smeeb No estoy tan familiarizado con nginx (así que perdona mi ingenuidad), pero no creo que nginx reinicie un servidor que se ha bloqueado; y si una máquina (o un centro de datos completo) se cae, nginx no reiniciará su aplicación en una máquina diferente. kubernetes se asegurará de que siempre mantenga un número n de "pods" ejecutándose en algún lugar, y realmente no importa dónde ni cómo.
kgreenek
10

Kubernetes ofrece casi la misma funcionalidad que las API de infraestructura como servicio, pero está dirigido a contenedores programados dinámicamente en lugar de máquinas virtuales, y como sistemas de plataforma como servicio, pero con una mayor flexibilidad, que incluye:

  • montaje de sistemas de almacenamiento,
  • distribuyendo secretos,
  • comprobación del estado de la aplicación,
  • replicar instancias de aplicación,
  • escala automática horizontal,
  • nomenclatura y descubrimiento,
  • balanceo de carga,
  • actualizaciones continuas,
  • monitoreo de recursos,
  • acceso al registro e ingestión,
  • soporte para introspección y depuración, y
  • identidad y autorización

Si ya usa otros mecanismos para el descubrimiento de servicios, distribución secreta, equilibrio de carga, monitoreo, etc., por supuesto, puede continuar usándolos, pero nuestro objetivo es facilitar la transición a Kubernetes de los sistemas IaaS y PaaS existentes al proporcionar esto funcionalidad

https://kubernetes.io/docs/concepts/overview/what-is-kubernetes/#why-do-i-need-kubernetes-and-what-can-it-do

briangrant
fuente