Comando Exec 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

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.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL kubernetes(("Kubernetes")) -.-> kubernetes/TroubleshootingandDebuggingCommandsGroup(["Troubleshooting and Debugging Commands"]) kubernetes(("Kubernetes")) -.-> kubernetes/BasicsGroup(["Basics"]) kubernetes(("Kubernetes")) -.-> kubernetes/BasicCommandsGroup(["Basic Commands"]) kubernetes/BasicsGroup -.-> kubernetes/initialization("Initialization") kubernetes/BasicCommandsGroup -.-> kubernetes/get("Get") kubernetes/BasicCommandsGroup -.-> kubernetes/run("Run") kubernetes/TroubleshootingandDebuggingCommandsGroup -.-> kubernetes/describe("Describe") kubernetes/TroubleshootingandDebuggingCommandsGroup -.-> kubernetes/exec("Exec") subgraph Lab Skills kubernetes/initialization -.-> lab-8502{{"Comando Exec de Kubernetes"}} kubernetes/get -.-> lab-8502{{"Comando Exec de Kubernetes"}} kubernetes/run -.-> lab-8502{{"Comando Exec de Kubernetes"}} kubernetes/describe -.-> lab-8502{{"Comando Exec de Kubernetes"}} kubernetes/exec -.-> lab-8502{{"Comando Exec de Kubernetes"}} end

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.

  1. Navegar a tu directorio de trabajo:

    Abre la terminal y navega hasta la carpeta de proyecto predeterminada:

    cd /home/labex/project
  2. Iniciar 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.
  3. Verificar que Minikube esté en ejecución:

    Comprueba el estado del clúster de Minikube:

    minikube status
    • Busca componentes como kubelet y apiserver listados como Running (En ejecución).
    • Si el clúster no está en ejecución, vuelve a ejecutar minikube start.

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.

  1. Comienza creando un despliegue (deployment) con una réplica y un contenedor Nginx:

    kubectl create deployment nginx --image=nginx --replicas=1
  2. Espera a que el pod esté listo:

    kubectl wait --for=condition=Ready pod -l app=nginx
  3. Utiliza el comando kubectl exec para ejecutar un comando dentro del contenedor Nginx:

    kubectl -it POD_NAME -- /bin/bash

    Reemplaza POD_NAME con el nombre del pod creado en el paso 1, y puedes obtener el POD_NAME con el comando kubectl 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.

  1. 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"
    EOF
  2. Espera a que el pod esté listo:

    kubectl wait --for=condition=Ready pod nginx-busybox
  3. Utiliza el comando kubectl exec para 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.

  1. Utiliza el comando kubectl exec con las opciones -it para ejecutar un comando con una terminal virtual (tty):

    kubectl exec -it nginx-busybox -- /bin/sh
  2. Una vez dentro de la shell del contenedor, ejecuta un comando:

    echo "Hello, world!"
  3. 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.

  1. 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"
  2. Espera a que el pod esté listo:

    kubectl wait --for=condition=Ready pod -l run=nginx-env
  3. Utiliza el comando kubectl exec para ejecutar un comando dentro del contenedor Nginx que muestre la variable de entorno:

    kubectl exec nginx-env -- sh -c 'echo $MY_VAR'

    Reemplaza nginx-env con 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.