Skip to content

antony@notes:~/rancher$ cat "How-to-Pull-Images-from-Google-Artifact-Registry-into-RKE2.md"

How to Pull Images from Google Artifact Registry into RKE2

2025-03-26· rancher

How to Pull Images from Google Artifact Registry into RKE2

注意事項

:::danger

如果 RKE2 沒有被 Rancher 管理,則叢集中的每台節點都需要做設定,如果有則透過 Rancher 介面設定,否則容易造成設定檔混亂

:::

1. 在 Google Cloud Platform 中設定

請在 Cloud shell 中執行,因為在 Cloud shell 執行可以少很多 Gcloud 的設定、Gcloud 的安裝、Project 的設定、個人帳號的驗證

1.1. 創建 Google Service Account

1.1.1. 定義 Google Service Account name

SA_NAME='gsa-demo'

1.1.2. 創建 Google Service Account

gcloud iam service-accounts create ${SA_NAME}

1.2. 產生 Google Service Account Key File

gcloud iam service-accounts keys create key.json \
  --iam-account=${SA_NAME}@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com

GOOGLE_CLOUD_PROJECT 這個變數 Cloud Shell 預設會有

2. 在 RKE2 叢集設定 Private Registry

:::danger 此範例只適用純手動建立的 RKE2 :::

2.1. 連線至叢集節點

ssh sudo_user@ip

2.2. 編輯 Private Registry 設定檔

2.2.1. 定義變數

DOMAIN_NAME='asia-east1-docker.pkg.dev'
KEY_FILE=$(cat /PATH/TO/key.json | base64 -w 0)

2.2.2. 產生 Private Registry 設定檔

cat <<EOF | sudo tee /etc/rancher/rke2/registries.yaml
mirrors:
  "${DOMAIN_NAME}":
    endpoint:
      - "https://${DOMAIN_NAME}"
configs:
  "${DOMAIN_NAME}":
    auth:
      username: _json_key_base64
      password: '${KEY_FILE}'
EOF

2.3. 驅逐節點的 Pod

請在 RKE2 管理主機依序執行以下命令

2.3.1. 定義節點名稱

NODE='m1'

2.3.2. 設定節點不能被指派 Pod

kubectl cordon $NODE

2.3.2. 驅逐節點上的 Pod

kubectl drain $NODE --ignore-daemonsets --delete-emptydir-data

2.4. 重啟 RKE2 服務

請回到設定的節點執行以下命令

如果是 Control-plane/Server node 則執行以下命令

sudo systemctl restart rke2-server

如果是 Worker/Agent node 則執行以下命令

sudo systemctl restart rke2-agent

2.5. 將節點恢復為可指派 Pod

請在 RKE2 管理主機依序執行以下命令

kubectl uncordon $NODE

2.6. 重複以上 2.1. ~ 2.5. 的步驟,直到叢集中的每台節點都設定完畢

3. 參考文章