web-dev-qa-db-ja.com

Kubernetesのプライベートレジストリから画像を取得する

すべてがCoreOSで実行されているマルチコンテナポッドを実行する4ノードkubernetesクラスターを構築しました。画像は、パブリックおよびプライベートのリポジトリから取得されます。現在、各ノードにログインし、更新するたびに手動でイメージをプルダウンする必要があります。それらを自動的にプルできるようにしたいと思います。

  1. 各サーバーでdocker loginを実行し、.dockercfgファイルを/ rootと/ coreに入れてみました
  2. また、.docker/config.jsonを使用して上記を実行しました。
  3. Kubeマスターにシークレットを追加し、imagePullSecretsを追加しました:
    • 名前:docker.ioからPod構成ファイルへ。

ポッドを作成すると、エラーメッセージError:が表示されます。

image <user/image>:latest not found

ログインしてdocker pullを実行すると、イメージがプルされます。 docker.ioとquay.ioを使用してこれを試しました。

24
KSB

Kubernetesは、ポッドの画像を取得するために使用できる特別なタイプの秘密を作成できます。詳細 こちら

7
Rob

@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
53
Chief

プライベート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
16
Bcf Ant

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でテスト済み

7
delfer

Centos7の場合、docker構成ファイルは/root/.dockercfgの下にあります

  1. echo $(cat /root/.dockercfg)| base64 -w 0
  2. 古い形式に基づいて、秘密のYAMLに結果をコピーして貼り付けます。

    apiVersion:  v1
    kind: Secret
    metadata:
      name: docker-secret
      type: kubernetes.io/dockercfg
    data:
      .dockercfg: <YOUR_BASE64_JSON_HERE> 
    

そしてそれは私にとってはうまくいきました。

3
Jane

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は前のコマンドで指定した名前です。

0
MagMax