K8s técnicamente explicados…

Marvin G. Soto
5 min readDec 23, 2018

--

Kubernetes (en inglés referido como “K8s”), son un sistema de código libre para la automatización del despliegue, ajuste de escala y manejo de aplicaciones en contenedores,​ que fue originalmente diseñado por Google y donado a la Cloud Native Computing Foundation. Soporta diferentes ambientes para la ejecución contenedores, incluido Docker.

Kubernetes coordina un grupo de computadoras en alta disponibilidad que están conectadas para funcionar como una sola unidad. Las abstracciones en Kubernetes le permiten implementar aplicaciones en contenedores en un clúster sin vincularlas específicamente a máquinas individuales.

Para hacer uso de este nuevo modelo de implementación, las aplicaciones deben empaquetarse de una manera que las separe de los hosts individuales, es decir; deben estar en contenedores.

Las aplicaciones en contenedor son más flexibles y están disponibles que en modelos de implementación anteriores, donde las aplicaciones se instalaron directamente en máquinas específicas como paquetes profundamente integrados en el host.

Los Kubernetes automatizan la distribución y programación de contenedores de aplicaciones en un clúster de una manera más eficiente. Un cluster Kubernetes consiste en dos tipos de recursos: El maestro y los nodos.

El maestro es responsable de gestionar el clúster y el que coordina todas las actividades en su clúster, como programar aplicaciones, mantener el estado deseado de las aplicaciones, escalar aplicaciones y desplegar nuevas actualizaciones.

El nodo es una máquina virtual o una computadora física que funciona como una máquina de trabajo en un clúster. Cada nodo tiene un Kubelet, que es un agente para administrar el nodo y comunicarse con el maestro. El nodo también debe tener herramientas para manejar las operaciones de contenedores, como Docker o rkt.

Detalle importante: Un clúster que maneje el tráfico de producción debe tener un mínimo de tres nodos. Los maestros administran el clúster y los nodos se utilizan para hospedar las aplicaciones en ejecución.

Cuando implementa aplicaciones en Kubernetes, el maestro inicia los contenedores de aplicaciones. El maestro programa los contenedores para que se ejecuten en los nodos del clúster. Los nodos se comunican con el maestro utilizando la API de Kubernetes, que el maestro expone. Los usuarios finales también pueden usar la API de Kubernetes directamente para interactuar con el clúster. Un clúster Kubernetes se puede implementar en máquinas físicas o virtuales.

Para comenzar con el desarrollo de Kubernetes, puedes usar Minikube. Se trata de una implementación ligera de Kubernetes que crea una máquina virtual en su máquina local y despliega un clúster simple que contiene solo un nodo.

Kubernetes define un conjunto de bloques de construcción que conjuntamente proveen los mecanismos para el despliegue, mantenimiento y escalado de aplicaciones. Los componentes que forman Kubernetes están diseñados para estar débilmente acoplados, pero a la vez ser extensibles para que puedan soportar una gran variedad de flujos de trabajo.

La extensibilidad es provista en gran parte por la API de Kubernetes, que es utilizada por componentes internos así como extensiones y contenedores ejecutados sobre Kubernetes.

La unidad básica de planificación en Kubernetes se denomina capullo (pod). El capullo o pod agrega un nivel de abstracción más elevado a los componentes en contenedores. Un pod consta de uno o más contenedores en los que se garantiza su ubicación en el mismo equipo anfitrión y pueden compartir recursos.

Cada pod en Kubernetes es asignado a una única dirección IP (dentro del clúster) que permite a las aplicaciones utilizar puertos sin riesgos de conflictos. Además, un pod puede definir un volumen, algo así como un directorio de disco local o un disco de red. Una vez definido, el pod puede exponer el recurso a los contenedores dentro del pod. Los pods pueden ser administrados manualmente a través de la API de Kubernetes, o su administración puede ser delegada a un controlador.

Kubernetes permite a los clientes (usuarios o componentes internos) vincular pares clave-valor llamados etiquetas (label) a cualquier objeto API en el sistema, como pods o nodos. Correspondientemente, selectores de etiquetas; son consultas contra las etiquetas que resuelven a los objetos que las satisfacen. Las etiquetas y los selectores son el mecanismo principal de agrupamiento en Kubernetes, y son utilizados para determinar los componentes sobre los cuales aplica una operación​.

Ahora bien, dentro de los Kubernetes, un controlador es un bucle de reconciliación que lleva al estado real del clúster hacia el estado deseado. Hace esto mediante la administración de un conjunto de pods. Un tipo de controlador es un “Replication Controller”, que se encarga de la replicación y escala mediante la ejecución de un número especificado de copias de un pod a través de un clúster. También se encarga de crear pods de reemplazo si un nodo subyacente falla.

Otros controladores que forman parte del sistema central de Kubernetes incluye al “DaemonSet Controller” para la ejecución de exactamente un pod en cada máquina (o algún subconjunto de máquinas), y un “Job Controller” para ejecutar pods que ejecutan hasta su finalización, por ejemplo como parte de un trabajo batch. El conjunto de pods que un controlador administra está determinado por los selectores de etiquetas que forman parte de la definición del controlador.

Un servicio Kubernetes es un conjunto de pods que trabajan en conjunto, como una capa de una aplicación multicapas. El conjunto de pods que constituyen un servicio está definido por el selector de etiquetas​.

Kubernetes provee de un servicio de descubrimiento y enrutamiento de pedidos mediante la asignación de una dirección IP estable y un nombre DNS al servicio, y balancea la carga de tráfico en un estilo round-robin hacia las conexiones de red de las direcciones IP entre los pods que verifican el selector.

Por defecto un servicio es expuesto dentro de un cluster, pero un servicio también puede ser expuesto hacia afuera del clúster.

Puede encontrar componentes y recursos para Kubernetes en https://github.com/kubernetes/kubernetes

--

--

Marvin G. Soto
Marvin G. Soto

Written by Marvin G. Soto

Pensador, innovador, luchador, enamorado de su profesión, apasionado por las letras… de dificil renunciar y lejano a rendirse…

Responses (1)