Post Top Ad

Your Ad Spot

martes, 18 de agosto de 2020

Docker frente a Kubernetes

Los contenedores son una tecnología de virtualización; sin embargo, no virtualizan un servidor físico. En cambio, un contenedor es virtualización a nivel de sistema operativo. Lo que esto significa es que los contenedores comparten el núcleo del sistema operativo proporcionado por el host entre ellos junto con el host.
Arquitectura de contenedores
La figura muestra todas las capas técnicas que habilitan los contenedores. La capa más inferior proporciona la infraestructura central en términos de red, almacenamiento, balanceadores de carga y tarjetas de red. En la parte superior de la infraestructura se encuentra la capa informática, que consta de un servidor físico o de servidores físicos y virtuales en la parte superior de un servidor físico. Esta capa contiene el sistema operativo con la capacidad de alojar contenedores. El sistema operativo proporciona el controlador de ejecución que utilizan las capas anteriores para llamar al código del kernel y a los objetos para ejecutar contenedores.

Que es Docker

Docker se utiliza para administrar, construir y asegurar aplicaciones críticas para el negocio sin temor a la infraestructura o el bloqueo de la tecnología.

Docker proporciona funciones de administración a los contenedores de Windows. Se compone de dos ejecutables:
  • Demonio de Docker
  • Cliente de Docker
El demonio de Docker es el caballo de batalla para administrar contenedores

Características importantes de Docker:

  • Aislamiento de aplicaciones
  • Swarm (herramienta de agrupación y programación)
  • Servicios
  • Gestion de seguridad
  • Configuración fácil y más rápida
  • Aumentar la productividad
  • Malla de enrutamiento

¿Por qué utilizar Docker para el desarrollo?

  • Fácil implementación.
  • Utilice cualquier editor / IDE de su elección.
  • Puede utilizar una versión diferente del mismo lenguaje de programación.
  • No es necesario instalar un montón de entornos de lenguaje en su sistema.
  • El entorno de desarrollo es el mismo que en producción.
    Proporciona un entorno de desarrollo coherente para todo el equipo.

Qué es Kubernetes:

Kubernetes es un sistema de orquestación de contenedores para ejecutar y coordinar aplicaciones en contenedores entre los clústeres de Machine. También automatiza la implementación, el escalado y la administración de aplicaciones.

Funciones importantes de Kubernetes:

  • Gestionar varios contenedores como una sola entidad
  • Replicación de contenedores
  • Autoescalado de contenedores
  • Gestion de seguridad
  • Gestión de volumen
  • Supervisión del uso de recursos
  • Controles de salud
  • Descubrimiento de servicios
  • Redes
  • Balanceo de carga
  • Actualizaciones continuas
 Arquitectura de Kubernetes

¿Qué es el enjambre de Docker?

Docker Swarm es una herramienta para agrupar y programar contenedores de Docker. Se utiliza para administrar un clúster de nodos de Docker como un único sistema virtual. Utiliza la interfaz de programación de la aplicación Docker estándar para interactuar con otras herramientas. Swarm usa la misma línea de comando de Docker.

Esto se puede entender con el siguiente diagrama:

Utiliza tres estrategias diferentes para determinar qué nodos debe ejecutar cada contenedor:
  1. Propagar
  2. BinPack
  3. Aleatorio

Funciones importantes de Kubernetes:

  • Estrechamente integrado en el ecosistema de Docker
  • Utiliza su propia API
  • Filtración
  • Balanceo de carga
  • Descubrimiento de servicios
  • Redes de hosts múltiples
  • Sistema de programación

¿Cómo se relacionan Kubernetes y Docker Swarm ?

  • Ambos proporcionan funciones de equilibrio de carga.
  • Ambos facilitan la implementación y el escalado de contenedores más rápidos.
  • Ambos tienen una comunidad de desarrolladores para obtener ayuda y soporte.

Docker Swarm frente a Kubernetes: 

Es necesario comprender que Docker y Kubernetes no son competidores. Los dos sistemas proporcionan funciones estrechamente relacionadas pero separadas.

