Prologo: Expongo estos apuntes como introducción al ecosistema-Kubernetes a mi juicio define y enmarca perfectamente Kubernetes, como introducción y punto de referencia inicial. Al final de este post en referencias en tendremos los enlaces en que están basados.
Introducción
Listado de de los conceptos de Kubernetes:
- Conceptos-básicos
- Cluster-Kubernetes
- Arquitectura-Kubernetes
- Objetos-Kubernetes
Conceptos-básicos
-. Kubernetes es una plataforma portátil, extensible y de código abierto para administrar cargas de trabajo y servicios en contenedores, que facilita tanto la configuración declarativa como la automatización. Tiene un ecosistema grande y de rápido crecimiento. Los servicios, el soporte y las herramientas de Kubernetes están ampliamente disponibles.
-. El nombre Kubernetes proviene del griego, que significa timonel. Google abrió el proyecto Kubernetes en 2014. Kubernetes se basa en una década y media de experiencia que tiene Google con la ejecución de cargas de trabajo de producción a escala, combinadas con las mejores ideas y prácticas de la comunidad.
Cluster-Kubernetes
-. Un Cluster–Kubernetes está formado por dos tipos de recursos (referidos a máquinas, ya sean físicas o virtuales):
1.1-. El Máster coordina el cluster. Coordina todas las actividades del cluster como organizar (schedule) las aplicaciones, mantener el estado deseado de las aplicaciones, escalado, despliegue de actualizaciones, y demás. También recoge información de los nodos-worker y Pods (unidades mínimas de despliegue en Kubernetes. Contienen al menos un contenedor)
1.2-. Los Nodos son workers que ejecutan las aplicaciones. Cada nodo contiene un agente denominado Kubelet que gestiona el nodo y mantiene la comunicación con el Máster. El nodo también tiene herramientas para trabajar con contenedores, como por ejemplo Docker.
-. Un cluster-Kubernetes en producción debería tener al menos tres nodos. En entornos de producción se usan varios nodos-máster para que los clusters sean tolerantes a fallos y ofrezcan alta disponibilidad.
Nota: Una aplicación de tratamiento de imágenes y que esté basada en contenedores podría interactuar con la API de Kubernetes solicitando a demanda la creación de pods dedicados a operaciones específicas (p.e. filtrado, aclarado, …) en respuesta a las acciones de los usuarios. Una vez finalizada la operación, la aplicación volvería a interactuar con la API de Kubernetes para la liberación de los pods creados para la resolución de la tarea.
Example 1. Lista de pods usando la API de Kubernetes
https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.19/
-. Los clusters-Kubernetes se pueden desplegar sobre máquinas físicas o virtuales. Para comenzar a practicar con Kubernetes o para tareas de desarrollo, Minikube es una buena opción. Minikube está disponible para Windows, Linux y MacOS.
Arquitectura-Kubernetes
-. Un cluster-Kubernetes está formado por dos tipos de unidades, el nodo-Master y los nodos-Worker (o simplemente Nodos).
- Plugins de red: Permiten la conexión entre pods de nodos diferentes y la integración de soluciones de red diferentes (overlay, L3, …)
- etcd: una base de datos clave-valor donde Kubernetes guarda todos los datos del cluster.
- API server: Componente del Master que expone la API de Kubernetes. Es el front-end del plano de control de Kubernetes.
- Control Manager: Se encarga de comprobar si el estado deseado coincide con la realidad (p.e. número de réplicas)
- Scheduler: Componente del master que observa qué pods se han creado nuevos y no tienen nodo asignado, y les selecciona un nodo donde se puedan ejecutar.
- kubelet: Agente que se se ejecuta en cada nodo worker del cluster y que asegura que los nodos están en ejecución y sanos. kubelet no gestiona los pods que no han sido creados por Kubernetes.
- kube-proxy: Mantiene las reglas de networking en los nodos para los pods que se ejecutan en él de acuerdo con las especificaciones de los manifiestos.
- cAdvisor: Recoge datos de uso de los contenedores.
- Plano de control o Control plane: Nivel de orquestación de contenedores que expone la API para definir, desplegar y gestionar el ciclo de vida de los contenedores.
- Plano de datos o Data Plane: Nivel que proporciona los recursos, como CPU, memoria, red y almacenamiento, para que los pods se puedan ejecutar y conectar a la red.
Nota: etcd, es una base de datos clave-valor fiable y distribuida para los datos más críticos de un un sistema distribuido. Dado que Kubernetes guarda todos los datos del cluster en ella, se deberían mantener copias de seguridad de esta base de datos y disponer de un plan de recuperación ante posibles desastres.
Nota: Los componentes kube-proxy, kube-scheduler, kube-controller-manager, etcd, kubelet, así como los componentes de red se ejecutan como contenedores en cada uno de los nodos del cluster de Kubernetes. Basta con abrir un terminal en uno de los nodos del cluster y comprobarlo. Si lo hacemos, veremos como en los nodos worker están los contenedores de los componentes de Kubernetes junto con los contenedores de las aplicaciones que se están ejecutando en el nodo.
Nota: Un ejercicio interesante es detener el contenedor kubelet y ver cómo el nodo pasa a estar inactivo. En caso de ser el único nodo de trabajo, los contenedores de los nuevos despliegues quedarán en el estado Pending mientras kubelet no vuelva a estar disponible.
Objetos-Kubernetes
-. Kubernetes ofrece una serie de objetos básicos y una serie de abstracciones de nivel superior llamadas Controladores.
Los objetos básicos de Kubernetes son:
- Pod
- Service
- Volume
- Namespace
-. Los objetos de nivel superior o Controladores se basan en los objetos básicos y ofrecen funcionalidades adicionales sobre los objetos básicos:
- ReplicaSet
- Deployment
- StatefulSet
- DaemonSet
- Job
Recapitulando :
- Los contenedores son una buena opción para agrupar y ejecutar nuestras propias aplicaciones.
- Cuando el número de contenedores aumenta rápidamente y es necesario gestionarlos de forma cómoda.
- Esa es la razón por la que Kubernetes. Es la opción mas aconsejable .
- Kubernetes (K8s) es un sistema de código abierto para automatizar la implementación, el escalado y la gestión de aplicaciones y servicios en contenedores.
- El clúster de Kubernetes contiene nodos maestros y trabajadores.
- El nodo maestro controla y gestiona un grupo de nodos trabajadores.
- Puede tener varios nodos maestros para clústeres de alta disponibilidad.
- Referencias: entornos-moreluz
- Referencias: Seminario