yaml - secret - kubernetes tutorial español pdf
¿Cómo configurar múltiples comandos en un archivo yaml con Kubernetes? (3)
Mi preferencia es multilinear los argumentos, esto es más simple y fácil de leer. Además, la secuencia de comandos se puede cambiar sin afectar la imagen, solo necesita reiniciar el pod. Por ejemplo, para un volcado de mysql, la especificación del contenedor podría ser algo como esto:
containers:
- name: mysqldump
image: mysql
command: ["/bin/sh", "-c"]
args:
- echo starting;
ls -la /backups;
mysqldump --host=... -r /backups/file.sql db_name;
ls -la /backups;
echo done;
volumeMounts:
- ...
La razón por la que esto funciona es que yaml en realidad concatena todas las líneas después del "-" en una, y sh ejecuta una cadena larga "eco que comienza; ls ...; echo hecho;".
En este documento oficial, puede ejecutar el comando en un archivo de configuración de yaml:
http://kubernetes.io/v1.1/docs/user-guide/configuring-containers.html
apiVersion: v1
kind: Pod
metadata:
name: hello-world
spec: # specification of the pod’s contents
restartPolicy: Never
containers:
- name: hello
image: "ubuntu:14.04"
env:
- name: MESSAGE
value: "hello world"
command: ["/bin/sh","-c"]
args: ["/bin/echo /"${MESSAGE}/""]
Si quiero ejecutar más de un comando, ¿cómo hacerlo?
Si está dispuesto a usar un Volumen y un ConfigMap, puede montar los datos de ConfigMap como una secuencia de comandos y luego ejecutar esa secuencia de comandos:
---
apiVersion: v1
kind: ConfigMap
metadata:
name: my-configmap
data:
entrypoint.sh: |-
#!/bin/bash
echo "Do this"
echo "Do that"
---
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: my-container
image: "ubuntu:14.04"
command:
- /bin/entrypoint.sh
volumeMounts:
- name: configmap-volume
mountPath: /bin/entrypoint.sh
readOnly: true
subPath: entrypoint.sh
volumes:
- name: configmap-volume
configMap:
defaultMode: 0700
name: my-configmap
Esto limpia un poco la especificación de su pod y permite secuencias de comandos más complejas.
$ kubectl logs my-pod
Do this
Do that
command: ["/bin/sh","-c"]
args: ["command one; command two && command three"]
Explicación: El command ["/bin/sh", "-c"]
dice "ejecutar un shell y ejecutar las siguientes instrucciones". Los argumentos se pasan luego como comandos al shell. En shell scripting, un punto y coma separa los comandos, y &&
ejecuta condicionalmente el siguiente comando si el primero se ejecuta correctamente. En el ejemplo anterior, siempre ejecuta el command one
seguido del command two
, y solo ejecuta el command three
si el command two
tuvo éxito.
Alternativa: en muchos casos, algunos de los comandos que desea ejecutar probablemente estén configurando el comando final para ejecutar. En este caso, construir tu propio Dockerfile es el camino a seguir. Mira la directiva RUN en particular.