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