Su primer laboratorio de Kubernetes

KubernetesKubernetesBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

¡Bienvenido a su primer laboratorio de Kubernetes! Este laboratorio le presentará a Kubernetes, un potente sistema para gestionar aplicaciones contenerizadas. Al final de este laboratorio, habrá creado e interactuado con su primera implementación (deployment) de Kubernetes.

No se preocupe si es nuevo en el mundo de los contenedores u orquestación - explicaremos cada concepto a medida que avancemos. ¡Comencemos nuestro viaje al mundo de Kubernetes!

Nota: Este laboratorio requiere descargar imágenes, pero los usuarios gratuitos no pueden acceder a Internet desde el entorno del laboratorio. Este laboratorio es exclusivo para usuarios Pro.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL kubernetes(("Kubernetes")) -.-> kubernetes/TroubleshootingandDebuggingCommandsGroup(["Troubleshooting and Debugging Commands"]) kubernetes(("Kubernetes")) -.-> kubernetes/BasicCommandsGroup(["Basic Commands"]) kubernetes(("Kubernetes")) -.-> kubernetes/BasicsGroup(["Basics"]) kubernetes/BasicsGroup -.-> kubernetes/initialization("Initialization") kubernetes/BasicCommandsGroup -.-> kubernetes/get("Get") kubernetes/BasicCommandsGroup -.-> kubernetes/create("Create") kubernetes/BasicCommandsGroup -.-> kubernetes/delete("Delete") kubernetes/BasicCommandsGroup -.-> kubernetes/run("Run") kubernetes/TroubleshootingandDebuggingCommandsGroup -.-> kubernetes/describe("Describe") kubernetes/TroubleshootingandDebuggingCommandsGroup -.-> kubernetes/exec("Exec") kubernetes/TroubleshootingandDebuggingCommandsGroup -.-> kubernetes/logs("Logs") kubernetes/TroubleshootingandDebuggingCommandsGroup -.-> kubernetes/port_forward("Port-Forward") subgraph Lab Skills kubernetes/initialization -.-> lab-391133{{"Su primer laboratorio de Kubernetes"}} kubernetes/get -.-> lab-391133{{"Su primer laboratorio de Kubernetes"}} kubernetes/create -.-> lab-391133{{"Su primer laboratorio de Kubernetes"}} kubernetes/delete -.-> lab-391133{{"Su primer laboratorio de Kubernetes"}} kubernetes/run -.-> lab-391133{{"Su primer laboratorio de Kubernetes"}} kubernetes/describe -.-> lab-391133{{"Su primer laboratorio de Kubernetes"}} kubernetes/exec -.-> lab-391133{{"Su primer laboratorio de Kubernetes"}} kubernetes/logs -.-> lab-391133{{"Su primer laboratorio de Kubernetes"}} kubernetes/port_forward -.-> lab-391133{{"Su primer laboratorio de Kubernetes"}} end

Iniciando su clúster de Kubernetes

Comenzaremos creando un clúster local de Kubernetes utilizando Minikube. Minikube le permite ejecutar un clúster de Kubernetes de un solo nodo en su computadora, ideal para aprender y desarrollar.

Primero, abra su terminal. Debería estar en el directorio /home/labex/project. Si no está seguro, puede cambiar a este directorio escribiendo:

cd /home/labex/project

Ahora, iniciemos el clúster de Minikube:

Nota: Los usuarios gratuitos no pueden conectarse a Internet, por lo que Minikube ya está pre-iniciado cuando inicia el laboratorio. Puede omitir este paso. Actualícese a un usuario Pro para practicar el inicio del clúster por sí mismo.

Solo para usuarios Pro
minikube start
Inicialización del clúster de Minikube

Este comando inicializa un clúster de Kubernetes en su máquina local. Esto es lo que sucede detrás de escena:

  1. Minikube crea una máquina virtual (VM) en su computadora.
  2. Instala y configura Kubernetes dentro de esta VM.
  3. Configura la red para que su computadora pueda comunicarse con el clúster.

Este proceso puede tomar unos minutos. Verá mucha salida mientras Minikube está trabajando. No se preocupe si no entiende todo - lo importante es esperar un mensaje que diga "¡Listo!" al final.

Creando su primera implementación (deployment)

Ahora que nuestro clúster está en funcionamiento, creemos nuestra primera implementación (deployment) de Kubernetes. Una implementación (deployment) es un objeto de Kubernetes que gestiona un grupo de pods idénticos. (No se preocupe, pronto explicaremos qué son los pods).

Crearemos una implementación (deployment) que ejecute un solo contenedor de servidor web NGINX. NGINX es un popular servidor web que usaremos para este ejemplo.

Ejecute este comando:

kubectl create deployment hello-kubernetes --image=nginx:latest --port=80

Desglosemos esto:

  • kubectl es la herramienta de línea de comandos para interactuar con Kubernetes.
  • create deployment le dice a Kubernetes que cree una nueva implementación (deployment).
  • hello-kubernetes es el nombre que le estamos dando a nuestra implementación (deployment).
  • --image=nginx:latest especifica que queremos usar la última versión de la imagen Docker de NGINX.
  • --port=80 le dice a Kubernetes que el contenedor escuchará en el puerto 80 (el puerto estándar para el tráfico web).

Después de ejecutar este comando, debería ver:

deployment.apps/hello-kubernetes created

Esto significa que Kubernetes ha creado con éxito su implementación (deployment). Pero, ¿qué hizo exactamente?

  1. Kubernetes descargó la imagen Docker de NGINX.
  2. Creó un pod - un grupo de uno o más contenedores - e inició el contenedor de NGINX dentro de él.
  3. Configuró la red para que el pod pueda ser accedido en el puerto 80.