Enjambre de Docker
Kubernetes
Límite de contenedor
Limitado a 95.000 contenedoresLimitado a 3.00.000 contenedores
Soporte de nodoSoporta más de 2000 nodosAdmite hasta 5000 nodos
EscalabilidadDespliegue y escalado rápidos de contenedores incluso en contenedores grandes
Proporciona garantías de cadena a los estados del clúster a expensas de la velocidad.
Desarrollado por
Docker IncGoogle
Caso de uso recomendadoClústeres pequeños, arquitecturas simples, sin multiusuario, para equipos pequeñosListo para producción, recomendado para cualquier tipo de entornos en contenedores, grandes o pequeños, con muchas funciones
InstalaciónInstalación simple, pero el grupo resultante no es comparativamente fuerteInstalación compleja
pero un clúster resultante fuerte una vez configurado
Balanceo de cargaCapacidad para ejecutar el equilibrio automático de carga del tráfico entre contenedores en el mismo clúster
El equilibrio de carga manual suele ser necesario para equilibrar el tráfico entre diferentes contenedores en diferentes pods.
GUINo hay un tablero que haga que la gestión sea compleja
Tiene un tablero incorporado
RetrocesosFunción de reversión automática disponible solo en la ventana acoplable 17.04 y superior
Reversión automática con la capacidad de implementar actualizaciones continuas
RedesLos demonios están conectados por redes superpuestas y se utiliza el controlador de red superpuestoSe utiliza una red superpuesta que permite que los pods se comuniquen a través de múltiples nodos.
DisponibilidadLos contenedores se reinician en un nuevo host si se encuentra una falla del host
Alta disponibilidad, las comprobaciones de estado se realizan directamente en los pods

Entendamos la categoría de diferencias en cuanto a los siguientes puntos:

Instalación / Configuración:

Docker Swarm : solo requiere dos comandos para configurar un clúster, uno en el nivel de administrador y otro en el extremo del trabajador.
Los siguientes son los comandos para configurar, abrir terminal y ssh en la máquina:
$ docker-machine ssh manager1
$ docker swarm init --advertise-addr <MANAGER-IP>
Kubernetes: en Kubernetes, hay cinco pasos para configurar o alojar el clúster.

Paso 1:  Primero ejecute los comandos para abrir el clúster.
Paso 2: luego defina su entorno.
Paso 3: Defina la red de pod.
Paso 4:  luego abre el tablero.
Paso 5: Ahora, el clúster se puede alojar.

GUI:

Docker Swarm: Docker Swarm es una herramienta de línea de comandos. No hay ningún panel de GUI disponible. Uno debe sentirse cómodo con la consola cli para operar completamente el enjambre de la ventana acoplable.

Kubernetes:  Kubernetes tiene una interfaz de usuario de kubernetes basada en web. Se puede usar para implementar la aplicación en contenedores en un clúster de Kubernetes.

Redes

Docker Swarm: el usuario puede cifrar el tráfico de datos del contenedor mientras crea una red superpuesta.
Muchas cosas interesantes están sucediendo bajo el capó en las redes de contenedores de enjambre de docker que facilitan la implementación de aplicaciones de producción en redes de múltiples hosts. El nodo que se une a un clúster de enjambre genera una red superpuesta para los servicios que abarcan todos los hosts del enjambre de la ventana acoplable y una red de puente de la ventana acoplable solo de host para contenedores
Kubernetes: en Kubernetes, creamos políticas de red que especifican cómo interactúan los pods entre sí. El modelo de red es una red plana que permite que todos los pods interactúen entre sí. La red se implementa normalmente como una superposición. El modelo necesita dos CIDR: uno para los servicios y el otro desde el que los pods adquieren una dirección IP.

Escalabilidad

Docker Swarm: después del lanzamiento de Docker 1.12, ahora tenemos una orquestación integrada que puede escalar a tantas instancias como lo permitan sus hosts.

Los siguientes son los pasos a seguir:
Paso 1: Inicializar Swarm
Paso 2: crear un servicio
Paso 3: Prueba de tolerancia a fallas
Paso 4 : agregar un administrador adicional para habilitar la tolerancia a fallas
Paso 5: Servicio de escalado con tolerancia a fallas
Paso 6:  mover servicios de un nodo específico
Paso 7: habilitar y escalar a un nuevo nodo

Kubernetes:  En Kubernetes tenemos maestros y trabajadores. Los nodos maestros de Kubernetes actúan como un plano de control para el clúster. La implementación se ha diseñado para que estos nodos se puedan escalar independientemente de los nodos trabajadores para permitir una mayor flexibilidad operativa.

Auto - Escalado

