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レジストリ・シークレットを作成するには:

  1. まだ実行していない場合は、クラスタのkubeconfig構成ファイルを設定し、(必要に応じて) KUBECONFIG環境変数でファイルを指すように設定するステップに従ってください。自分のkubeconfigファイルを設定する必要があります。別のユーザーが設定したkubeconfigファイルを使用してクラスタにアクセスすることはできません。Setting up Cluster Accessを参照してください。
  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>は、使用しているコンテナ・レジストリ・リージョンのキーです。たとえば、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シークレットを指定するには:

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

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