資源編排服務(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資源被刪除。
點擊確認按鈕,並重新對資源棧進行偏差檢測,可以看到資源已經恢復到無偏差狀態。