---
title: "Introducción a Kubernetes"
canonical: "https://onesaitplatform-es.refined.site/space/DOC/3515809851/Introducci%C3%B3n%20a%20Kubernetes"
format: markdown
---
> Macro (toc)

# Introducción

<span style="color: #1a3b47">Kubernetes es una plataforma de código abierto para administrar cargas de trabajo y servicios. Facilita la automatización, la configuración y el despliegue de nuestros programas y aplicaciones.</span>

<span style="color: #1a3b47">Nos ofrece un entorno de administración centrado en contenedores, con el cual orquestar la infraestructura de cómputo, redes y almacenamiento para las cargas de trabajo.</span>

## <span style="color: #1a3b47">Ventajas</span>

<span style="color: #1a3b47">Los principales beneficios que ofrece Kubernetes son los siguientes:</span>

- <span style="color: #1a3b47">Escalabilidad y balanceo de carga</span>
- <span style="color: #1a3b47">Aislamiento de procesos y aplicaciones</span>
- <span style="color: #1a3b47">Facilidades para el despliegue</span>
- <span style="color: #1a3b47">Optimización de recursos de forma automática</span>
- <span style="color: #1a3b47">Alta disponibilidad</span>
- <span style="color: #1a3b47">Posibilidad de despliegue tanto en nubes privadas, públicas o híbridas.</span>

# Arquitectura

La arquitectura que sigue Kubernetes es la que se puede ver en el siguiente esquema:

 

![image](media://7ca3957e-3dfb-4e47-8972-5acf4a0623bb)

<span style="color: #1a3b47">A continuación, se describe los distintos componentes necesarios para entender y operar con Kubernetes:</span>

- <span style="color: #1a3b47">**Kube-apiserver**</span><span style="color: #1a3b47">: el servidor API de Kubernetes, valida y configura datos que incluyen pods, servicios, etc.</span>
- <span style="color: #1a3b47">**Kubelet**</span><span style="color: #1a3b47">: es el "nodo agente" principal que corre en cada nodo. Permite registrar el nodo con el apiserver.</span>
- <span style="color: #1a3b47">**Kube**</span><span style="color: #1a3b47">-proxy: es el proxy de red que corre en cada nodo.</span>
- <span style="color: #1a3b47">**Container Runtime**</span><span style="color: #1a3b47">: es un software que ejecuta contenedores y gestiona sus imágenes dentro de un nodo.</span>

<span style="color: #1a3b47">Además, Kubernetes ofrece una interfaz de línea de comandos para ejecutar las instrucciones para nuestros despliegues que es Kubectl. Para obtener más información sobre ello se puede consultar la </span>[documentación oficial](https://kubernetes.io/docs/reference/kubectl/overview/)<span style="color: #1a3b47">.</span> 

# Elementos

## Pods

<span style="color: #1a3b47">Los pods son el conjunto de uno o más contenedores desplegados bajo un mismo host. Son la unidad más pequeña que puede ser definida en Kubernetes.</span>

<span style="color: #1a3b47">Todos los contenedores desplegados dentro de un mismo pod compartirán los recursos de almacenamiento y de red entre ellos.</span>

![image](media://030b67d8-81a4-44d1-9fd0-f53435e1cd56)

<span style="color: #1a3b47">Todos los pods definidos con Kubernetes tienen un ciclo de vida definido, el cual se muestra en el siguiente diagrama:</span>

![image](media://be2c3a84-3cfd-49d8-bf35-f99a811fb93d)

## Deployments

<span style="color: #1a3b47">Los deployments añaden soporte extendido al desarrollo de software y al ciclo de vida de los despliegues. Gracias a ellos podremos definir la configuración de nuestros pods y replica sets, y que imágenes Docker van a hacer uso.</span>

![image](media://86c4bf29-0de2-41ac-bd02-f9cd1d75760a)

## Otros elementos

<span style="color: #1a3b47">Adicionalmente a pods y deployments, Kubernetes permite definir y configurar los siguientes elementos:</span>

- <span style="color: #1a3b47">**Replica Set: **</span><span style="color: #1a3b47">Mantiene un conjunto estable de réplicas de pods ejecutándose en todo momento. Usado para garantizar la disponibilidad de un contenedor.</span>
- <span style="color: #1a3b47">**Services**</span><span style="color: #1a3b47">: Funciona como un balanceador de carga interno, identifica un grupo de pods replicados, de modo que hace de proxy entre las conexiones que recibe y ellos. Toda la funcionalidad es interna, no ofrece conexión entre las peticiones externas y los diferentes contenedores.</span>
- <span style="color: #1a3b47">**ConfigMap**</span><span style="color: #1a3b47">: Son ficheros de configuración en los cuales se definen las variables de entorno de forma par clave-valor para que puedan ser usados en los ficheros de configuración de los deployments.</span>
- <span style="color: #1a3b47">**Secret**</span><span style="color: #1a3b47">: Son ficheros de configuración en los cuales se definen como par clave-valor datos que contengan información sensible. Pueden ir en cadena plana o codificados en Base64.</span>
- <span style="color: #1a3b47">PVC: Los Persistent Volume Claim son peticiones para recursos con unos atributos específicos, como podrían ser los espacios de almacenamiento.</span>
- <span style="color: #1a3b47">**Ingress**</span><span style="color: #1a3b47">: Permiten configurar conexiones entrantes con los servicios internos. Permite tanto conexiones http como https funcionando como un proxy interno.</span>

## Helm

<span style="color: #1a3b47">Helm es una herramienta para despliegues en Kubernetes que permite definir, instalar y actualizar cualquier aplicación.</span>

<span style="color: #1a3b47">La principal funcionalidad es el aplantillamiento de los ficheros de configuración de Kubernetes. A parte de proporcionarnos mayor facilidad de gestión y edición, nos ofrece un control de versiones de nuestros ficheros.</span>

![image](media://d0af125d-c77b-45f2-9389-11ef0589031d)