imagina pictogramaImagina Formación

Tutorial de Primeros Pasos en Kubernetes

Escrito por Equipo de Imagina• Actualizado el 09/05/2025• Duración: 15 min
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.
persona trabajando con kubernetes en la oficina

¿Qué es 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.

Ventajas principales de Kubernetes

  • Escalabilidad automática: Ajusta dinámicamente el número de réplicas según la carga, garantizando rendimiento constante, de manera sencilla y eficiente, tanto escalado horizontal como vertical, ajustando el número de réplicas de tus aplicaciones según la demanda, garantizando un rendimiento óptimo.
  • Alta disponibilidad y tolerancia a fallos: Distribuye los contenedores en varios nodos, reduciendo puntos únicos de fallo y aumentando la resiliencia del sistema, mediante mecanismos automáticos de recuperación en caso de fallos en tus aplicaciones. Por lo que si un nodo falla, se redistribuirá automáticamente las cargas de trabajo en nodos saludables, garantizando la disponibilidad de tus aplicaciones.
  • Despliegues continuos: Permite actualizaciones con mínimo tiempo de inactividad gracias a los rolling updates y estrategias de rollback.
  • Gestión de configuración: Centraliza configMaps y Secrets, asegurando que los datos sensibles y las variables de entorno se manejen de forma segura.
  • Ecosistema amplio: Compatible con múltiples herramientas y extensiones, facilitando la integración con soluciones de monitorización, registro y seguridad.
  • Portabilidad: Es agnóstico al proveedor de infraestructura y puede ejecutarse en diferentes entornos, como localmente, en la nube o en entornos híbridos. Esto te permite desplegar tus aplicaciones en cualquier entorno sin tener que realizar cambios significativos.
  • Automatización: Automatiza muchas tareas relacionadas con la administración de tus aplicaciones, como el despliegue, la escalabilidad, la actualización y el monitoreo. Esto te permite ahorrar tiempo y esfuerzo en tareas repetitivas y centrarte en el desarrollo y mejora continua de tus aplicaciones.

Principales componentes de Kubernetes

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.
  • Pods: Es la unidad mínima de ejecución en Kubernetes, que agrupa uno o más contenedores con recursos compartidos como almacenamiento y red. Los Pods facilitan la coordinación de contenedores estrechamente relacionados y permiten realizar actualizaciones y escalados de forma ágil.
  • 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.
  • Deployments: Definen el estado deseado de tus aplicaciones, gestionan la creación, el actualizar y el rollback de réplicas de Pods. Con los Deployments, es posible realizar estrategias como rolling updates y rollback automático, asegurando continuidad y mínimo tiempo de inactividad.
  • 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.
  • Volúmenes: Es necesario que las aplicaciones en contenedores almacenan datos de manera persistente. Pueden ser de diferentes tipos, como almacenamiento local, en la nube o sistemas de archivos en red. Proporcionan una forma de almacenar datos de manera persistente y compartirlos entre diferentes pods.

Instalación y configuración del entorno

En esta sección prepararemos, configuraremos y verificaremos las herramientas esenciales para empezar a trabajar con Kubernetes en un entorno local.

Instalar kubectl

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:
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
chmod +x kubectl
sudo mv kubectl /usr/local/bin/
Con esto tendrás kubectl isntalado y listo para interactuar con tu clúster.

Instalar Minikube

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:
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
chmod +x minikube-linux-amd64
sudo mv minikube-linux-amd64 /usr/local/bin/minikube
Una vez instalado, podrás iniciar un clúster ejecutando
minikube start
, lo cual creará un entorno aislado para tus contenedores.

Verificar la instalación

Para asegurarte de que todo está correctamente instalado, ejecuta:
kubectl version --client
minikube version
kubectl cluster-info
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!

Descubre la formación a tu medida

Rellena el formulario para obtener más información sobre los cursos.

Usaremos los datos personales recopilados a través de este formulario en línea para informarte de las últimas novedades sobre nuestros cursos. Para obtener más información, consulta nuestra política de privacidad.

Crear tu primer clúster de Kubernetes

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
  1. Ejecuta el comando para levantar el clúster:
   minikube start --memory=4096 --cpus=2 --driver=docker
Con esto, Minikube provisiona un nodo único con los recursos especificados configura el control plane.
  1. Verifica el estado con:
minikube status
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
  1. Consulta el contexto activo:
kubectl config current-context
  1. Si no está apuntando a Minikube, cámbialo con:
kubectl config use-context minikube
Así te aseguras de que kubectl interactúe con el clúster recién creado.
  1. Comprueba la conexión ejecutanto:
