Orquestación de contenedores de aplicaciones/Kubernetes

De Wikiversidad

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

etcd[editar]

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

Red[editar]

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