云服务器内容精选

  • 前提条件 使用CustomedHPA策略必须安装CCE容器弹性引擎,若该插件版本低于1.2.11,则必须安装prometheus插件;若版本大于或等于1.2.11,则需要安装能够提供Metrics API的插件,您可根据集群版本和实际需求选择其中之一: Kubernetes Metrics Server:提供基础资源使用指标,例如容器CPU和内存使用率。所有集群版本均可安装。 云原生监控插件:该插件支持v1.17及以后的集群版本。 根据基础资源指标进行弹性伸缩:需将Prometheus注册为Metrics API的服务,详见通过Metrics API提供资源指标。 根据自定义指标进行弹性伸缩:需要将自定义指标聚合到Kubernetes API Server,详情请参见使用自定义指标创建HPA策略。 Prometheus(停止维护):需将Prometheus注册为Metrics API的服务,详见通过Metrics API提供资源指标。该插件仅支持v1.21及之前的集群版本。
  • 约束与限制 CustomedHPA策略仅支持1.15及以上版本的集群。 1.19.10以下版本的集群中,如果使用HPA策略对挂载了EVS卷的负载进行扩容,当新Pod被调度到另一个节点时,会导致之前Pod不能正常读写。 1.19.10及以上版本集群中,如果使用HPA策略对挂载了EVS卷的负载进行扩容,新Pod会因为无法挂载云硬盘导致无法成功启动。 CCE容器弹性引擎插件的资源使用量主要受集群中总容器数量和伸缩策略数量影响,通常场景下建议每5000容器配置CPU 500m, 内存1000Mi资源,每1000伸缩策略CPU 100m,内存500Mi。 若cce-hpa-controller插件版本低于1.2.11,不支持使用云原生监控插件插件提供Metrics API来实现工作负载弹性伸缩。 创建CustomedHPA策略后,不支持将已关联的工作负载修改为其他工作负载。
  • Cluster Autoscaler工作原理 Cluster Autoscaler主要流程包括两部分: ScaleUp流程: Autoscaler会每隔10s检查一次所有未调度的Pod,根据用户设置的策略,选择出一个符合要求的节点池进行扩容。 Autoscaler检测未调度Pod进行扩容时,使用的是与Kubernetes社区版本一致的调度算法进行模拟调度计算,若应用调度采用非内置kube-scheduler调度器或其他非Kubernetes社区调度策略,此类应用使用Autoscaler扩容时可能因调度算法不一致出现无法扩容或多扩风险。 ScaleDown流程:Autoscaler每隔10s会扫描一次所有的Node,如果该Node上所有的Pod Requests少于用户定义的缩容百分比时,Autoscaler会模拟将该节点上的Pod是否能迁移到其他节点,如果可以的话,当满足不被需要的时间窗以后,该节点就会被移除。 当集群节点处于一段时间空闲状态时(默认10min),会触发集群缩容操作(即节点会被自动删除)。当节点存在以下几种状态的Pod时,不可缩容: Pod有设置Pod Disruption Budget(即干扰预算),当移除Pod不满足对应条件时,节点不会缩容。 Pod由于一些限制,如亲和、反亲和等,无法调度到其他节点,节点不会缩容。 Pod拥有cluster-autoscaler.kubernetes.io/safe-to-evict: 'false'这个annotations时,节点不缩容。 节点上存在kube-system命名空间下的Pod(除kube-system命名空间下由DaemonSet创建的Pod),节点不缩容。 节点上如果有非controller(Deployment/ReplicaSet/Job/StatefulSet)创建的Pod,节点不缩容。 当节点符合缩容条件时,Autoscaler将预先给节点打上DeletionCandidateOfClusterAutoscaler污点,限制Pod调度到该节点上。当autoscaler插件被卸载后,如果节点上依然存在该污点请您手动进行删除。
  • AS权限 默认情况下,管理员创建的IAM用户没有任何权限,需要将其加入用户组,并给用户组授予策略或角色,才能使得用户组中的用户获得对应的权限,这一过程称为授权。授权后,用户就可以基于被授予的权限对云服务进行操作。 AS部署时通过物理区域划分,为项目级服务,授权时,“作用范围”需要选择“区域级项目”,然后在指定区域(如华北-北京1)对应的项目(cn-north-1)中设置相关权限,并且该权限仅对此项目生效;如果在“所有项目”中设置权限,则该权限在所有区域项目中都生效。访问AS时,需要先切换至授权区域。 权限根据授权精细程度分为角色和策略。 角色:IAM最初提供的一种根据用户的工作职能定义权限的粗粒度授权机制。该机制以服务为粒度,提供有限的服务相关角色用于授权。由于华为云各服务之间存在业务依赖关系,因此给用户授予角色时,可能需要一并授予依赖的其他角色,才能正确完成业务。角色并不能满足用户对精细化授权的要求,无法完全达到企业对权限最小化的安全管控要求。 策略:IAM最新提供的一种细粒度授权的能力,可以精确到具体服务的操作、资源以及请求条件等。基于策略的授权是一种更加灵活的授权方式,能够满足企业对权限最小化的安全管控要求。例如:针对AS服务,管理员能够控制IAM用户仅能对某一类云服务器资源进行指定的管理操作。多数细粒度策略以API接口为粒度进行权限拆分,AS支持的API授权项请参见策略及授权项说明 。 如表1所示,包括了AS的所有系统权限。 表1 AS系统权限 策略名称 描述 类别 依赖关系 AutoScaling FullAccess 对弹性伸缩全部资源的所有执行权限。 系统策略 无 AutoScaling ReadOnlyAccess 弹性伸缩只读权限,对弹性伸缩全部资源的只读权限。 系统策略 无 AutoScaling Administrator 对弹性伸缩全部资源的所有执行权限。 系统角色 依赖ELB Administrator、CES Administrator、Server Administrator和Tenant Administrator角色,在同项目中勾选依赖的角色。 表2列出了AS常用操作与系统权限的授权关系,您可以参照该表选择合适的系统权限。 表2 常用操作与系统权限的关系 操作 AutoScaling FullAccess AutoScaling ReadOnlyAccess AutoScaling Administrator 创建伸缩组 √ x √ 修改伸缩组 √ x √ 查询伸缩组详情 √ √ √ 删除伸缩组 √ x √ 创建伸缩配置 √ x √ 创建伸缩策略 √ x √ 创建伸缩带宽策略 √ x √
  • 审计与日志 云审计服务(Cloud Trace Service,CTS),是华为云安全解决方案中专业的日志审计服务,提供对各种云资源操作记录的收集、存储和查询功能,可用于支撑安全分析、合规审计、资源跟踪和问题定位等常见应用场景。 弹性伸缩支持使用云审计记录服务资源操作。云审计记录的操作类型有三种,通过云平台账户登录管理控制台执行的操作,通过云服务支持的API执行的操作,以及系统内部触发的操作。 在您的应用系统中启用云审计服务后,将在日志文件记录对弹性伸缩执行的API调用的操作。您可以在云审计服务管理控制台查询近7天内的操作记录。如果需要保存7天之前的操作记录,您可以通过对象存储服务(Object Storage Service,以下简称OBS),将操作记录实时同步保存至OBS。 CTS的详细介绍和开通配置方法请参见CTS快速入门。 云审计服务支持的AS操作列表请参见记录弹性伸缩。 查看审计日志请参见查看审计日志。 父主题: 安全
  • 多规格配置说明 伸缩配置支持多规格可极大程度减少因当前规格售罄或不可用导致的扩容失败概率,尽可能确保在用户业务高峰期能够扩容成功。 一个伸缩配置内可选的实例规格最多为10个。 适用场景: 对于伸缩组创建的实例规格无特殊要求,不限定于某一种规格。 对伸缩组成功创建实例有较高的成功率和较低的时延要求。 业务需要使用较高规格的实例。 业务是无状态、可横向扩展的。 伸缩组对多个规格的选择排序有以下两种方式: 选择优先:伸缩组扩容时按照选择规格的顺序进行。当您选择的第一个规格库存不足或者因为其他原因创建失败时,系统会尝试您选择的第二个规格创建实例,其余规格的使用以此类推。 成本优先:伸缩组扩容时按照价格最优原则进行优先级排序。伸缩组创建实例时将选择成本最优的规格,当成本最优的规格无法成功创建实例时,系统将在剩余规格中选择成本最优的规格创建实例,其余规格的使用以此类推。
  • 使用限制 单账号跟踪的事件可以通过云审计控制台查询。多账号的事件只能在账号自己的事件列表页面去查看,或者到组织追踪器配置的OBS桶中查看,也可以到组织追踪器配置的CTS/system日志流下面去查看。 用户通过云审计控制台只能查询最近7天的操作记录。如果需要查询超过7天的操作记录,您必须配置转储到对象存储服务(OBS),才可在OBS桶里面查看历史文件。否则,您将无法追溯7天以前的操作记录。 云上操作后,1分钟内可以通过云审计控制台查询管理类事件操作记录,5分钟后才可通过云审计控制台查询数据类事件操作记录。
  • 示例流程 图1 给用户授权AS权限流程 创建用户组并授权 在IAM控制台创建用户组,并授予弹性伸缩权限“ASReadOnlyAccess”。 创建用户并加入用户组 在IAM控制台创建用户,并将其加入1中创建的用户组。 用户登录并验证权限 新创建的用户登录控制台,切换至授权区域,验证权限: 在“服务列表”中选择弹性伸缩服务,进入AS主界面,单击右上角“创建伸缩组”,如果无法创建伸缩组(假设当前权限仅包含ASReadOnlyAccess),表示“ASReadOnlyAccess”已生效。 在“服务列表”中选择除弹性伸缩服务外(假设当前策略仅包含ECS Viewer)的任一服务,若提示权限不足,表示“ASReadOnlyAccess”已生效。
  • 操作场景 如果您需要对您所拥有的AS进行精细的权限管理,您可以使用统一身份认证服务(Identity and Access Management,简称IAM),通过IAM,您可以: 根据企业的业务组织,在您的华为云账号中,给企业中不同职能部门的员工创建IAM用户,让员工拥有唯一安全凭证,并使用AS资源。 根据企业用户的职能,设置不同的访问权限,以达到用户之间的权限隔离。 统一身份认证服务将AS资源委托给更专业、高效的其他华为云账号或者云服务,这些账号或者云服务可以根据权限进行代运维。 如果华为云账号已经能满足您的要求,不需要创建独立的IAM用户,您可以跳过本章节,不影响您使用AS服务的其它功能。 本章节为您介绍对用户授权的方法,操作流程如图1所示。
  • 创建须知 不同可用区支持的云服务器类型可能不同。 如果伸缩组中所有可用区均不支持伸缩配置中的云服务器类型,此时: 如果伸缩组当前为停用状态,则无法启用伸缩组。 如果伸缩组当前为启用状态,则在进行扩容操作时,伸缩组状态变为异常。 如果伸缩组中仅有部分可用区支持伸缩配置中的云服务器类型,则在弹性伸缩活动中自动添加的云服务器只分布在支持该类型云服务器的可用区中,不能均匀的分布在所有可用区中。 创建伸缩组前请先创建好您所需的伸缩配置。
  • 返回值 正常 200 异常 返回值 说明 400 Bad Request 服务器未能处理请求。 401 Unauthorized 被请求的页面需要用户名和密码。 403 Forbidden 对被请求的页面访问禁止。 404 Not Found 服务器无法找到被请求的页面。 405 Method Not Allowed 请求中指定的方法不被允许。 406 Not Acceptable 服务器生成的响应无法被客户端所接受。 407 Proxy Authentication Required 用户必须首先使用代理服务器进行验证,这样请求才会被处理。 408 Request Timeout 请求超出了服务器的等待时间。 409 Conflict 由于冲突,请求无法被完成。 500 Internal Server Error 请求未完成。服务异常。 501 Not Implemented 请求未完成。服务器不支持所请求的功能。 502 Bad Gateway 请求未完成。服务器从上游服务器收到一个无效的响应。 503 Service Unavailable 请求未完成。系统暂时异常。 504 Gateway Timeout 网关超时。
  • 响应示例 { "limit": 20, "scaling_groups": [ { "networks": [ { "id": "a8327883-6b07-4497-9c61-68d03ee193a", "ipv6_enable": true, "ipv6_bandwidth": { "id": "076ee2ff-f23e-4338-b8ac-1bc7278532d5" } } ], "available_zones": [ "XXXa", "XXXb" ], "detail": null, "scaling_group_name": "as-group-test", "scaling_group_id": "77a7a397-7d2f-4e79-9da9-6a35e2709150", "scaling_group_status": "INSERVICE", "scaling_configuration_id": "1d281494-6085-4579-b817-c1f813be835f", "scaling_configuration_name": "healthCheck", "current_instance_number": 0, "desire_instance_number": 1, "min_instance_number": 0, "max_instance_number": 500, "cool_down_time": 300, "lb_listener_id": "f06c0112570743b51c0e8fbe1f235bab", "security_groups": [ { "id": "8a4b1d5b-0054-419f-84b1-5c8a59ebc829" } ], "create_time": "2015-07-23T02:46:29Z", "vpc_id": "863ccae2-ee85-4d27-bc5b-3ba2a198a9e2", "health_periodic_audit_method": "ELB_AUDIT", "health_periodic_audit_time": 5, "health_periodic_audit_grace_period": 600, "instance_terminate_policy": "OLD_CONFIG_OLD_INSTANCE", "is_scaling": false, "delete_publicip": false, "enterprise_project_id": "c92b1a5d-6f20-43f2-b1b7-7ce35e58e413", "multi_az_priority_policy": "PICK_FIRST", "iam_agency_name":"test" } ], "total_number": 1, "start_number": 0 }
  • 响应参数 表2 响应参数 参数 参数类型 描述 total_number Integer 总记录数。 start_number Integer 查询的开始记录号。 limit Integer 查询记录数。 scaling_groups Array of scaling_groups objects 伸缩组列表。 表3 scaling_groups字段数据结构说明 参数 参数类型 描述 scaling_group_name String 伸缩组名称。 scaling_group_id String 伸缩组ID。 scaling_group_status String 伸缩组状态。 scaling_configuration_id String 伸缩配置ID。 scaling_configuration_name String 伸缩配置名称。 current_instance_number Integer 伸缩组中当前实例数。 desire_instance_number Integer 伸缩组中期望实例数。 min_instance_number Integer 伸缩组中最小实例数。 max_instance_number Integer 伸缩组中最大实例数。 cool_down_time Integer 冷却时间,单位是秒。 lb_listener_id String 经典型负载均衡监听器ID,多个负载均衡监听器ID以逗号分隔。 lbaas_listeners Array of lbaas_listeners objects 增强型负载均衡器信息,详情请见表 lbaas_listeners字段数据结构说明。 available_zones Array of strings 可用区信息。 networks Array of networks objects 网络信息,详情请见表5 security_groups Array of security_groups objects 安全组信息,详情请见表8 create_time String 创建伸缩组时间,遵循UTC时间。 vpc_id String 伸缩组所在的VPC ID。 detail String 伸缩组详情。当伸缩活动失败时,在此处记录错误信息。 is_scaling Boolean 伸缩组伸缩标志。 health_periodic_audit_method String 健康检查方式。 health_periodic_audit_time Integer 健康检查的间隔时间。 health_periodic_audit_grace_period Integer 健康状况检查宽限期。 instance_terminate_policy String 移除策略。 notifications Array of strings 通知方式: EMAIL为发送邮件通知。 该通知方式已经被废除,建议给弹性伸缩组配置通知功能。请参考通知。 delete_publicip Boolean 删除云服务器是否删除云服务器绑定的弹性IP。 delete_volume Boolean 删除云服务器是否删除云服务器绑定的数据盘。 cloud_location_id String 该参数为预留字段。 enterprise_project_id String 企业项目ID activity_type String 伸缩组活动类型。 multi_az_priority_policy String 伸缩组扩缩容时目标AZ选择的优先级策略。 description String 伸缩组描述。 iam_agency_name String 委托。 tags Array of strings 添加到伸缩组的标签。详情请见表9 表4 lbaas_listeners字段数据结构说明 参数 参数类型 描述 listener_id String 监听器ID pool_id String 后端云服务器组ID protocol_port Integer 后端协议号,指后端云服务器监听的端口。 weight Integer 权重,指后端云服务器经分发得到的请求数量的比例。 protocol_version String 绑定到负载均衡云服务器组的IP地址版本,枚举值为ipv4和ipv6。 表5 networks字段数据结构说明 参数 参数类型 描述 id String 子网的网络ID。 ipv6_enable Boolean 是否启用IPv6。取值为true时,标识此网卡已启用ipv6。默认取值为false。 ipv6_bandwidth ipv6_bandwidth object 绑定的IPv6共享带宽,默认为空,表示不绑定IPv6的共享带宽。 allowed_address_pairs Array of allowed_address_pairs objects 是否开启源/目的检查开关。 表6 ipv6_bandwidth字段数据结构说明 参数 参数类型 描述 id String IPv6共享带宽的ID。 表7 allowed_address_pairs字段数据结构说明 参数 参数类型 描述 ip_address String 是否开启源/目的检查开关。 默认是开启,不允许置空。 关闭:1.1.1.1/0 开启:除“1.1.1.1/0”以外的其余值均按开启处理 表8 security_groups字段数据结构说明 参数 参数类型 描述 id String 安全组ID 表9 tags字段数据结构说明 参数 是否必选 参数类型 描述 key 是 String 键。 最大长度36个unicode字符。key不能为空。 同一资源的key值不能重复。 只能包含大写字母(A~Z)、小写字母(a~z)、数字(0-9)、下划线(_)、中划线(-)以及中文字符。 value 否 String 值。 每个值最大长度43个unicode字符,可以为空字符串。 value值只能包含大写字母(A~Z)、小写字母(a~z)、数字(0-9)、下划线(_)、中划线(-)、小数点(.)以及中文字符。
  • URI GET /autoscaling-api/v1/{project_id}/scaling_group 可以在URI后面用‘?’和‘&’添加不同的查询条件组合。支持参数说明中所有非必选参数过滤,请参考请求示例。 表1 参数说明 参数 是否必选 参数类型 描述 project_id 是 String 项目ID scaling_group_name 否 String 伸缩组名称。 支持模糊匹配。 scaling_configuration_id 否 String 伸缩配置ID,通过查询弹性伸缩配置列表接口获取,请参考查询弹性伸缩配置列表。 scaling_group_status 否 String 伸缩组状态,取值如下: INSERVICE:正常状态 PAUSED:停用状态 ERROR:异常状态 DELETING:删除中 FREEZED:已冻结 start_number 否 Integer 查询的起始行号,默认为0。最小值为0,最大值没有限制。 limit 否 Integer 查询的记录条数,默认为20。取值范围为:0~100。 enterprise_project_id 否 String 企业项目ID,当传入all_granted_eps时表示查询该用户所有授权的企业项目下的伸缩组列表,如何获取企业项目ID,请参考查询企业项目列表。 说明: 华为云帐号和拥有全局权限的IAM用户可以查询该用户所有伸缩组列表。 授予部分企业项目的IAM用户,如果拥有超过100个企业项目,则只能返回有权限的前100个企业项目对应的伸缩组列表。
  • 请求示例 查询伸缩组名称为as-group-test且伸缩配置ID为1d281494-6085-4579-b817-c1f813be835f的伸缩组列表。 GET https://{Endpoint}/autoscaling-api/v1/{project_id}/scaling_group?scaling_group_name=as-group-test&scaling_configuration_id=1d281494-6085-4579-b817-c1f813be835f