遷移 ConfigManagement 物件

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

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

遷移 ConfigManagement 設定

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

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

停止使用舊版欄位

Config Sync 不支援「spec.enableLegacyFields」欄位。如果出現這個欄位,就會發生錯誤。 如果您使用較舊版本的 Config Sync,且指定了這個欄位,請完成下列步驟來移除舊版欄位:

  1. 開啟 ConfigManagement 物件。

  2. 在 ConfigManagement 物件中,移除 spec.enableLegacyFields 和 spec.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,請按照本指南啟用 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 物件,將根存放區同步至叢集。

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

  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: unstructured
      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_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 的 Workload Identity Federation 時,才選取這個選項。

        如要進一步瞭解這些驗證類型,請參閱授予 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.httpProxy 或 spec.git.proxy.httpsProxy spec.git.proxy

後續步驟