web-dev-qa-db-ja.com

「kubectl run」コマンドの使用中にイメージプルシークレットを渡す方法

Kubectl runコマンドを使用して、プライベートレジストリからイメージを取得し、そこからコマンドを実行しようとしています。しかし、イメージプルシークレットを指定するオプションが表示されません。 runコマンドの一部としてイメージシークレットを渡すことはできないようです。

Kubectlを使用してコンテナをプルし、コマンドを実行する代替オプションはありますか?コマンド出力はコンソールに表示されるはずです。また、コマンドが終了すると、ポッドは死ぬはずです。

21
noorul

正しく指定した場合はオーバーライドを使用できます。最後に配列であるため、少し理解するのに時間がかかりました。以下は少なくとも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"}] } }'

17
Elmar Weber

@ MarkO'Connorのリンクで説明されているようにdocker-registryシークレットを作成し、それをデフォルトのServiceAccountに追加できます。 SAが、画像のプルを含む、ポッドに代わって動作します。

から ImagePullSecretsをサービスアカウントに追加

$ 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
21
mgoodness

Windowsではpatchを実行できますが、JSONエラーが表示されるため、次のトリックを実行する必要があります(PowerShellを使用)。

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

また、imagePullSecretを更新/追加する場合は、次のようなものを使用する必要があります。

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

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

2
Paras Patidar

私が知る限り、あなたはできないが、kubectl run nginx --image=nginx --overrides='{ "apiVersion": "v1", "spec": { ... } }'を使用することができるが、これはkubectl create -f mypod.jsonでできることとそれほど変わらない

私があなたが望んでいるのはPodではなくJobです。たとえば、データベースにデータを入力する必要がある場合、それを行うコンテナを作成し、それをポッドまたはレプリカセットの代わりにジョブ。

Kubectl run ...はdeployment orjob`オブジェクトを作成します。ポッドの実行が終了するとジョブが終了し、ログを確認できます。

こちらをご覧ください および ここで終了の場合

2
Ivan Pedrazas