背景
疫情期间,在线会议等音视频应用面临大量流量冲击,为了获得更好的网路吞吐性能,常常会选择使用Host网络模型。采用Host网络模型的容器可以直接使用宿主机的IP地址与外界进行通信,若宿主机具有弹性公网IP,容器也能使用这个弹性公网IP进行通信。同时容器内服务的端口也可以使用宿主机的端口,无需额外进行NAT转换,而且由于容器通信时,不再需要通过Linux bridge等方式转发或者数据包的拆封,性能上有很大优势。
使用弹性公网IP的方式,通过弹性公网IP与端口的方式直接与终端进行通信,能大大提升网络性能,但弹性公网IP作为一种有限且收费的资源,在实际使用时还需要进行资源规划和成本计算。自动弹性伸缩在这方面有天然的优势,在保证服务质量的同时自动伸缩节点及其资源。自动伸缩与弹性公网IP结合的方案能够实现成本与性能之间较好地平衡。
为将自动伸缩与弹性公网IP结合,自动伸缩在节点伸缩的同时管理和操作节点的弹性公网IP。在自动伸缩组创建或修改时选择绑定弹性公网IP后,自动地创建伸缩组的生命周期挂钩。绑定弹性公网IP的生命周期挂钩负责在扩容出节点后自动生成弹性公网IP并与该节点进行绑定,保证了节点启用时就具备弹性公网IP,以便加入集群时即可通过弹性公网IP和端口提供服务;释放弹性公务IP的生命周期挂钩负责在节点缩容退出集群时应该自动释放弹性公网IP,以免造成资源的浪费。自动伸缩绑定弹性公网IP后,在自动扩容/缩容时对生成/释放的ecs自动绑定/解绑弹性公网IP,用户既可提升网络性能,又不再需要额外的对节点弹性公网IP进行手动操作。
使用前请了解以下限制:
- 自动绑定弹性公网IP需要给集群worker role赋予必要的权限策略,否则会导致自动绑定弹性公网IP失败;
- 直接删除自动伸缩组或是直接将ecs删除,无法自动释放被绑定的弹性公网IP。
使用方法
前提条件
具备一个Kubernetes集群,请参考创建集群文档
更多注意事项请见文档
创建自动伸缩
在容器服务控制台的集群列表页面,选择所需的集群并单击操作列的更多 > 自动伸缩
安装弹框提示,进行授权操作
a. 开通ess服务
1) 单击弹出对话框中的第一个链接,进入弹性伸缩服务ESS页面。
2) 单击开通ESS服务,进入云产品开通页。
3) 选中我已阅读并同意复选框,单击立即开通。
4) 开通成功后,在开通完成页签,单击管理控制台,进入弹性伸缩服务ESS页面。
5) 单击前往授权,进入云资源访问授权页面,配置对云资源的访问权限。
预期结果
页面自动跳转至弹性伸缩控制台,说明授权成功。关闭页面。
b. 配置授权角色
1)在自动伸缩组的集群详情页,找到集群的WorkerRamRole
2)在权限管理页签,单击目标授权策略名称,进入授权策略详情页面。
4)在策略内容的Action
字段中补充以下策略。
说明 在策略内容的任意一个Action
字段的最后一行补充,再添加以下内容。
"ecs:AllocateEipAddress",
"ecs:AssociateEipAddress",
"ecs:DescribeEipAddresses",
"ecs:DescribeInstanceTypes",
"ecs:DescribeInvocationResults",
"ecs:DescribeInvocations",
"ecs:ReleaseEipAddress",
"ecs:RunCommand",
"ecs:UnassociateEipAddress",
"ess:CompleteLifecycleAction",
"ess:CreateScalingRule",
"ess:DeleteScalingRule",
"ess:Describe*",
"ess:DetachInstances",
"ess:ExecuteScalingRule",
"ess:ModifyScalingGroup",
"ess:ModifyScalingRule",
"ess:RemoveInstances",
"vpc:AllocateEipAddress",
"vpc:AssociateEipAddress",
"vpc:DescribeEipAddresses",
"vpc:DescribeVSwitches",
"vpc:ReleaseEipAddress",
"vpc:UnassociateEipAddress"
5)在RAM角色管理详情页,单击信任策略管理,在修改信任策略中添加oos.aliyuncs.com,如下图所示。
c. 启用自动伸缩
配置自动伸缩
缩容配置
选择弹性伸缩的资源类型
配置伸缩组
各配置项含义请见下表。
配置 | 说明 |
---|---|
专有网络 | 所创建伸缩组的网络,与伸缩组所在集群的网络一致。 |
虚拟交换机 | 所创建伸缩组的虚拟交换机,包含伸缩组的可用区及Pod地址段。 |
实例规格 | 伸缩组内实例的规格。 |
已选规格 | 所选择的伸缩组的实例规格,最多可以选择10种实例规格。 |
系统盘 | 伸缩组的系统盘。 |
挂载数据盘 | 是否在创建伸缩组时挂载数据盘,默认情况下不挂载。 |
实例数量 | 伸缩组所包含的实例数量。 说明 - 实例不包含客户已有的实例。 - 默认情况,实例的最小值是0台,超过0台的时候,集群会默认向伸缩组中添加实例,并将实例加入到伸缩组对应的Kubernetes集群中。 |
密钥对 | 登录伸缩后的节点时所使用的密钥对。可以在ECS控制台新建密钥对。 说明 目前只支持密钥对方式登录。 |
伸缩模式 | 支持标准模式和极速模式。 |
RDS白名单 | 弹性伸缩后的节点可以访问的RDS实例。 |
节点标签 | 在集群中添加节点标签(Label)后,会自动添加到弹性伸缩扩容出的节点上。 |
污点(Taints) | 添加污点后,Kubernetes将不会将Pod调度到这个节点上。 |
云监控组件 | 是否在扩容的同时安装云监控组件,默认不安装。 |
配置绑定eip
点击“确定”,让配置生效
预期效果
自动弹性伸缩组成功创建后,点击自动弹性伸缩列表中的伸缩组名跳转到伸缩组详情页面
点击生命周期挂钩,可见绑定和解绑eip的生命周期挂钩都已创建成功
查看自动伸缩结果
在自动伸缩组扩容出的ecs详情页面可以看到已经绑上的弹性公网IP,说明扩容绑定弹性公网IP成功。
缩容后在专有网络弹性公网IP页面,可以查看到对应的弹性公网IP已经不存在,说明释放弹性公网IP成功。
最后
通过自动伸缩绑定弹性公网IP的实现,后续节点对外通信相关地需求应该都能借力于此。自动伸缩与伸缩组的生命周期挂钩的结合使用在这次实践中也体现出1+1大于2的效果,为后续有关丰富自动伸缩组对扩/缩容出的节点的操作提供了方案选择。