Orquestación de contenedores de aplicaciones/Kubernetes

Orquestación de contenedores con Kubernetes

editar

Introducción

editar

Kubernetes es un sistema de código abierto diseñado para automatizar el despliegue, escalado y administración de aplicaciones contenerizadas. Agrupa contenedores para facilitar su manejo.

Kubernetes por si mismo no puede ejecutar los contenedores y depende de un entorno de ejecución de contenedores existente para ello. Kubernetes suporta muchos entornos de ejecución contenidos:

  • CRIO-o
  • containerd
  • Docker Engina
  • Mirantes Container Runtine

Funcionalidades

editar
  • Desenrollo y retroceso automátizado

Despliega cambios progresivos a la aplicación o configuración mientras monitorea su salud. Si algo falla, el cambio es revertido automáticamente.

  • Descubrimiento de servicios y balanceo de carga
  • Orquestación de almacenamiento
  • Autosanación
  • Configuración y administración de secretos
  • Empacado automático de binarios
  • Ejecución por bloques
  • Escalado horizontal
  • Pila doble IPv4/IPv6
  • Diseñado para extensibilidad

Automáticamente coloca los contenedores basandose en los requerimientos de recursos y liitaciones sin sacrificar su disponibilidad.

Adquisición e instalación

editar

Kubernetes distribuye los binarios para diferentes Sistemas Operativos y arquitecturas de sistema.

Página para descarga de Kubernetes

minikube

editar

Mikibe es el servidor de grupos de Kubernetes

Distribuible en Arch Linux

editar
pacman -Sy minikube
Paquetes (1) minikube-1.32.0-1

Tamaño total de la descarga:     14.05 MiB
Tamaño total de la instalación:  71.18 MiB


kubectl

editar

Permite administrar los grupos de kubernetes. Se utiliza para desplegar aplicaciones, inspeccionar, manejar los recursos de los grupos y ver los registros.

Por omisión se carga la configuración del archivo $HOME/.kube/config

kubeadm

editar

Herramienta para "bootstraping" de clusters de Kubernetes

Minikube

editar

Plano de control

editar

Es imporante mantener el plano de control en ejecución constante, su interrupción puede conllevar interrupciones en el servicio.

La comunicación con los clusters peude darse madiante la línea de comandos CLI, la interfaz web (Web UI) o mediante un API

Para asegurar su disponibilidad, se pueden agregar repiclas configuradas en modo Alta Disponibilidad

kube-apiserver

editar

kube-scheduler

editar

Asigna nuevos objetos de cargas de trabajo, tales como "pods" encapsulados en contenedores, a los nodos.

Durante el proceso de agendado, se toman decisiones basadas en el estado del cluster Kubernetes y los requerimientos del nuevo objeto de carga de trabajo. Mediante la API del servidor, el planificador recibe datos de los recursos para cada nodo trabajador. EL planificador también toma en cuenta parámetros para la Calidad del Servicio (Quality of Service)

Arquitectura

editar

Kubernetes es escencialmente un cúmulo de sistemas de computo clasificados según su rol:

Manejador de control

editar
Control Manager
editar
  • Ejecuta Controladores u operadores cuando los nodeos se vuelven indisponibles
  • Crea puntos de salida
  • Cuentas de servicio
  • Tokens de acceso
Cloud Control Manager
editar
  • Controladores u operadores responsables de interactuar con el servicio de nube de computo cuando los nodos se vuelve indisponibles
  • Balanceo de carga
  • Enrutamiento

Es un proyecto de código abierto ahuspiciado por la Cloud Native Computing Foundation. Porporciona almacenamiento distribuido, fuertemente consistente de datos emparejados tipo: llave=valor utilizado para almacenar el estado de los grupos en Kubernetes.

Trabajadores

editar

Los trabajadores proporcionan un entorno de ejecución para las aplicaciones cliente. Los contenedores de aplicaciones son empacados en "pods". Controlado por el grupo de plano de control, los pods son asignados a un trabajador dónde encontraran las recursos para su ejecución.

Un pod es la unidad mínima de asignación de trabajo. Es una colección lógica de uno o más contenedores asignados juntos. La colección puede ser iniciada, detenida o reasignada cómo una sola unidad de trabajo.

Los nodos trabajadores estan a su vex compuestos por un entorno de ejecución, agente de node (kubelet), proxu (kube-proxy), extensiones para el DNS, panel del usuario, monitoreo y registro de actividad.

kubelet

editar

Maneja la comunicación con el entorno de ejecución de contenedores. Adaptadores populadres para los entornos de ejecución:

  • cri-containerd
  • cri-o
  • cri-dockerd

kube-proxy

editar

Porporciona los servicios de red

La complejidad de la red presenta nuevos retos de conectividad que habran de manejarse antes de realizar un despliegue:

  • Contenedor a contenedor dentro de un Pod
  • Pod a Pod entre grupos de nodos
  • Servicio a Pod dentro del mismo espacio de nombres y atraves del mismo espacio de nombre de grupo
  • Externas al servicio. Para manejar las comunicaciones de los clientes para acceder a las aplicaciones del grupo.

Distribuible en Arch Linux

editar
pacman -Sy kubectl
Paquetes (1) kubectl-1.29.2-1

Tamaño total de la descarga:     15.08 MiB
Tamaño total de la instalación:  72.91 MiB

Contenedores de imágenes

editar

Todas las imagenes de kubernetes son desplegadas en el registro [1]

Configuración

editar

Para poder acceder al grupo de Kubernetes, es necesario un de configuración el cuál es generado automáticamente al crear un grupo con kube-up.sh o desplegar un grupo Minikube

Grupos

editar

Los grupos son manejados mediante contextos con el siguiente comando kubectl config use-context

Interfaz de Ejecución de Contenedores

editar

Kubernetes se comunica mediante la Interfaz de Ejecución de COntenedores con la entorno de ejcución correspondiente, algunos entornos de ejecución comunes compatibles con Kubernetes son:

  • containerd
  • CRI-O
  • Docker Engine
  • Mirantis Container Runtime

Enlaces externos

editar

Kubernetes - Página oficial Kubernetes The Hard Way