Docker Swarm: no hay una manera fácil de hacer esto con Docker Swarm por ahora. No admite el escalado automático de fábrica. Se puede utilizar una prometedora herramienta de escalado automático multiplataforma llamada "Orbiter" que admite el escalado automático de tareas en modo enjambre.

Kubernetes : Kubernetes hace uso del ajuste de escala automático de pods horizontal, escala automáticamente la cantidad de pods en un controlador de replicación, implementación o conjunto de réplicas en función de la utilización de CPU observada.
Esto se puede entender con el siguiente diagrama:

Disponibilidad

Docker Swarm: podemos ampliar la cantidad de servicios que se ejecutan en nuestro clúster. E incluso después de la ampliación, podremos mantener una alta disponibilidad. 
Use el siguiente comando para escalar el servicio
$ docker service scale Angular-App-Container = 5
en una configuración de Docker Swarm si no desea que su administrador participe en los procedimientos y lo mantenga ocupado solo para administrar los procesos, entonces podemos drenar al administrador para que no aloje ninguna aplicación.
$ actualización del nodo docker - administrador de drenaje de disponibilidad-1
Kubernetes : hay dos enfoques diferentes para configurar un clúster de alta disponibilidad utilizando kubeadm junto con las infraestructuras necesarias, como tres máquinas para maestros, tres máquinas para trabajadores, conectividad de red completa entre todas las máquinas, privilegios de sudo en todas las máquinas, Kubeadm y Kubelet instalados en máquinas y acceso SSH.
  1. Con nodos de plano de control apilados. Este enfoque requiere menos infraestructura. Los miembros etcd y los nodos del plano de control están ubicados en el mismo lugar.
  2. Con un clúster etcd externo. Este enfoque requiere más infraestructura. Los nodos del plano de control y los miembros etcd están separados.

Actualizaciones continuas y retrocesos

Docker Swarm : si tiene un conjunto de servicios en funcionamiento en un clúster de enjambre y desea actualizar la versión de sus servicios.
El enfoque común es configurar su sitio web en modo de mantenimiento, si lo hace manualmente.
Para hacerlo de forma automatizada mediante la herramienta de orquestación debemos hacer uso de las siguientes funcionalidades disponibles en Swarm:
  • Lanza una nueva versión usando el comando de actualización del servicio de Docker
  • Actualice el paralelismo utilizando indicadores de actualización — paralelismo y reversión — paralelismo.
Kubernetes: para implementar o revertir una implementación en un clúster de kubernetes, siga estos pasos:
  • Lanzamiento de una nueva versión
    Implementación del parche de kubectl $ DEPLOYMENT \    
     -p '{"spec": {"template": {"spec": {"containers": [{"name": "site", "image": "$ HOST / $ USER / $ IMAGE: $ VERSION" }]}}}} '
  • Verifique el estado del lanzamiento
    implementación de estado de implementación de kubectl / @ DEPLOYMENT
  • Leer el historial de implementación
    implementación del historial de implementación de kubectl / $ DEPLOYMENT
    implementación del historial de implementación de kubectl / $ DEPLOYMENT - revisión 42
  • Revertir a la versión implementada anteriormente
    implementación de kubectl deshacer implementación / $ DEPLOYMENT
  • Revertir a una versión específica implementada previamente
    implementación de kubectl deshacer implementación / $ DEPLOYMENT --to-revision 21
    
    

Balanceo de carga

Docker Swarm:  la malla de red interna del enjambre permite que cada nodo del clúster acepte conexiones a cualquier puerto de servicio publicado en el enjambre al enrutar todas las solicitudes entrantes a los nodos disponibles que alojan el servicio con el puerto publicado.
Enrutamiento de entrada, el equilibrador de carga se puede configurar para usar las direcciones IP privadas del enjambre sin preocuparse de qué nodo aloja qué servicio.
Para mantener la coherencia, el equilibrador de carga se implementará en su propio enjambre de un solo nodo. 
Kubernetes: el tipo más básico de equilibrio de carga en Kubernetes es la distribución de carga, fácil de implementar a nivel de despacho.
La forma más popular y en muchos sentidos la más flexible de balanceo de carga es Ingress, que opera con la ayuda de un controlador especializado en pod (kubernetes). Incluye un recurso de ingreso que contiene un conjunto de reglas para controlar el tráfico y un demonio que aplica esas reglas.

