Orquestación de contenedores de aplicaciones/Kubernetes
Orquestación de contenedores con Kubernetes
editarIntroducción
editarKubernetes 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
editarKubernetes distribuye los binarios para diferentes Sistemas Operativos y arquitecturas de sistema.
Página para descarga de Kubernetes
minikube
editarMikibe es el servidor de grupos de Kubernetes
Distribuible en Arch Linux
editarpacman -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
editarPermite 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
editarHerramienta para "bootstraping" de clusters de Kubernetes
Minikube
editarPlano de control
editarEs 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
editarkube-scheduler
editarAsigna 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
editarKubernetes es escencialmente un cúmulo de sistemas de computo clasificados según su rol:
Manejador de control
editarControl 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
editarEs 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
editarLos 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
editarManeja 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
editarPorporciona los servicios de red
Red
editarLa 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
editarpacman -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
editarTodas las imagenes de kubernetes son desplegadas en el registro [1]
Configuración
editarPara 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
editarLos grupos son manejados mediante contextos con el siguiente comando kubectl config use-context
Interfaz de Ejecución de Contenedores
editarKubernetes 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