搭配使用 Config Sync 與 Kustomize 和 Helm


在本教學課程中,您會在存放區中新增參照 Helm 圖表的 Kustomize 設定,然後使用 Config Sync 將叢集與存放區同步。

使用 Config Sync 時,系統會自動算繪您放在 Git 存放區中的 Kustomize 設定和 Helm 圖表。自動算繪功能可帶來下列優點:

  • 您不再需要外部補水管道。如果沒有自動算繪功能,您就必須在工作站上使用 Kustomize 和 Helm 手動算繪設定,或設定步驟,在 CI 系統中觸發補水程序。透過自動轉譯功能,Config Sync 會處理執行作業。

  • 降低維護成本。如果沒有自動轉譯功能,您就必須維護一個 Git 存放區,其中包含原始的 Kustomize 設定和 Helm 圖表,以及另一個 Git 存放區,其中包含外部補水作業產生的輸出內容。接著,您必須設定 Config Sync,從 Git 存放區同步處理已算繪的輸出內容。使用自動算繪功能時,您只需要維護一個含有原始設定的存放區。

  • 簡化開發工作流程。如果沒有自動算繪功能,原始設定檔的變更必須經過兩次審查才能合併:一次在原始存放區,另一次在算繪的存放區。透過自動算繪功能,算繪的設定檔會由 Config Sync 產生,您只需要檢查原始設定檔的變更。

目標

  • 使用 Kustomize 設定設定存放區,並參照 cert-manager 的現成 Helm 圖表。cert-manager 是 Kubernetes 的工具,可協助您管理憑證。
  • 預覽並驗證您建立的設定。
  • 使用 Config Sync 自動轉譯圖表,並將叢集同步至存放區。
  • 確認安裝是否成功。

費用

在本文件中,您會使用 Google Cloud的下列計費元件:

如要根據預測用量估算費用,請使用 Pricing Calculator

初次使用 Google Cloud 的使用者可能符合免費試用資格。

完成本文所述工作後,您可以刪除已建立的資源,避免繼續計費。詳情請參閱清除所用資源一節。

事前準備

  1. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  2. Verify that billing is enabled for your Google Cloud project.

  3. 建立或確保您有權存取符合 Config Sync 需求的叢集,並使用下列 Config Sync 設定:
  4. 將叢集註冊機群
  5. 安裝 nomos 指令列工具。 如果已安裝 nomos 工具,請務必升級至 1.9.0 以上版本。
  6. 安裝 Helm

此外,熟悉 Git、Kustomize 和 Helm 也有助於上手。

設定存放區

下列工作說明如何準備含有設定的 Git 存放區,將 Kustomize 設定與 Helm 圖表合併:

  1. 建立或確保您有權存取 Git 存放區。由於存放區使用 Kustomize 和 Helm,因此應為非結構化存放區。

  2. 在 Git 存放區的根目錄中,建立名為 kustomization.yaml 的檔案,然後將下列程式碼貼入其中:

    # ./kustomization.yaml
    resources:
    - base
    
    patches:
    - path: ignore-deployment-mutation-patch.yaml
      target:
        kind: Deployment
    

    這個檔案是Kustomize 覆蓋, 指向 Kustomize 基礎。 這個疊加層包含 Helm 圖表基礎的修補程式,可將 client.lifecycle.config.k8s.io/mutation: ignore 註解新增至所有 Deployment 物件。建立物件後,註解會導致 Config Sync 忽略叢集中對該物件的任何衝突變更。

  3. 在 Git 存放區中,建立名為 base 的目錄:

    mkdir base
    
  4. base 目錄中,建立另一個名為 kustomization.yaml 的檔案,並將下列程式碼貼入其中:

    # ./base/kustomization.yaml
    helmCharts:
    - name: cert-manager
      repo: https://charts.jetstack.io
      version: v1.5.3
      releaseName: my-cert-manager
      namespace: cert-manager
    

    這個檔案是 Kustomize 基礎,可轉譯遠端 Helm 圖表。

  5. 返回 Git 存放區的根目錄,建立名為 ignore-deployment-mutation-patch.yaml 的檔案,然後將下列程式碼貼入其中:

    # ./ignore-deployment-mutation-patch.yaml
    apiVersion: apps/v1
    kind: Deployment
    metadata:
     name: any
     annotations:
       client.lifecycle.config.k8s.io/mutation: ignore
    

    這個檔案是套用至基本 Helm chart 的修補程式。這會將 client.lifecycle.config.k8s.io/mutation: ignore 註解新增至基本目錄中的所有部署作業。

  6. 將變更提交至存放區:

    git add .
    git commit -m 'Set up manifests.'
    git push
    

範例存放區提供這類存放區的範例。

預覽及驗證已算繪的設定

在 Config Sync 算繪設定並同步至叢集之前,請先執行 nomos hydrate 預覽算繪的設定,並執行 nomos vet 驗證格式是否正確,確保設定正確無誤。

  1. 使用下列旗標執行下列 nomos hydrate

    nomos hydrate \
        --source-format=unstructured \
        --output=OUTPUT_DIRECTORY
    

    在這個指令中:

    • --source-format=unstructured」可讓「nomos hydrate」在非結構化存放區中運作。由於您使用 Kustomize 設定和 Helm 圖表,因此必須使用非結構化存放區並新增這個旗標。
    • --output=OUTPUT_DIRECTORY 可讓您定義已算繪設定的路徑。將 OUTPUT_DIRECTORY 替換為要儲存輸出的位置。
  2. 執行 nomos vet 並使用下列旗標,檢查設定的語法和有效性:

    nomos vet \
        --source-format=unstructured \
        --keep-output=true \
        --output=OUTPUT_DIRECTORY
    

    在這個指令中:

    • --source-format=unstructured」可讓「nomos vet」在非結構化存放區中運作。
    • --keep-output=true 會儲存已算繪的設定。
    • --output=OUTPUT_DIRECTORY 是已算繪設定的路徑。

設定從 Git 存放區同步處理

您已使用要使用的設定建立存放區,現在可以設定從叢集到存放區的同步作業。如果已安裝 Config Sync,請繼續驗證同步狀態

  1. 前往 Google Cloud 控制台的「Features」(功能) 區段,然後點選「Config」(設定) 頁面。

    前往「設定」

  2. 按一下「安裝 Config Sync」
  3. 選取要使用的 Config Sync 版本。
  4. 在「安裝選項」下方,選取「在個別叢集安裝 Config Sync」
  5. 在「Available clusters」(可用叢集) 表格中,選取 cs-cluster 並按一下「Install Config Sync」(安裝 Config Sync)。 在「設定」分頁中,幾分鐘後,cs-cluster 的狀態應會顯示為「已啟用」
  6. 在「Config Sync dashboard」(Config Sync 資訊主頁) 上,按一下「Deploy cluster package」(部署叢集套件)
  7. 在「Select clusters for package deployment」(選取要部署套件的叢集) 表格中,選取 cs-cluster,然後按一下「Continue」(繼續)
  8. 保留選取的「Package hosted on Git」(Git 上託管的套件),然後按一下「Continue」(繼續)
  9. 在「Package name」(套件名稱) 欄位中,輸入 sample-repository
  10. 在「Repository URL」(存放區網址) 欄位中,輸入 https://github.com/GoogleCloudPlatform/anthos-config-management-samples
  11. 在「Path」(路徑) 欄位中輸入 config-sync-quickstart/multirepo/root
  12. 所有其他欄位則保留預設值。
  13. 按一下「Deploy Package」(部署套件)

    幾分鐘後,cs-cluster 的「Sync status」(同步處理狀態) 欄應該會顯示「Synced」(同步處理完成)

驗證安裝

安裝及設定 Config Sync 後,您可以確認安裝是否成功。

  1. 使用 nomos status 確認沒有其他錯誤:

    nomos status
    

    輸出內容範例:

    *CLUSTER_NAME
    --------------------
    <root>   https:/github.com/GoogleCloudPlatform/anthos-config-management-samples.git/helm-component/manifests@init
    SYNCED   fd17dd5a
    
  2. 確認 Helm 元件是否已成功安裝:

    kubectl get all -n cert-manager
    

    輸出內容範例:

    NAME                                              READY   STATUS    RESTARTS   AGE
    pod/my-cert-manager-54f5ccf74-wfzs4               1/1     Running   0          10m
    pod/my-cert-manager-cainjector-574bc8678c-rh7mq   1/1     Running   0          10m
    pod/my-cert-manager-webhook-7454f4c77d-rkct8      1/1     Running   0          10m
    
    NAME                              TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)    AGE
    service/my-cert-manager           ClusterIP   10.76.9.35     <none>        9402/TCP   10m
    service/my-cert-manager-webhook   ClusterIP   10.76.11.205   <none>        443/TCP    10m
    
    NAME                                         READY   UP-TO-DATE   AVAILABLE   AGE
    deployment.apps/my-cert-manager              1/1     1            1           10m
    deployment.apps/my-cert-manager-cainjector   1/1     1            1           10m
    deployment.apps/my-cert-manager-webhook      1/1     1            1           10m
    
    NAME                                                    DESIRED   CURRENT   READY   AGE
    replicaset.apps/my-cert-manager-54f5ccf74               1         1         1       10m
    replicaset.apps/my-cert-manager-cainjector-574bc8678c   1         1         1       10m
    replicaset.apps/my-cert-manager-webhook-7454f4c77d      1         1         1       10m
    

清除所用資源

如要避免系統向您的 Google Cloud 帳戶收取本教學課程中所用資源的相關費用,請刪除含有該項資源的專案,或者保留專案但刪除個別資源。

刪除專案

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

刪除個別資源

刪除存放區中的資訊清單

為避免誤刪,Config Sync 不允許您在單一提交中移除所有命名空間或叢集範圍資源。請按照下列操作說明,以正常方式解除安裝元件,並在個別提交中移除命名空間:

  1. 從存放區中移除 cert-manager 元件:

    git rm -rf manifests/cert-manager \
        && git commit -m "uninstall cert-manager" \
        && git push origin BRANCH
    

    BRANCH 替換為您建立存放區的分支。

  2. 刪除 cert-manager 命名空間:

    git rm manifests/namespace-cert-manager.yaml \
        && git commit -m "remove the cert-manager namespace" \
        && git push origin BRANCH
    
  3. 確認 cert-manager 命名空間不存在:

    kubectl get namespace cert-namespace
    

    輸出內容範例:

    Error from server (NotFound): namespaces "cert-namespace" not found
    

刪除叢集

如要刪除叢集,請完成下列指令:

控制台

如要使用 Google Cloud 控制台刪除叢集,請完成下列工作:

  1. 前往 Google Cloud 控制台的 GKE 頁面。

    前往 GKE

  2. 按一下要刪除的叢集旁的「Actions」(動作),然後按一下「Delete」(刪除)

  3. 系統提示您進行確認時,再按一下 [Delete] (刪除)

gcloud

如要使用 Google Cloud CLI 刪除叢集,請執行下列指令:

gcloud container clusters delete CLUSTER_NAME

詳情請參閱 gcloud container clusters delete 說明文件。

後續步驟