GNU/Linux >> Tutoriales Linux >  >> Panels >> Docker

¿Por qué debería preocuparme por Kubernetes, Docker y Container Orchestration?

Una persona en el trabajo conversó conmigo, comentando mis publicaciones de blog recientes sobre los clústeres de Kubernetes de Raspberry Pi que se están construyendo, y se preguntó "¿por qué debería preocuparme por Kubernetes o Docker o cualquiera de esas cosas?"

Gran pregunta, y lo estoy resolviendo yo mismo. Hay muchos recursos por ahí, pero ninguno que habla mi idioma, así que aquí están mis pensamientos y cómo lo explico.

"¡Oye, tengo esta gran nueva aplicación de blog!"

"¡Fabuloso, dame!"

"Claro, primero asegúrese de tener esta versión de Windows/Linux, esta versión de .NET/Python/Node y estos requisitos previos".

"Espera, déjame llamarte la semana que viene cuando eso esté resuelto".

Así es como se construyó el software durante años. Ahora vamos a implementarlo.

"Aquí está el código/dlls/aplicación comprimida".

"Déjame FTP/SFTP/Arrastrar esto de una ventana del Explorador a otra".

"¿Esta versión de ese archivo está configurada para esto?"

"Espera, ¿qué?"

"Asegúrate de que system/boss/dll/nounjs sea la versión 4.5.4.1, lo parchearon".

"Ok, voy a callar* a la producción".

Una vez más, todos hemos estado allí. Estamos en 2018 y hay más gente haciendo esto de lo que te gustaría admitir.

¡Entra Máquinas Virtuales! Mucho mejor, ¿verdad? Aquí tienes una llave USB con un archivo que es TODO lo que necesitas. Manejado.

"Olvídalo, usa esto. Es mejor que una computadora, es una máquina virtual. Pero ten en cuenta que no sabe que es virtual, así que respeta la mentira".

"Está bien, envíamelo por correo electrónico".

"Bueno, son 32 conciertos. Déjame UPS".

Su aplicación es de solo 100 megas, y esta máquina virtual es de decenas de gigas. ¿Por qué una persona de 150 libras necesita un Hummer de 6000 libras? Aislamiento, supongo.

"La aplicación se está volviendo más compleja, pero es genial. Ahora hay cuatro máquinas virtuales. Una para la base de datos, una para Redis y una para el front-end, y el carrito de compras obtiene una. ¡Son microservicios!"

"Me encanta".

"Aquí hay una unidad de 2 TB".

Es bueno que lo separemos, pero no tanto que nos hinchemos. Ahora tenemos que ejecutar apt upgrade/windows update en todas estas cosas y mantenerlas. ¿Por qué conducir un Hummer cuando puedo conseguir un Lyft?

"Ok, los tengo a todos ejecutándose en esta robusta máquina debajo de mi escritorio".

"Genial, nos mudamos a la nube".

"Suspiro. Necesito actualizar todas estas cadenas de conexión y comenzar a cargar máquinas virtuales".

"Será genial. Es como una máquina debajo de tu escritorio, excepto que tu escritorio está en la nube".

"¿Qué es la nube?"

"Es una sala de servidores que no puedes ver. Básicamente son las computadoras debajo de tu escritorio. Pero invisibles".

La mayoría de la infraestructura de VM es bastante descuidada. Son direcciones IP codificadas, son máquinas virtuales mal nombradas que viven en las mismas subredes, luego las moveremos a la nube (¡levantar y cambiar!) pero aún están desordenadas, pero están en la Nube™, ¿verdad?

"Sabes, todas estas máquinas virtuales son pesadas. Tengo que mantener y mover un montón de cosas que NO SON la aplicación. Los contenedores son el camino. Solo define el requisito básico de la aplicación y comparte todo lo demás".

"Escuché sobre esto. Puedo escribir "docker run hello-world" y en cualquier máquina cargará la imagen de hello world (basada en Ubuntu) desde un concentrador central y la ejecutará de forma aislada. Garantizado para trabajar y correr, incluso con el paso del tiempo".

"Bien, porque cada vez más partes de nuestra aplicación están en .NET Core en Linux, pero también hay algo de Python y nodo".

"Sí, y todo se ejecutará ya que los requisitos previos se enumeran claramente en el contenedor... y los requisitos previos son, de hecho, referencias a otras imágenes del contenedor".

