排定實驗時段

本頁面說明如何排定錯誤注入測試的實驗,以及如何使用外部排程服務自動執行韌性測試。

排定實驗時間後,測試程序就會自動執行,並在對使用者影響最小的時段 (例如:) 進行實驗:

  • 離峰時段或預定維護期間。
  • 定期排定的遊戲日或混沌工程演練。
  • 自動化測試管道 (CI/CD),可在部署前驗證韌性。

排定實驗時間表可協助您持續驗證系統的容錯能力,不必在每次執行時手動介入。

已排定實驗的運作方式

Fault Injection Testing 不含內建排程服務。而是將錯誤植入測試與外部排程服務 (例如 Cloud Scheduler) 整合,藉此安排實驗。

如要排定實驗時間,請設定外部排程器,在特定時間呼叫 Fault Injection Testing API 或執行 gcloud 指令。為支援這項整合,Fault Injection Testing 提供 startOnCreateEnabled 參數。設為 true 時,這個參數會告知系統在實驗建立後立即自動啟動。

為已排定的實驗選取目標

排定實驗的目標資源是在實驗範本中定義,而不是在排程設定中定義。以下說明 Fault Injection Testing 如何處理目標:

  • 建立實驗範本時,請定義錯誤類型和目標資源的選取條件。資源範例包括特定 VM 執行個體、具有相符標記的資源,或特定區域中的資源。
  • 設定外部排程器時,API 酬載會參照實驗範本。
  • 外部排程器會在排定的時間觸發實驗建立作業。Fault Injection Testing 會在當下評估範本中的目標選取規則,判斷哪些資源受到影響。

如果範本是以標記為依據指定 VM,則排定的實驗會在實驗執行時,影響具有該標記的 VM。

設定預定的實驗

請先確認您具備 roles/faulttesting.operatorroles/faulttesting.admin 角色,再繼續操作。

使用 Google Cloud 控制台和 Cloud Scheduler 設定排程

雖然您無法直接在 Fault Injection Testing 控制台中建立排程,但控制台會提供在 Cloud Scheduler 中設定工作所需的參數。

  1. 前往 Google Cloud 控制台的「Experiment templates」(實驗範本) 頁面。
  2. 選取範本即可查看詳細資料。
  3. 在詳細資料頁面中,請注意下列事項:

    • JSON 酬載,其中包含 "startOnCreateEnabled": true
    • 用於建立實驗的 REST API 端點網址。

    您會在 Cloud Scheduler 中使用這些變數。

  4. 前往 Google Cloud 控制台的「Cloud Scheduler」 頁面,然後點選「建立工作」

  5. 定義工作排程和時區。

  6. 在「目標類型」下方,選取「HTTP」

  7. 將「URL」設為「實驗範本」詳細資料頁面中的 REST API 端點網址。

  8. 將「HTTP method」(HTTP 方法) 設為「POST」

  9. 在「Body」欄位中,輸入 JSON 酬載:

    {
      "experimentTemplate": "projects/PROJECT_ID/locations/REGION/experimentTemplates/TEMPLATE_ID",
      "startOnCreateEnabled": true,
      "description": "DESCRIPTION"
    }
    
  10. 為工作設定驗證機制。如需服務帳戶建議,請參閱最佳做法

  11. 點選「建立」

使用 Google Cloud CLI 設定排程

如果您使用會執行殼層指令的指令碼或工具,可以設定 Cloud 服務排程或自訂排程,以 --start-on-create-enabled 旗標執行 gcloud alpha fault-testing experiments create 指令,排定實驗時間。

執行下列指令,建立並立即啟動實驗執行個體:

gcloud alpha fault-testing experiments create EXPERIMENT_ID \
    --experiment-template=TEMPLATE_ID \
    --location=REGION \
    --start-on-create-enabled \
    [--description="DESCRIPTION"] \
    [--project=PROJECT_ID]
  • EXPERIMENT_ID:實驗執行的專屬 ID。由於這項指令是自動執行,因此指令碼應為每次執行作業產生專屬 ID。舉例來說,你可以附加時間戳記: scheduled-exp-$(date +%s)
  • TEMPLATE_ID:預先設定的實驗範本 ID。
  • REGION:實驗執行的 Google Cloud 區域。
  • --start-on-create-enabled:這個旗標會告知 Fault Injection Testing 在實驗建立後立即啟動。
  • DESCRIPTION:(選用) 實驗執行的說明。
  • PROJECT_ID:(選用) 您的 Google Cloud專案 ID。

管理實驗執行作業

每次排定執行作業時,系統都會建立新的實驗執行個體。您可以使用下列指令管理這些執行個體:

  • 如要列出所有實驗執行作業:

    gcloud alpha fault-testing experiments list --location=REGION
    
  • 如要查看特定執行的詳細資料:

    gcloud alpha fault-testing experiments describe EXPERIMENT_ID --location=REGION
    
  • 如要提早停止執行中的實驗,請按照下列步驟操作:

    gcloud alpha fault-testing experiments stop EXPERIMENT_ID --location=REGION
    

最佳做法

排定實驗時,請參考下列最佳做法:

  • 使用專用服務帳戶。設定排程器 (例如 Cloud Scheduler) 時,請將其與專屬服務帳戶建立關聯。只為這個服務帳戶授予管理實驗所需的最低權限,例如專案的 roles/faulttesting.operatorroles/faulttesting.admin
  • 產生專屬實驗 ID。使用指令碼觸發實驗時,請確保指令碼為每次執行作業產生專屬的實驗 ID,以免資源名稱發生衝突。
  • 使用描述性名稱或說明。每次排定的執行作業都會建立「新」的實驗執行個體。不會重新啟動或覆寫先前的實驗。使用描述性名稱或說明,有助於將執行作業追溯至其排程。
  • 監控排程失敗情形。外部觸發程序可能因網路問題、憑證過期或 API 配額而失敗。在排程器工作中設定監控和快訊,以便在工作執行失敗或收到錯誤回應時接收通知。
  • 配合排除期。確認排定的實驗不會與有效的排除期間重疊。如果排定的實驗在排除期內觸發,故障注入測試會封鎖執行作業,實驗也無法啟動。