非公開イメージ レジストリを使用する
デフォルトでは、GKE on Azure のインストールで公開コンテナ イメージにアクセスできます。このトピックでは、Artifact Registry などのプライベート コンテナ イメージ リポジトリで GKE on Azure を使用する方法について説明します。
始める前に
このページで説明する操作を行う前に、次のことを完了しておいてください。
- クラスタを作成する。
- ノードプールを作成する。
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