Arquitectura kubernetes
Un cluster de kubernetes dispone de varios master o control plane estos dos termino son sinonimos.
En cada cluster tiene multiples nodos que son los encargados de gestionar los contenedores y las aplicaciones que despleguemos dentro de esos contenedores.

API SERVER
Un cluster tiene un api server que permite tanto a otras aplicaciones de terceros como otras aplicaciones de kubernetes.
Este api server expone un API RESTful
El __ API Server__ recibe llamadas de tipo .yml
con las intrucciones
y las procesa.

Controller manager
Esta compuesto por multiples componentes que gestionan funciones basicas del cluster. Estos estan en loop escuchando y cuando tienen que intervenir lo hacen.
Basicamente tenemos 4:
1.Node Controller: controla si un nodo esta vivo o no
El Node Controller en Kubernetes no levanta o reinicia nodos caídos. Su función principal es monitorear la salud de los nodos en el clúster y tomar medidas si detecta que un nodo no está respondiendo, pero no tiene la capacidad de levantar o reiniciar físicamente un nodo_.
- Replication controller:
El Replication Controller garantiza que haya un número determinado de réplicas de un Pod ejecutándose en todo momento. Si el número de réplicas cae por debajo del valor especificado, el Replication Controller creará nuevos Pods; si hay más réplicas de las necesarias, las eliminará.
El Replication Controller constantemente revisa el estado de los Pods. Si uno de los Pods gestionados falla (por ejemplo, debido a un error de nodo o contenedor), se asegurará de que se lance un nuevo Pod en su lugar para cumplir con el número de réplicas especificado.
Puedes modificar el número de réplicas en un Replication Controller, y Kubernetes se encargará de escalar automáticamente los Pods. Si aumentas el número de réplicas, se lanzarán nuevos Pods; si reduces el número, se eliminarán Pods para cumplir con el nuevo número.
Si algo falla (un nodo o un Pod) y el número de réplicas no coincide con el número deseado, el Replication Controller actuará para corregir el estado, ya sea creando o eliminando Pods.
- Endpoints Controller
El Endpoint Controller en Kubernetes es responsable de asociar correctamente los Pods en ejecución con los Endpoints de un Service. Un Endpoint en Kubernetes representa una lista de direcciones IP (normalmente los Pods) que están asociados con un Service, permitiendo que el tráfico sea direccionado a los Pods correctos. El Endpoint Controller asegura que esta lista esté siempre actualizada conforme cambian los estados de los Pods.
- Services account & Token controllers
El ServiceAccount, el Token Controller, y el ServiceAccount Controller son componentes clave relacionados con la seguridad y la autenticación dentro del clúster.
Scheduler
El Scheduler de Kubernetes es un componente clave encargado de decidir en qué nodo debe ejecutarse un Pod. Su función es distribuir eficientemente los Pods entre los nodos del clúster, basándose en una serie de criterios y restricciones
ETCD
Es una base de datos, llamada ETCD basada en key value. para almacenar y gestionar datos de configuración críticos para el funcionamiento del clúster. Actúa como la fuente de verdad o el almacenamiento central donde Kubernetes guarda todo el estado del clúster, lo que incluye detalles sobre los nodos, Pods, ConfigMaps, secretos, roles, políticas de seguridad y otros recursos.
Cloud Controller Manager
Cuando estamos trabajando en modo cloud tenemos este controller. Por ejemplo cuanod usamos AWS,AZURE,etc. ElCloud Controller Manage es el encargado de relacionarse con esos cloud.

NODOS/ESCLAVO o Data plain
Container runtime
En cada nodo ejecutamos contenedores, quien es el encargado de ejecutar esos contenedores? el container runtime.
Se encarga de lanzar y mantener activos estos contenedores.
Tenemos varios posibles container runtime como lo pueden ser:
- Docker
- Containerd
- CRI (container runtime interface)
O cualquier otro container runtime que cumpla con la interface de Kubernetes CRI

