Dans ce document officiel, il peut exécuter la commande dans un fichier de configuration yaml:
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 je veux exécuter plus d'une commande, comment faire?
la source
command
car il remplace le DockerfileEntrypoint
;)Ma préférence est de multiligner les arguments, c'est le plus simple et le plus facile à lire. En outre, le script peut être modifié sans affecter l'image, il suffit de redémarrer le pod. Par exemple, pour un vidage mysql, la spécification du conteneur pourrait être quelque chose comme ceci:
La raison pour laquelle cela fonctionne est que yaml concatène en fait toutes les lignes après le "-" en une seule, et sh exécute une longue chaîne "echo starting; ls ...; echo done;".
la source
command: ['/bin/bash', '-c']
args:
- exec &> /path/to/redirected/program.output;
`python / program.py`` `--key1 = val1`` --key2 = val2` `--key3 = val3`Si vous souhaitez utiliser un volume et un ConfigMap, vous pouvez monter les données ConfigMap en tant que script, puis exécuter ce script:
Cela nettoie un peu les spécifications de votre pod et permet des scripts plus complexes.
la source
Si vous voulez éviter de concaténer toutes les commandes en une seule commande avec
;
ou&&
vous pouvez également obtenir de vrais scripts multilignes en utilisant un heredoc:Ceci est pratique pour exécuter des scripts bash existants, mais présente l'inconvénient de nécessiter à la fois une instance interne et externe du shell pour configurer heredoc.
la source
À mon humble avis, la meilleure option est d'utiliser les scalaires de bloc natifs de YAML . Plus précisément dans ce cas, le bloc de style plié .
En invoquant,
sh -c
vous pouvez passer des arguments à votre conteneur sous forme de commandes, mais si vous souhaitez les séparer élégamment avec des retours à la ligne, vous voudrez utiliser le bloc de style plié , afin que YAML sache convertir les retours à la ligne en espaces blancs, concaténant efficacement les commandes.Un exemple de travail complet:
la source
Voici comment vous pouvez transmettre plusieurs commandes et arguments dans un fichier YAML avec kubernetes:
Blocage complet des conteneurs du fichier yaml:
la source
Juste pour apporter une autre option possible, les secrets peuvent être utilisés car ils sont présentés au pod sous forme de volumes:
Exemple secret:
Extrait de yaml:
Je sais que beaucoup diront que ce n'est pas pour cela que les secrets doivent être utilisés, mais c'est une option.
la source