简介:阿里云专有云容器服务弹性伸缩最佳实践

1.容器服务弹性伸缩简介

本小节将基于使用原理对容器服务弹性伸缩进行简要的描述。
本实践基于K8s的业务集群运行在专有云上,对测试业务进行压力测试,主要基于以下三种产品和能力:

  • 利用阿里云的云企业网专线打通专有云和公共云,实现两朵云上VPC网络互通。
  • 利用K8s(Kubernetes)的HPA能力,实现容器的水平伸缩。
  • 利用K8s的Cluster Autoscaler和阿里云弹性伸缩组ESS能力实现节点的自动伸缩。

当被测试业务指标达到上限时,触发HPA自动扩容业务pod;当业务集群无法承载更多pod时,触发公共云的ESS服务,在公共云内扩容出ECS并自动添加到专有云的K8s集群。

图1:容器服务弹性伸缩原理图

2.软件环境

本次最佳实践的软件环境要求如下:
应用环境:

  • 容器服务ACK基于专有云V3.10.0版本。
  • 公共云云企业网服务CEN。
  • 公共云弹性伸缩组服务ESS。

配置条件:

  • 使用专有云的容器服务或者在ECS上手动部署敏捷PaaS。
  • 开通云专线,打通容器服务所在VPC与公共云上的VPC。
  • 开通公共云弹性伸缩组服务(ESS)。

3.配置指导

3.1配置HPA

本小节将介绍配置HPA的详细步骤。
HPA(Horizontal Pod Autoscaler)是K8s的一种资源对象,能够根据CPU、内存等指标对statefulset、deployment等对象中的pod数量进行动态伸缩,使运行在上面的服务对指标的变化有一定的自适应能力。
本示例创建了一个支持HPA的nginx应用,创建成功后,当pod的利用率超过本例中设置的20%利用率时,则会进行水平扩容,低于20%的时候会进行缩容。具体操作步骤如下。

3.1.1若使用自建K8s集群,则通过yaml文件配置HPA

①创建一个nginx应用,必须为应用设置request值,否则HPA不会生效。

apiVersion: app/v1beta2
kind: Deployment
spec:template:metadata:creationTimestamp: nulllabels:app: hpa-testspec:dnsPolicy: ClusterFirstterminationGracePeriodSeconds:30containers:image: '192.168.**.***:5000/admin/hpa-example:v1'imagePullPolicy: IfNotPresentterminationMessagePolicy:FileterminationMessagePath:/dev/termination-logname: hpa-testresources:requests:cpu: //必须设置request值securityContext: {}restartPolicy:AlwaysschedulerName:default-schedulerreplicas: 1selector: matchLabels:app: hpa-testrevisionHistoryLimit: 10strategy: type: RollingUpdaterollingUpdate:maxSurge: 25%maxUnavailable: 25%progressDeadlineSeconds: 600

②创建HPA。

apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:annotations:
autoscaling.alpha.kubernetes.io/conditions:'[{"type":"AbleToScale","status":"True","lastTransitionTime":"2020-04-29T06:57:28Z","reason":"ScaleDownStabilized","message":"recent recommendations were higher than current one, applying the highest recent recommendation"},{"type":"ScalingActive","status":"True","lastTransitionTime":"2020-04-29T06:57:28Z","reason":"ValidMetricFound","message":"theHPA was able to successfully calculate a replica count from cpu resource utilization(percentage of request)"},{"type":"ScalingLimited","status":"False","lastTransitionTime":"2020-04-29T06:57:28Z","reason":"DesiredWithinRange","message":"thedesired count is within the acceptable range"}]' autoscaling.alpha.kubernetes.io/currentmetrics:'[{"type":"Resource","resource":{"name":"cpu","currentAverageUtilization":0,"currentAverageValue":"0"}}]'creationTimestamp: 2020-04-29T06:57:13Zname: hpa-testnamespace: defaultresourceVersion: "3092268"selfLink: /apis/autoscaling/v1/namespaces/default/horizontalpodautoscalers/hpa01uid: a770ca26-89e6-11ea-a7d7-00163e0106e9
spec:maxReplicas: //设置pod数量minReplicas: 1scaleTargetRef:apiVersion: apps/v1beta2kind: Deploymentname: centostargetCPUUtilizationPercentage://设置CPU阈值
3.1.2若使用阿里云容器服务,需要在部署应用时选择配置HPA

图2:阿里云容器服务配置HPA

