遷移 ConfigManagement 物件

本頁面說明如何將 Git 設定從 ConfigManagement 物件遷移至 RootSync 物件。遷移作業會啟用 RootSyncRepoSync API,讓您使用其他功能:

即使您只想使用根存放區,不想使用任何命名空間存放區,也可以啟用這些 API。

遷移 ConfigManagement 設定

如果搭配使用 RootSyncspec.enableLegacyFields,請按照操作說明停止使用舊版欄位

如果您的 ConfigManagement 物件使用 spec.git,但 spec.enableMultiRepo 設為 false,請按照操作說明遷移至 RootSync

停止使用舊版欄位

1.19.0 以上版本不支援 spec.enableLegacyFields 欄位,如果設定這個欄位,就會發生錯誤。如要使用 Config Sync 1.19.0 以上版本,請完成下列步驟來移除舊版欄位:

  1. 開啟 ConfigManagement 物件

  2. 在 ConfigManagement 物件中,移除 spec.enableLegacyFieldsspec.git 欄位。ConfigManagement 物件應如下所示:

    # config-management.yaml
    apiVersion: configmanagement.gke.io/v1
    kind: ConfigManagement
    metadata:
      name: config-management
    spec:
      enableMultiRepo: true
    
  3. 套用變更:

    kubectl apply -f config-management.yaml
    

舊版欄位現已停用,但不會影響從 ConfigManagement 物件的 spec.git 欄位產生的 RootSync 物件。遷移作業已完成,您現在可以直接使用 RootSync 物件中的 Git 欄位。

遷移至 RootSync

如果 ConfigManagement 物件使用 spec.git,但 spec.enableMultiRepo 設為 false,請按照本指南啟用 RootSyncRepoSync API。

使用nomos migrate

從 1.10.0 版開始,nomos 提供 nomos migrate 指令,可啟用 RootSyncRepoSync API。您需要更新 nomos至 1.10.0 以上版本。

如要進一步瞭解如何執行指令,請參閱「從 ConfigManagement 物件遷移至 RootSync 物件」。請確認 ConfigManagement 物件未簽入真實來源,且由 Config Sync 管理。如果是,請按照「手動遷移」一文的步驟,在可靠來源中修改 ConfigManagement 物件。

手動遷移

如果 nomos 版本低於 1.10.0,可以手動遷移設定。您需要在 ConfigManagement 物件中將 spec.enableMultiRepo 設為 true,並建立 RootSync 物件,將根存放區同步至叢集。根存放區可以是非結構化存放區階層式存放區。遷移至使用 RootSync 物件後,您可以將存放區分成多個存放區,並設定從多個存放區同步

如要透過遷移設定來設定根存放區,請完成下列工作:

  1. 開啟 ConfigManagement 物件
  2. 複製 spec.git 欄位中的值。建立 RootSync 物件時,您會使用這些值。
  3. 從 ConfigManagement 物件中移除所有 spec.git 欄位 (包括 git:)。
  4. 在 ConfigManagement 物件中,將 spec.enableMultiRepo 欄位設為 true

    # config-management.yaml
    apiVersion: configmanagement.gke.io/v1
    kind: ConfigManagement
    metadata:
      name: config-management
    spec:
      enableMultiRepo: true
    
  5. 套用變更:

    kubectl apply -f config-management.yaml
    
  6. 等待 RootSync CRD 建立完成。

    kubectl wait --for=condition=established crd rootsyncs.configsync.gke.io
    
  7. 使用從 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

  8. 套用變更:

    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.httpProxyspec.git.proxy.httpsProxy spec.git.proxy

後續步驟