2015-03-11 25 views
23

Utilizzo della flotta È possibile specificare un comando da eseguire all'interno del contenitore quando viene avviato. Sembra che questo dovrebbe essere facilmente possibile anche con Kubernetes, ma non riesco a trovare nulla che dica come. Sembra che tu debba creare il contenitore appositamente per l'avvio con un determinato comando.Avvia contenitore kubernetes con comando specifico

Avere un contenitore per scopi generici e lanciarlo con argomenti diversi è molto più semplice che creare molti contenitori diversi per casi specifici, oppure impostare e ottenere variabili d'ambiente.

È possibile specificare il comando eseguito da un pod kubernetes all'interno dell'immagine Docker all'avvio?

risposta

31

Trascorro 45 minuti alla ricerca di questo. Quindi posto una domanda al riguardo e trovo la soluzione 9 minuti dopo.

C'è un suggerimento su ciò che volevo all'interno della Cassandra example. La linea command sotto l'immagine:

id: cassandra 
kind: Pod 
apiVersion: v1beta1 
desiredState: 
    manifest: 
    version: v1beta1 
    id: cassandra 
    containers: 
     - name: cassandra 
     image: kubernetes/cassandra 
     command: 
      - /run.sh 
     cpu: 1000 
     ports: 
      - name: cql 
      containerPort: 9042 
      - name: thrift 
      containerPort: 9160 
     env: 
      - key: MAX_HEAP_SIZE 
      value: 512M 
      - key: HEAP_NEWSIZE 
      value: 100M 
labels: 
    name: cassandra 

Nonostante trovare la soluzione, sarebbe bello se ci fosse da qualche parte evidente nel progetto kubernetes dove ho potuto vedere tutte delle possibili opzioni per i vari file di configurazione (pod , servizio, controller di replica).

+3

AFAIK, ci sono attualmente due opzioni decenti: 1) Vai a https del tuo master del cluster: // TUO-IP-QUI/swagger-ui/pagina. Ciò consente di navigare tra i comandi REST disponibili e i loro dettagli dell'oggetto. 2) Guarda direttamente la definizione dell'API nel codice: https://github.com/GoogleCloudPlatform/kubernetes/blob/master/pkg/api/v1beta1/types.go –

+3

So che non è esatto ma questo è un buon riferimento . https://cloud.google.com/compute/docs/containers/container_vms#container_manifest – Damien

+0

Grazie, entrambi. Questo aiuta. – static416

21

per coloro che desiderano utilizzare un comando con parametri, è necessario fornire una serie

ad esempio

command: [ "bin/bash", "-c", "mycommand" ] 

o anche

command: 
    - "bin/bash" 
    - "-c" 
    - "mycommand" 
+0

Il 'mycommand' può contenere spazi? –

+1

una riga è un parametro. se hai degli spazi nei tuoi parametri, va bene, ma non sarà analizzato come più parametri – MrE

+0

Qual è lo scopo di 'args' se uno potrebbe specificare tutti gli argomenti usando' command'? –

4

Per rispondere alla domanda di Derek Mahar nei commenti sopra:

Qual è lo scopo di args se si potesse specificare tutto ar gumenti usando il comando?

I file Docker possono avere solo un punto di accesso o solo una CMD o entrambi.

Se utilizzati insieme, allora tutto ciò che è in CMD viene passato al comando in EntryPoint come argomenti cioè

ENTRPOINT ["print"] 
CMD ["hello", "world"] 

Così in kubernetes quando si specifica un comando cioè

command: ["print"] 

avrà la precedenza il valore di Entrypoint nel Dockerfile del contenitore.

Se si specificano solo argomenti, tali argomenti verranno passati a qualsiasi comando presente nel punto di accesso del contenitore.

Problemi correlati