本頁面說明如何將 Git 設定從 ConfigManagement 物件遷移至 RootSync 物件。遷移作業會啟用 RootSync 和 RepoSync API,讓您使用其他功能:
- 從多個可靠資料來源同步處理
- 使用 Config Sync 資訊主頁
- 使用 Cloud Monitoring、Prometheus 或自訂監控系統監控 Config Sync
- 轉譯 Kustomize 設定和 Helm 圖表
- 從 Artifact Registry 同步處理 OCI 構件
- 從 Artifact Registry 同步處理 Helm 資訊套件
- 覆寫系統值,例如變更資源限制和更新要擷取的 Git 提交次數
即使您只想使用根存放區,不想使用任何命名空間存放區,也可以啟用這些 API。
遷移 ConfigManagement 設定
如果搭配使用 RootSync 和 spec.enableLegacyFields,請按照操作說明停止使用舊版欄位。
如果您的 ConfigManagement 物件使用 spec.git,但 spec.enableMultiRepo
設為 false,請按照操作說明遷移至 RootSync。
停止使用舊版欄位
1.19.0 以上版本不支援 spec.enableLegacyFields 欄位,如果設定這個欄位,就會發生錯誤。如要使用 Config Sync 1.19.0 以上版本,請完成下列步驟來移除舊版欄位:
在 ConfigManagement 物件中,移除
spec.enableLegacyFields和spec.git欄位。ConfigManagement 物件應如下所示:# config-management.yaml apiVersion: configmanagement.gke.io/v1 kind: ConfigManagement metadata: name: config-management spec: enableMultiRepo: true套用變更:
kubectl apply -f config-management.yaml
舊版欄位現已停用,但不會影響從 ConfigManagement 物件的 spec.git 欄位產生的 RootSync 物件。遷移作業已完成,您現在可以直接使用 RootSync 物件中的 Git 欄位。
遷移至 RootSync
如果 ConfigManagement 物件使用 spec.git,但 spec.enableMultiRepo 設為 false,請按照本指南啟用 RootSync 和 RepoSync API。
使用nomos migrate
從 1.10.0 版開始,nomos 提供 nomos migrate 指令,可啟用 RootSync 和 RepoSync API。您需要更新
nomos至 1.10.0 以上版本。
如要進一步瞭解如何執行指令,請參閱「從 ConfigManagement 物件遷移至 RootSync 物件」。請確認 ConfigManagement 物件未簽入真實來源,且由 Config Sync 管理。如果是,請按照「手動遷移」一文的步驟,在可靠來源中修改 ConfigManagement 物件。
手動遷移
如果 nomos 版本低於 1.10.0,可以手動遷移設定。您需要在 ConfigManagement 物件中將 spec.enableMultiRepo 設為 true,並建立 RootSync 物件,將根存放區同步至叢集。根存放區可以是非結構化存放區,也可以是階層式存放區。遷移至使用 RootSync 物件後,您可以將存放區分成多個存放區,並設定從多個存放區同步處理。
如要透過遷移設定來設定根存放區,請完成下列工作:
- 開啟 ConfigManagement 物件。
- 複製
spec.git欄位中的值。建立 RootSync 物件時,您會使用這些值。 - 從 ConfigManagement 物件中移除所有
spec.git欄位 (包括git:)。 在 ConfigManagement 物件中,將
spec.enableMultiRepo欄位設為true:# config-management.yaml apiVersion: configmanagement.gke.io/v1 kind: ConfigManagement metadata: name: config-management spec: enableMultiRepo: true套用變更:
kubectl apply -f config-management.yaml等待 RootSync CRD 建立完成。
kubectl wait --for=condition=established crd rootsyncs.configsync.gke.io使用從 ConfigManagement 物件複製的值,建立 RootSync 物件。例如:
# root-sync.yaml apiVersion: configsync.gke.io/v1beta1 kind: RootSync metadata: name: root-sync namespace: config-management-system spec: sourceFormat: ROOT_FORMAT git: repo: ROOT_REPOSITORY revision: ROOT_REVISION branch: ROOT_BRANCH dir: "ROOT_DIRECTORY" auth: ROOT_AUTH_TYPE gcpServiceAccountEmail: ROOT_EMAIL # secretRef should be omitted if the auth type is none, gcenode, or gcpserviceaccount. secretRef: name: git-creds更改下列內容:
ROOT_FORMAT:新增unstructured即可使用非結構化存放區,或新增hierarchy即可使用階層式存放區。這些值會區分大小寫。 這是選填欄位,預設值為hierarchy。建議您新增unstructured,因為這個格式可讓您以最方便的方式整理設定。ROOT_REPOSITORY:新增要當做根存放區的 Git 存放區網址。您可以輸入使用 HTTPS 或 SSH 通訊協定的網址。舉例來說,https://github.com/GoogleCloudPlatform/anthos-config-management-samples使用 HTTPS 通訊協定。如果未輸入通訊協定,系統會將網址視為 HTTPS 網址。這是必填欄位。ROOT_REVISION:新增要取出的 Git 修訂版本 (標記或雜湊)。這個欄位為選填,預設值為HEAD。ROOT_BRANCH:新增要用來當做同步處理來源的存放區分支版本。這個欄位為選填,預設值為master。ROOT_DIRECTORY:將 Git 存放區中的路徑新增至包含要同步處理設定的根目錄。這個欄位為選填,預設值為存放區的根目錄 (/)。ROOT_AUTH_TYPE:新增下列其中一種驗證類型:none:不使用驗證ssh:使用安全殼層金鑰組cookiefile:使用cookiefiletoken:使用權杖gcpserviceaccount:使用 Google 服務帳戶存取 Cloud Source Repositories 中的存放區。gcenode:使用 Google 服務帳戶存取 Cloud Source Repositories 中的存放區。只有在叢集未啟用 GKE 的工作負載身分聯盟時,才選取這個選項。如要進一步瞭解這些驗證類型,請參閱授予 Config Sync 對 Git 的唯讀存取權。
這是必填欄位。
ROOT_EMAIL:如果您新增gcpserviceaccount做為ROOT_AUTH_TYPE,請新增 Google 服務帳戶電子郵件地址。例如:acm@PROJECT_ID.iam.gserviceaccount.com。
套用變更:
kubectl apply -f root-sync.yaml
ConfigManagement 和 RootSync 比較表
下表概述 ConfigMangent 物件中的欄位如何對應至 RootSync 物件中的欄位。
| ConfigManagement 欄位 | RootSync 欄位 |
|---|---|
spec.git.gcpServiceAccountEmail |
spec.git.gcpServiceAccountEmail |
spec.git.syncRepo |
spec.git.repo |
spec.git.syncBranch |
spec.git.branch |
spec.git.policyDir |
spec.git.dir |
spec.git.syncWait |
spec.git.period |
spec.git.syncRev |
spec.git.revision |
spec.git.secretType |
spec.git.auth |
git-creds (這是 ConfigManagement 物件中的固定值) |
spec.git.secretRef.name |
spec.sourceFormat |
spec.sourceFormat |
spec.git.proxy.httpProxy 或 spec.git.proxy.httpsProxy
|
spec.git.proxy |