デプロイメント中のレジストリからのイメージのプル

Dockerレジストリ・シークレットの作成方法、およびContainer Engine for Kubernetes (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レジストリ・シークレットを作成するには:

  1. まだ実行していない場合は、ステップに従って、クラスタのkubeconfig構成ファイルを設定し、(必要に応じて)そのファイルを指すようにKUBECONFIG環境変数を設定します。自分のkubeconfigファイルを設定する必要があります。別のユーザーが設定したkubeconfigファイルを使用してクラスタにアクセスすることはできません。クラスタ・アクセスの設定を参照してください。
  2. ターミナル・ウィンドウで入力します:

    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からプルするイメージを指定するには:

  1. テキスト・エディタでアプリケーションのマニフェスト・ファイルを開きます。
  2. 次のセクションをマニフェスト・ファイルに追加します:

    1. Oracle Cloud Infrastructure Registryからプルするコンテナの名前と場所、およびその他のデプロイメント詳細を指定するcontainersセクションを追加します。
    2. 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
  3. マニフェスト・ファイルを保存して閉じます。