Open3

KubernetesのimageにGoogle CloudのArtifact Registryを使う

bigface0202bigface0202

おうちKubernetesでGoogle CloudのArtifact Registryを使ったときの備忘録

bigface0202bigface0202

Google Cloud側の操作

サービスアカウントを作成する

Artifact RegistryからImageをPullするにはサービスアカウントが必要となる。
サービスアカウントの作成は手動でもgcloudコマンドでもterraformでもOK。
サービスアカウントには以下のIAM Roleを付与する。

  • Artifact Registry書き込み(Artifact Registry Writer)
# Project IDをセットする。
PROJECT_ID=my-project
gcloud config set project $PROJECT_ID

# サービスアカウントを作成する
gcloud iam service-accounts create "myk8s-cluster" --display-name "myk8s-cluster"

# IAM Roleを付与する
gcloud projects add-iam-policy-binding $PROJECT_ID --member   serviceAcc
ount:"myk8s-cluster@${PROJECT_ID}.iam.gserviceaccount.com"   --role "roles/artifactregistry.writer"

サービスアカウントのjsonキーをダウンロードする

「サービスアカウント」→「myk8s-cluster@<PROJECT_ID>.iam.gserviceaccount.com」→「キー」→「新しいカギを作成」→「JSON」→「作成」

サービスアカウント作成

bigface0202bigface0202

Kubernetes側の操作

jsonキーをシークレットに登録する

# サービスアカウントがおいてある場所へ移動
cd <Service Account key dir>

# Project IDをセットする。
PROJECT_ID=my-project

# Secretを登録する
# --docker-serverは自分のArtifact Registryのリージョンによって変更する
# serviceaccount-key.jsonの部分も適宜変更する
kubectl create secret docker-registry artifact-registry \
--docker-server=https://asia-northeast1-docker.pkg.dev \
--docker-email="myk8s-cluster@${PROJECT_ID}.iam.gserviceaccount.com" \
--docker-username=_json_key \
--docker-password="$(cat serviceaccount-key.json)"

# Secretsが登録されたか確認する
kubectl get secrets
# NAME                TYPE                             DATA   AGE
# artifact-registry   kubernetes.io/dockerconfigjson   1      8d
# mysql-secret        Opaque                           3      6d21h

deploymentをapplyしてみる

# Deploymentのマニフェストファイル

# ...
spec:
      imagePullSecrets:
        - name: artifact-registry
      containers:
        - name: nginx
          image: asia-northeast1-docker.pkg.dev/<YOUR_PROJECT_ID>/<YOUR_REGISTRY_NAME>/nginx:v1
# ...

コンテナがちゃんとPullできていればOK