加快 Cloud Code for VS Code 的開發作業

如要在 VS Code 的 Cloud Code 中加快本機開發作業,請善用檔案同步和熱重載功能、儲存時自動部署功能,並使用 Skaffold 模組分別開發應用程式的各個部分。

啟用 Skaffold 檔案同步和熱重載功能

為提高本機開發工作流程的效率,並避免需要重建、重新部署及重新啟動 Pod,Skaffold 支援將變更的檔案複製至已部署的容器。也就是說,當您對靜態和原始碼檔案進行變更時,您可以看到變更在幾秒內生效,進而加快回饋循環。

對於靜態檔案 (例如 HTML 和 CSS 檔案),這種檔案複製行為稱為「檔案同步處理」

對於原始碼檔案,這項行為稱為「熱重載」,並支援下列檔案類型:

  • Go:*.go
  • Java:*.java、*.kt、*.scala、*.groovy、*.clj
  • NodeJS:*.js、*.mjs、*.coffee、*.litcoffee、*.json

設定熱重載後,Skaffold 會偵測支援檔案的變更,並將這些變更同步至叢集中執行中的容器。變更不支援熱重新載入的檔案類型,會觸發重新建構映像檔和 Pod 重新啟動。

當您使用 Buildpack 做為偏好的建構工具時,系統會預設啟用自動檔案同步和熱重新載入功能。對於 Docker 等其他建構工具,您可以在 skaffold.yaml 檔案中為要自訂的構件指定 sync 區段。

你的同步處理設定可以是下列其中一種 (依偏好順序排列):

  • auto:Skaffold 會自動設定同步處理作業。(僅適用於 Jib 和 Buildpacks 構件)。這是 Buildpack 的預設值。
  • infer:每個變更檔案的目的地會從建構工具推斷。
  • manual:您必須指定本機工作區中的檔案,以及執行中的容器中的目的地。

以下是 skaffold.yaml 檔案中 sync 部分的範例,其中指定了 manual 同步處理作業,將所有 /static-html HTML 檔案同步處理至容器中的 static 資料夾:

build:
  artifacts:
    - image: gcr.io/k8s-skaffold/node-example
      context: node
      sync:
        manual:
          - src: 'static-html/*.html'
            dest: static

如要進一步瞭解檔案同步處理和指定同步處理規則,請參閱 Skaffold 的檔案同步處理指南

在 Kubernetes 上開發時新增功能

設定檔案同步處理和熱重新載入功能後,請開始執行迭代週期,並在專案中新增更多功能。變更會直接部署至 Kubernetes 叢集,不必停止及移除部署項目,也不需要手動建構映像檔及加上標記,或是更新叢集。

標準的迭代週期如下所示:

  1. 在專案中進行變更。舉例來說,如果您使用 Cloud Code Java Guestbook 應用程式,請按照下列方式在 FrontendController 類別中新增端點:

    1. src/main/java/cloudcode/guestbook/frontend 開啟 FrontendController.java 檔案,然後新增下列內容:

      @RequestMapping("/greeting")
      @ResponseBody
      public String greeting(@RequestParam(value="name", defaultValue="World") String name) {
         return String.format("Hello from Kubernetes with IntelliJ, %s!", name);
      }
      
    2. 加入新註解 RequestMappingResponseBody 所需的匯入項目。

  2. 儲存變更 (Ctrl/Cmd+S) 或建構專案。

    您可以透過主控台視窗觀看進度和部署記錄。變更部署完成後,請確認更新。

  3. 如要結束持續開發工作階段,請按一下「停止」圖示。

    Cloud Code 會刪除用於開發工作階段的所有 Kubernetes 資源。

使用 Skaffold 設定開發微服務應用程式

開發微服務應用程式時,建議您獨立處理各個部分,以簡化偵錯和部署作業。

您可以將應用程式分割為 Skaffold 模組,進而獨立開發及偵錯應用程式的部分內容。舉例來說,Bank of Anthos 範例是包含十個微服務的應用程式。範例的 skaffold.yaml 檔案會將這些服務分組為五個 skaffold 模組,分別命名為 setupdbfrontendbackendloadgenerator

定義 Skaffold 模組和設定依附元件

