noo*_*rul 24 kubernetes kubectl
我正在尝试使用kubectl run命令从私有注册表中提取图像并从中运行命令.但我没有看到指定图像拉秘密的选项.看起来像是无法将图像密码作为运行命令的一部分传递.
是否有任何备用选项来拉动容器并使用kubectl运行命令?应在控制台上看到命令输出.一旦命令完成,pod应该死掉.
小智 23
你可以docker-registry按@ MarkO'Connor链接中的描述创建秘密,然后将其添加到默认的ServiceAccount.这是代表豆荚的SA,包括拉动它们的图像.
$ 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
Run Code Online (Sandbox Code Playgroud)
现在,在当前命名空间中创建的任何新pod都会将其添加到其规范中:
spec:
imagePullSecrets:
- name: myregistrykey
Run Code Online (Sandbox Code Playgroud)
Elm*_*ber 18
你可以使用覆盖,如果你指定它是正确的,它最后是一个数组,我需要一点点弄清楚,下面的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"}] } }'
由于kubectl run现在只部署一个 Pod,正确的覆盖是:
kubectl run --image=your.private.registry/nginx nginx --overrides='{ "spec": { "imagePullSecrets": [{"name": "your-registry-secret"}] } }'
Run Code Online (Sandbox Code Playgroud)
在Windows 上,您可以执行patch,但是当它显示 JSON 错误时,您必须执行此技巧(使用 PowerShell):
> $imgsec= '{"imagePullSecrets": [{"name": "myregistrykey"}]}' | ConvertTo-Json
> kubectl patch serviceaccount default -p $imgsec
Run Code Online (Sandbox Code Playgroud)
另外,如果你想更新/附加 imagePullSecret ,那么你应该使用这样的东西:
> $imgsec= '[{"op":"add","path":"/imagePullSecrets/-","value":{"name":"myregistrykey2"}}]' | ConvertTo-Json
> kubectl patch serviceaccount default --type='json' -p $imgsec
Run Code Online (Sandbox Code Playgroud)
.
通常,当您需要kubectl run它时,是因为您正在测试一些临时的东西,在一个已经拥有 docker 注册表秘密来访问私有注册表的命名空间中。因此,最简单的方法是编辑默认服务帐户,以在不存在 pull secret 时为其提供要使用的 pull secret(对于 来说就是这种情况kubectl run):
kubectl edit serviceaccount default
Run Code Online (Sandbox Code Playgroud)
编辑将显示与此类似的内容:
apiVersion: v1
kind: ServiceAccount
metadata:
creationTimestamp: "2019-04-16T14:48:17Z"
name: default
namespace: integration-testing
resourceVersion: "60516585"
selfLink: /api/v1/namespaces/integration-testing/serviceaccounts/default
uid: ab7b767d-6056-11e9-bba8-0ecf3bdac4a0
secrets:
- name: default-token-4nnk4
Run Code Online (Sandbox Code Playgroud)
只需附加一个imagePullSecrets:
imagePullSecrets:
- name: <name-of-your-docker-registry-password-secret>
Run Code Online (Sandbox Code Playgroud)
所以它看起来像这样:
apiVersion: v1
kind: ServiceAccount
metadata:
creationTimestamp: "2019-04-16T14:48:17Z"
name: default
namespace: integration-testing
resourceVersion: "60516585"
selfLink: /api/v1/namespaces/integration-testing/serviceaccounts/default
uid: ab7b767d-6056-11e9-bba8-0ecf3bdac4a0
secrets:
- name: default-token-4nnk4
imagePullSecrets:
- name: <name-of-your-docker-registry-password-secret>
Run Code Online (Sandbox Code Playgroud)
假设 name is YOUR_PWD_SECRET,那么这个秘密必须存在于 kubectl 上下文的命名空间中:
tooluser:/host $ kubectl get secret YOUR_PWD_SECRET
NAME TYPE DATA AGE
YOUR_PWD_SECRET kubernetes.io/dockerconfigjson 1 186d
Run Code Online (Sandbox Code Playgroud)
如果它不存在,您必须创建它,从头开始或从另一个命名空间复制它(最好的方法是由 NicoKowe 在/sf/answers/4076488601/回答)。
使用保存您的 docker 注册表密码的秘密、kubectl run将执行的同一命名空间中的秘密,以及kubectl run将秘密列为 imagePullSecrets 的默认服务帐户,它将起作用。
| 归档时间: |
|
| 查看次数: |
15298 次 |
| 最近记录: |