3.2配置Cluster Autoscaler

本小节将介绍配置Cluster Autoscaler的详细步骤。
节点自动伸缩组件基于K8s资源调度的分配情况进行伸缩判断,节点中资源的分配通过资源请求(Request)进行计算。
当pod由于资源请求(Request)无法满足并进入等待(Pending)状态时,节点自动伸缩组件会根据弹性伸缩组配置信息中的资源规格以及约束配置,计算所需的节点数目。
如果可以满足伸缩条件,则会触发伸缩组的节点加入。而当一个节点在弹性伸缩组中且节点上pod的资源请求低于阈值时,节点自动伸缩组件会将节点进行缩容。
因此资源请求(Request)的正确、合理设置,是弹性伸缩的前提条件。

3.2.1配置弹性伸缩组ESS

①创建ESS弹性伸缩组,记录最小实例数和最大实例数。

图3:创建弹性伸缩组并配置-1

图4:创建弹性伸缩组并配置-2

②创建伸缩配置,记录伸缩配置的id。

图5:创建伸缩配置

#!/bin/sh
yum install -y ntpdate && ntpdate -u ntp1.aliyun.com && curl http:// example.com/public/hybrid/attach_local_node_aliyun.sh | bash -s -- --docker-version 17.06.2-ce-3 --token 9s92co.y2gkocbumal4fz1z --endpoint 192.168.**.***:6443 --cluster-dns 10.254.**.** --region cn-huhehaote
echo "{" > /etc/docker/daemon.json
echo "\"registry-mirrors\": [" >> /etc/docker/daemon.json
echo "\"https://registry-vpc.cn-huhehaote.aliyuncs.com\"" >> /etc/docker/daemon.json
echo "]," >> /etc/docker/daemon.json
echo "\"insecure-registries\": [\"https://192.168.**.***:5000\"]" >> /etc/docker/daemon.json
echo "}" >> /etc/docker/daemon.json
systemctl restart docker
3.2.2 K8s集群部署autoscaler
kubectl apply -f ca.yml

参考ca.yml创建autoscaler,注意修改如下配置与实际环境相对应。

access-key-id: "TFRB********************"
access-key-secret: "bGIy********************W***************"
region-id: "Y24t************"

4.压力测试

本小节将对最佳实践的运用场景进行说明。

4.1模拟业务访问

启动busybox镜像,在pod内执行如下命令访问以上应用的service,可以同时启动多个pod增加业务负载。

while true;do wget  -q -O-  http://hpa-test/index.html;done

4.2观察HPA

加压前:

图6:加压前指标值

加压后,当CPU值达到阈值后,会触发pod的水平扩容:

图7:加压后指标值

图8:触发pod水平扩容

4.3观察pod

当集群资源不足时,新扩容出的pod处于pending状态,此时将触发cluster autoscaler,自动扩容节点。

图9:触发cluster autoscaler自动扩容节点

作者:刘伟业

阿里云智能混合云PDSA团队高级解决方案工程师

曾就职于新华三云做软件定义数据中心解决方案,负责多个省级云平台的架构设计和落地。现就职于阿里云智能混合云PDSA团队负责容器和云原生产品的方案设计、POC和最佳实践工作。

我们是阿里云智能全球技术服务-SRE团队,我们致力成为一个以技术为基础、面向服务、保障业务系统高可用的工程师团队;提供专业、体系化的SRE服务,帮助广大客户更好地使用云、基于云构建更加稳定可靠的业务系统,提升业务稳定性。我们期望能够分享更多帮助企业客户上云、用好云,让客户云上业务运行更加稳定可靠的技术,您可用钉钉扫描下方二维码,加入阿里云SRE技术学院钉钉圈子,和更多云上人交流关于云平台的那些事。

原文链接:https://developer.aliyun.com/article/771681?

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

