このトピックでは、Container Registry(GCR)などの非公開のコンテナ イメージ リポジトリで GKE on AWS を使用する方法について説明します。
始める前に
GKE on AWS の使用を始める前に、次のことを確認してください。
- 前提条件を満たしている。
- 管理サービスをインストールしている。
- ユーザー クラスタを作成している。
anthos-aws
ディレクトリからanthos-gke
を使用して、コンテキストをユーザー クラスタに切り替えている。 CLUSTER_NAME をユーザー クラスタ名に置き換えます。cd anthos-aws env HTTPS_PROXY=http://localhost:8118 \ anthos-gke aws clusters get-credentials CLUSTER_NAME
- Docker イメージをビルドして Container Registry に push します。このトピックの例では、GKE on Google Cloud ドキュメントのコンテナ化されたアプリケーションのデプロイの手順で作成した
hello-app
コンテナを使用します。
限定公開のコンテナ レジストリ
コンテナ レジストリは、コンテナ イメージを保存し、配布します。デフォルトでは、GKE on AWS のインストールで公開イメージにアクセスできます。
Container Registry のイメージを確認する
残りの手順を完了するには、コンテナ イメージが必要です。次の手順を実行して、コンテナ イメージの名前を取得します。
Docker コマンドライン ツールを構成して、Google Cloud CLI で Container Registry が認証されるようにします。
gcloud auth configure-docker
Google Cloud CLI は、Google がサポートするすべての Docker レジストリの認証情報ヘルパーを登録します。
docker images
というイメージが Container Registry に含まれていることを確認します。docker images
Docker は Container Registry に接続し、Container Registry リポジトリにある使用可能なイメージを返します。たとえば、次のレスポンスは project-id リポジトリ内の
hello-app
という名前のコンテナ イメージを示しています。REPOSITORY TAG IMAGE ID CREATED SIZE gcr.io/project-id/hello-app v1 732f02cea7cb 12 minutes ago 11.5MB
コンテナ イメージの準備ができていない場合、コンテナ化されたアプリケーションのデプロイの手順で作成します。
サービス アカウントを作成する
ユーザー クラスタは、Identity and Access Management(IAM)サービス アカウントを使用して認証します。
新しいサービス アカウントを作成するには、次の手順を行います。
Google Cloud CLI を使用して IAM サービス アカウントを作成します。
gcloud iam service-accounts create account-name
account-name を新しい Google Cloudサービス アカウントの名前に置き換えます。
サービス アカウントに Container Registry へのアクセス権を付与します。
gcloud projects add-iam-policy-binding project-id \ --member serviceAccount:account-name@project-id.iam.gserviceaccount.com \ --role roles/storage.objectViewer
次のように置き換えます。
- project-id を Google Cloud プロジェクトに置き換えます。
- account-name を Google Cloud サービス アカウント名に置き換えます。
アカウントのサービス アカウントキーをダウンロードします。
gcloud iam service-accounts keys create key.json \ --iam-account account-name@project-id.iam.gserviceaccount.com
次のように置き換えます。
- project-id を Google Cloud プロジェクトに置き換えます。
- account-name を Google Cloud サービス アカウント名に置き換えます。
これで、Container Registry に接続するユーザー クラスタを構成する準備が整いました。
Kubernetes Secret を定義する
Container Registry に認証用の鍵を提供するには、次の手順でサービス アカウントキーを Kubernetes Secret として保存します。
kubectl
を使用して Secret を作成します。env HTTPS_PROXY=http://localhost:8118 \ kubectl create secret docker-registry gcr-secret \ --docker-server=gcr.io \ --docker-username=_json_key \ --docker-email=account-name@project-id.iam.gserviceaccount.com \ --docker-password="$(cat key.json)"
次のように置き換えます。
- project-id を Google Cloud プロジェクトに置き換えます。
- account-name を Google Cloud サービス アカウント名に置き換えます。
サービス アカウントキーのローカルコピーを削除します。
rm 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: gcr.io/project-id/hello-app:v1 imagePullSecrets: - name: secret-name
次のように置き換えます。
- pod-name を Pod 名に置き換えます。
- container-name を Pod 内のコンテナの名前に置き換えます。
- project-id を Google Cloud プロジェクトに置き換えます。
- secret-name をレジストリ Secret の名前に置き換えます。
たとえば、イメージ
hello-app
を pull するには、次の YAML をhello-pod.yaml
という名前のファイルにコピーします。apiVersion: v1 kind: Pod metadata: name: hello-pod spec: containers: - name: hello-container image: gcr.io/project-id/hello-app:v1 imagePullSecrets: - name: gcr-secret
kubectl
で、クラスタに構成を適用します。env HTTPS_PROXY=http://localhost:8118 \ kubectl apply -f hello-pod.yaml
kubectl get
で、Pod が実行されていることを確認します。env HTTPS_PROXY=http://localhost:8118 \ 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: "gcr.io/project-id/hello-app:v1" env: - name: "PORT" value: "50001" imagePullSecrets: - name: gcr-secret
kubectl
で、クラスタに構成を適用します。env HTTPS_PROXY=http://localhost:8118 \ kubectl apply -f hello-deployment.yaml
kubectl pods
で、Deployment が実行されていることを確認します。env HTTPS_PROXY=http://localhost:8118 \ 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