Kubernetesのデプロイ中にコンテナ・レジストリからイメージをプル
Dockerレジストリ・シークレットの作成方法を確認します。アプリケーションをクラスタにデプロイするときに、コンテナ・レジストリからプルするイメージ(および使用するDockerシークレット)を指定する方法も確認します。
アプリケーションのKubernetesクラスタへのデプロイ中、通常は1つ以上のイメージをDockerレジストリからプルします。アプリケーションのマニフェスト・ファイルで、プルするイメージ、プル元のレジストリ、およびイメージのプル時に使用する資格証明を指定します。マニフェスト・ファイルは、通常、pod仕様、またはdeployment.yamlファイル(他のファイル名も使用可能)とも呼ばれます。
Oracle Cloud Infrastructure Registry (コンテナ・レジストリとも呼ばれる)にあるイメージをアプリケーションでプルする場合は、次の2つのステップを実行する必要があります:
- kubectlを使用してDockerレジストリ・シークレットを作成する必要があります。シークレットには、イメージをプルするときに使用するOracle Cloud Infrastructureの資格証明が含まれます。シークレットを作成する場合、Oracleは最新バージョンのkubectlを使用することを強く推奨します(kubectlのドキュメントを参照)。
- アプリケーションのマニフェスト・ファイルに、リポジトリの場所、使用するDockerレジストリ・シークレットなど、コンテナ・レジストリからプルするイメージを指定する必要があります。
コンテナ・レジストリは、Open Container Initiative準拠のレジストリです。その結果、Dockerイメージ、マニフェスト・リスト(マルチアーキテクチャ・イメージとも呼ばれる)、Helmチャートなど、Open Container Initiative仕様に準拠したアーティファクトを格納できます。このトピックの手順では、Dockerイメージを格納し、Docker CLIを使用することを前提としています。
Dockerレジストリ・シークレットを作成するには:
- まだ実行していない場合は、クラスタのkubeconfig構成ファイルを設定し、(必要に応じて) KUBECONFIG環境変数でファイルを指すように設定するステップに従ってください。自分のkubeconfigファイルを設定する必要があります。別のユーザーが設定したkubeconfigファイルを使用してクラスタにアクセスすることはできません。クラスタ・アクセスの設定を参照してください。
-
ターミナル・ウィンドウで入力します:
kubectl create secret docker-registry <secret-name> --docker-server=<registry-domain> --docker-username=<tenancy-namespace>/<oci-username> --docker-password='<oci-auth-token>' --docker-email=<email-address>
ここでは:
<secret-name>
は、選択した名前で、マニフェスト・ファイルでシークレットを参照するために使用します。たとえば、ocirsecret
です<registry-domain>
には、使用しているコンテナ・レジストリ・リージョンのリージョン・キーまたはリージョン識別子が含まれます。たとえば、ocir.us-ashburn-1.oci.oraclecloud.com
です。レジストリ・ドメインを参照してください。<tenancy-namespace>
は、アプリケーションがイメージをプルするリポジトリを含むテナンシの自動生成されたオブジェクト・ストレージのネームスペース文字列です(「テナンシ情報」ページに示されています)。たとえば、acme-devテナンシのネームスペースはansh81vru1zp
です。一部の古いテナンシでは、ネームスペース文字列は、すべて小文字のテナンシ名(acme-dev
など)と同じ場合があることに注意してください。<oci-username>
は、イメージをプルするときに使用するユーザー名です。ユーザー名は、<tenancy-namespace>
で指定されたテナンシにアクセスできる必要があります。例:jdoe@acme.com
テナントがOracle Identity Cloud Serviceとフェデレートされている場合は、
<domain-name>/<oci-username>
の書式を使用します。フェデレーテッド・ユーザーの場合、コンソールの「プロファイル」メニューに<domain-name>/<oci-username>
が表示されます。たとえば、テナンシがOracle Identity Cloud Serviceとフェデレートされていて、ユーザー名がjdoe@acme.com
の場合、oracleidentitycloudservice/jdoe@acme.com
と入力します'<oci-auth-token>'
は、<oci-username>
によって指定されたユーザーの認証トークンです。たとえば、k]j64r{1sJSSF-;)K8
です 認証トークンに特殊文字(この例のカッコなど)が含まれている場合、多くの場合、認証トークンを一重引用符で囲みます。それ以外の場合、単一引用符は必要ありません。<email-address>
は電子メール・アドレスです。電子メール・アドレスは必須ですが、指定内容は重要ではありません。たとえば、jdoe@acme.com
です
一部の特殊文字(カッコなど)を含む文字列は、一重引用符で囲む必要があります。
たとえば、前述の例を組み合せると、次のように入力できます:
kubectl create secret docker-registry ocirsecret --docker-server=ocir.us-ashburn-1.oci.oraclecloud.com --docker-username=ansh81vru1zp/jdoe@acme.com --docker-password='k]j64r{1sJSSF-;)K8' --docker-email=jdoe@acme.com
Dockerシークレットを作成すると、アプリケーションのマニフェスト・ファイルでそのシークレットを参照できるようになります。
アプリケーションをクラスタにデプロイするときに、コンテナ・レジストリからプルするイメージと、使用するDockerシークレットを指定するには:
- テキスト・エディタでアプリケーションのマニフェスト・ファイルを開きます。
-
次のセクションをマニフェスト・ファイルに追加します:
- コンテナ・レジストリからプルするコンテナの名前と場所、およびその他のデプロイメント詳細を指定する
containers
セクションを追加します。 imagePullSecrets
セクションを、コンテナ・レジストリにアクセスするために作成したDockerシークレットの名前を指定するマニフェスト・ファイルに追加します。
次に、
containers
およびimagePullSecrets
セクションを追加した場合のマニフェストの外観の例を示します。apiVersion: v1 kind: Pod metadata: name: ngnix-image spec: containers: - name: ngnix image: ocir.us-ashburn-1.oci.oraclecloud.com/ansh81vru1zp/project01/ngnix-lb:latest imagePullPolicy: Always ports: - name: nginx containerPort: 8080 protocol: TCP imagePullSecrets: - name: ocirsecret
- コンテナ・レジストリからプルするコンテナの名前と場所、およびその他のデプロイメント詳細を指定する
- マニフェスト・ファイルを保存して閉じます。