Esta página muestra cómo definir comandos y argumentos cuando ejecutas un contenedor en un Pod.
Debes tener un cluster Kubernetes a tu dispocición, y la herramienta de línea de comandos kubectl debe estar configurada. Si no tienes un cluster, puedes crear uno utilizando Minikube,
o puedes utilizar una de las siguientes herramientas en línea:
Para verificar la versión, ingresa kubectl version.
Cuando creas un Pod, puedes definir un comando y/o argumentos para los
contenedores que se ejecutan en el Pod. Para definir un comando, incluye el campo command
en el archivo de configuración. Para definir argumentos para el comando, incluye
el campo args en el archivo de configuración. El comando y los argumentos que
definas no pueden ser cambiados después de que el Pod haya sido creado.
El comando y los argumentos que definas en el archivo de configuración
sobrescriben el comando y los argumentos predeterminados que proporciona la imagen del contenedor.
Si defines args, pero no defines un command, se usa el comando por defecto
con tus nuevos argumentos.
command corresponde a ENTRYPOINT, y el campo args corresponde a CMD en algunos runtimes de contenedores.En este ejercicio, crearás un Pod que ejecuta un contenedor. El archivo de configuración para el Pod define un comando y dos argumentos:
apiVersion: v1
kind: Pod
metadata:
name: command-demo
labels:
purpose: demonstrate-command
spec:
containers:
- name: command-demo-container
image: debian
command: ["printenv"]
args: ["HOSTNAME", "KUBERNETES_PORT"]
restartPolicy: OnFailure
Crea un Pod basado en el archivo de configuración YAML:
kubectl apply -f https://k8s.io/examples/pods/commands.yaml
Lista los Pods en ejecución:
kubectl get pods
La salida muestra que el contenedor que se ejecuta en el Pod command-demo se ha completado.
Para ver la salida del comando ejecutado en el contenedor, examina los logs del Pod:
kubectl logs command-demo
La salida muestra los valores de las variables de entorno HOSTNAME y KUBERNETES_PORT:
command-demo
tcp://10.3.240.1:443
En el ejemplo anterior, definiste los argumentos proporcionando directamente cadenas. Como alternativa a proporcionar directamente cadenas, puedes definir argumentos utilizando variables de entorno:
env:
- name: MESSAGE
value: "hello world"
command: ["/bin/echo"]
args: ["$(MESSAGE)"]
Esto significa que puedes definir un argumento para un Pod utilizando cualquiera de las técnicas disponibles para definir variables de entorno, incluyendo ConfigMaps y Secrets.
"$(VAR)". Esto es
requerido para que se expanda en el campo command o args.En algunos casos, necesitas que tu comando se ejecute en una shell. Por ejemplo, tu comando podría consistir en varios comandos encadenados mediante pipes, o podría ser un script de shell. Para ejecutar un comando en una shell, envuélvelo así:
command: ["/bin/sh"]
args: ["-c", "while true; do echo hello; sleep 10;done"]