Kubectl runコマンドを使用して、プライベートレジストリからイメージを取得し、そこからコマンドを実行しようとしています。しかし、イメージプルシークレットを指定するオプションが表示されません。 runコマンドの一部としてイメージシークレットを渡すことはできないようです。
Kubectlを使用してコンテナをプルし、コマンドを実行する代替オプションはありますか?コマンド出力はコンソールに表示されるはずです。また、コマンドが終了すると、ポッドは死ぬはずです。
正しく指定した場合はオーバーライドを使用できます。最後に配列であるため、少し理解するのに時間がかかりました。以下は少なくとも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"}] } }'
@ 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
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
。
私が知る限り、あなたはできないが、kubectl run nginx --image=nginx --overrides='{ "apiVersion": "v1", "spec": { ... } }'
を使用することができるが、これはkubectl create -f mypod.json
でできることとそれほど変わらない
私があなたが望んでいるのはPod
ではなくJob
です。たとえば、データベースにデータを入力する必要がある場合、それを行うコンテナを作成し、それをポッドまたはレプリカセットの代わりにジョブ。
Kubectl run ...
はdeployment or
job`オブジェクトを作成します。ポッドの実行が終了するとジョブが終了し、ログを確認できます。
こちらをご覧ください および ここで終了の場合