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.
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"}] } }'
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
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
.
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 or
job`. Les travaux se terminent à la fin de l'exécution du pod et vous pouvez consulter les journaux.