El controlador tiene una función incorporada para el equilibrio de carga con algunas capacidades sofisticadas.

Las reglas configurables contenidas en un recurso de Ingress permiten un equilibrio de carga muy detallado y granular, que se puede personalizar para adaptarse tanto a los requisitos funcionales de la aplicación como a las condiciones en las que opera.

Volúmenes de datos:

Docker Swarm: los  volúmenes son directorios que se almacenan fuera del sistema de archivos del contenedor y que contienen datos reutilizables y compartibles que pueden persistir incluso cuando se terminan los contenedores. Estos datos pueden ser reutilizados por el mismo servicio en el redespliegue o compartidos con otros servicios.

Swarm no es tan maduro como Kubernetes. Solo tiene un tipo de volumen de forma nativa, que es un volumen compartido entre el contenedor y su host de la ventana acoplable, pero no hará el trabajo en una aplicación distribuida. Solo es útil a nivel local.

Kubernetes : en esencia, un volumen es solo un directorio, posiblemente con algunos datos, al que pueden acceder los contenedores de un pod. La forma en que se crea ese directorio, el medio que lo respalda y su contenido están determinados por el tipo de volumen utilizado.

Hay muchos tipos de volumen:
  • Local
  • Volúmenes alojados en nodos (emptyDir, hostpath y duh)
  • Alojado en la nube
    • gcePersistentDisk (Google Cloud)
    • awsElasticBlockStore (Amazon Cloud - AWS)
    • AzureDiskVolume (Microsoft Cloud -Azure)

Registro y monitoreo

Docker Swarm:  Swarm tiene dos destinos de registro principales, el registro de demonio (eventos generados por el servicio de Docker ) y los registros de contenedor (generados por contenedores). Agrega sus propios datos a los registros existentes.
Los siguientes comandos se pueden utilizar para mostrar registros por contenedor y por servicio.
  1. Por contenedor :
    Docker logs <nombre del contenedor>
  2. Por servicio:
    registros de servicio de Docker <nombre de servicio>
Kubernetes:  en Kubernetes, a medida que las solicitudes se enrutan entre servicios que se ejecutan en diferentes nodos, a menudo es imperativo analizar los registros distribuidos juntos mientras se depuran los problemas.
Normalmente, tres componentes componen un sistema de registro en Kubernetes:
  1. Agregador de registros: recopila registros de pods que se ejecutan en diferentes nodos y los enruta a una ubicación central. Debe ser eficiente, dinámico y extensible.
  2. Recopilador de registros / Almacenamiento / Búsqueda: almacena los registros de los agregadores de registros y también proporciona una interfaz para buscar registros. También proporciona gestión de almacenamiento y archivo de registros.
  3. Alertas e interfaz de usuario: la característica clave del análisis de registros de aplicaciones distribuidas es la virtualización. Una buena interfaz de usuario con capacidades de consulta, Custom Dashboard facilita la navegación a través de los registros de aplicaciones, correlaciona y depura problemas.

Contenedores

El empaquetado del software en unidades estandarizadas para envío, desarrollo e implementación se denomina contenedor. Incluía todo para ejecutar una aplicación, ya sea código, tiempo de ejecución, herramientas del sistema, configuraciones y bibliotecas del sistema. Los contenedores están disponibles para aplicaciones de Windows y Linux.
A continuación se muestra el diagrama de arquitectura de una aplicación en contenedor:
Beneficios de los contenedores:
  • Gran eficiencia
  • Mejor desarrollo de aplicaciones
  • Operación consistente
  • Gastos indirectos mínimos
  • Mayor portabilidad
Casos de uso de contenedores:
  • Soporte para arquitectura de microservicios
  • Implementación más sencilla de tareas y trabajos repetitivos
  • Soporte DevOps para CI (Integración continua) y CD (Implementación continua)
  • Refactorización de aplicaciones existentes para contenedores.
  • Elevación y cambio de aplicaciones existentes en la nube.

Contenedores vs Máquinas Virtuales:

No se debe confundir la tecnología de contenedores con la tecnología de máquinas virtuales. La máquina virtual se ejecuta en un entorno de hipervisor, mientras que el contenedor comparte el mismo sistema operativo host y tiene un tamaño más ligero en comparación con una máquina virtual.
El contenedor tarda unos segundos en iniciarse, mientras que la máquina virtual puede tardar unos minutos en iniciarse.

