Как передать Image pull secret при использовании команды "kubectl run"?
Я пытаюсь использовать команду kubectl run, чтобы вытащить изображение из частного реестра и запустить команду из этого. Но я не вижу возможности указать Image pull secret. Похоже, что невозможно передать секрет изображения как часть команды run.
есть ли альтернативный вариант вытащить контейнер и запустить команду с помощью kubectl? Вывод команды должен отображаться на консоли. Также, как только команда закончит, стручок должен умереть.
3 ответов
вы можете использовать переопределения, если вы укажете его правильно, это массив в конце концов, мне потребовалось немного, чтобы понять, что ниже работает на Kubernetes по крайней мере 1.6:
--overrides='{ "apiVersion": "v1", "spec": { "imagePullSecrets": [{"name": "your-secret"}] } }'
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"}] } }'
вы можете создать docker-registry
секрет, как описано в ссылке @Marko'Connor, затем добавьте его в ServiceAccount по умолчанию. Это SA, который действует от имени стручков, включая вытягивание их изображений.
С добавление ImagePullSecrets в учетную запись службы:
$ kubectl create secret docker-registry myregistrykey --docker-username=janedoe --docker-password=●●●●●●●●●●● --docker-email=jdoe@example.com
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
Теперь любые новые модули, созданные в текущем пространстве имен, будут добавлены к их спецификации:
spec:
imagePullSecrets:
- name: myregistrykey
насколько я знаю, вы не можете, но вы можете использовать kubectl run nginx --image=nginx --overrides='{ "apiVersion": "v1", "spec": { ... } }'
, но это не очень отличается от того, что вы можете сделать с kubectl create -f mypod.json
то, что я думаю, что вы после не Pod
но Job
, например, если вам нужно заполнить базу данных, вы можете создать контейнер, который делает это, и запустить его как задание вместо pod или набора реплик.
Kubectl run ...
создает развертыванияработа. Задания заканчиваются, когда выполнение pod завершается, и вы можете проверить системный журнал.