2016-10-27 23 views
8

我正在尝试使用kubectl run命令从私有注册表中提取图像并从中运行命令。但我没有看到一个选项来指定图像拉的秘密。它看起来不可能将图像秘密作为运行命令的一部分传递。如何在使用'kubectl run'命令时传递图像拉密?

是否有任何替代选项来拉取容器并使用kubectl运行命令?应该在控制台上看到命令输出。一旦命令完成,吊舱应该死亡。

+0

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

+0

@ MarkO'Connor感谢您的链接。这是一个有趣的阅读。但我正在寻找使用kubectl运行命令。 – noorul

+0

@ MarkO'Connor我更新了问题 – noorul

回答

6

您可以按照@ MarkO'Connor的链接中所述创建docker-registry秘密,然后将其添加到默认的ServiceAccount中。这是代表豆荚的SA,包括拉扯他们的图像。

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 

现在,在当前的命名空间创建的任何新的豆荚都会有这种添加到他们的规格:

spec: 
    imagePullSecrets: 
    - name: myregistrykey 
+5

简单:'kubectl patch serviceaccount default -p'{“imagePullSecrets”:[{“name”:“myregistrykey”}]}'' – Raman

1

据我知道你不能,但你可以使用kubectl run nginx --image=nginx --overrides='{ "apiVersion": "v1", "spec": { ... } }' ,但这与你可以用kubectl create -f mypod.json

做什么并没有太大区别。我认为你在追求的不是Pod,但例如,如果您需要填充数据库,则可以创建一个容器来执行该操作,并将其作为工作而不是pod或副本集运行。

Kubectl run ...创建部署or作业对象。作业在pod执行终止时完成,您可以检查日志。

Take a look herehere for the termination

+0

好主意,但运行后我得到了“错误:api.Secret并不适合转换到“extensions/v1beta1”。所以我认为他们已经禁用了这个命令。命令是'kubectl run ovass-fetcher - $(date +%s)--image = nginx --overrides =“$(kubectl get secret registrykey -o json)“'我之前设置了一个工作密码:registrykey。 – wassname

+0

@wassname查看我的答案,下面以一个例子来说明它至少在K8s 1.6或更高版本上是如何工作的 –

0

如果指定是正确的,这是最终的阵列可以使用覆盖,我花了一点要弄清楚,下面的工作就至少1.6 Kubernetes:

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

相关问题