阿里云专有云容器服务弹性伸缩最佳实践相关推荐

  1. 阿里云专有云重磅亮相中国信通院2022混合云技术发展论坛

    2022 年 12 月 30 日,阿里云亮相由中国信息通信研究院.中国通信标准化协会主办,混合云产业推进联盟协办的"2022 混合云技术发展论坛",分享了阿里云对混合云在典型政企场 ...

  2. 云计算正在告别DIY时代 阿里云专有云挑起企业级市场大梁

    "云计算的DIY时代已经过去",5月23日在2018云栖大会·武汉峰会上,阿里云专有云事业部总经理马劲表示,DIY式私有云正被时代抛弃,不仅部署费时费力,且难以解决企业云的顽疾.取 ...

  3. 搭载敏捷飞天底座,阿里云专有云敏捷版全面升级

    6月9日, 在2020阿里云线上峰会上阿里云混合云重磅发布三款新品:专有云敏捷版(Apsara Stack Agility). 混合云管理平台(Apsara Uni-manager)以及下一代企业级一 ...

  4. 搭载敏捷飞天底座 阿里云专有云敏捷版全面升级

    6月9日, 在2020阿里云线上峰会上阿里云混合云重磅发布三款新品:专有云敏捷版(Apsara Stack Agility). 混合云管理平台(Apsara Uni-manager)以及下一代企业级一 ...

  5. 【国内首家!】阿里云专有云通过商用密码应用安全性评估

    简介:阿里云凭借自研飞天云操作系统的全方位安全能力,成为国内首家通过云平台密评的云厂商. 近日,国内首个针对云平台的商用密码应用安全性评估(以下简称密评)结果出炉.阿里云凭借自研飞天云操作系统的全方位 ...

  6. 阿里云专有云——安全可控由内而生

    2018云栖大会武汉峰会,阿里云专有云事业部总经理马劲为大家介绍了阿里云专有云的优势特点.为什么要做专有云呢?本文从阿里云建设中台的思路开始谈起,详谈了阿里云做专有云的初衷,接着讲解了公共云必将替代传 ...

  7. 【网站备案】2018年以后的阿里云备案以及公安备案流程最佳实践

    很多新手在购买了域名和服务器后,不懂怎么去备案,然而,境内的网站如果不备案就会出现下面的样子 所以,备案是必须的. 实名认证? 那么,为什么会出现这个实名认证呢? 本文全文以阿里云为案例. 在购买完域 ...

  8. 【网站备案】2019年以后的阿里云备案以及公安备案流程最佳实践(详细)

    很多新手在购买了域名和服务器后,不懂怎么去备案,然而,境内的网站如果不备案就会出现下面的样子 腾讯云建站流程官方文档:地址 阿里云自助建站官方文档详解: 地址 所以,备案是必须的. 实名认证? 那么, ...

  9. 【ArchSummit】阿里云原生微服务架构治理最佳实践

    前言

最新文章

  1. ionic 笔记-wzq
  2. php怎么随机生成二个中文,PHP生成随机字符串的两种办法
  3. 在VM上安装centOS后的网络配置
  4. Acronis Disk Director Suite(windows7分区工具)
  5. servlet 中 out.println(中文) 乱码 问题
  6. boost::sort::block_indirect_sort相关的测试程序
  7. Python_list部分功能介绍
  8. Android 多线程实现异步执行demo,线程池使用demo
  9. 网络管理员的任务与职责
  10. 简单又帅气的折纸机器人教程_几张纸做出帅气纸飞机,做法简单飞行速度超快,手工折纸飞机...
  11. atan和atan2反正切计算
  12. 黑苹果配置挑选,教你组装一台苹果机
  13. no phone android,NoPhoneSpam | F-Droid - Free and Open Source Android App Repository
  14. 安装C4D步骤 附加一大波C4D序列号
  15. tcp/ip协议栈总结
  16. cad图纸问号怎么转换文字_CAD图中有的文字变成问号怎么改?
  17. 做一个文字跟随鼠标java_JavaScript实现文字跟随鼠标特效
  18. 苹果电子邮件怎么注册_无需购买 iPhone,可以使用哪些苹果的优质服务?
  19. Juniper JNCIS-ER jn0-350 148Q
  20. 夜光带你走进Bootstrap(2)

热门文章

  1. Barsetto百胜图咖啡机商用咖啡机实力品牌
  2. C++实现线性方程组运算函数 LDL法
  3. R语言通过在函数中设置na.rm=TRUE参数、在计算和分析中删除缺失值获得有效的计算结果(Excluding Missing Values from Analyses)
  4. R语言笔记-缺失值的处理
  5. python期中考试试卷分析_初一期中考试试卷分析
  6. 共享单车接入百度地图,科技进步为“国民素质”背书
  7. 外嫁女能否享受村民拆迁补偿待遇
  8. 解决AndroidStudio连不上Android设备真机
  9. MFC作业--汉诺塔--儿童算数作业生成器
  10. 2022年山西经济林栽培技术之形考作业三