すべてがCoreOSで実行されているマルチコンテナポッドを実行する4ノードkubernetesクラスターを構築しました。画像は、パブリックおよびプライベートのリポジトリから取得されます。現在、各ノードにログインし、更新するたびに手動でイメージをプルダウンする必要があります。それらを自動的にプルできるようにしたいと思います。
ポッドを作成すると、エラーメッセージError:が表示されます。
image <user/image>:latest not found
ログインしてdocker pullを実行すると、イメージがプルされます。 docker.ioとquay.ioを使用してこれを試しました。
Kubernetesは、ポッドの画像を取得するために使用できる特別なタイプの秘密を作成できます。詳細 こちら 。
@robが言ったことに加えて、docker 1.7では、.dockercfgの使用は非推奨になり、〜/ .docker/config.jsonファイルを使用するようになりました。 kube 1.1にはこのタイプの秘密がサポートされていますが、yamlの異なるキー/タイプ設定を使用して作成する必要があります。
まず、~/.docker/config.json
:
cat ~/.docker/config.json | base64 -w0
Base64エンコーディングは1行で表示されるため、-w0を使用するとラッピングが無効になることに注意してください。
次に、yamlファイルを作成します:my-secret.yaml
apiVersion: v1
kind: Secret
metadata:
name: registrypullsecret
data:
.dockerconfigjson: <base-64-encoded-json-here>
type: kubernetes.io/dockerconfigjson
-
$ kubectl create -f my-secret.yaml && kubectl get secrets
NAME TYPE DATA
default-token-olob7 kubernetes.io/service-account-token 2
registrypullsecret kubernetes.io/dockerconfigjson 1
次に、ポッドのyamlでregistrypullsecret
を参照するか、レプリケーションコントローラーを作成する必要があります。
apiVersion: v1
kind: Pod
metadata:
name: my-private-pod
spec:
containers:
- name: private
image: yourusername/privateimage:version
imagePullSecrets:
- name: registrypullsecret
プライベートDocker Hubリポジトリからイメージをプルする必要がある場合は、次を使用できます。
秘密鍵を作成する
kubectl create secret docker-registry myregistrykey --docker-server=DOCKER_REGISTRY_SERVER --docker-username=DOCKER_USER --docker-password=DOCKER_PASSWORD --docker-email=DOCKER_EMAIL
秘密の「myregistrykey」が作成されました。
次に、新しく作成したキーをKubernetesサービスアカウントに追加します。
現在のサービスアカウントを取得する
kubectl get serviceaccounts default -o yaml > ./sa.yaml
Sa.yamlを編集し、Secretsの後にImagePullSecretを追加します
imagePullSecrets:
- name: myregistrykey
サービスアカウントの更新
kubectl replace serviceaccount default -f ./sa.yaml
ImagePullSecrets 展開で動作しないであることを確認できますが、
kubectl create secret docker-registry myregistrykey --docker-server=DOCKER_REGISTRY_SERVER --docker-username=DOCKER_USER --docker-password=DOCKER_PASSWORD --docker-email=DOCKER_EMAIL
kubectl edit serviceaccounts default
追加する
imagePullSecrets:
- name: myregistrykey
Secrets
の後の最後まで保存して終了します。そしてその作品。 Kubernetes 1.6.7でテスト済み
Centos7の場合、docker構成ファイルは/root/.dockercfgの下にあります
古い形式に基づいて、秘密のYAMLに結果をコピーして貼り付けます。
apiVersion: v1
kind: Secret
metadata:
name: docker-secret
type: kubernetes.io/dockercfg
data:
.dockercfg: <YOUR_BASE64_JSON_HERE>
そしてそれは私にとってはうまくいきました。
Docker設定と同じ資格情報でシークレットを作成する最も簡単な方法は次のとおりです。
kubectl create secret generic myregistry --from-file=.dockerconfigjson=$HOME/.docker/config.json
これはすでにbase64のデータをエンコードしています。
Dockerで画像をダウンロードできる場合、kubernetesもそれらをダウンロードできるはずです。ただし、これをkubernetesオブジェクトに追加する必要があります。
spec:
template:
spec:
imagePullSecrets:
- name: myregistry
containers:
# ...
ここで、myregistry
は前のコマンドで指定した名前です。