デフォルトでは、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
フィールドにシークレット名を設定します。このフィールドは、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
次のステップ
- Artifact Registry の概要を確認する。