资源编排服务(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资源被删除。
点击确认按钮,并重新对资源栈进行偏差检测,可以看到资源已经恢复到无偏差状态。