この文書は自動機械翻訳技術を使用して翻訳されています。 正確な翻訳を提供するように努めておりますが、翻訳された内容の完全性、正確性、信頼性については一切保証いたしません。 相違がある場合は、元の英語版 英語 が優先され、正式なテキストとなります。

Kubernetesレジストリとコンテナイメージレジストリ

レジストリは、 プライベートコンテナレジストリに認証するために使用される資格情報を含むKubernetesシークレットです。

「レジストリ」という言葉は、コンテナレジストリまたはKubernetesレジストリを指すかどうかによって2つの意味を持つことがあります。

  • コンテナイメージレジストリ(以前は「Dockerレジストリ」と呼ばれていました)は、プルしてデプロイできるコンテナイメージを含んでいます。レジストリは、コンテナイメージを保存し、配布できるステートレスでスケーラブルなサーバーサイドアプリケーションです。

  • *Kubernetesレジストリ*は、デプロイメントがイメージレジストリに認証するために使用するイメージプルシークレットです。

デプロイメントは、Kubernetesレジストリシークレットを使用してプライベートイメージレジストリに認証し、その後、ホストされているコンテナイメージをプルします。

現在、デプロイメントは、ワークロードがRancher UIで作成された場合にのみプライベートレジストリの資格情報を自動的にプルし、kubectlを介して作成された場合にはプルしません。

ネームスペースにレジストリを作成する

前提条件:

利用可能なプライベートレジストリがすでにデプロイされている必要があります。

プライベートレジストリを作成する必要がある場合は、それぞれのランタイムのドキュメントページを参照してください。

  1. 左上隅で、*☰ > クラスター管理*をクリックします。

  2. レジストリを追加したいクラスターに移動し、*Explore*をクリックします。

  3. 左側のナビゲーションで、ストレージ  シークレットまたはその他のリソース  コア  シークレットのいずれかをクリックします。

  4. 作成]をクリックします。

  5. *レジストリ*をクリックします。

  6. レジストリの*名前*を入力してください。

    Kubernetesは、シークレット、証明書、レジストリをすべて シークレットとして分類し、プロジェクトまたはネームスペース内の2つのシークレットが同じ名前を持つことはできません。したがって、競合を防ぐために、レジストリはワークスペース内のすべてのシークレットの中で一意の名前を持つ必要があります。

  7. レジストリのためのネームスペースを選択します。

  8. プライベートレジストリをホストしているウェブサイトを選択します。次に、レジストリに認証するための資格情報を入力します。例えば、Docker Hubを使用する場合は、Docker Hubのユーザー名とパスワードを提供してください。

  9. 保存]をクリックします。

結果:

  • あなたのシークレットは、選択したネームスペースに追加されます。

  • シークレットは、ストレージ  シークレットまたはその他のリソース  コア  シークレットをクリックすることでRancher UIで表示できます。

  • Rancher UIで作成する任意のワークロードは、ワークロードがレジストリの範囲内にある場合、レジストリにアクセスするための資格情報を持ちます。

プロジェクトにおけるレジストリの作成

前提条件:

利用可能なプライベートレジストリがすでにデプロイされている必要があります。

プライベートレジストリを作成する必要がある場合は、それぞれのランタイムのドキュメントページを参照してください。

v2.6以前は、シークレットはプロジェクトの範囲内にある必要がありました。プロジェクトはもはや必要ではなく、代わりにネームスペースの範囲を使用できます。その結果、Rancher UIはこの新しい機能を反映するように更新されました。ただし、必要に応じてプロジェクトスコープのレジストリを作成することもできます。以下の手順を使用して行います:

  1. 左上隅で、ドロップダウンの中から*☰ > グローバル設定*をクリックします。

  2. *機能フラグ*をクリックします。

  3. `legacy`機能フラグに移動し、*有効化*をクリックします。

  4. 左上隅で、*☰ > クラスター管理*をクリックします。

  5. レジストリを追加したいクラスターに移動し、*Explore*をクリックします。

  6. 左側のナビゲーションで、ストレージ  シークレットまたはその他のリソース  コア  シークレットのいずれかをクリックします。

  7. 作成]をクリックします。

  8. *レジストリ*をクリックします。

  9. 上部のナビゲーションバーで、単一のプロジェクトのみを表示するようにフィルタリングします。

  10. レジストリの*名前*を入力してください。

    Kubernetesは、シークレット、証明書、レジストリをすべて シークレットとして分類し、プロジェクトまたはネームスペース内の2つのシークレットが同じ名前を持つことはできません。したがって、競合を防ぐために、レジストリはワークスペース内のすべてのシークレットの中で一意の名前を持つ必要があります。

  11. レジストリのためのネームスペースを選択します。

  12. プライベートレジストリをホストしているウェブサイトを選択します。次に、レジストリに認証するための資格情報を入力します。例えば、Docker Hubを使用する場合は、Docker Hubのユーザー名とパスワードを提供してください。

  13. 保存]をクリックします。

