Introducción
En este laboratorio, aprenderás cómo utilizar el comando exec de Kubernetes para ejecutar comandos dentro de un contenedor que se está ejecutando en un pod de Kubernetes. Comenzarás con ejemplos simples y progresarás gradualmente hacia escenarios más complejos.
Iniciar el clúster de Minikube
Antes de crear recursos, necesitas un clúster de Kubernetes en ejecución. Minikube es un entorno ligero de Kubernetes que se ejecuta en tu máquina local.
Navegar a tu directorio de trabajo:
Abre la terminal y navega hasta la carpeta de proyecto predeterminada:
cd /home/labex/projectIniciar Minikube:
Inicia Minikube para inicializar un clúster de Kubernetes:
minikube start- Este comando configura un clúster de Kubernetes de un solo nodo en tu máquina local.
- Minikube puede tardar unos minutos en iniciar, dependiendo del rendimiento de tu sistema.
Verificar que Minikube esté en ejecución:
Comprueba el estado del clúster de Minikube:
minikube status- Busca componentes como
kubeletyapiserverlistados comoRunning(En ejecución). - Si el clúster no está en ejecución, vuelve a ejecutar
minikube start.
- Busca componentes como
Si encuentras problemas al iniciar Minikube, utiliza minikube delete para restablecer el entorno si es necesario.
Explorar el comando kubectl exec
El comando kubectl exec se utiliza para ejecutar comandos directamente dentro de un contenedor dentro de un pod. Es especialmente útil para depurar e inspeccionar entornos de contenedores.
Ejecuta el siguiente comando para ver las opciones disponibles para kubectl exec:
kubectl exec -h
Verás la siguiente salida:
Execute a command in a container.
Examples:
## Get output from running the 'date' command from pod mypod, using the first container by default
kubectl exec mypod -- date
## Get output from running the 'date' command in ruby-container from pod mypod
kubectl exec mypod -c ruby-container -- date
## Switch to raw terminal mode; sends stdin to 'bash' in ruby-container from pod mypod
## and sends stdout/stderr from 'bash' back to the client
kubectl exec mypod -c ruby-container -i -t -- bash -il
## List contents of /usr from the first container of pod mypod and sort by modification time
## If the command you want to execute in the pod has any flags in common (e.g. -i),
## you must use two dashes (--) to separate your command's flags/arguments
## Also note, do not surround your command and its flags/arguments with quotes
## unless that is how you would execute it normally (i.e., do ls -t /usr, not "ls -t /usr")
kubectl exec mypod -i -t -- ls -t /usr
## Get output from running 'date' command from the first pod of the deployment mydeployment, using the first container by default
kubectl exec deploy/mydeployment -- date
## Get output from running 'date' command from the first pod of the service myservice, using the first container by default
kubectl exec svc/myservice -- date
Ejecutar un comando en un contenedor
En este paso, aprenderás cómo ejecutar un comando en un contenedor que se está ejecutando en un pod.
Comienza creando un despliegue (deployment) con una réplica y un contenedor Nginx:
kubectl create deployment nginx --image=nginx --replicas=1Espera a que el pod esté listo:
kubectl wait --for=condition=Ready pod -l app=nginxUtiliza el comando
kubectl execpara ejecutar un comando dentro del contenedor Nginx:kubectl exec -it POD_NAME -- /bin/bashReemplaza
POD_NAMEcon el nombre del pod creado en el paso 1, y puedes obtener elPOD_NAMEcon el comandokubectl get pod -l app=nginx.
Ejecutar un comando en un contenedor específico
En este paso, aprenderás cómo ejecutar un comando en un contenedor específico que se está ejecutando en un pod con múltiples contenedores.
Crea un pod con dos contenedores: Nginx y BusyBox:
cat << EOF | kubectl apply -f - apiVersion: v1 kind: Pod metadata: name: nginx-busybox spec: containers: - name: nginx image: nginx - name: busybox image: busybox command: - sleep - "3600" EOFEspera a que el pod esté listo:
kubectl wait --for=condition=Ready pod nginx-busyboxUtiliza el comando
kubectl execpara ejecutar un comando dentro del contenedor BusyBox:kubectl exec nginx-busybox -c busybox -- ls /bin
Ejecutar un comando con una terminal virtual (TTY)
En este paso, aprenderás cómo ejecutar un comando con una terminal virtual (tty) en un contenedor.
Utiliza el comando
kubectl execcon las opciones-itpara ejecutar un comando con una terminal virtual (tty):kubectl exec -it nginx-busybox -- /bin/shUna vez dentro de la shell del contenedor, ejecuta un comando:
echo "Hello, world!"Sal de la shell del contenedor:
exit
Ejecutar un comando con variables de entorno
En este paso, aprenderás cómo ejecutar un comando con variables de entorno dentro de un contenedor.
Crea un despliegue (deployment) con una réplica y un contenedor Nginx con una variable de entorno:
kubectl run nginx-env --image=nginx --env="MY_VAR=my-value"Espera a que el pod esté listo:
kubectl wait --for=condition=Ready pod -l run=nginx-envUtiliza el comando
kubectl execpara ejecutar un comando dentro del contenedor Nginx que muestre la variable de entorno:kubectl exec nginx-env -- sh -c 'echo $MY_VAR'Reemplaza
nginx-envcon el nombre del pod creado en el paso 1.
Resumen
¡Felicidades, has completado con éxito el laboratorio (lab) sobre el comando exec de Kubernetes! En este laboratorio, has aprendido cómo utilizar el comando kubectl exec para ejecutar comandos dentro de contenedores que se ejecutan en pods de Kubernetes. También has aprendido cómo ejecutar comandos en contenedores específicos, ejecutar comandos con una terminal virtual (tty) y ejecutar comandos con variables de entorno. Estas habilidades son esenciales para depurar problemas en un clúster de Kubernetes.