kubectl get nodes
Verás tu nodo en estado Ready, lo que indica que el clúster está disponible para desplegar cargas de trabajo.

Despliegue de tu primera aplicación

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:
apiVersion: v1
kind: Pod
metadata:
  name: nombre_pod
spec:
  containers:
    - name: nombre_contenedor
      image: imagen_contenedor
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:
kubectl apply -f nombre_archivo.yaml
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:
kubectl scale deployment nombre_despliegue --replicas=n
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:
apiVersion: apps/v1
kind: Deployment
metadata:
  name: mi-app-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: mi-app
  template:
    metadata:
      labels:
        app: mi-app
    spec:
      containers:
      - name: mi-app-contenedor
        image: nginx:latest
        ports:
        - containerPort: 80
A continuación, aplica el Deployment con:
kubectl apply -f deployment.yaml
Verifica que las réplicas estén en Running con:
kubectl get deployments
kubectl get pods
EXPONER LA APLICACIÓN CON UN SERVICIO
Para acceder desde fuera del clúster, define un
service.yaml
así:
apiVersion: v1
kind: Service
metadata:
  name: mi-app-service
spec:
  type: NodePort
  selector:
    app: mi-app
  ports:
  - port: 80
    targetPort: 80
    nodePort: 30080
Aplica el Servicio:
kubectl apply -f service.yaml
Comprueba el puerto asignado y accede a la aplicación:
kubectl get services
minikube service mi-app-service --url
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:
kubectl set image deployment/nombre_despliegue nombre_contenedor=nueva_imagen
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.

Gestión de configuración y secretos

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:
kubectl create configmap mi-config \
  --from-literal=DB_HOST=mi-base-datos.local \
  --from-literal=DB_PORT=5432
Para usarlo en un Pod, añade en el YAML:
envFrom:
- configMapRef:
    name: mi-config
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:
kubectl create secret generic mi-secret \
  --from-literal=API_KEY=abcd1234 \
  --from-literal=TLS_CERT="$(cat cert.pem)"
Para montar el Secret en un Pod, incluye:
volumes:
- name: secret-vol
  secret:
    secretName: mi-secret
containers:
- name: app
  volumeMounts:
  - name: secret-vol
    mountPath: "/etc/secrets"
Con ConfigMaps y Secrets, se consigue una configuración más flexible, segura y mantenible en Kubernetes.

Escalado y actualización de aplicaciones

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:
kubectl scale deployment mi-app-deployment --replicas=5
  • Alta disponibilidad: al incrementar réplicas, mejoras la resiliencia ante fallos.
  • Optimización de recursos: al reducir réplicas, ahorras CPU y memoria.
  • Control preciso: definir el número exacto de réplicas te permite ajustar la carga según la demanda.
Para escalado automático, utiliza un Horizontal Pod Autoscaler:
kubectl autoscale deployment mi-app-deployment --min=2 --max=10 --cpu-percent=75
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:
  1. Actualiza la imagen en tu Deployment:
kubectl set image deployment/mi-app-deployment mi-app-contenedor=mi-imagen:v2
  1. Monitorea el progreso:
kubectl rollout status deployment/mi-app-deployment
  • Cero downtime: los usuarios no perciben caídas durante el despliegue.
  • Rollback sencillo: si algo falla, reviertes con:
kubectl rollout undo deployment/mi-app-deployment
  • Control de versiones: mantén un historial de actualizaciones para auditoría y diagnóstico.
Los Rolling Updates son clave para un CI/CD eficiente, garantizando calidady rapidez en cada ** release**.

Monitoreo y depuración

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.

Uso de kubectl para logs y eventos

Para diagnosticar problemas en los Pods, los logs son una fuente crucial de información. Con el comando:
kubectl logs <nombre-pod>
Podrás visualizar las salidas de tu contenedor y detectar errores o excepciones. Además, los eventos del clúster revelan cambios de estado:
kubectl get events --sort-by=.metadata.creationTimestamp
Esto muestra en orden cronológico las notificaciones de programación, reinicios y fallos, facilitando la investigación de incidencias.

Inspeccionar recursos con describe

El comando describe ofrece un informe detallado de cualquier objeto de Kubernetes, incluyendo Pods, Services y Deployments:
kubectl describe pod <nombre-pod>
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.

Buenas prácticas iniciales

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.

Conviértete en un Experto en Kubernetes

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!

Descubre la formación a tu medida

Rellena el formulario para obtener más información sobre los cursos.

Usaremos los datos personales recopilados a través de este formulario en línea para informarte de las últimas novedades sobre nuestros cursos. Para obtener más información, consulta nuestra política de privacidad.