kubectl run コマンドを使用してプライベート レジストリからイメージを取得し、そこからコマンドを実行しようとしています。しかし、イメージのプル シークレットを指定するオプションが表示されません。run コマンドの一部としてイメージ シークレットを渡すことはできないようです。
コンテナーをプルして、kubectl を使用してコマンドを実行する代替オプションはありますか? コマンド出力はコンソールに表示されます。また、コマンドが終了すると、ポッドは終了するはずです。
kubectl run コマンドを使用してプライベート レジストリからイメージを取得し、そこからコマンドを実行しようとしています。しかし、イメージのプル シークレットを指定するオプションが表示されません。run コマンドの一部としてイメージ シークレットを渡すことはできないようです。
コンテナーをプルして、kubectl を使用してコマンドを実行する代替オプションはありますか? コマンド出力はコンソールに表示されます。また、コマンドが終了すると、ポッドは終了するはずです。
正しく指定すればオーバーライドを使用できます。最終的には配列なので、理解するのに少し時間がかかりました。以下は少なくとも 1.6 の Kubernetes で動作します。
--overrides='{ "spec": { "template": { "spec": { "imagePullSecrets": [{"name": "your-registry-secret"}] } } } }'
例えば
kubectl run -i -t hello-world --rm --generator=run-pod/v1 \
--image=eu.gcr.io/your-registry/hello-world \
--image-pull-policy="IfNotPresent" \
--overrides='{ "spec": { "template": { "spec": { "imagePullSecrets": [{"name": "your-registry-secret"}] } } } }'
@MarkO'Connor のリンクで説明されているようにシークレットを作成し、docker-registry
それをデフォルトの ServiceAccount に追加できます。イメージのプルなど、ポッドに代わって機能するのは SA です。
サービス アカウントへの ImagePullSecrets の追加から:
$ 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
これで、現在の名前空間で作成された新しいポッドには、これが仕様に追加されます。
spec:
imagePullSecrets:
- name: myregistrykey
私が知る限り、あなたはできませんが、使用することはできますがkubectl run nginx --image=nginx --overrides='{ "apiVersion": "v1", "spec": { ... } }'
、これはあなたができることとそれほど違いはありませんkubectl create -f mypod.json
たとえば、データベースにデータを入力する必要がある場合は、それを行うコンテナーを作成し、ポッドまたはレプリカ セットの代わりにジョブとして実行できPod
ます。Job
Kubectl run ...
展開or
ジョブ オブジェクトを作成します。ポッドの実行が終了するとジョブが終了し、ログを確認できます。