In diesem offiziellen Dokument kann der Befehl in einer yaml-Konfigurationsdatei ausgeführt werden:
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}\""]
Wie gehe ich vor, wenn ich mehr als einen Befehl ausführen möchte?
quelle
command
da sie die Docker-Dateien überschreibenEntrypoint
;)Ich bevorzuge es, die Argumente mehrzeilig zu machen. Dies ist am einfachsten und am einfachsten zu lesen. Außerdem kann das Skript geändert werden, ohne das Image zu beeinträchtigen. Sie müssen lediglich den Pod neu starten. Für einen MySQL-Dump könnte die Containerspezifikation beispielsweise so aussehen:
Der Grund dafür ist, dass yaml tatsächlich alle Zeilen nach dem "-" zu einer verkettet und sh eine lange Zeichenfolge "echo starting; ls ...; echo done;" ausführt.
quelle
command: ['/bin/bash', '-c']
args:
- exec &> /path/to/redirected/program.output;
`python / program.py`` --key1 = val1` `--key2 = val2`` --key3 = val3`Wenn Sie bereit sind, ein Volume und eine ConfigMap zu verwenden, können Sie ConfigMap-Daten als Skript bereitstellen und dann dieses Skript ausführen:
Dies bereinigt Ihre Pod-Spezifikation ein wenig und ermöglicht komplexere Skripte.
quelle
Wenn Sie vermeiden möchten, dass alle Befehle zu einem einzigen Befehl verkettet werden,
;
oder&&
wenn Sie mithilfe eines Heredocs auch echte mehrzeilige Skripte erhalten möchten:Dies ist praktisch, um vorhandene Bash-Skripte auszuführen, hat jedoch den Nachteil, dass zum Einrichten des Heredocs sowohl eine innere als auch eine äußere Shell-Instanz erforderlich sind.
quelle
IMHO ist die beste Option, die nativen Blockskalare von YAML zu verwenden . Speziell in diesem Fall ist das gefaltet Stilblock.
Durch Aufrufen können
sh -c
Sie Argumente als Befehle an Ihren Container übergeben. Wenn Sie sie jedoch elegant durch Zeilenumbrüche trennen möchten, möchten Sie den gefalteten Stilblock verwenden , damit YAML Zeilenumbrüche in Leerzeichen konvertiert und die Befehle effektiv verkettet.Ein voll funktionsfähiges Beispiel:
quelle
So können Sie mehrere Befehle und Argumente in einer YAML-Datei mit Kubernetes übergeben:
Vollständiger Containerblock aus Yaml-Datei:
quelle
Um eine weitere mögliche Option zu bieten, können Geheimnisse verwendet werden, wenn sie dem Pod als Bände präsentiert werden:
Geheimes Beispiel:
Yaml-Extrakt:
Ich weiß, dass viele argumentieren werden, dass dies nicht das ist, wofür Geheimnisse verwendet werden müssen, aber es ist eine Option.
quelle