天天看點

資源編排之資源棧偏差檢測和糾正功能介紹适用場景示例

資源編排服務

(Resource Orchestration Service, 簡稱ROS)是阿裡雲提供的一項簡化雲計算資源管理的服務。您可以遵循ROS定義的模闆規範編寫資源棧模闆,在模闆中定義所需的雲計算資源(例如ECS執行個體、RDS資料庫執行個體)、資源間的依賴關系等。ROS的編排引擎将根據模闆自動完成所有資源的建立和配置,實作自動化部署及運維。

使用者可以使用ROS管理資源,但即使通過ROS管理資源,也可以在ROS之外更改這些資源。使用者可以使用建立資源的底層服務直接編輯資源。例如,可以使用ECS控制台來更新作為ROS資源棧一部分建立的伺服器執行個體。在ROS之外進行的更改會使資源棧的更新或删除操作複雜化。為了解決這些問題,同時也是對标AWS,我們推出了偏差檢測功能。使用偏差檢測可以識别在ROS管理之外進行配置更改的資源棧資源。

本文會對偏差檢測功能進行簡要介紹和示例,更詳細的功能介紹可以參考

這裡

功能介紹

偏差檢測

通過偏差檢測,可以檢測資源棧的實際配置是否與其預期配置不同或已經存在偏差。使用ROS可以在整個資源棧或資源棧内的單個資源上檢測偏差,可以檢測出屬性、資源是否被删除。如果某個資源的實際屬性值與預期屬性值不同,則認為該資源已經存在偏差。如果資源棧的一個或多個資源已經存在偏差,則認為資源棧已經存在偏差。可以在具有以下狀态的資源棧上執行偏差檢測:

CREATE_COMPLETE

UPDATE_COMPLETE

ROLLBACK_COMPLETE

 、

ROLLBACK_FAILED

CHECK_COMPLETE

。當在資源棧上檢測偏差時,ROS不會在任何屬于該資源棧的嵌套資源棧上檢測偏差。可以直接在嵌套資源棧上啟動偏差檢測操作。

為了确定資源是否已經存在偏差,ROS将預期的資源屬性值(如資源棧模闆中所定義)指定為模闆參數的值,并将預期值與這些資源屬性的實際值進行比較。如果資源的一個或多個屬性值被删除或修改,則認為該資源已經存在偏差。ROS将生成已經存在偏差的資源棧中每個資源的詳細資訊。ROS僅通過資源棧模闆或指定模闆參數來确定屬性值的偏差,這不包括資源屬性的預設值。要使ROS跟蹤資源屬性以确定偏差,需要顯示設定資源的屬性值。ROS僅在支援偏差檢測的資源上檢測偏差,不支援偏差檢測的資源會顯示

NOT_CHECKED

狀态。詳情請參考

支援偏差檢測的資源

偏差檢測中包含多個狀态的概念,這裡簡單解釋下:

  • 偏差檢測狀态:描述偏差檢測操作的狀态。
偏差檢測操作狀态 描述

DETECTION_COMPLETE

已經對支援偏差檢測的資源棧中的所有資源成功完成了資源棧偏差檢測操作。

DETECTION_FAILED

資源棧偏差檢測操作對于資源棧中的至少一個資源檢測失敗。

DETECTION_IN_PROGRESS

資源棧偏差檢測操作目前正在進行中。
  • 資源棧偏差狀态:根據資源棧資源的偏差狀态來描述資源棧的總體偏差狀态。
偏差狀态

DRIFTED

資源棧與其預期模闆配置不同或已經存在偏差。如果資源棧的一個或多個資源已經存在偏差,則認為資源棧已經存在偏差。

NOT_CHECKED

ROS尚未檢查資源棧、資源棧組或資源棧執行個體是否與其預期模闆配置不同。

IN_SYNC

偏差檢測支援資源的目前配置與其預期的模闆配置相比對。

說明 不支援偏差檢測的資源,其他資源棧、資源棧組或資源棧執行個體也具有IN_SYNC狀态。

  • 資源偏差狀态:描述單個資源的偏差狀态。
資源偏差狀态

DELETED

資源與預期的模闆配置不同,因為資源已被删除。

MODIFIED

資源與預期的模闆配置不同。

NOT_CHECKED

ROS沒有檢查資源是否與預期的模闆配置不同。

IN_SYNC

資源的目前配置與其預期的模闆配置相比對。

偏差糾正

使用者可以采取糾正措施,使資源棧資源再次與其在資源棧模闆中的定義同步。目前支援兩種方式:

  • 通過更新資源棧的方式,直接更新存在偏差的資源,以便它們與其模闆定義一緻。
  • 通過模闆糾正功能直接糾正模闆,讓模闆内容與實際資源一緻,目前AWS還不具有此功能。

解決偏差有助于確定資源配置一緻性。

