web-dev-qa-db-fra.com

Comment passer l'image pull secret en utilisant la commande 'kubectl run'?

J'essaie d'utiliser la commande d'exécution de kubectl pour extraire une image du registre privé et exécuter une commande à partir de cela. Mais je ne vois pas d'option pour spécifier le secret de traction de l'image. Il semble qu'il ne soit pas possible de transmettre le secret de l'image dans le cadre de la commande run.

Existe-t-il une autre option pour extraire un conteneur et exécuter une commande à l'aide de kubectl? La sortie de la commande doit être visible sur la console. De plus, une fois la commande terminée, le pod doit mourir.

21
noorul

Vous pouvez utiliser les remplacements si vous le spécifiez correctement, c'est un tableau à la fin, qui m'a pris un peu pour comprendre, ce qui suit fonctionne sur Kubernetes d'au moins 1,6:

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

par exemple

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"}] } }'

17
Elmar Weber

Vous pouvez créer le docker-registry secret comme décrit sur le lien @ MarkO'Connor, puis ajoutez-le au ServiceAccount par défaut. C'est le SA qui agit au nom des pods, y compris en tirant leurs images.

De Ajout d'ImagePullSecrets à un compte de service :

$ 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

Maintenant, tous les nouveaux pods créés dans l'espace de noms actuel auront ceci ajouté à leurs spécifications:

spec:
  imagePullSecrets:
  - name: myregistrykey
21
mgoodness

Sous Windows, vous pouvez faire patch, mais comme cela montre une erreur JSON, vous devez faire cette astuce (en utilisant PowerShell):

> $imgsec=  '{"imagePullSecrets": [{"name": "myregistrykey"}]}' | ConvertTo-Json
> kubectl patch serviceaccount default -p $imgsec

De plus, si vous souhaitez mettre à jour/ajouter imagePullSecret, vous devez utiliser quelque chose comme ceci:

> $imgsec=  '[{"op":"add","path":"/imagePullSecrets/-","value":{"name":"myregistrykey2"}}]' | ConvertTo-Json

> kubectl patch serviceaccount default --type='json' -p  $imgsec

.

2
Paras Patidar

Pour autant que je sache, vous ne pouvez pas, mais vous pouvez utiliser kubectl run nginx --image=nginx --overrides='{ "apiVersion": "v1", "spec": { ... } }', mais ce n'est pas très différent de ce que vous pouvez faire avec kubectl create -f mypod.json

Ce que je pense que vous recherchez n'est pas un Pod mais un Job, par exemple, si vous devez remplir une base de données, vous pouvez créer un conteneur qui le fait et l'exécuter en tant que travail au lieu d'un pod ou d'un jeu de réplicas.

Kubectl run ... crée des objets de déploiement orjob`. Les travaux se terminent à la fin de l'exécution du pod et vous pouvez consulter les journaux.

Jetez un œil ici et ici pour la terminaison

2
Ivan Pedrazas