PODS
Son el objeto mas pequenio que tenemos en K8s.
Podemos decir que un pod es un container pero un pod puede tener de 1 a varios containers.
Kubelet
Es un agente que se despliega en cada uno de los nodos del cluster y trabaja de manera cooperativa con el master, esuchando peticiones, comprobando como esta el nodo,etc. Es como el corazon de un nodo.
kube-proxy
Permite la conectividad de todos los componentes dentro del nodo con el resto del cluster.
Tipos de instalacion kubernetes
Kuberetes tiene varias formas de tipo de instalacion, esto puede hacer que sea confuso determiar caul es la mas adecuada para una organizacion.
Las mas comunes son:
- Local o de un solo nodo.
- Instalacion manual a traves de alguna herramienta como kubeadm.
- Instalacion automatica mediante alguna herramienta como kubespray.
- Gestionado por un proveedor como AWS O AZURE.
- Sin nunguna herramienta.
Local o de un solo nodo
Adecuado cuando queremos hacer pruebas, practicar, auto-formarnos o trabajar en modo desarollo, no esta pensado para produccion. Podemos usar herramientas como:
1.miniKube: Es una de las mas conocidas. 2.Kind: (Kubernetes in Docker): permite crear un cluster de un solo nodo dentro de Docker. 3.k3s:: Creado por RANCHER es similar a kind, aunque esta enfocado a entornos ligeros como IOTs. 4. MicroK8s: Sirve para entornos de un solo nodo, aunque tambien se pueden montar clusters mas complejos. 5.Kubernetes en Docker Desktop: La herramienta de Docker Desktop nos permite arrancar un kubernetes de un solo nodo.
Instalacion manual
Este tipo de instalacion nos permite implementar un cluster de forma rapida y simple. Normalmente parte de esta instalacion la tenemos que hacer de forma manual, aunque utilicemos alguna herramienta para hacerlo mas facil.Sobre todo es bueno cuando trabajamos en entornos de infraestructura propia interna (On-premises)
kubeadm es una de las herramientas preferidas para hacer este tipo de despliegues. Lo que hace es un init del cluster (control plane), pero luego seremos nosotros quien tiene que unir los nodos de forma manual pero de manera mas sencilla.
Instalacion automatica
Esta pensado para desplegar un cluster de manera totalmente autonoma ya sea en entornos On-premise o cloud. Algunas herramienta para esto son:
- kubespray: Es la herramienta mas conocida para hacer este tipo de instalaciones.
- Kops:Ademas de hacer instalacion local (On-premises) tambien nos permite desplegar entornos en cloud.
- RKE: Herramienta creada por RANCHER. Por lo tanto es ideal si queremos utilizar RANCHER como plataforma. 4.KubeOne… 5.KubeSphere…
Gestionado por un proveedor:
Es la opcion mas simple. Utilizamos un proveedor externo que nos permitira desplegar un cluster utilizando sus herramientas y su entornos de forma sencilla y rapida.
Es la opcion mas razonable cuando no tenemos los servidores o para cualquier proyecto que queramos iniciar desde cero.
Distribuciones de kubernetes
Existen varias alternativas a lo que se refiere a kubernetes.
- Red Hat Openshift.
- Suse Rancher.
- Canonoical kubernetes.
- VMware Tanzu (antes Pivotal).
- Platform9 Managed Kubernetes.
- Gian Swarm.
- Portainer.
- Mirantis
Además disponemos de alternativas en cloud , que en realidad son distribuciones de kubernetes adaptadas por los distintos distribuidores de cloud que encontramos en el mercado .
- Amazon EKS (Elastic Kubernetes Service)
- Azure AKS (Azure kubernetes service )
- Google GKE (Google kubernetes engine )
- IBM IKS (IBM kubernetes service )
- Oracle kubernetes service
- alibaba kubernetes service
Diferencias entre Distribuciones y Servicios de Kubernetes
Las diferencias entre las distintas distribuciones y servicios de Kubernetes se pueden dividir en varios aspectos clave: origen, nivel de gestión, características añadidas, entornos compatibles, y soporte comercial. Aquí te explico las principales diferencias entre algunas de las opciones que mencionas, tanto en servicios gestionados de cloud (EKS, AKS, GKE) como en distribuciones y soluciones autogestionadas (Red Hat OpenShift, Portainer, etc.).
1. Distribuciones de Kubernetes “on-premise” (autogestionadas)
Red Hat OpenShift:
- Base: OpenShift es una plataforma de aplicaciones basada en Kubernetes, creada por Red Hat. Es una solución más empresarial.
- Diferencias clave: Incluye herramientas adicionales para desarrolladores, como su propio entorno de CI/CD (integración continua y entrega continua), gestión de identidades, y un enfoque en la seguridad con SELinux y políticas de seguridad predefinidas.
- Soporte: Ofrece soporte empresarial y suscripciones.
- Ventajas: Gestión simplificada con un fuerte enfoque en seguridad y herramientas para desarrolladores.
SUSE Rancher:
- Base: Rancher es una plataforma que facilita la gestión de múltiples clusters de Kubernetes, especialmente en entornos híbridos o multi-cloud.
- Diferencias clave: Rancher destaca por su capacidad de gestionar clusters de Kubernetes en cualquier infraestructura (local, cloud pública, híbrida).
- Soporte: Ofrecen soporte empresarial, pero también puedes usarlo sin costo si lo autogestionas.
- Ventajas: Gestión unificada de múltiples clusters, independencia del entorno (multi-cloud y on-premise).
Canonical Kubernetes:
- Base: Esta es la distribución de Kubernetes gestionada por Canonical (empresa detrás de Ubuntu).
- Diferencias clave: Está muy integrada con Ubuntu y con Juju (herramienta de orquestación de aplicaciones). También ofrece soporte a largo plazo y servicios de mantenimiento.
- Ventajas: Compatible con entornos de Ubuntu y opciones de soporte a largo plazo.
Portainer:
- Base: Portainer es una herramienta de administración de contenedores que proporciona una interfaz gráfica de usuario para Docker y Kubernetes.
- Diferencias clave: Aunque no es una distribución completa de Kubernetes, simplifica la gestión de clústeres y contenedores para usuarios menos técnicos.
- Ventajas: Sencillez en la interfaz y administración fácil de clusters pequeños.
2. Servicios de Kubernetes en la nube (gestionados)
Amazon EKS (Elastic Kubernetes Service):
- Base: Servicio gestionado de Kubernetes en AWS.
- Diferencias clave: Totalmente integrado con los servicios de AWS como IAM, CloudWatch, y servicios de red como VPC. EKS elimina la necesidad de gestionar el control plane (plano de control), pero permite configurar el worker plane (plan de trabajo) en diferentes zonas de disponibilidad para alta disponibilidad.
- Ventajas: Integración nativa con el ecosistema AWS, fácil escalabilidad, y servicios complementarios.
Azure AKS (Azure Kubernetes Service):
- Base: Servicio gestionado de Kubernetes en Microsoft Azure.
- Diferencias clave: AKS también gestiona el control plane y permite la integración directa con otros servicios de Azure, como Active Directory (AD) y monitorización con Azure Monitor. Se destaca por su enfoque en seguridad y compatibilidad con Azure DevOps.
- Ventajas: Integración con Azure AD y DevOps, enfoque en herramientas empresariales de Microsoft.
Google GKE (Google Kubernetes Engine):
- Base: Servicio gestionado de Kubernetes en Google Cloud.
- Diferencias clave: Google fue uno de los creadores originales de Kubernetes, por lo que GKE tiene la mayor madurez en el mercado. Se destaca por su facilidad de uso y su integración nativa con servicios como BigQuery, y la capacidad de autoscaling (escalado automático).
- Ventajas: Autoscaling eficiente, acceso a la última tecnología de Kubernetes, y facilidad para integrarse con Google Cloud.
3. Comparaciones generales
Autogestionado vs. gestionado:
- Red Hat OpenShift, Rancher, y Canonical Kubernetes requieren que los administradores gestionen los nodos y clusters, lo que otorga más flexibilidad pero también requiere más mantenimiento y conocimientos técnicos.
- EKS, AKS, GKE son servicios gestionados en la nube, donde el proveedor (Amazon, Microsoft, Google) maneja el control plane, permitiendo que los usuarios se enfoquen solo en desplegar aplicaciones y administrar nodos.
Características adicionales:
- Red Hat OpenShift agrega muchas características empresariales como políticas de seguridad mejoradas y un entorno de CI/CD preconfigurado, lo que puede ser útil para grandes organizaciones con equipos distribuidos.
- Portainer, por otro lado, es una opción más ligera para administración simplificada, aunque con menos características avanzadas.
4. Costos:
- Servicios gestionados en la nube suelen tener un costo de uso basado en el consumo (nodos, almacenamiento, etc.).
- Soluciones autogestionadas como OpenShift o Rancher pueden tener un costo fijo en licencias (o ser gratuitas en algunos casos, pero con más responsabilidad de gestión).
Conclusión:
- EKS, AKS, y GKE son servicios gestionados en la nube, ideales para usuarios que no quieren gestionar la infraestructura subyacente de Kubernetes, prefiriendo pagar por escalabilidad, integración con otros servicios de nube, y facilidad de uso.
- Red Hat OpenShift, Rancher y Canonical Kubernetes están más orientados a quienes desean una solución autogestionada y personalizada, generalmente en entornos on-premise o híbridos, con más control sobre la configuración y las políticas empresariales.