Inspeccionando su implementación (deployment)

Ahora que hemos creado una implementación (deployment), echemos un vistazo más detallado a lo que Kubernetes ha configurado para nosotros.

Primero, verifiquemos el estado de nuestra implementación (deployment):

kubectl get deployments

Debería ver algo como esto:

NAME               READY   UP-TO-DATE   AVAILABLE   AGE
hello-kubernetes   1/1     1            1           2m

Esta salida nos dice:

  • READY: 1/1 significa que un pod está listo de un pod deseado.
  • UP-TO-DATE: 1 significa que un pod está ejecutando la última configuración.
  • AVAILABLE: 1 significa que un pod está disponible para atender tráfico.

A continuación, veamos los pods que nuestra implementación (deployment) ha creado:

kubectl get pods

Debería ver algo como:

NAME                                READY   STATUS    RESTARTS   AGE
hello-kubernetes-6b89d599b9-x7tpv   1/1     Running   0          3m

El nombre exacto del pod será diferente, pero debería ver un pod con un estado de "Running" (En ejecución). Este pod contiene nuestro contenedor de NGINX.

Si no ve un pod en ejecución, espere un minuto y vuelva a intentarlo. Kubernetes podría todavía estar creando el pod o descargando la imagen de NGINX.

Para obtener información más detallada sobre nuestro pod, ejecute:

kubectl describe pod hello-kubernetes-6b89d599b9-x7tpv

Nota: Reemplace hello-kubernetes-6b89d599b9-x7tpv con el nombre de su pod como se muestra en la salida de kubectl get pods.

Este comando generará mucha información. No se preocupe por entender todo ahora. Cosas importantes a notar:

  • Status (Estado): Debería ser "Running" (En ejecución)
  • IP: La dirección IP interna del pod
  • Containers (Contenedores): Información sobre el contenedor de NGINX que se está ejecutando en el pod

Si ve algún error en esta salida, pueden ayudarlo a diagnosticar problemas con su pod.

Accediendo a su aplicación

Ahora que nuestra implementación (deployment) está en funcionamiento, accedamos al servidor web NGINX que hemos desplegado.

En un entorno típico de Kubernetes, crearíamos un Servicio (Service) para exponer nuestra implementación (deployment) a la red. Por simplicidad en este entorno local, usaremos en su lugar el reenvío de puertos (port forwarding).

Ejecute este comando:

kubectl port-forward $(kubectl get pods -o name) 8080:80

Este comando hace lo siguiente:

  • $(kubectl get pods -o name) obtiene el nombre de nuestro pod.
  • 8080:80 le dice a Kubernetes que reenvíe el tráfico desde el puerto 8080 de su máquina local al puerto 80 en el pod.

No verá ninguna salida, pero el comando seguirá ejecutándose. ¡Esto es normal!

Ahora, abra una nueva ventana de terminal y ejecute:

curl http://localhost:8080
Visualización de la página de bienvenida de NGINX

Debería ver contenido HTML: ¡esta es la página de bienvenida de NGINX!

Si no ve el HTML:

  • Asegúrese de que el comando de reenvío de puertos todavía esté en ejecución en la otra terminal.
  • Compruebe que ha escrito correctamente el comando curl.
  • Intente acceder a http://localhost:8080 en un navegador web si curl no funciona.

Para detener el reenvío de puertos, vuelva a la ventana de terminal original y presione Ctrl+C.

Limpiando los recursos

¡Buen trabajo! Ha desplegado y accedido con éxito a una aplicación en Kubernetes. Ahora, limpiemos nuestros recursos.

Primero, eliminemos nuestra implementación (deployment):

kubectl delete deployment hello-kubernetes

Debería ver:

deployment.apps "hello-kubernetes" deleted

Este comando le dice a Kubernetes que quite la implementación (deployment) y todos los recursos asociados, incluyendo el pod.

Verifiquemos que la implementación (deployment) y el pod se hayan eliminado:

kubectl get deployments
kubectl get pods

Ambos comandos deberían devolver "No resources found in default namespace." (No se encontraron recursos en el espacio de nombres predeterminado).

Si todavía ve recursos, espere un momento y vuelva a intentarlo. Kubernetes podría todavía estar en el proceso de eliminarlos.

Finalmente, detengamos el clúster de Minikube:

minikube stop

Esto detiene la máquina virtual de Minikube, pero conserva el estado del clúster en su máquina. Puede iniciarlo nuevamente más tarde con minikube start.

Si desea eliminar completamente el clúster de Minikube, puede ejecutar minikube delete. Sin embargo, esto no es necesario por ahora.

Resumen

¡Felicidades! En este laboratorio, ha dado sus primeros pasos con Kubernetes. Ha aprendido cómo:

  1. Iniciar un clúster local de Kubernetes utilizando Minikube
  2. Crear una implementación (deployment) utilizando kubectl
  3. Inspeccionar su implementación (deployment) y los pods que crea
  4. Acceder a su aplicación desplegada utilizando el reenvío de puertos (port forwarding)
  5. Limpiar sus recursos y detener su clúster

Estas son habilidades fundamentales que forman la base para trabajar con Kubernetes. A medida que continúe aprendiendo, se basará en estos conceptos básicos para crear aplicaciones más complejas y comprender conceptos más avanzados de Kubernetes.

Recuerde, Kubernetes es un sistema potente y complejo. Es normal que algunos conceptos aún no estén claros: aprender Kubernetes es un viaje. Siga practicando y gradualmente desarrollará una comprensión más profunda. ¡Buena suerte en su aventura de aprendizaje de Kubernetes!