2015-11-24 3 views
15

In diesem offiziellen Dokument, kann es Befehl in einer yaml Konfigurationsdatei ausführen:Wie setze ich mehrere Befehle in einer YAML-Datei mit Kubernetes?

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}\""] 

Wenn ich will, mehr als einen Befehl ausgeführt werden soll, wie tun?

Antwort

42
command: ["/bin/sh","-c"] 
args: ["command one; command two && command three"] 

Erläuterung: Die command ["/bin/sh", "-c"] sagt "eine Shell ausgeführt, und führen Sie die folgenden Anweisungen". Die Argumente werden dann als Befehle an die Shell übergeben. Beim Shell-Scripting trennt ein Semikolon die Befehle und && führt den folgenden Befehl bedingt aus, wenn der erste erfolgreich ist. Im obigen Beispiel wird immer command one gefolgt von command two ausgeführt, und command three wird nur ausgeführt, wenn command two erfolgreich war.

Alternative: In vielen Fällen richten einige der Befehle, die Sie ausführen möchten, wahrscheinlich den letzten auszuführenden Befehl ein. In diesem Fall ist das Bauen Ihres eigenen Dockerfile der Weg zu gehen. Sehen Sie sich insbesondere die Richtlinie RUN an.

+1

Ja, sehr gültig, aber ich denke, es gibt auch gute Anwendungsfälle, um 'command' zu erweitern, da es den 'Entrepoint' der Dockerfile überschreibt;) –

0

Wenn Sie bereit sind, ein Band und ein ConfigMap zu verwenden, können Sie mount ConfigMap data als Skript und dann das Skript ausführen:

--- 
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 

Diese reinigt pod spec ein wenig nach oben und ermöglicht komplexere Skripting.

$ kubectl logs my-pod 
Do this 
Do that 
Verwandte Themen