根据带宽情况动态添加/删除阿里云共享带宽内的EIP,坚决不让阿里云多挣我司一分钱!!!
356
阿里云增强型95付费的共享带宽,保底200Mbps,最低消费200*0.2=40Mbps,经过我计算,我觉得在40~50Mbps时使用比较合理.
由于2020年春节+武汉冠状肺炎的严重影响,网站流量急剧减少.所以我把所有的IP都纳入了共享带宽.
2020-03-05 13:20星期四,百度在爬我们站点,带宽瞬间达到200Mbps.
我原本想把EIP脱离共享带宽,结果却错误地移除了EIP绑定的SLB,造成了网站无法访问.

最终我决定,开发一个自动管理调整共享带宽EIP池的程序让他在
最终最大程度地优化费用支出.

当前共享带宽 > 期望值时,自动把高带宽的EIP移除出共享带宽
当前共享带宽 < 期望值时,自动把高带宽的EIP添加入共享带宽
核心算法是动态规划,为了尽可能地减少添加/移除 EIP带来的网络抖动,EIP在规划的时候按照带宽升序排列,按照动态规划的严格定义的话,其实所得并非最优解。
用到的接口:
vpc
DescribeEipMonitorData
DescribeEipAddresses
cms
DescribeCommonBandwidthPackages
AddCommonBandwidthPackageIp
RemoveCommonBandwidthPackageIp
cms
DescribeMetricList
由于需要操作VPC和共享带宽,这类都属于高危操作,RAM授权记得弄好。
如果你对授权不敏感,可以直接添加下列权限
参照 config-example.yaml 修改 config.yaml 配置文件.
cp config-example.yaml config.yaml
vi config.yaml
# docker
docker run -it \
-v /root/common-bandwidth-auto-switch/config.yaml:/app/config/config.yaml \
zeusro/common-bandwidth-auto-switch:latest
# docker-compose
docker-compose up
例子使用了 Kubernetes 的 CronJob + Configmap 的方式部署
kubectl create configmap cbwp-config --from-file=config.yaml=config.yaml
kubectl apply -f deploy/kubernetes/cronjob.yaml
配置的加载顺序为:先读取 config.yaml , config.yaml不存在再读取 config-example.yaml文件.
kubectl delete cronjob common-bandwidth-auto-switch
kubectl delete configmap cbwp-config
Content type
Image
Digest
Size
11.4 MB
Last updated
over 6 years ago
docker pull zeusro/common-bandwidth-auto-switch