利用阿里云容器服务实现自定义节点伸缩

摘要: 容器服务目前提供创建节点触发器的功能,调用节点触发器,并可以利用openAPI查看扩容出来的ECS节点方便管理和自动化的需求. 本文将向您介绍完成这一能力的步骤。

简介

阿里云容器服务很早就提供了基于集群CPU/内存的平均使用量触发节点自动伸缩功能,帮助许多客户自如应对业务压力的弹性变化。其原理是利用阿里云的云监控能力,在资源使用(cpu和memory)达到阈值时,触发节点伸缩。

同时还有一些企业级用户希望根据自身的监控数据和逻辑判断是否进行扩容和缩容操作,甚至可以按照固定时间进行节点扩容和缩容,针对这种场景,就需要调用的是扩容或者缩容触发器。

容器服务目前提供创建节点触发器的功能,调用节点触发器,并可以利用openAPI查看扩容出来的ECS节点方便管理和自动化的需求. 本文将向您介绍完成这一能力的步骤。

创建节点伸缩触发器trigger_url

  1. 登录 容器服务管理控制台
  2. 单击左侧导航栏中的 集群。
  3. 在 集群列表 页面,选择要设置的集群,点击 管理。
    利用阿里云容器服务实现自定义节点伸缩

  4. 单击左侧导航栏中的 节点伸缩,单击 请新建自动伸缩规则。

    利用阿里云容器服务实现自定义节点伸缩

  5. 进入配置节点伸缩规则,勾选掉 根据监控指标自动伸缩,并单击 下一步。 
    利用阿里云容器服务实现自定义节点伸缩
    配置约束规则请注意:

    • 扩容步长 的可选范围是 1~5, 缩容步长 目前默认是 1,不支持配置。
    • 设置 集群最小节点数 和 集群最大节点数。缩容时,如果节点数 ≤ 集群最小节点数,不会进行缩容操作;扩容时,如果节点数 ≥ 集群最大节点数,不会进行扩容操作。
  6. 配置实例规格, 并单击 确认配置。
    有关实例规格配置的信息,参见 创建集群

使用节点伸缩触发器

  1. 可以在 节点伸缩的页面,查看触发器的URL

利用阿里云容器服务实现自定义节点伸缩

在调用节点伸缩触发器时候,需要在触发器URL中添加一下参数:

type伸缩类型缩容:scale_in 
扩容:scale_out
step伸缩配置正整数,1-100,只有扩容时使用

举例来说,当用户需要弹性扩展1个节点时,触发器的URL为

https://cs.console.aliyun.com/hook/trigger?triggerUrl=<triggerUrl>=&secret=<secret>&type=scale_out&step=1

当用户需要弹性收缩时,触发器的URL为

https://cs.console.aliyun.com/hook/trigger?triggerUrl=<triggerUrl>=&secret=<secret>&type=scale_in

注:目前弹性收缩只支持单个节点收缩

调用弹性伸缩时,可以很简单的利用curl命令触发

curl "https://cs.console.aliyun.com/hook/trigger?triggerUrl=<triggerUrl>=&secret=<secret>&type=scale_in"

利用OpenAPI查询弹性扩展出的ECS节点信息

1. 先需要安装sdk的核心库

sudo pip install aliyun-python-sdk-core
sudo pip install aliyun-python-sdk-cs==2.2.0

2. 利用python代码查询并且展示弹性扩展出的节点

示例代码如下:

from aliyunsdkcore.client import AcsClient
from aliyunsdkcs.request.v20151215 import DescribeClusterScaledNodeRequest
import json

req = DescribeClusterScaledNodeRequest.DescribeClusterScaledNodeRequest()
client = AcsClient(ak='<Your-Access-Key-Id>', secret='<Your-Access-Key-Secret>', region_id='<Region-Id>')
req.set_ClusterId('<集群ID>')

status, headers, body = client.get_response(req)
if status == 200:
    hosts = json.loads(body)
    for host in hosts:
        print("Scaledout Instance's ECS ID: {}, IP: {}, OSVersion: {} \n".format(host["InstanceId"], host["IP"], host["OperatingSystem"]))

代码说明:

通过Access Key管理获取Your-Access-Key-IdYour-Access-Key-Secret

Region-Id是地域对应的Id,比如华东2是cn-shanghai, 可以通过API查询

集群ID是容器集群的ID,可以通过集群管理页面查看

可以从运行结果中查询到ECS的ID,私有IP以及操作系统类型

样例输出:

Scaledout Instance's ECS ID: i-2zec33gu8do3wrlscdi5, IP: 10.136.125.22, OSVersion: Ubuntu 14.04.5 LTS

Scaledout Instance's ECS ID: i-2ze2qqe4tpakz4xidaw2, IP: 10.136.125.25, OSVersion: Ubuntu 14.04.5 LTS

总结

通过上述内容,您可以了解了如何创建节点伸缩触发器,利用阿里云提供的节点触发器,按时按需的自动化的触发集群扩容,并且查询扩容节点信息。

原文链接:http://click.aliyun.com/m/30449/