Open3
KubernetesのimageにGoogle CloudのArtifact Registryを使う
おうちKubernetesでGoogle CloudのArtifact Registryを使ったときの備忘録
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」→「作成」
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