本頁面說明如何將 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
:使用cookiefile
token
:使用權杖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 |