"Son contenedores hasta abajo".

Ahora la base de datos, Redis, el front-end y el carrito de compras se pueden definir en algunos archivos de texto simples. En lugar de que su sistema operativo host (la computadora principal... el metal) cargue un montón de sistemas operativos invitados (¡literalmente copias!) y luego cargue todas las aplicaciones y requisitos previos, compartirá sistemas operativos y, cuando corresponda, los archivos binarios y bibliotecas. .

"Bien, ahora tenemos un montón de contenedores ejecutándose en Docker, pero a veces se caen o se detienen".

"¿Ejecutarlos de nuevo?"

"Es más que eso, a veces necesitamos tener 3 contenedores de carrito de compras, y otras veces necesitamos 2 o más contenedores DB. Además, sus direcciones IP a veces cambian"

"Así que necesitamos algo para mantenerlos en funcionamiento, escalarlos o escalarlos automáticamente, así como administrar redes y nombres/dns".

Introduzca un orquestador de contenedores. Hay Docker Swarm, Mesos/Marathon, Azure Service Fabric y otros, pero para esta publicación usaremos Kubernetes.

"¿Entonces Kubernetes ejecuta mis contenedores, los mantiene en funcionamiento y ayuda a administrar la red?"

"Sí y no. Partes de Kubernetes, o k8, como dice la gente genial como yo que lo ha estado usando durante casi 3 horas, son parte de los componentes maestros, como etcd para el almacenamiento de valores clave, y kube-scheduler para seleccionar en qué nodo ejecutar un "pod" (un pod es más genial que un contenedor, pero a veces un pod es más que un contenedor. Aún así, muy bueno).

"Tendré que hacer un glosario".

"Maldita sea, lo harás".

Kubernetes tiene básicamente todo conectable. ¿No te gusta su configuración de red? Hay literalmente más de una docena de opciones. ¿Quieres mejores tablas y gráficos? Todo un mundo de opciones.

Así como un Dockerfile puede explicar declara lo que se necesita para ejecutar una aplicación, un archivo YAML de Kubernetes describe no solo los contenedores, sino también los puertos necesarios, la cantidad de réplicas de cada uno (piense en una granja web), nombres, variables de entorno y más. Aquí hay un archivo que muestra un front-end, un back-end y un balanceador de carga. Todo está allí, las cadenas de conexión se convierten en búsquedas internas de DNS, cada servicio tiene un equilibrador de carga (si lo desea) y puede escalar manualmente o escalar automáticamente.

"Vale, ¿por qué debería importarme?"

"Algunas razones. En el pasado, para instalar nuestra aplicación necesitaba darle un documento de Word y un fin de semana. Ahora escriba kubectl apply theapp.yaml y está funcionando en menos de un minuto".

"Todavía estoy facturando el fin de semana".

En pocas palabras, estamos al comienzo de una nueva fase de DevOps. Uno que es programático, elástico y declarativo. Es coherente, claro y modular.

Le recomiendo que consulte "Razones por las que Kubernetes es genial" de Julia Evans y que lea cómo crear un clúster de Kubernetes (y el VMS de administración es gratuito) en Azure.

* Estoy tratando de hacer callar una cosa. ¡No es Es Eaytch en máquinas! ¡Nos callamos! Se pronuncia entre shush y shoosh. Asegúrate de agregar un poco de petit jeté cuando lo digas.

* Imagen utilizada bajo CC

Patrocinador: Dé rienda suelta a un Python más rápido Aumente el rendimiento de sus aplicaciones en futuras plataformas Intel® con The Intel® Distribution for Python. Disponible para Windows, Linux y macOS. ¡Obtenga la Distribución Intel® para Python* ahora!


Docker
  1. Cuándo y por qué usar Docker

  2. Cómo y por qué usar un host Docker remoto

  3. Instalar Docker y WordPress en Ubuntu

  4. ¿Por qué Deis y qué es?

  5. Cómo obtener información sobre un contenedor en Docker

Cómo actualizar la imagen y el contenedor de Docker a la última versión

Cómo usar SSH en un contenedor Docker y ejecutar comandos

Aproveche la orquestación de contenedores en este tutorial de Docker Swarm

Cómo implementar y administrar un contenedor Docker MongoDB

Cómo copiar archivos entre el host y el contenedor Docker

21 comandos esenciales que todo usuario de Docker debe conocer