如要定義 Skaffold 模組和設定依附元件,請按照下列步驟操作:

  1. 開啟要定義模組的專案。

  2. 開啟 skaffold.yaml 檔案。

  3. 如果 skaffold.yaml 檔案有多個設定,如要將設定設為 Skaffold 模組,請指定下列行:

    metadata:
      name: MODULE_NAME_1
    

    舉例來說,在 Bank of Anthos skaffold.yaml 中,db 模組會定義資料庫部署作業:

    apiVersion: skaffold/v3
    kind: Config
    metadata:
      name: db # module defining database deployments
    requires:
    - configs:
      - setup
    build:
      artifacts:
      - image: accounts-db
        context: src/accounts-db
      - image: ledger-db
        context: src/ledger-db
    manifests:
      rawYaml:
      - dev-kubernetes-manifests/accounts-db.yaml
      - dev-kubernetes-manifests/ledger-db.yaml
    deploy:
      kubectl: {}
  4. 如果設定需要先部署其他設定,才能部署目前的設定,則必須將設定新增至依附元件。如要指定設定依附元件,請在 skaffold.yaml 檔案的 requires 區塊中新增 configs 清單。

    舉例來說,Bank of Anthos skaffold.yaml 檔案包含設定依附元件 setup

    如要定義依附元件,請在 skaffold.yaml 檔案中加入以下內容,其中 DEPENDENCY_NAME 是依附元件的名稱。

    requires:
        - configs: DEPENDENCY_NAME
    

    以這種方式列出的設定可參照在相同檔案或目前專案中其他 skaffold.yaml 檔案中定義的依附元件。

  5. 請按照「建構特定 Skaffold 模組及其依附元件」中的步驟,分別建構每個 Skaffold 模組,以便測試設定依附元件,確保這些模組會連同其依附元件部署。

建構特定 Skaffold 模組及其依附元件

定義模組及其依附元件後,您可以在 launch.json 檔案中指定要使用雲端程式碼執行的模組。

如果專案未定義 launch.json 檔案,當您執行 Cloud Code:在 Kubernetes 上執行Cloud Code:在 Kubernetes 上偵錯時,系統會提示您選取要建構的模組:

  1. 開啟指令面板 (Ctrl/Cmd+Shift+P),然後執行「Cloud Code: Run on Kubernetes」(Cloud Code:在 Kubernetes 上執行)
  2. 按一下「選取模組」
  3. 選擇要部署的模組,然後按一下「OK」。每個模組都會使用其依附元件進行建構。
  4. 系統提示時,請選擇圖像註冊資料庫,然後按下 Enter

如果專案有 launch.json,請按照下列步驟選擇要建構的 Skaffold 模組:

  1. 開啟專案的 launch.json 檔案。

  2. 編輯啟動設定,新增 skaffoldFlags 選項,並使用以半形逗號分隔的 modules 清單進行建構。如果省略 skaffoldFlags,則會建構所有模組。

      {
        "name": "Run on Kubernetes",
        "type": "cloudcode.kubernetes",
        "request": "launch",
        "skaffoldConfig": "${workspaceFolder}/skaffold.yaml",
        "skaffoldFlags": {
           "modules": ["MODULE_NAME_2,MODULE_NAME_2"],
        "watch": true,
        "cleanUp": true,
        }
      }
    
  3. 執行您編輯的啟動設定。

在 Kubernetes 上持續開發

設定好所需選項的執行目標後,您可以選擇定期執行應用程式,或在 IDE 上啟動開發疊代週期,將來源和依附元件的任何變更套用至運作中的應用程式。

「在 Kubernetes 上執行」執行目標會在 Kubernetes 叢集中啟動開發週期。開始開發週期後,Cloud Code 會使用 Skaffold 為專案建構映像檔,然後加上標記、推送至已設定的存放區,並使用 kubectl 部署專案的 Kubernetes 資訊清單。

  1. 使用可用的設定選項自訂部署作業。
  2. 如果應用程式已設定為使用 Skaffold 模組,您可以選取要建構或部署的特定模組
  3. 開啟指令面板 (按下 Ctrl/Cmd+Shift+P 鍵),然後執行「Cloud Code: Run on Kubernetes」指令。
  4. 確認是否要使用目前的 Kubernetes 結構定義來執行應用程式 (或切換至偏好的結構定義)。如要進一步瞭解如何設定 Kubernetes 情境,請參閱「設定設定」。
  5. 如果您選擇遠端叢集做為背景,請在系統提示時,選擇要推送圖片的映像註冊中心。如果專案已啟用 Artifact Registry API,且至少有一個 Artifact Registry 存放區,您可以瀏覽並選取現有的 Artifact Registry 存放區。

    Cloud Code 會建構容器、將容器推送至登錄,並將 Kubernetes 設定套用至叢集,然後等待部署。

後續步驟

取得支援

如要提供意見回饋,請在 GitHub 上回報問題,或在 Stack Overflow 上提問。