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

Cómo escalar contenedores Docker en servidores usando Kubernetes

Docker es una plataforma de creación de contenedores orientada a desarrolladores que le permite empaquetar aplicaciones como contenedores independientes. Se ejecutarán en cualquier lugar donde haya disponible un tiempo de ejecución de contenedor compatible.

La popularidad de Docker lo ha convertido casi en sinónimo de contenedores, pero no es la tecnología perfecta para todos los casos de uso. El uso de Docker tal cual presenta desafíos en producción, ya que su CLI solo está equipada para administrar contenedores individuales.

Kubernetes es una plataforma de orquestación que administra pilas de contenedores y los escala en varios servidores. Puede implementar en una flota de máquinas físicas, mejorando la redundancia y la resistencia de su servicio. Así es como puede iniciar su propio clúster para escalar sus contenedores "Docker".

Conceptos básicos de Kubernetes

Reconocer algunos términos clave de Kubernetes lo ayudará a comprender las diferencias en comparación con Docker. El diccionario de Kubernetes describe docenas de recursos que puede agregar a su clúster. Solo los componentes que controlan la programación de contenedores son relevantes para este artículo.

En un nivel alto, una instalación de Kubernetes es un grupo de "nodos". Los nodos son máquinas físicas independientes que alojan sus cargas de trabajo. Un solo nodo "maestro" es responsable de coordinar ("orquestar") las operaciones del clúster al "programar" nuevos contenedores para el nodo de trabajo más apropiado.

Estos son algunos términos críticos:

  • Maestro – El nodo maestro opera el clúster. Esta es la máquina en la que instala Kubernetes. Ejecuta el plano de control y delega el alojamiento de aplicaciones en contenedores a los nodos trabajadores.
  • Plano de control – El plano de control es el componente de software del nodo maestro. Incorpora varios servicios, incluido un servidor API, un almacén de configuración y un programador de contenedores.
  • Nodo – Un nodo es una máquina que aloja sus contenedores. Cada trabajador ejecuta un componente de Kubernetes llamado Kubelet. Este permanece en contacto con el plano de control, recibiendo instrucciones de programación sobre las que actúa para aprovisionar nuevos contenedores.
  • Cápsula – Un pod es la unidad informática más pequeña de un clúster de Kubernetes y representa un grupo de instancias de contenedor. La abstracción de Pod le permite interactuar con múltiples contenedores en ejecución en conjunto.
  • Conjunto de réplicas – Los conjuntos de réplicas son responsables de escalar los pods para garantizar que esté disponible una cantidad específica de réplicas. Si solicita tres réplicas de un Pod, el conjunto de réplicas garantizará que se cumpla la restricción de disponibilidad. Los pods se reemplazan automáticamente si fallan, lo que le permite automatizar la replicación de contenedores entre servidores.

La creación de un clúster escalable requiere un nodo maestro, al menos dos nodos trabajadores y una implementación que aprovisione varias réplicas. Kubernetes podrá programar sus Pods en todos los nodos disponibles, brindándole resiliencia en caso de que uno sufra una interrupción.

Creación de su clúster

Kubernetes está disponible como una oferta administrada de la mayoría de los principales proveedores de nube. Estos proporcionan una forma de un solo clic para crear su plano de control y agregar una cantidad variable de nodos de trabajo.

Puede ejecutar un clúster en su propio hardware utilizando una distribución de Kubernetes independiente como MicroK8s. Necesitará al menos dos máquinas físicas o virtuales aisladas si desea tener soporte de programación redundante.

Instale MicroK8s en ambas máquinas. Designe un nodo como maestro y use el add-node comando para iniciar el proceso de registro de nodos:

microk8s add-node

Esto emitirá una unión microk8s join dominio. Cambie a su nodo secundario y ejecute el comando. Se unirá al primer clúster como un nuevo trabajador. Ahora ambas máquinas están listas para alojar sus cargas de trabajo en contenedores.

Definir una implementación de escala horizontal

Una aplicación que se ejecuta en varios servidores se describe como "a escala horizontal". Se está extendiendo a través de varios entornos distintos. Escalar verticalmente un sistema implica agregar recursos a un entorno existente.

