2015-11-24 16 views
15

In questo documento ufficiale, è possibile eseguire il comando in un file di configurazione YAML:Come impostare più comandi in un file yaml con 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}\""] 

Se voglio correre più di un comando, come fare?

risposta

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

Spiegazione: Il command ["/bin/sh", "-c"] dice "eseguire una shell ed eseguire le seguenti istruzioni". Gli argomenti vengono quindi passati come comandi alla shell. Nello script di shell un punto e virgola separa i comandi e && esegue in modo condizionale il seguente comando se il primo ha esito positivo. Nell'esempio sopra, viene sempre eseguito command one seguito da command two e viene eseguito solo command three se command two è riuscito.

Alternativa: In molti casi, alcuni dei comandi che si desidera eseguire probabilmente impostano il comando finale da eseguire. In questo caso, la costruzione del tuo Dockerfile è la strada da percorrere. Guarda in particolare la direttiva RUN.

+1

Sì, molto valido, tuttavia, penso che ci siano anche buoni casi d'uso per estendere 'comando' come sovrascrive il' Entrypoint 'del Dockerfile;) –

0

Se siete disposti a utilizzare un volume e un configMap, si può mount ConfigMap data come script, e quindi eseguire lo script:

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

Questo pulisce lo spec pod un po 'e consente una più complessa scripting.

$ kubectl logs my-pod 
Do this 
Do that