2016-10-27 10 views
8

Próbuję użyć polecenia uruchomienia kubectl, aby pobrać obraz z prywatnego rejestru i uruchomić polecenie z tego. Ale nie widzę opcji określenia tajnego obrazu. Wygląda na to, że nie można przekazać tajnego obrazu jako części polecenia run.Jak przesłać tajny obraz przy użyciu polecenia "uruchom kubectl"?

Czy istnieje alternatywa do wyciągnięcia kontenera i wykonania polecenia za pomocą kubectl? Dane wyjściowe polecenia powinny być widoczne na konsoli. Również po zakończeniu polecenia kapsuła powinna zginąć.

+0

http://kubernetes.io/ docs/user-guide/production-pods/# authentating-with-a-private-image-registry –

+0

@ MarkO'Connor Dziękujemy za link. To była interesująca lektura. Ale szukam użyć polecenia uruchomienia kubectl. – noorul

+0

@ MarkO'Connor Zaktualizowałem pytanie – noorul

Odpowiedz

6

Można utworzyć tajny klucz docker-registry zgodnie z opisem w odnośniku @ MarkO'Connor, a następnie dodać go do domyślnego konta ServiceAccount. To SA, która działa w imieniu strąków, w tym ciągnięcie ich zdjęć.

Od Adding ImagePullSecrets to a service account:

$ kubectl create secret docker-registry myregistrykey --docker-username=janedoe --docker-password=●●●●●●●●●●● [email protected] 
secret "myregistrykey" created 

$ kubectl get serviceaccounts default -o yaml > ./sa.yaml 

$ cat sa.yaml 
apiVersion: v1 
kind: ServiceAccount 
metadata: 
    creationTimestamp: 2015-08-07T22:02:39Z 
    name: default 
    namespace: default 
    resourceVersion: "243024" 
    selfLink: /api/v1/namespaces/default/serviceaccounts/default 
    uid: 052fb0f4-3d50-11e5-b066-42010af0d7b6 
secrets: 
- name: default-token-uudge 

$ vi sa.yaml 
[editor session not shown] 
[delete line with key "resourceVersion"] 
[add lines with "imagePullSecret:"] 

$ cat sa.yaml 
apiVersion: v1 
kind: ServiceAccount 
metadata: 
    creationTimestamp: 2015-08-07T22:02:39Z 
    name: default 
    namespace: default 
    selfLink: /api/v1/namespaces/default/serviceaccounts/default 
    uid: 052fb0f4-3d50-11e5-b066-42010af0d7b6 
secrets: 
- name: default-token-uudge 
imagePullSecrets: 
- name: myregistrykey 

$ kubectl replace serviceaccount default -f ./sa.yaml 

Teraz wszystkie nowe strąki utworzone w bieżącym obszarze nazw będzie mieć ten dodany do ich specyfikacji:

spec: 
    imagePullSecrets: 
    - name: myregistrykey 
+5

Prostsze: 'kubectl patch serviceaccount default -p '{" imagePullSecrets ": [{" name ":" myregistrykey "}]}'' – Raman

1

O ile wiem, nie można, ale można użyj kubectl run nginx --image=nginx --overrides='{ "apiVersion": "v1", "spec": { ... } }' , ale to nie różni się znacząco od tego, co możesz zrobić z kubectl create -f mypod.json

To, o czym myślę, że szukasz, to nie jest Pod, ale na przykład Job, jeśli konieczne jest zapełnienie bazy danych, można utworzyć kontener, który to robi i uruchomić jako zadanie zamiast zestawu lub zestawu replik.

tworzy rozmieszczenie or obiektów pracy. Zadania kończą się, gdy zakończy się działanie na podajnik i można sprawdzić dzienniki.

Take a look here i here for the termination

+0

Dobry pomysł, ale po uruchomieniu go dostałem "błąd: api.Secret nie nadaje się do konwersji do "extensions/v1beta1", więc myślę, że wyłączyli to celowo. Polecenie to: 'kubectl run ovass-fetcher - $ (date +% s) --image = nginx --overrides =" $ (kubectl get secretkeykey -o json) "gdzie wcześniej utworzyłem działający sekret: klucz rejestru: – wassname

+0

@ nazwa pliku sprawdź poniżej moją odpowiedź z przykładem jak to działa co najmniej na K8s 1.6 lub nowszym –

0

Można użyć nadpisania jeśli podasz to prawda, to tablica w końcu, że zajęło mi trochę, aby dowiedzieć się, poniżej działa na Kubernetes co najmniej 1,6:

--overrides='{ "apiVersion": "v1", "spec": { "imagePullSecrets": [{"name": "your-secret"}] } }'

np

kubectl run -i -t hello-world --restart=Never --rm=true \ --image=eu.gcr.io/your-registry/hello-world \ --overrides='{ "apiVersion": "v1", "spec": { "imagePullSecrets": [{"name": "your-registry-secret"}] } }'

Powiązane problemy