デフォルトでは、GKE on AWS のインストールで公開コンテナ イメージにアクセスできます。このトピックでは、Artifact Registry などの非公開のコンテナ イメージ リポジトリで GKE on AWS を使用する方法について説明します。
バージョン 1.28 以降、GKE on AWS では、Kubernetes Secret を使うことなく、Artifact Registry または Container Registry から非公開イメージを pull できます。詳細については、Secret を使用せずに非公開イメージ レジストリを使用するをご覧ください。始める前に
このページで説明する操作を行う前に、次のことを完了しておいてください。
- クラスタを作成する。
- ノードプールを作成する。
Docker イメージをビルドして、Artifact Registry に push する。このページの例では、
hello-app
コンテナを使用します。このコンテナをビルドするには、Google Cloud 上の GKE ドキュメントのコンテナ イメージをビルドするの手順と、Docker イメージを Artifact Registry に push するの手順に沿って操作します。
Artifact Registry のイメージを確認する
残りの手順を完了するには、コンテナ イメージが必要です。次の手順でコンテナ イメージの名前を取得します。
Google Cloud SDK を使用して Artifact Registry に対する認証を行うように Docker コマンドライン ツールを構成します。
gcloud auth configure-docker
gcloud
コマンドライン ツールは、Google がサポートするすべての Docker レジストリの認証ヘルパーを登録します。docker images
コマンドを使用して、Artifact Registry にイメージが含まれていることを確認します。docker images
Docker は Artifact Registry に接続し、リポジトリにある使用可能なイメージを返します。たとえば、次のレスポンスは
us-west1-docker.pkg.dev
のPROJECT_NAME
リポジトリにあるhello-app
という名前のコンテナ イメージを示しています。REPOSITORY TAG IMAGE ID CREATED SIZE us-west1-docker.pkg.dev/PROJECT_NAME/hello-repo/hello-app v1 f7cfe0d58569 21 minutes ago 11.5MB
コンテナ イメージの準備ができていない場合、コンテナ化されたアプリケーションのデプロイの手順で作成します。
サービス アカウントを作成する
クラスタは、Identity and Access Management(IAM)サービス アカウントを使用して認証します。
新しいサービス アカウントを作成するには、次の操作を行います。
Google Cloud CLI を使用して IAM サービス アカウントを作成します。
gcloud iam service-accounts create ACCOUNT_NAME
ACCOUNT_NAME は、新しい Google Cloud サービス アカウントの名前に置き換えます。
サービス アカウントに Artifact Registry の権限を付与します。
gcloud projects add-iam-policy-binding PROJECT_NAME \ --member serviceAccount:ACCOUNT_NAME@PROJECT_NAME.iam.gserviceaccount.com \ --role roles/artifactregistry.reader
次のように置き換えます。
PROJECT_NAME
は、Google Cloud プロジェクトに置き換えます。ACCOUNT_NAME
は、Google Cloud サービス アカウント名に置き換えます。
アカウントのサービス アカウント キーをダウンロードします。
gcloud iam service-accounts keys create registry-access-key.json \ --iam-account ACCOUNT_NAME@PROJECT_NAME.iam.gserviceaccount.com
次のように置き換えます。
PROJECT_NAME
ACCOUNT_NAME
これで、Artifact Registry に接続するユーザー クラスタを構成する準備が整いました。
鍵をクラスタに保存する
Artifact Registry に認証用の鍵を提供するには、次の手順でサービス アカウント キーを Kubernetes Secret として保存します。
kubectl
を使用して Secret を作成します。kubectl create secret docker-registry registry-secret \ --docker-server=LOCATION-docker.pkg.dev \ --docker-username=_json_key \ --docker-email=ACCOUNT_NAME@PROJECT_NAME.iam.gserviceaccount.com \ --docker-password="$(cat registry-access-key.json)"
次のように置き換えます。
LOCATION
: リポジトリのリージョンまたはマルチリージョン ロケーション。PROJECT_NAME
ACCOUNT_NAME
サービス アカウント キーのローカルコピーを削除します。
rm registry-access-key.json
これにより、ワークロードでこの Secret を参照できます。
限定公開イメージを使用してワークロードを作成する
ワークロードを含む、限定公開のコンテナ リポジトリのイメージを使用するには、spec.imagePullSecrets
フィールドに Secret 名を設定します。このフィールドは、Pod と Deployment のさまざまな場所にあります。
Pod の作成
Container Registry にアクセスできる Pod を作成するには、フィールド spec.imagePullSecrets
を Secret 名に設定します。
spec.imagePullSecrets
を指定する Pod を作成します。apiVersion: v1 kind: Pod metadata: name: POD_NAME spec: containers: - name: CONTAINER_NAME image: LOCATION-docker.pkg.dev/PROJECT_NAME/hello-repo/hello-app:v1 imagePullSecrets: - name: registry-secret
次のように置き換えます。
POD_NAME
: Pod の名前CONTAINER_NAME
: Pod 内のコンテナの名前LOCATION
PROJECT_NAME
たとえば、イメージ
hello-app
を pull するには、次の YAML をhello-pod.yaml
という名前のファイルにコピーします。apiVersion: v1 kind: Pod metadata: name: hello-pod spec: containers: - name: hello-container image: us-west1-docker.pkg.dev/example-project/hello-repo/hello-app:v1 imagePullSecrets: - name: registry-secret
kubectl
で、クラスタに構成を適用します。kubectl apply -f hello-pod.yaml
kubectl get
で、Pod が実行されていることを確認します。kubectl get pod/hello-pod
レスポンスには、ステータスが
Running
の Pod が 1 つ含まれます。NAME READY STATUS RESTARTS AGE hello-pod 1/1 Running 0 15s
Deployment を作成する
Deployment で限定公開リポジトリを使用するには、テンプレート内で
imagePullSecret
を指定します。たとえば、
hello-app
イメージを使用する Deployment を構成するには、次の内容を含むファイルをhello-deployment.yaml
という名前で作成します。apiVersion: apps/v1 kind: Deployment metadata: name: hello-app-deployment spec: selector: matchLabels: app: products department: sales replicas: 3 template: metadata: labels: app: products department: sales spec: containers: - name: hello image: LOCATION-docker.pkg.dev/PROJECT_NAME/hello-repo/hello-app:v1 env: - name: "PORT" value: "50001" imagePullSecrets: - name: registry-secret
次のように置き換えます。
LOCATION
PROJECT_NAME
kubectl
で、クラスタに構成を適用します。kubectl apply -f hello-deployment.yaml
kubectl pods
で、Deployment が実行されていることを確認します。kubectl get pods --selector=app=products
出力には、3 つの
Running
Pod が表示されます。NAME READY STATUS RESTARTS AGE hello-app-deployment-67d9c6d98c-b69f2 1/1 Running 0 14m hello-app-deployment-67d9c6d98c-d6k5c 1/1 Running 0 14m hello-app-deployment-67d9c6d98c-p2md5 1/1 Running 0 14m
クリーンアップ
このページで作成したリソースを削除するには、次のコマンドを実行します。
kubectl apply -f hello-pod.yaml
kubectl delete -f hello-deployment.yaml