====== 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.