結果:

  • あなたのシークレットは、選択した個々のプロジェクトに追加されます。

  • シークレットは、ストレージ  シークレットまたはその他のリソース  コア  シークレットをクリックすることでRancher UIで表示できます。

  • Rancher UIで作成する任意のワークロードは、ワークロードがレジストリの範囲内にある場合、レジストリにアクセスするための資格情報を持ちます。

ローカルクラスタのプロジェクトスコープのレジストリは、単一のプロジェクトが選択されているときのみ表示されます。

プライベートレジストリの使用

Rancher UIを通じて、または`kubectl`を使用して、プライベートレジストリからのイメージでワークロードをデプロイすることができます。

Rancher UIでプライベートレジストリを使用する

プライベートレジストリからのイメージでワークロードをデプロイするには、

  1. 左上隅で、*☰ > クラスター管理*をクリックします。

  2. ワークロードをデプロイしたいクラスターに移動し、*Explore*をクリックします。

  3. *ワークロード*をクリックします。

  4. 作成]をクリックします。

  5. 作成するワークロードのタイプを選択します。

  6. ワークロードのためにユニークな名前を入力し、ネームスペースを選択します。

  7. *Container Image*フィールドに、プライベートレジストリ内のイメージへのパスのURLを入力します。例えば、プライベートレジストリがQuay.ioにある場合、`quay.io/<Quay profile name>/<Image name>`を使用できます。

  8. 作成]をクリックします。

*結果:*デプロイメントは起動し、Rancher UIで追加したプライベートレジストリの認証情報を使用して認証し、指定したコンテナイメージをプルします。

kubectlでプライベートレジストリを使用する

`kubectl`を使用してワークロードを作成する際には、ポッドのYAMLにプライベートレジストリ内のイメージへのパスを設定する必要があります。ポッドはRancher UIで作成された場合のみ、プライベートレジストリの認証情報に自動的にアクセスできるため、レジストリシークレットを作成して参照する必要があります。

シークレットは、ワークロードがデプロイされるのと同じネームスペースで作成する必要があります。

以下は、プライベートレジストリからのイメージを使用するワークロードの例`pod.yml`です。この例では、ポッドはQuay.ioからのイメージを使用し、.ymlはイメージへのパスを指定しています。ポッドは、`name`フィールドの`spec.imagePullSecrets`で指定されたKubernetesシークレットに保存された認証情報を使用してレジストリに認証します。シークレットの名前は`testquay`です。

apiVersion: v1
kind: Pod
metadata:
  name: private-reg
spec:
  containers:
  - name: private-reg-container
    image: quay.io/<Quay profile name>/<image name>
  imagePullSecrets:
  - name: testquay

この例では、名前が`testquay`のシークレットはデフォルトのネームスペースにあります。

プライベートレジストリの認証情報を使用してシークレットを作成するには、`kubectl`を使用できます。このコマンドは、名前が`testquay`のシークレットを作成します:

kubectl create secret docker-registry testquay \
    --docker-server=quay.io \
    --docker-username=<Profile name> \
    --docker-password=<password>

Kubernetesにおけるシークレットの保存方法を確認するには、このコマンドを使用できます:

kubectl get secret testquay --output="jsonpath={.data.\.dockerconfigjson}" | base64 --decode

結果はこのようになります:

{"auths":{"quay.io":{"username":"<Profile name>","password":"<password>","auth":"c291bXlhbGo6dGVzdGFiYzEyMw=="}}}

ワークロードがデプロイされた後、イメージが正常にプルされたかどうかを確認できます。

kubectl get events

結果は次のようになります。

14s         Normal    Scheduled          Pod    Successfully assigned default/private-reg2 to minikube
11s         Normal    Pulling            Pod    pulling image "quay.io/<Profile name>/<image name>"
10s         Normal    Pulled             Pod    Successfully pulled image "quay.io/<Profile name>/<image name>"