La forma más sencilla de definir una carga de trabajo de Kubernetes es con una implementación. Este tipo de recurso crea pods a partir de una imagen de contenedor y configura rutas de redes públicas a través de un servicio. Las implementaciones predeterminadas son una única instancia de pod, pero se pueden configurar con varias réplicas.

Aquí hay un manifiesto de implementación simple:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:latest
        ports:
        - containerPort: 80

Aplique el manifiesto a su clúster mediante Kubectl:

microk8s kubectl apply -f ./manifest.yaml

Kubernetes creará tres Pods, cada uno alojando un servidor web NGINX creado a partir de nginx:latest imagen. El puerto 80 se expone como un puerto de contenedores para habilitar el tráfico entrante.

Los pods se distribuirán automáticamente entre los nodos de su clúster. Un nodo será elegible para albergar un Pod si puede proporcionar suficientes recursos.

Puede actualizar el número de réplicas en cualquier momento. Cambiar las replicas campo en su manifiesto y vuelva a aplicarlo a su clúster. El programador de Kubernetes tomará medidas para aprovisionar nuevos Pods o cancelar los antiguos según sea necesario. Si escalas replicas hasta 0, puede desconectar su aplicación sin eliminar realmente la implementación o sus recursos asociados.

Adición dinámica de nodos

Actualizar el recuento de réplicas le permite utilizar los recursos existentes dentro de su clúster. Con el tiempo, es posible que agote por completo la capacidad de su nodo combinado, lo que evitará que se programen nuevos pods. Kubernetes ofrece una función de escalado automático de clústeres que puede crear y destruir nodos , cambiando efectivamente la cantidad de pods que se pueden programar.

Configurar el escalado automático es relativamente complicado. El proceso exacto depende del entorno de alojamiento de su clúster. Requiere integración con un Cluster Autoscaler capaz de conectarse a su host para detectar cambios en la demanda. La documentación oficial está disponible para Google Cloud; las soluciones también están disponibles en Amazon EKS y Microsoft AKS.

El escalado automático funciona al mantener una verificación constante de los pods que no se pueden programar debido a una capacidad de clúster insuficiente. También evalúa si los Pods programados con éxito en realidad podrían colocarse con un número reducido de nodos. Luego, el escalador automático utiliza la API de su proveedor de nube para agregar y eliminar instancias informáticas, ajustando dinámicamente los recursos de su clúster. Esto puede afectar su factura, ya que la creación de una nueva instancia suele ser una operación con cargo.

Resumen

Kubernetes facilita la distribución de instancias de contenedores en varios servidores. Registre sus máquinas como nodos, o use un clúster de nube administrado, luego cree implementaciones que tengan las replicas conjunto de campo. Puede escalar su carga de trabajo actualizando el recuento de réplicas solicitadas.

Cuando se anticipen cambios severos en la demanda, use el escalado automático para expandir la capacidad dinámicamente. Esta función le permite crear nuevos nodos sobre la marcha, agregando recursos adicionales para que pueda seguir aumentando su número de réplicas.

Cuando está escalando Pods, debe recordar que también se requiere alguna forma de distribución de tráfico entrante. Si está exponiendo el puerto 80, Kubernetes debe poder asignar solicitudes al puerto 80 en cualquier de los nodos. Esto funciona automáticamente con implementaciones y servicios. Kubernetes crea un balanceador de carga que monitorea continuamente los pods para determinar hacia dónde se puede dirigir el tráfico.


Docker
  1. Cómo instalar WordPress usando Docker

  2. Cómo usar Docker Compose

  3. Cómo conectar contenedores Docker

  4. Cómo listar contenedores Docker

  5. Cómo instalar Docker en CentOS

Cómo reducir el tamaño de la imagen de Docker en los contenedores de Docker

Cómo ejecutar contenedores Docker

Cómo eliminar contenedores Docker

Cómo detener los contenedores de Docker

Cómo nombrar o renombrar contenedores Docker

Cómo configurar espacios de nombres de red en contenedores Docker