Versión imprimible multipagina. Haga click aquí para imprimir.
Inyectar datos en las aplicaciones
1 - Define un comando y argumentos para un contenedor
Esta página muestra cómo definir comandos y argumentos cuando ejecutas un contenedor en un Pod.
Antes de empezar
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.
Define un comando y argumentos cuando creas un Pod
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.
Nota:
El campocommand 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.yamlLista los Pods en ejecución:
kubectl get podsLa 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-demoLa salida muestra los valores de las variables de entorno HOSTNAME y KUBERNETES_PORT:
command-demo tcp://10.3.240.1:443
Usa variables de entorno para definir argumentos
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.
Nota:
La variable de entorno aparece en paréntesis,"$(VAR)". Esto es
requerido para que se expanda en el campo command o args.Ejecuta un comando en una shell
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"]
¿Qué sigue?
- Aprende más sobre Configurar Pods y contenedores.
- Aprende más sobre Ejecutar comandos en un contenedor.
- Ver Container.
2 - Define variables de entorno para un contenedor
Esta página muestra cómo definir variables de entorno para un contenedor en un Pod de Kubernetes.
Antes de empezar
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:
Define una variable de entorno para un contenedor
Cuando creas un Pod, puedes configurar variables de entorno para los contenedores
que se ejecutan dentro del Pod. Para configurar variables de entorno, incluye el campo env o
envFrom en el archivo de configuración.
Los campos env y envFrom tienen efectos diferentes.
env- Permite configurar variables de entorno para un contenedor, especificando un valor directamente por cada variable que declares.
envFrom- Permite configurar variables de entorno para un contenedor referenciando un ConfigMap o un Secret.
Cuando utilizas
envFrom, todos los pares clave-valor en el ConfigMap o Secret referenciado se configuran como variables de entorno para el contenedor. También puedes especificar una cadena de prefijo común.
Puedes leer más sobre ConfigMap y Secret.
Esta página explica cómo utilizar env.
En este ejercicio, crearás un Pod que ejecuta un contenedor. El archivo de
configuración para el Pod define una variable de entorno con nombre DEMO_GREETING y
valor "Hello from the environment". Aquí está el manifiesto de configuración para el
Pod:
apiVersion: v1
kind: Pod
metadata:
name: envar-demo
labels:
purpose: demonstrate-envars
spec:
containers:
- name: envar-demo-container
image: gcr.io/google-samples/hello-app:2.0
env:
- name: DEMO_GREETING
value: "Hello from the environment"
- name: DEMO_FAREWELL
value: "Such a sweet sorrow"
Crea un Pod basado en ese manifiesto:
kubectl apply -f https://k8s.io/examples/pods/inject/envars.yamlLista los Pods en ejecución:
kubectl get pods -l purpose=demonstrate-envarsLa salida es similar a:
NAME READY STATUS RESTARTS AGE envar-demo 1/1 Running 0 9sLista las variables de entorno del contenedor que se ejecuta en el Pod:
kubectl exec envar-demo -- printenvLa salida es similar a esto:
NODE_VERSION=4.4.2 EXAMPLE_SERVICE_PORT_8080_TCP_ADDR=10.3.245.237 HOSTNAME=envar-demo ... DEMO_GREETING=Hello from the environment DEMO_FAREWELL=Such a sweet sorrow
Nota:
Las variables de entorno configuradas utilizando el campoenv o envFrom
sobrescriben cualquier variable de entorno especificada en la imagen del contenedor.Nota:
Las variables de entorno pueden referenciarse entre sí; sin embargo, el orden es importante. Las variables que hacen uso de otras definidas en el mismo contexto deben definirse después en la lista. Del mismo modo, evita referencias circulares.Utiliza variables de entorno dentro de tu configuración
Las variables de entorno que defines en la configuración de un Pod debajo de
.spec.containers[*].env[*] pueden ser utilizadas en otras partes de la configuración, por
ejemplo en comandos y argumentos que configuras para los contenedores del Pod.
En el ejemplo de configuración debajo, las variables de entorno GREETING, HONORIFIC, y
NAME se configuran como Cálidos saludos, al más honorable, y Kubernetes, respectivamente. La variable de entorno
MESSAGE combina todas estas variables de entorno y luego las utiliza
como un argumento de CLI para el contenedor env-print-demo.
El nombre de una variable de entorno puede consistir en cualesquiera caracteres ASCII imprimibles excepto '='.
apiVersion: v1
kind: Pod
metadata:
name: print-greeting
spec:
containers:
- name: env-print-demo
image: bash
env:
- name: GREETING
value: "Cálidos saludos"
- name: HONORIFIC
value: "al más honorable"
- name: NAME
value: "Kubernetes"
- name: MESSAGE
value: "$(GREETING) $(HONORIFIC) $(NAME)"
command: ["echo"]
args: ["$(MESSAGE)"]
Al crearse, el comando echo Cálidos saludos al más honorable Kubernetes se ejecuta en el contenedor.
¿Qué sigue?
- Aprende más sobre variables de entorno.
- Aprende más sobre utilizar Secrets como variables de entorno.
- Ver EnvVarSource.