Saltar al contenido

KUBERNETES

Buenas,

Hace relativamente poco tiempo subí un post sobre Docker, una forma ideal de desplegar aplicaciones en contenedores, si no lo has visto te recomiendo que le eches un vistazo:

En esta entrada me gustaría hablar sobre Kubernetes para mi de los mejores orquestadores de contenedores actualmente que fue desarrollado por Google y esta escrito en Go.

Hay muchos orquestadores en el mercado, algunos de ellos son docker swarm, mesos, etc, pero kubernetes es mucho mas que un orquestador de contenedores docker, rkt, etc, porque no solo maneja si no que también escala automáticamente contenedores dependiendo de la carga que reciba nuestro clúster.

Este post va a ser simplemente teórico, donde intentare explicar de una manera clara y concisa la arquitectura de kubernetes.

Si nunca has odio hablar de kubernetes la siguiente imagen puede ser un poco compleja, pero no te preocupes, te lo voy a explicar a continuación.

Arquitectura de Kubernetes

Como puedes observar kubernetes se divide en nodos Máster y nodos Minions, también llamados Workers, como puedes ver en la imagen cada uno de ellos están compuestos por unos componentes diferentes, vamos a hablar sobre ellos.

Kubectl: No es más que la línea de comandos de kubernetes, digamos que es su ssh

Masters

Serán los encargados de mantener la configuración del clúster, y con el que el cliente kubectl se comunicará.

Etcd: Es la base de datos de tipo clave-valor que se utiliza para mantener la configuración del cluster.

Kube-apiserver: Es una API usada por los nodos workers y los clientes del clúster para comunicarse, es el único componente que escribe en el etcd.

Kube-scheduler: Es el componente que decide en que nodo se ejecuta un contenedor.

Kube-controller-manager: Es el encargado de ejecutar los controladores, un controlador es el encargado de asegurar que el clúster esta como se desea (p.ej. que en todo momento haya 5 pods de un contenedor determinado)

Un punto importante es que en un entorno productivo debe tener mínimo 3 nodos máster ¿Por qué?

Esto es por el componente etcd, recordar que este se usa para guardar el estado del clúster. Si tienes tres nodos de etcd y pierdes uno, el sistema puede seguir funcionando, ya que los otros dos puedes seguir verificándose, pero ya no puedes perder ningún otro, es por eso que los nodos etcd se escalan siempre de dos en dos.

Workers o Minions

Son los nodos de trabajo, es donde van a correr nuestras aplicaciones y van a recibir toda la carga del clúster.

Motor de contenedores: Es el motor que se utilizara para correr nuestros contenedores, puede ser docker, rkt…

Kube-proxy: Es el que gestiona la red virtual asignadas a los contenedores

Kubelet: Es el más importante, encargado de asegurar que todos los contenedores que deben ejecutarse en el nodo se están ejecutando, es el que atiende las peticiones del máster.

Pods: Es el proceso donde corren los contenedores, en un pod puede correr uno o varios contenedores.

Anteriormente se describen todos los componentes que forman la arquitectura de kubernetes, ahora y sin alargar mucho mas la entrada vamos a hablar un poco de los tipos de instalaciones que se permiten así como los objetos de kubernetes.

Tipos de instalaciones

Kubernetes se puede instalar de varias maneras, algunas de ellas son:

Mediante un proveedor de nube, como Google Cloud Platform, Amazon, Digital Ocean…

Minikube: Es una maquina virtual que podemos instalar con un clúster de kubernetes premontado, ideal para hacer pruebas en un solo nodo.

Kubeadm: Permite montar un clúster local de kubernetes.

Objetos en kubernetes

Por ultimo vamos a nombrar un poco por encima cada uno de los objetos de kubernetes.

POD: Es la unidad mas pequeña de kubernetes, es donde se ejecutan los contenedores de una aplicación, normalmente uno, pero pueden ser mas.

SERVICIOS: Es la forma de exponer una aplicación que se ejecuta en un pod, hay distintos tipos de servicios, pero no vamos a entrar en el detalle de cada uno por no alargar la entrada mucho mas, estos son ClusterIP, NodePort, LoadBalancer, ExternalName, si deseas saber un poco mas de estos te recomiendo que investigues sobre ello.

VOLÚMENES: Al igual que Docker, es la forma de persistir datos de un contenedor, pero con kubernetes es mucho mas administrado.

NAMESPACES: Es la forma de crear clúster virtuales en un mismo clúster físico, son espacios de trabajos, de modo que un clúster físico puede por ejemplo contener tres entornos virtuales como DESA, PRE y PRO.

Ademas de estos objetos kubernetes contiene controladores de nivel superior:

ReplicaSet: Se utiliza para indicar las replicas de los pods que se van a ejecutar en el clúster, se asegura que siempre se tenga el numero de pods que se le indique.

Deployment: Es la forma de llevar un control de actualizaciones de pods y replicaSet.

StatefulSets: Manejan el despliegue y el escalado de pods, se pueden definir limitaciones, etc…

DaemonSet: Asegura que todos los nodos ejecuten una copia de un pod.

Jobs: Crea uno o mas pods y garantiza que un numero especifico de ellos terminen con éxito.

Finalmente para terminar el post me gustaría decir que hay tres formas de administrar kubernetes:

  • kubectl: Linea de comandos (kubectl run …)
  • Api Rest: Mandando peticiones web, ideal para jenkins….
  • Dashboard: Interfaz Web para administrar y ver el estado del cluster

Espero que os haya sido de utilidad este post, he intentado explicar la arquitectura de kubernetes de una forma que se pueda entender fácilmente, pero aun así, kubernetes daría para muchos mas post ya que solo se han comentado por encima cada uno de sus componentes, te invito a que sigas investigando sobre este fantástico mundo.

Si te ha gustado te agradecería que me ayudes a compartir este post con mas gente.

Muchas gracias y un saludo

Raúl Cazallas

1 comentario en «KUBERNETES»

  1. Pingback: Openshift vs Kubernetes ⋆ AprenDevOps

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *