IBM Cloud Docs
使用 Kustomize 包裝應用程式以在多個環境中重複使用

使用 Kustomize 包裝應用程式以在多個環境中重複使用

身為 十二要素雲端原生應用程式的一部分,您希望透過建立持續開發與遞送管道,使用共通、版本控制的程式碼基礎來源,以維持 dev-to-prod 的均等性。 在您的程式碼庫儲存庫中,您會儲存 Kubernetes 資源組態清單檔案,通常是 YAML 格式。 您可以使用 Kubernetes 專案 Kustomize 來標準化和自訂您跨越多種環境的部署。

例如,您可以設定基本 kustomization YAML 檔案,以宣告 Kubernetes 物件,例如在開發、測試和生產環境中共用的部署和 PVC。 接下來,您可以設定單獨的 kustomization YAML 檔案,為每個環境自訂組態,例如生產環境的複本數量多於測試環境的複本數量。 這些客製化的 YAML 檔案可以覆蓋或建構在共用的基本 YAML 檔案上,如此一來,您就可以管理除了少數覆蓋設定差異(由您的原始碼控制)之外,大部分都相同的環境。 如需 Kustomize 的更多資訊,例如詞彙表和常見問題,請查看 Kustomize 文件

開始之前: 存取 Red Hat OpenShift 叢集

若要使用 Kustomize 設定配置檔,請執行下列動作:

  1. 安裝 kustomize 工具

    • 對於 macOS,可以使用 brew 套件管理程式。
      brew install kustomize
      
    • 對於 Windows,可以使用 chocolatey 套件管理程式。
      choco install kustomize
      
  2. 在版本控制系統中為應用程式建立目錄,例如 Git。

    git init ~/<my_app>
    
  3. kustomize 建立您的 repo 架構 base目錄、overlay目錄,以及環境目錄,例如暫存與生產目錄。 在後續步驟中,設定這些儲存庫以與 kustomize 一起搭配使用。

    mkdir -p ~/<my_app>/base &&
    mkdir -p ~/<my_app>/overlay &&
    mkdir -p ~/<my_app>/overlay/staging &&
    mkdir -p ~/<my_app>/overlay/prod
    

    範例儲存庫結構

    .
    ├── base
    └── overlay
        ├── prod
        └── staging
    
  4. 設定 base 儲存庫。

    1. 導覽至 base 儲存庫。

      cd ~/<my_app>/base
      
    2. 為應用程式部署建立一組起始的 Kubernetes 配置 YAML 檔案。 您可以使用 wasliberty YAML 範例來建立部署、服務、配置對映和持續性磁區要求。

    3. 建立 kustomization 檔案,指定跨環境套用的基本組態。 kustomization 檔案必須包含儲存在相同 base 儲存庫中的 Kubernetes 資源配置 YAML 的清單。 在 kustomization 檔案中,還可以新增套用於 base 儲存庫中所有資源 YAML 的配置,例如附加到所有資源名稱的字首或字尾,以及標籤、密碼、ConfigMap、在其中建立所有資源的現有名稱空間等。

      apiVersion: kustomize.config.k8s.io/v1beta1
      kind: Kustomization
      namespace: wasliberty
      namePrefix: kustomtest-
      nameSuffix: -v2
      commonLabels:
        app: kustomized-wasliberty
      resources:
      - deployment.yaml
      - service.yaml
      - pvc.yaml
      - configmap.yaml
      - secret.yaml
      

      resources YAML 的名稱必須與 base 儲存庫中其他檔案的名稱相符。 您可在相同檔案中包含多個配置,但在範例中,這些配置分別位於不同的檔案中,例如 deployment.yamlservice.yamlpvc.yaml

    4. 使用在 kustomization 基本 YAML 檔案中定義的配置來建置資源 YAML 檔案。 藉由將 kustomization 和資源 YAML 中的配置結合在一起來建置資源。 合併的 YAML 檔案會在輸出中以 stdout 傳回。 使用此相同的指令可建置對 kustomization YAML 進行的任何後續變更,例如新增標籤。

      kustomize build
      
  5. 使用對每個環境(例如,暫置和正式作業)唯一的 kustomization YAML 檔案來設定 overlay 儲存庫。

    1. 在 staging 儲存庫中,建立 kustomization.yaml 檔案。 新增對於暫置唯一的任何配置(例如,標籤或映像檔標籤),或為要測試的新元件新增 YAML。

      apiVersion: kustomize.config.k8s.io/v1beta1
      kind: Kustomization
      namePrefix: staging-
      commonLabels:
        env: staging
        owner: TeamA
      bases:
      - ../../base
      patchesStrategicMerge:
      - configmap.yaml
      - new_staging_resource.yaml
      resources:
      - new_staging_resource.yaml
      
      了解 YAML 組件
      元件 說明
      namePrefix 指定一個前綴,附加到您要使用暫存 kustomization 檔案建立的每個資源名稱,例如 staging-
      commonLabels 新增對暫置物件(例如,暫置環境和負責團隊)唯一的標籤。
      bases 將目錄或 URL 的相對路徑新增到包含基本 kustomization 檔案的遠端儲存庫。 在此範例中,相對路徑指向先前建立的 kustomization 儲存庫中的基本 base 檔案。 對於層疊 kustomization,這是必要欄位。
      patchesStrategicMerge 列出要合併到基本 kustomization 的資源配置 YAML 檔案。 您還必須將這些檔案新增到 kustomization 檔案所在的儲存庫,例如 overlay/staging。 這些資源配置檔可以包含小型變更,這些變更會合併到與修補程式同名的基本配置檔。 該資源將取得 base 配置檔中的所有元件,以及在 overlay 配置檔中指定的任何其他元件。 如果配置不是 base 儲存庫中的新檔案,您必須同時將檔名新增至 resources 欄位。
      resources 列出對 staging 儲存庫唯一且不包含在 base 儲存庫中的任何資源配置 YAML 檔案。 請將這些檔案同時包含在 patchesStrategicMerge 欄位中,並將其新增到 kustomization 檔案所在的儲存庫,例如 overlay/staging
      其他可能的配置 如需更多可加入檔案的設定,請參閱 製作 kustomization 檔案
    2. 建置暫置的層疊配置檔。

      kustomize build overlay/staging
      
    3. 重複這些步驟以建立正式作業層疊 kustomization 及其他配置 YAML 檔案。 例如,可能會增加 deployment.yaml 中的抄本數,以便正式作業環境可以處理更多使用者要求。

    4. 檢閱 kustomize 儲存庫結構,以確保它包含您需要的所有 YAML 配置檔。 此結構可能類似於下列範例。

      ├── base
      │   ├── configmap.yaml
      │   ├── deployment.yaml
      │   ├── kustomization.yaml
      │   ├── pvc.yaml
      │   ├── secret.yaml
      │   └── service.yaml
      └── overlay
          ├── prod
          │   ├── deployment.yaml
          │   ├── kustomization.yaml
          │   └── new_prod_resource.yaml
          └── staging
              ├── configmap.yaml
              ├── kustomization.yaml
              └── new_staging_resource.yaml
      
  6. 對要部署的環境套用 Kubernetes 資源。 下列範例使用 staging 儲存庫。

    1. 導覽至 overlay 下的 staging 目錄。 如果在上一步中未建置資源,請立即建立這些資源。
      cd overlay/staging && kustomize build
      
    2. 將 Kubernetes 資源套用於叢集。 包含 -k 選項和 kustomization 檔案所在的目錄。 例如,如果已經位於 staging 目錄中,請包含 ../staging 以標示該目錄的路徑。
      oc apply -k ../staging
      
      輸出範例
      configmap/staging-kustomtest-configmap-v2 created
      secret/staging-kustomtest-secret-v2 created
      service/staging-kustomtest-service-v2 created
      deployment.apps/staging-kustomtest-deployment-v2 created
      job.batch/staging-pi created
      persistentvolumeclaim/staging-kustomtest-pvc-v2 created
      
    3. 檢查以確保套用了暫置獨有的變更。 例如,如果新增了 staging- 字首,則建立的 Pod 和其他資源將在其名稱中包含此字首。
      oc get -k ../staging
      
      輸出範例
      NAME                                        DATA   AGE
      configmap/staging-kustomtest-configmap-v2   2      90s
      
      NAME                                  TYPE     DATA   AGE
      secret/staging-kustomtest-secret-v2   Opaque   2      90s
      
      NAME                                    TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
      service/staging-kustomtest-service-v2   NodePort   172.21.xxx.xxx   <none>        9080:30200/TCP   90s
      
      NAME                                               READY   UP-TO-DATE   AVAILABLE   AGE
      deployment.apps/staging-kustomtest-deployment-v2   0/3     3            0           91s
      
      NAME                   COMPLETIONS   DURATION   AGE
      job.batch/staging-pi   1/1           41s        2m37s
      
      NAME                                              STATUS    VOLUME   CAPACITY   ACCESS MODES   STORAGECLASS       AGE
      persistentvolumeclaim/staging-kustomtest-pvc-v2   Pending                                      ibmc-file-bronze   90s
      
    4. 針對要建置的每個環境,重複上述步驟。
  7. 選用:藉由移除使用 Kustomize 來套用的所有資源,清除您的環境。

    oc delete -k <directory>
    

    輸出範例

    configmap "staging-kustomtest-configmap-v2" deleted
    secret "staging-kustomtest-secret-v2" deleted
    service "staging-kustomtest-service-v2" deleted
    deployment.apps "staging-kustomtest-deployment-v2" deleted
    job.batch "staging-pi" deleted
    persistentvolumeclaim "staging-kustomtest-pvc-v2" deleted