适用場景

  • 如果需要了解資源棧中資源是否發生偏差(修改或删除),并作出應對,可以使用偏差檢測功能。
    • 很多其他服務使用ROS幫助使用者建立資源。因為資源歸屬于使用者,使用者就可能對資源進行修改。比如容器服務在使用我們的過程中,碰到了這樣一個問題。使用者總是喜歡自己删資源,而容器服務難以感覺到這些,于是導緻了一些問題。容器服務需要這樣一個功能,查詢出所有資源的狀态,到底有沒有删除,并作出相應和處理。偏差檢測正好适用。
    • 使用者的賬号如果是共享的,或者有一些有資源管理權限的子賬号時,就面臨多個使用者操作同一資源的問題。資源棧中資源可能被意外地修改或删除。使用偏差檢測功能,可以清晰地了解到資源棧中的資源是不是還符合預期。比如以ROS資源棧的方式來部署服務叢集,通過偏差檢測就可以快速了解到叢集是否存在異常。
  • 如果需要消除資源棧中的偏差,可以使用偏差糾正功能。
    • 資源棧如果存在偏差,可能會影響到更新功能的使用。比如資源棧中資源已被删除,而在模闆中又觸發了該資源的更新,或是引用了該資源的其他資源的更新,更新就可能失敗。通過使用恰當的模闆進行更新,或是使用模闆糾正功能,可以把資源棧恢複到無偏差狀态,確定可以繼續使用資源棧來管理資源。
      • 使用恰當的模闆進行更新:适合于熟悉模闆開發的使用者,通過定制化的方式消除偏差。
      • 使用模闆糾正功能:适合于所有使用者,一鍵式的修複功能。

示例

建立資源棧

我們使用如下模闆在

ROS控制台

建立一個資源棧。這個資源棧包含兩個資源:ScalingGroup1、ScalingGroup2。

ROSTemplateFormatVersion: '2015-09-01'
Resources:
  ScalingGroup1:
    Type: 'ALIYUN::ESS::ScalingGroup'
    Properties:
      MinSize: 0
      MaxSize: 1
      DefaultCooldown: 500
      ScalingGroupName: xxx
      RemovalPolicys:
        - OldestInstance
  ScalingGroup2:
    Type: 'ALIYUN::ESS::ScalingGroup'
    Properties:
      MinSize: 0
      MaxSize: 1
      DefaultCooldown: 500
      ScalingGroupName: yyy
      RemovalPolicys:
        - OldestInstance
           
資源編排之資源棧偏差檢測和糾正功能介紹适用場景示例

第一次偏差檢測

對資源棧進行偏差檢測,等待偏差檢測完成。

資源編排之資源棧偏差檢測和糾正功能介紹适用場景示例

重新整理頁面,觀察偏差檢測的結果,可以看到資源棧無偏差,所有資源也沒有偏差。

如果重新整理頁面,沒有結果或者還是以前的結果,說明偏差檢測還在運作中。頁面顯示的是最近一次成功的偏差檢測的資訊。

資源編排之資源棧偏差檢測和糾正功能介紹适用場景示例

第二次偏差檢測

我們在ESS控制台修改 ScalingGroup1 的名稱變成 xxx1,并删除 ScalingGroup2,然後再次執行偏差檢測。

可以看到資源棧變成了偏差狀态,ScalingGroup1變成偏差狀态,ScalingGroup2變成了已删除狀态。

資源編排之資源棧偏差檢測和糾正功能介紹适用場景示例

對于ScalingGroup1,我們檢視偏差詳細資訊。可以看到ScalingGroupName屬性存在偏差,模闆中定義的是xxx,實際是xxx1。

資源編排之資源棧偏差檢測和糾正功能介紹适用場景示例

第三次偏差檢測

我們在ESS控制台修改 ScalingGroup1 的名稱變成 xxx,再對資源單獨進行偏差檢測。可以看到ScalingGroup1資源又恢複到了比對狀态。

資源編排之資源棧偏差檢測和糾正功能介紹适用場景示例

更新資源棧消除偏差

通過修改ScalingGroup1,我們可以消除ScalingGroup1的偏差。但ScalingGroup2由于被删除,無法恢複成相同的實體ID,這種偏差如何消除?

通過更新資源棧的方式,可以同時消除修改和删除類型的偏差。

假定資源棧處于第二次偏差檢測後的狀态,使用如下模闆更新資源棧。這個模闆删除了ScalingGroup2資源,把ScalingGroup1中的ScalingGroupName改成了xxx1。

ROSTemplateFormatVersion: '2015-09-01'
Resources:
  ScalingGroup1:
    Type: 'ALIYUN::ESS::ScalingGroup'
    Properties:
      MinSize: 0
      MaxSize: 1
      DefaultCooldown: 500
      ScalingGroupName: xxx1
      RemovalPolicys:
        - OldestInstance           

更新資源棧後,由于資源棧發生了變化,原來的偏差檢測的結果不再有效,ROS會移除原來的偏差檢測結果,需要重新進行偏差檢測。重新進行偏差檢測後,觀察結果。

資源編排之資源棧偏差檢測和糾正功能介紹适用場景示例

模闆糾正消除偏差

另一種更直接的消除偏差的方式是模闆糾正。通過模闆糾正功能可以讓模闆恢複與實際資源一緻。

資源編排之資源棧偏差檢測和糾正功能介紹适用場景示例

點選 糾正 按鈕,彈出的視窗中會列出所有存在偏差的資源,并預設都選中,選中的資源會被糾正。點選預覽按鈕,預覽糾正前後的模闆。對比兩個模闆,觀察是否符合預期。

資源編排之資源棧偏差檢測和糾正功能介紹适用場景示例

可以看到ScalingGroup1資源的ScalingGroupName由xxx變成了xxx1,ScalingGroup2資源被删除。

資源編排之資源棧偏差檢測和糾正功能介紹适用場景示例

點選确認按鈕,并重新對資源棧進行偏差檢測,可以看到資源已經恢複到無偏差狀态。

資源編排之資源棧偏差檢測和糾正功能介紹适用場景示例