Diferencia entre arquitectura de contenedor y máquina virtual:

Cree e implemente contenedores con Docker:
Docker se lanzó en 2013 y revolucionó la industria del desarrollo de aplicaciones al democratizar los contenedores de software. En junio de 2015, Docker donó la especificación de Docker y runc a OCI (Iniciativa de contenedor abierto)
Administre contenedores con Kubernetes
Kubernetes (K8s) es un popular sistema de administración de contenedores de código abierto. Ofrece algunas características únicas como Equilibrio de carga de tráfico, Escalado, Actualizaciones continuas, Programación y Autoreparación (reinicios automáticos)

Características de Kubernetes:
  • Binpacking automático
  • Autocuración
  • Orquestación de almacenamiento
  • Gestión de secretos y configuraciones
  • Descubrimiento de servicios y equilibrio de carga
  • Implementaciones y reversiones automatizadas
  • Escala horizontal
  • Ejecución por lotes
Estudios de caso :
  • IBM ofrece un servicio de contenedor gestionado de Kubernetes y un registro de imágenes para proporcionar una plataforma de extremo a extremo totalmente segura para sus clientes empresariales.
  • NAIC aprovecha los kubernetes que ayudan a su desarrollador a crear prototipos rápidos mucho más rápido de lo que solían hacerlo.
  • Ocado Technology aprovecha los kubernetes que les ayudan a acelerar la idea en el proceso de implementación. Han experimentado la producción desde el desarrollo en una semana. Kubernetes le da a su equipo la capacidad de tener una asignación de recursos más detallada.
Primero, debemos crear una imagen de la ventana acoplable y luego enviarla a un registro de contenedor antes de referirla a un pod de Kubernetes.

Usando Docker con Kubernetes:

Hay un dicho que dice que Docker es como un avión y Kubernetes es como un aeropuerto. Necesitas ambos.
La plataforma de contenedores es proporcionada por una empresa llamada Docker.
Los siguientes son los pasos para empaquetar e implementar su aplicación:
Paso 1:  compila la imagen del contenedor
docker build -t gcr.io/${PROJECT_ID}/hello-app:v1.
Verifique que el proceso de construcción fue exitoso
imágenes de docker
Paso 2:  sube la imagen del contenedor
docker push gcr.io/${PROJECT_ID}/hello-app:v1
Paso 3:  Ejecute su contenedor localmente (opcional)
Docker run --rm -p 8080: 8080 gcr.io/${PROJECT_ID}/hello-app:v1
Paso 4:  crea un clúster de contenedores
en el caso de Google GCP
Los clústeres de contenedores de gcloud crean hello-cluster --num-nodes = 3
lista de instancias de gcloud compute
Paso 5:  Implemente su aplicación
kubectl ejecutar hello-web --image = gcr.io / $ {PROJECT_ID} / hello-app: v1 --port 8080
kubectl obtener vainas
Paso 6:  exponga su aplicación en Internet
kubectl exponer despliegue hello-web --type = LoadBalancer --port 80 --target-port 8080
Paso 7:  amplíe su aplicación
implementación de escala de kubectl hello-web --replicas = 3
kubectl obtener implementación hello-web
Paso 8 :  Implemente una nueva versión de su aplicación.
docker build -t gcr.io/${PROJECT_ID}/hello-app:v2.
Empuje la imagen al registro
docker push gcr.io/${PROJECT_ID}/hello-app:v2
Aplicar una actualización continua a la implementación existente con una actualización de imagen
kubectl set image deployment / hello-web hello-web = gcr.io / $ {PROJECT_ID} / hello-app: v2
Finalmente limpiando usando:
kubectl eliminar servicio hello-web
Arquitectura de componentes de alto nivel de Kubernetes.

Conclusión

El enjambre de Docker es fácil de configurar pero tiene menos funciones, también es necesario sentirse cómodo con las líneas de comando para la vista del tablero. Se recomienda utilizarlo cuando necesite administrar menos nodos.

Sin embargo, Kubernetes tiene muchas características con un panel basado en GUI que brinda una imagen completa para administrar sus contenedores, escalar y encontrar errores. Esto se recomienda para un sistema grande y altamente escalable que necesita miles de pods para funcionar. 

No hay comentarios.:

Publicar un comentario

Dejanos tu comentario para seguir mejorando!

outbrain

Páginas