Bienvenidos a nuestro Tutorial de Primeros Pasos en Kubernetes, donde exploraremos de manera clara, concisa y práctica los fundamentos de esta poderosa plataforma. En este artículo, nos guiaremos paso a paso para que comprendas, configures y despliegues tu primera aplicación en un clúster de Kubernetes.
Durante esta introducción, identificaremos los conceptos clave, la terminología esencial y la importancia de automatizar la orquestación de contenedores. Nuestro objetivo es brindarte un marco sólido que te permita avanzar con confianza hacia los siguientes apartados del tutorial y dominar los componentes básicos de Kubernetes.
En esta sección se aborda la definición y el propósito de Kubernetes, así como sus ventajas clave como plataforma de orquestación de contenedores de código abierto desarrollado por Google, que proporciona un entorno robusto y flexible para el despliegue, administración y escalado de aplicaciones en contenedores.
Kubernetes es un sistema de orquestación de contenedores de código abierto diseñado para automatizar el despliegue, escalado y gestión de aplicaciones en clústeres. Su objetivo principal es abstraer la infraestructura subyacente, permitiendo que las organizaciones se centren en el desarrollo de servicios en lugar de en los detalles de la configuración del entorno. Gracias a su arquitectura modular, Kubernetes facilita la portabilidad y la resiliencia de las aplicaciones.
En este apartado exploraremos los elementos fundamentales que conforman la arquitectura de Kubernetes, clave para entender cómo orquesta, gestiona y escala tus aplicaciones.
Nodo: Es una máquina física o cirtual que forma parte de un clúster, que puede ser un servidor, una máquina virtual o incluso una instancia en la nube.
Nodo maestro y nodos de trabajo: El nodo maestro es el cerebro del clúster, encargado de la planificación, control y gestión del estado deseado. Los nodos de trabajo (o workers) son las máquinas que ejecutan los contenedores. Gracias a esta separación de roles, la resiliencia, la disponibilidad y el rendimiento del sistema están garantizados.
Servicios: Proporcionan una forma estable de acceder a uno o varios Pods, abstraen la estructura interna y garantizan el equilibrio de carga. Permiten la exposición y la comunicación entre os componenetes de la aplicación. Gracias a los Servicios, los clientes no necesitan conocer la ubicación exacta de cada Pod, lo que mejora la flexibilidad y la portabilidad de la aplicación.
Clústeres: Compuesto por varios nodos trabajando juntos, es responsable de la gestión y distribución de las aplicaciones en contenedores. En un clúster típico hay un nodo maestro y varios nodos de trabajo.
En esta sección prepararemos, configuraremos y verificaremos las herramientas esenciales para empezar a trabajar con Kubernetes en un entorno local.
Para gestionar tu clúster de Kubernetes, necesitas la CLI oficial: kubectl. Primero, descarga el binario correspondiente a tu sistema operativo y otórgale permisos de ejecución. Por ejemplo, en Linux usarías:
Con esto tendrás kubectl isntalado y listo para interactuar con tu clúster.
Para simular un clúster en tu máquina local, Minikube es la opción más popular. Descarga el ejecutable desde el sitio oficial y ubícalo en tu PATH:
Una vez instalado, podrás iniciar un clúster ejecutando minikube start
, lo cual creará un entorno aislado para tus contenedores.
Para asegurarte de que todo está correctamente instalado, ejecuta:
Estos comandos te mostrarán las versiones de kubectl y Minikube, así como la información de tu clúster activo. Si ves detalles de tu API server y el dashboard, ¡todo está listo para continuar!
Para comenzar a desplegar y probar aplicaciones de forma local, vamos a crear un clúster que nos proporcione un entorno aislado y controlado.
INICIAR UN CLÚSTER CON MINIKUBE
Ejecuta el comando para levantar el clúster:
Con esto, Minikube provisiona un nodo único con los recursos especificados configura el control plane.
Deberías ver que el clúster, el nodo y el kubelet están en estado Running, lo que confirma que tu entorno está listo.
CONFIGURAR EL CONTEXTO DE KUBECTL
Así te aseguras de que kubectl interactúe con el clúster recién creado.
Verás tu nodo en estado Ready, lo que indica que el clúster está disponible para desplegar cargas de trabajo.
En esta sección vamos a crear un Deployment y a exponer la aplicación mediante un Servicio, para que tu software esté disponible desde fuera del clúster.
CREACIÓN Y ADMINISTRACIÓN DE PODS
Cada pod puede contener uno o varios contenedores que trabajan juntos. Para crear un pod, necesitamos definir un archivo de configuración YAML que describa las características del pod, como la imagen del contenedor, los puertos que expone y cualquier otra configuración adicional.
Aquí tienes un ejemplo de un archivo YAML para crear un pod:
Una vez que tengas el archivo YAML del pod listo, puedes usar la herramienta kubectl para crear y administrar el pod. Para crear un pod a partir del archivo YAML, ejecuta el siguiente comando:
Para administrar los pods existentes, puedes utilizar comandos como kubectl get pods para obtener información sobre los pods en ejecución, kubectl describe pod nombre_pod para obtener detalles específicos de un pod y kubectl delete pod nombre_pod para eliminar un pod.
ESCALADO HORIZONTAL Y VERTICAL
Una de las ventajas de Kubernetes es su capacidad para escalar nuestras aplicaciones de forma flexible. Existen dos formas de escalar: horizontal y vertical.
El escalado horizontal implica aumentar o disminuir el número de réplicas de un pod en función de la carga de trabajo. Por ejemplo, si nuestra aplicación está experimentando un aumento en la demanda, podemos aumentar el número de réplicas para manejar la carga adicional. Esto se logra utilizando objetos como Deployments y ReplicaSets.
Para escalar horizontalmente un despliegue, puedes usar el siguiente comando:
Donde nombre_despliegue es el nombre de tu despliegue y n es el número deseado de réplicas.
El escalado vertical implica ajustar los recursos asignados a un pod individual. Por ejemplo, si una aplicación requiere más recursos de CPU o memoria para funcionar correctamente, podemos aumentar la asignación de recursos para ese pod específico. Puedes modificar la asignación de recursos editando el archivo YAML del pod y aplicando los cambios con kubectl apply -f nombre_archivo.yaml.
CREAR UN DEPLOYMENT
Para definir el estado deseado de tu aplicación, crea un archivo YAML llamado deployment.yaml
con el siguiente contenido:
A continuación, aplica el Deployment con:
Verifica que las réplicas estén en Running con:
EXPONER LA APLICACIÓN CON UN SERVICIO
Para acceder desde fuera del clúster, define un service.yaml
así:
Aplica el Servicio:
Comprueba el puerto asignado y accede a la aplicación:
Con estos pasos, tu aplicación estará desplegada y accesible mediante un NodePort externo.
ESTRATEGIAS DE ACTUALIZACIÓN Y DESPLIEGUE
Cuando necesitamos actualizar nuestras aplicaciones, es importante hacerlo de manera controlada y sin interrupciones para los usuarios. Kubernetes ofrece diferentes estrategias de actualización y despliegue gradual para lograr esto.
Una estrategia popular es la actualización rodante (Rolling Update), donde actualiza gradualmente las réplicas de nuestra aplicación sin afectar la disponibilidad. Esto se logra mediante la cre
ación de nuevas réplicas con la versión actualizada y la eliminación gradual de las réplicas antiguas.
Para realizar una actualización rodante de un despliegue, puedes usar el siguiente comando:
Donde nombre_despliegue es el nombre de tu despliegue, nombre_contenedor es el nombre del contenedor dentro del pod y nueva_imagen
es la nueva imagen que deseas usar.
MONITOREO Y REGISTRO DE APLICACIONES
Es esencial tener visibilidad sobre el estado y el rendimiento de nuestras aplicaciones. Para monitorear nuestras aplicaciones, Kubernetes proporciona herramientas y funcionalidades integradas.
Puedes utilizar los comandos kubectl get pods y kubectl describe pod nombre_pod para obtener información sobre el estado de los pods y los eventos ocurridos. Además, ofrece la integración con herramientas de monitoreo populares como Prometheus y Grafana.
También puedes configurar un sistema de registro centralizado para tus aplicaciones en Kubernetes. Por ejemplo, puedes utilizar la pila ELK (Elasticsearch, Logstash y Kibana) para recopilar y visualizar los registros generados por tus aplicaciones. Puedes consultar nuestro tutorial de ELK para aprender los fundamentos de esta herramienta.
En esta sección abordaremos la gestión de la configuración y el manejo de secretos en Kubernetes, utilizando ConfigMaps y Secrets para separar los datos sensibles de la lógica de la aplicación.
CONFIGMAPS
Los ConfigMaps permiten almacenar datos de configuración en formato clave-valor, facilitando la separación de la configuración del código. Gracias a los ConfigMaps, es posible actualizar parámetros sin necesidad de reconstruir las imágenes de los contenedores.
Ejemplo de creación de un ConfigMap:
Para usarlo en un Pod, añade en el YAML:
SECRETS
Los Secrets permiten gestionar información sensible (contraseñas, tokens, certificados) de forma segura, ya que los datos se almacenan codificados y pueden integrarse como volúmenes o variables de entorno.
Ejemplo de creación de un Secret:
Para montar el Secret en un Pod, incluye:
Con ConfigMaps y Secrets, se consigue una configuración más flexible, segura y mantenible en Kubernetes.
ESCALAR RÉPLICAS
Para ajustar la capacidad de tu aplicación, es fundamental escalar réplicas de forma manual o automática. Con el comando kubectl scale
, puedes aumentar o reducir el número de Pods:
Para escalado automático, utiliza un Horizontal Pod Autoscaler:
Esto garantiza un escalado dinámico basado en el uso de CPU, liberándote de la gestión manual.
ACTUALIZACIONES CONTINUAS (ROLLING UPDATES)
Las Rolling Updates permiten desplegar nuevas versiones sin interrumpir el servicio. Kubernetes reemplaza gradualmente los Pods antiguos por los nuevos, manteniendo la disponibilidad:
Los Rolling Updates son clave para un CI/CD eficiente, garantizando calidady rapidez en cada release.
En esta sección aprenderás a obtener información esencial sobre el estado de tus aplicaciones, identificar errores y mejorar la estabilidad de tu entorno de Kubernetes.
Para diagnosticar problemas en los Pods, los logs son una fuente crucial de información. Con el comando:
Podrás visualizar las salidas de tu contenedor y detectar errores o excepciones. Además, los eventos del clúster revelan cambios de estado:
Esto muestra en orden cronológico las notificaciones de programación, reinicios y fallos, facilitando la investigación de incidencias.
El comando describe ofrece un informe detallado de cualquier objeto de Kubernetes, incluyendo Pods, Services y Deployments:
En la salida encontrarás información sobre volúmenes montados, variables de entorno, estado de las réplicas y eventos relacionados con ese recurso. Este nivel de detalle es indispensable para validar la configuración y comprender el comportamiento de tus componentes en tiempo real.
El correcto uso de etiquetas, namespaces y convenciones de nombrado es esencial para mantener la organización, la seguridad y la escalabilidad adecuada de los recursos en Kubernetes.
Uso de etiquetas y namespaces: Las etiquetas permiten identificar, agrupar y filtrar recursos de forma flexible. Por ejemplo, al añadir app: mi-app
o env: producción
, se facilita la gestión y el monitoreo de los objetos. Por otro lado, los namespaces actúan como espacios lógicos aislados, separando entornos de desarrollo, pruebas y producción, lo que mejora la seguridad y la claridad en el clúster.
Convenciones de nombrado: Adoptar nombres claros, consistentes y predecibles es crucial para evitar confusiones y colisiones. Utiliza prefijos que indiquen el propósito (db-
, web-
, cache-
) y añade versiones en el nombre (mi-app-v1
). Asimismo, emplea minúsculas y guiones para cumplir con las restricciones de Kubernetes y garantizar una identificación única de cada recurso.
Ahora que has recorrido los fundamentos, configurado tu entorno y desplegado tu primera aplicación, estás listo para llevar tus habilidades al siguiente nivel. Con nuestro curso de Kubernetes, profundizarás en temas avanzados como ingress controllers, redes de servicio mesh y automatización de pipelines CI/CD.
Inscríbete hoy y accede a clases prácticas, laboratorios en vivo y soporte personalizado. ¡Da el salto definitivo y domina la orquestación de contenedores con nuestro curso de Kubernetes!