K8S 101 - Conceptos iniciales

K8S 101 - Conceptos iniciales

Comenzamos con el rey de los proyectos CNCF, kubernetes (k8s)

Kubernetes o K8S?

Vamos a iniciar con un acertijo: Porqué se le llama también K8S?

A ver cuantos lo sabían y cuantos otros lo aprenden conmigo, el nombre K8S viene de intentar hacer mas corto el nombre kubernetes, y si, hay 8 letras entre la K y la S. Podría haber sido algo místico y super complejo pero no, es por la cantidad de letras entre la primera y la última.

Entonces, que es kubernetes?.

Lo primero es que por supuesto es un proyecto de la CNCF, aunque lo hicieron unos pibes de una empresa que se llama algo como Google o similar, creo que les va a ir bien :). El código del proyecto se liberó en el 2014.

Para definirlo por supuesto vamos a irnos a la documentación oficial, tenemos por un lado información en la página de la CNCF (kubernetes), y por otro lado la documentación en kubernetes.io

image.png

image.png

Con estas definiciones y sumando a la clásica "es un orquestador de contenedores", podemos decir que Kubernetes se encarga de todo lo que tiene que ver con el manejo de aplicaciones en contenedores. El tipo va a escalarlas, balancearlas, desplegarlas, hacer rollback, manejar secretos, storage, networking, etc...

Quiero quedarme con el concepto de "extensible" porque es fundamental para comprender kubernetes y lo que realmente puede rompernos la cabeza. Kubernetes expone una API para que podamos comunicarnos y hacer cositas relacionadas con el manejo de estos contenedores, pero... pero... pero... nosotros podemos extender esta API para que kubernetes pueda hacer mas cosas que las que hace de "fabrica", de echo es lo que hacen muchos de los proyectos de la CNCF, extender las capacidades de K8s.

Hay una charla de nerdearla muy interesante de "Peladonerd" sobre esta posibilidad de extender la API. Click aqui

Lo que tenemos claro con esto es que K8s se basa en contenedores. Si hace falta algún artículo 101 de contenedores y docker solo hay que pedirlo y con gusto lo hacemos!

El corazón de K8s

Vamos a explicar las tripas de K8s, a nuestro modo y con nuestras palabras, que esto es un 101 no somos expertos!

Debajo podemos ver el diagrama de un "cluster" de K8s, a no les habia contado que la idea de todo esto es armar un cluster con muchos nodos para evitar que todo se vaya al diablo si alguien patea el cable de nuestro único server?, bueno si...

image.png

Entonces aquí vamos a tener componentes que mandan y otros que solamente ejecutan, como en todos lados jejeje

Control plane

Kube-apiserver: Simple, es la api de kubernetes con la que interactuamos para ordenarle que haga cosas en el cluster.

etcd: Es un storage key-value donde k8s guarda el estado de todo el cluster. Es importante, si estas manejando el cluster en on premise hay que ver que estrategia de backup tenemos. En caso que algun cloud provider lo maneje ese peso lo tienen ellos y que mejor!

kube-scheduler: Es el numero 5 de nuestro equipo de fútbol, mira si hay cosas por ejecutar que no tienen un nodo asignado y busca donde podemos ejecutarlo.

kube-controller-manager: Ya notamos que hay muchos componentes por lo que alguien debe controlarlos. Aquí necesitamos controlar los nodos, para ver su salud y que hacer si alguno se cae, controlar los jobs, a ver si se ejecutan las tareas, los endpoints y los service accounts y tokens.

cloud-controller-manager: Simplemente es un componente que nos brinda la logica de control para poder usar proveedores cloud (AWS, Azure, Google, etc). Si estas usando K8S en el on premise no vas a tener este tipo de controlador.

Nodos

Kublet: Es un agente que vive en cada nodo y se asegura que las especificaciones que se le enviaron sobre el despliegue de cierto contenedor se cumpla.

kube-proxy: Para el manejo de las reglas de networking en los nodos.

container-runtime: Si sabemos que vamos a ejecutar contenedores en K8S cada nodo necesita tener un runtime para poder correrlos. Por estos días el mas comun es containerd

Documentación oficial

kubernetes.io/docs/concepts/overview/compon..