本頁面說明如何排定錯誤注入測試的實驗,以及如何使用外部排程服務自動執行韌性測試。
排定實驗時間後,測試程序就會自動執行,並在對使用者影響最小的時段 (例如:) 進行實驗:
- 離峰時段或預定維護期間。
- 定期排定的遊戲日或混沌工程演練。
- 自動化測試管道 (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.operator 或 roles/faulttesting.admin 角色,再繼續操作。
使用 Google Cloud 控制台和 Cloud Scheduler 設定排程
雖然您無法直接在 Fault Injection Testing 控制台中建立排程,但控制台會提供在 Cloud Scheduler 中設定工作所需的參數。
- 前往 Google Cloud 控制台的「Experiment templates」(實驗範本) 頁面。
- 選取範本即可查看詳細資料。
在詳細資料頁面中,請注意下列事項:
- JSON 酬載,其中包含
"startOnCreateEnabled": true。 - 用於建立實驗的 REST API 端點網址。
您會在 Cloud Scheduler 中使用這些變數。
- JSON 酬載,其中包含
定義工作排程和時區。
在「目標類型」下方,選取「HTTP」。
將「URL」設為「實驗範本」詳細資料頁面中的 REST API 端點網址。
將「HTTP method」(HTTP 方法) 設為「POST」。
在「Body」欄位中,輸入 JSON 酬載:
{ "experimentTemplate": "projects/PROJECT_ID/locations/REGION/experimentTemplates/TEMPLATE_ID", "startOnCreateEnabled": true, "description": "DESCRIPTION" }為工作設定驗證機制。如需服務帳戶建議,請參閱最佳做法。
點選「建立」。
使用 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.operator或roles/faulttesting.admin。 - 產生專屬實驗 ID。使用指令碼觸發實驗時,請確保指令碼為每次執行作業產生專屬的實驗 ID,以免資源名稱發生衝突。
- 使用描述性名稱或說明。每次排定的執行作業都會建立「新」的實驗執行個體。不會重新啟動或覆寫先前的實驗。使用描述性名稱或說明,有助於將執行作業追溯至其排程。
- 監控排程失敗情形。外部觸發程序可能因網路問題、憑證過期或 API 配額而失敗。在排程器工作中設定監控和快訊,以便在工作執行失敗或收到錯誤回應時接收通知。
- 配合排除期。確認排定的實驗不會與有效的排除期間重疊。如果排定的實驗在排除期內觸發,故障注入測試會封鎖執行作業,實驗也無法啟動。