====== Kubernetes ====== Sistema para la automatización del despliegue, ajuste de escala y manejo de aplicaciones en contenedores. Soporta diferentes entornos para la ejecución de contenedores, incluido Docker. Entra dentro de lo que se conoce como **orquestadores**. * [[https://kubernetes.io/|Web oficial]] ===== Orquestador ===== Un orquestador es una tecnología que permite lanzar un conjunto de contenedores en un cluster de servidores. Kubernetes permite: * Ejecutar contenedores en varias máquinas * Service discovery: cada vez que se añaden nuevos contenedores, facilita su descubrimiento. * Balanceo de carga * Configuración de red * Escalabilidad: añadir o eliminar contenedores a demanda * Logging y monitorización * Tolerante a fallos: si algo funciona en el cluster, el orquestador recreará la máquina o contenedor para que la aplicación siempre esté disponible * Comunidad Kubernetes se ha convertido en el estandar para ejecutar contenedores en el cloud (Amazon, Azure y Google) ===== Arquitectura ===== El cluster de Kubernetes se divide en dos tipos de nodo: * **Nodo Master**: ejecuta la mayor parte de la capa de control de Kubernetes * **Nodo Worker**: ejecuta los pods y contenedores de los usuarios. En una configuración de desarrollo podríamos tener solo 1 nodo que haga de master y worker {{ :informatica:software:kubernetes:kubernetes-arquitectura.png?nolink&600 |}} La forma de interactuar con Kubernetes es a través de ''kubectl'', que se encarga de hablar con la API REST de Kubernetes. ''kubelet'' lanza los contenedores en los pods. ''kube-proxy'' utiliza iptables para realizar las rutas para que los contenedores sean visibles entre los diferentes nodos del cluster. ===== Instalación ===== Posibilidades para instalar un cluster de Kubernetes. A nivel local: * **Minikube**: crea una máquina virtual donde ejecuta Kubernetes. Es la primera que salió y está soportada por el proyecto Kubernetes. Es la más compatible, pero la más pesada. * **Microk8s**: instalaciones en Linux utilizando Snap. * **k3s**: originalmente diseñado para trabajar en IoT. * **KinD** (Kubernetes in Docker): Kubernetes dentro de un contenedor. Ideal para Integración Continua. * **Docker Desktop**: igual que Minikube, crea una máquina virtual. Consume muchos recursos. En cuanto a instalaciones de Kubernetes en la nube: * **GKE**: Google Kubernetes Engine. El que mejor funciona. * **AKS**: el de Azure (Microsoft). * **EKS**: el de Amazon. * **Digital Ocean**: centrada en desarrolladores y es la más barata.