2015-03-11 12 views
23

Korzystając z floty, mogę określić polecenie, które ma zostać uruchomione w kontenerze, gdy jest uruchomione. Wygląda na to, że powinno to być również możliwe z Kubernetes, ale nie mogę znaleźć niczego, co mówi jak. Wygląda na to, że musisz utworzyć kontener specjalnie do uruchomienia przy użyciu określonego polecenia.Uruchom kontener kernernetes za pomocą specjalnego polecenia:

Posiadanie kontenera ogólnego przeznaczenia i uruchamianie go z różnymi argumentami jest znacznie prostsze niż tworzenie wielu różnych kontenerów dla konkretnych przypadków lub ustawianie i pobieranie zmiennych środowiskowych.

Czy jest możliwe określenie polecenia uruchamiania kapsuły kubernetes w obrazie Docker?

Odpowiedz

31

Spędzam 45 minut na szukanie tego. Następnie zamieszczam pytanie na ten temat i znajduję rozwiązanie 9 minut później.

Jest wskazówka, co chciałem wewnątrz Cassandra example. Linia command poniżej obrazka:

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 

Mimo znalezienia rozwiązania, byłoby miło, gdyby nie było gdzieś oczywiste w projekcie Kubernetes gdzie mogłem zobaczyć wszystkie z możliwych opcji dla różnych plików konfiguracyjnych (pod , usługa, kontroler replikacji).

+3

AFAIK, obecnie dostępne są dwie przyzwoite opcje: 1) Przejdź do kodu głównego klastra https: // YOUR-IP-HERE/swagger-ui/page. Pozwala to przeglądać dostępne polecenia REST i ich szczegóły dotyczące obiektów. 2) Patrz bezpośrednio na definicję API w kodzie: https://github.com/GoogleCloudPlatform/kubernetes/blob/master/pkg/api/v1beta1/types.go –

+3

Wiem, że nie jest ona dokładna, ale jest to dobre odniesienie . https://cloud.google.com/compute/docs/containers/container_vms#container_manifest – Damien

+0

Dziękuję, oboje. To pomaga. – static416

21

dla tych, którzy chcą użyć polecenia z parametrami, trzeba dostarczyć tablicę

np

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

lub też

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

Czy 'mycommand' może zawierać spacje? –

+1

jedna linia to jeden parametr. jeśli masz spacje w swoich parametrach, to jest w porządku, ale nie będzie parsowane jako wiele parametrów. – MrE

+0

Jaki jest cel "argumentów", jeśli można podać wszystkie argumenty za pomocą komendy 'command'? –

4

Aby odpowiedzieć na pytanie, Derek Mahar w komentarzach powyżej:

Jaki jest cel argumentów, jeśli można określić wszystkie guments za pomocą polecenia?

Pliki dokowane mogą mieć tylko punkt wejścia lub tylko CMD lub obie razem.

Jeśli używane razem, to co jest w CMD jest przekazywana do polecenia w punkt_wejścia jako argumenty tj

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

Więc w Kubernetes gdy podasz komendy tj

command: ["print"] 

Będzie ona zastąpić wartość punktu wejścia w pliku Dockerfolda kontenera.

Jeśli podasz tylko argumenty, te argumenty zostaną przekazane do dowolnego polecenia w punkcie wejścia kontenera.

Powiązane problemy