デプロイメント中のレジストリからのイメージのプル
Dockerレジストリ・シークレットを作成する方法、およびKubernetes Engine (OKE)を使用して作成したクラスタにアプリケーションをデプロイするときに(使用するDockerシークレットとともに) Oracle Cloud Infrastructure Registryからプルするイメージを指定する方法を説明します。
アプリケーションのKubernetesクラスタへのデプロイメント中、通常は1つ以上のイメージをDockerレジストリからプルします。アプリケーションのマニフェスト・ファイルで、プルするイメージ、プル元のレジストリ、およびイメージのプル時に使用する資格証明を指定します。マニフェスト・ファイルは通常、ポッド仕様、またはdeployment.yamlファイルとも呼ばれます(他のファイル名も使用できます)。
Oracle Cloud Infrastructure Registryにあるイメージをアプリケーションでプルする場合は、次の2つのステップを実行する必要があります:
- kubectlを使用してDockerレジストリ・シークレットを作成する必要があります。シークレットには、イメージをプルするときに使用するOracle Cloud Infrastructure資格証明が含まれます。シークレットを作成する場合、最新バージョンのkubectlを使用することを強くお薦めします(kubectlのドキュメントを参照)。
- アプリケーションのマニフェスト・ファイルに、リポジトリの場所、使用するDockerレジストリ・シークレットなど、Oracle Cloud Infrastructure Registryからプルするイメージを指定する必要があります。
イメージ検証ポリシーに含まれる特定のマスター暗号化キーによって署名されたOracle Cloud Infrastructure Registryからのみイメージをプルできるようにクラスタを構成できます(レジストリからの署名付きイメージの使用の強制を参照)。
Dockerレジストリ・シークレットを作成するには:
-
まだ実行していない場合は、ステップに従って、クラスタのkubeconfig構成ファイルを設定し、(必要に応じて)そのファイルを指すようにKUBECONFIG環境変数を設定します。自分のkubeconfigファイルを設定する必要があります。別のユーザーが設定したkubeconfigファイルを使用してクラスタにアクセスすることはできません。クラスタ・アクセスの設定を参照してください。
-
ターミナル・ウィンドウで入力します:
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>
は、使用しているOracle Cloud Infrastructure Registryリージョンのキーです。たとえば、iad
です。リージョン別可用性を参照してください。ocir.io
は、Oracle Cloud Infrastructure Registryの名前です。<tenancy-namespace>
は、アプリケーションがイメージをプルするリポジトリを含むテナンシの自動生成されたオブジェクト・ストレージのネームスペース文字列です(「テナンシ情報」ページに示されています)。たとえば、acme-devテナンシのネームスペースはansh81vru1zp
です。一部の古いテナンシでは、ネームスペース文字列は、すべて小文字のテナンシ名(たとえば、acme-dev
)と同じ場合があることに注意してください。<oci-username>
は、イメージをプルするときに使用するユーザー名です。ユーザー名には、<tenancy-name>
で指定されたテナンシへのアクセス権が必要です。たとえば、jdoe@acme.com
です。テナンシがOracle Identity Cloud Serviceとフェデレートされている場合は、oracleidentitycloudservice/<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シークレットとともにOracle Cloud Infrastructure Registryからプルするイメージを指定するには:
- テキスト・エディタでアプリケーションのマニフェスト・ファイルを開きます。
-
次のセクションをマニフェスト・ファイルに追加します:
- Oracle Cloud Infrastructure Registryからプルするコンテナの名前と場所、およびその他のデプロイメント詳細を指定する
containers
セクションを追加します。 - Oracle Cloud Infrastructure Registryにアクセスするために作成した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
- Oracle Cloud Infrastructure Registryからプルするコンテナの名前と場所、およびその他のデプロイメント詳細を指定する
- マニフェスト・ファイルを保存して閉じます。