详情页标题前

阿里云容器服务ACK通过ALB Ingress实现基于QPS数据的应用弹性伸缩-云淘科技

详情页1

ALB Ingress支持根据ALB后端统计的QPS数据进行应用的自动扩容缩容,保障应用的稳定性以及达到更好的成本控制。本文介绍如何通过ALB Ingress实现基于QPS数据的应用弹性伸缩。

前提条件

  • 已安装alibaba-cloud-metrics-adapter组件,且版本为2.3.0及以上。具体操作,请参见基于阿里云组件指标的容器水平伸缩。
  • 已安装ALB Ingress Controller组件。具体操作,请参见管理ALB Ingress Controller组件。
  • 已安装压力测试工具Apache Benchmark。更多信息,请参见Apache Benchmark。
  • 已在日志服务中创建Project。具体操作,请参见管理Project。
  • 已创建两个不同可用区的交换机,且与集群处于同一VPC。具体操作,请参见创建和管理交换机。

操作流程

  1. 创建应用和Service。
  2. 创建ALB Ingress。
  3. 创建HPA。
  4. 验证应用是否随着QPS数据自动扩缩容。

步骤一:创建应用和Service

  1. 使用以下内容,创建tea.yaml。
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx-deployment-basic
      labels:
        app: tea
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: tea
      template:
        metadata:
          labels:
            app: tea
        spec:
          containers:
          - name: tea
            image: nginx:1.7.9
            ports:
            - containerPort: 80
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: tea-svc
      namespace: default
    spec:
      ports:
        - port: 80
          protocol: TCP
          targetPort: 80
      selector:
        app: tea
      type: NodePort
  2. 执行以下命令,创建测试应用tea和Service。
    kubectl apply -f tea.yaml

步骤二:创建ALB Ingress

  1. 创建ALBConfig。
    1. 使用以下内容,创建alb-test.yaml。
      apiVersion: alibabacloud.com/v1
      kind: AlbConfig
      metadata:
        name: alb-demo
      spec:
        config:
          name: alb-test
          addressType: Internet
          zoneMappings:
          - vSwitchId: vsw-uf6ccg2a9g71hx8go****
          - vSwitchId: vsw-uf6nun9tql5t8nh15****
          accessLogConfig:
            logProject: "****"
            logStore: "alb_****"
      • zoneMappings:设置ALB Ingress交换机ID,您需要至少指定两个不同可用区交换机ID,且与集群处于同一VPC。
      • logProject:设置Project名称。
      • logStore:设置Logstore名称。logStore命名需要以alb_开头,若指定logStore不存在,系统将会自动创建。
    2. 执行以下命令,创建ALBConfig。
      kubectl apply -f alb-test.yaml
  2. 创建IngressClass。
    1. 使用以下内容,创建alb.yaml。
      apiVersion: networking.k8s.io/v1
      kind: IngressClass
      metadata:
        name: alb
      spec:
        controller: ingress.k8s.alibabacloud/alb
        parameters:
          apiGroup: alibabacloud.com
          kind: AlbConfig
          name: alb-demo
    2. 执行以下命令,创建IngressClass。
      kubectl apply -f alb.yaml
  3. 创建ALB Ingress。
    1. 使用以下内容,创建tea-ingress.yaml。
      apiVersion: networking.k8s.io/v1
      kind: Ingress
      metadata:
        name: tea-ingress
      spec:
        ingressClassName: alb
        rules:
         - host: demo.ingress.top
           http:
            paths:
            - path: /tea
              pathType: Prefix
              backend:
                service:
                  name: tea-svc
                  port:
                    number: 80
    2. 执行以下命令,创建ALB Ingress。
      kubectl apply -f tea-ingress.yaml
  4. 执行以下命令,获取ALB Ingress的ADDRESS
    kubectl get ingress

    预期输出:

    NAME                    CLASS   HOSTS                     ADDRESS                                              PORTS   AGE
    tea-ingress             alb     demo.ingress.top          alb-110zvs5nhsvfv*****.cn-chengdu.alb.aliyuncs.com   80      7m5s

步骤三:创建HPA

  1. 使用以下内容,创建hpa.yaml。
    apiVersion: autoscaling/v2beta2
    kind: HorizontalPodAutoscaler
    metadata:
      name: ingress-hpa
    spec:
      scaleTargetRef:
        apiVersion: apps/v1
        kind: Deployment
        name: nginx-deployment-basic
      minReplicas: 2
      maxReplicas: 10
      metrics:
        - type: External
          external:
            metric:
              name: sls_alb_ingress_qps
              # sls_alb_ingress_qps是本文实现伸缩使用的指标,表示基于QPS数据实现弹性伸缩。
              selector:
                matchLabels:
                  sls.project: "****"    # 替换sls.project值为真实值。
                  sls.logstore: "alb_****"     # 替换sls.logstore值为真实值。
                  sls.ingress.route: "default-tea-svc-80"
                  # sls.ingress.route参数的格式为--,例如default-nginx-80。
            target:
              type: AverageValue
              # type为AverageValue表示QPS要除以Pod的数目进行判断。
              averageValue: 2
  2. 执行以下命令,创建HPA。
    kubectl apply -f hpa.yaml
  3. 执行以下命令,查看HPA部署情况。
    kubectl get hpa

    预期输出:

    NAME          REFERENCE                           TARGETS     MINPODS   MAXPODS   REPLICAS   AGE
    ingress-hpa   Deployment/nginx-deployment-basic   0/2 (avg)   2         10        2          4h34m
  4. 执行以下命令,查看HPA配置信息。
    kubectl describe hpa ingress-hpa

    预期输出:

    Name:                                            ingress-hpa
    Namespace:                                       default
    Labels:                                          
    Annotations:                                     
    CreationTimestamp:                               Tue, 31 Jan 2023 11:35:01 +0800
    Reference:                                       Deployment/nginx-deployment-basic
    Metrics:                                         ( current / target )
    "sls_alb_ingress_qps" (target average value):    0 / 2
    Min replicas:                                    2
    Max replicas:                                    10
    Deployment pods:                                 2 current / 2 desired

步骤四:验证应用是否随着QPS数据自动扩缩容

  1. 验证应用是否随着QPS数据扩容。
    1. 执行以下命令,对应用进行压测。
      ab -c 5 -n 5000 -H Host:demo.ingress.top http://alb-110zvs5nhsvfv*****.cn-chengdu.alb.aliyuncs.com/tea
    2. 执行以下命令,查看应用伸缩情况。
      kubectl get hpa

      预期输出:

      NAME          REFERENCE                           TARGETS           MINPODS   MAXPODS   REPLICAS   AGE
      ingress-hpa   Deployment/nginx-deployment-basic   12500m/2 (avg)   2         10        10         15m

      返回结果中REPLICAS为10,表明随着QPS数据增大,应用的Pod扩容到10个。

  2. 验证应用是否随着QPS数据缩容。

    QPS数据在压测停止后会下降为0,低于测试阈值,HPA会缩容。

    待压测停止后,执行以下命令,查看应用伸缩情况。

    kubectl get hpa

    预期输出:

    NAME          REFERENCE                           TARGETS           MINPODS   MAXPODS   REPLICAS   AGE
    ingress-hpa   Deployment/nginx-deployment-basic   0/2 (avg)         2         10         2         60m

    返回结果中REPLICAS为2,表明随着QPS数据减少,应用的Pod缩容到2个。

内容没看懂? 不太想学习?想快速解决? 有偿解决: 联系专家

阿里云企业补贴进行中: 马上申请

腾讯云限时活动1折起,即将结束: 马上收藏

同尘科技为腾讯云授权服务中心。

购买腾讯云产品享受折上折,更有现金返利:同意关联,立享优惠

转转请注明出处:http://www.yunxiaoer.com/171281.html

(0)
上一篇 2023年12月10日
下一篇 2023年12月10日
详情页2

相关推荐

  • 阿里云RDS数据库如何扩容RDS实例-云淘科技

    您可以通过多种方式对RDS实例进行扩容或缩容。 通过变更配置扩容RDS实例 RDS MySQL变更配置 RDS PostgreSQL变更配置 RDS SQL Server变更配置 RDS MariaDB变更配置 通过自动扩容功能扩容RDS实例 RDS MySQL 设置性能自动扩容 设置存储空间自动扩容 RDS PostgreSQL 设置存储空间自动扩容 内容…

    阿里云数据库 2023年12月10日
  • 阿里云ECS云服务器云盘扩容指引-云淘科技

    本文介绍什么是云盘(系统盘或数据盘)扩容、扩容流程、扩容上限、扩容费用等信息。 什么是云盘扩容 云盘扩容是指对已有的云盘进行容量扩充,以满足更多数据存储需求。通过云盘扩容,您可以更加便捷地调整云盘容量大小,避免因存储空间不足而产生数据丢失等问题。 云盘扩容流程 第一步,在ECS控制台扩容云盘容量。 具体操作,请参见步骤一:扩容云盘容量。 第二步,在操作系统中…

    阿里云服务器 2023年12月9日
  • 腾讯云容器服务集群扩缩容同尘科技

    操作场景 本文档指导您对集群进行扩缩容,手动或自动处理应用对资源需求量的变化。TKE 支持以下三种扩缩容方法,您可结合实际情况进行选择:手动添加/移出节点。通过弹性伸缩自动添加/移出节点。通过超级节点完成应用层的扩缩容,无需通过节点进行扩缩容。 前提条件 1. 已登录 容器服务控制台。2. 已 创建集群。 操作步骤 手动添加/移出节点 您可通过新建节点或添加…

    腾讯云 2023年12月9日
  • 信息流广告,信息流部分建议宽度830px,只针对默认列表样式,顺序随机
  • 阿里云ECS云服务器云盘扩容后使用growpart扩展GPT分区失败该如何处理?-云淘科技

    问题现象 云盘的分区格式为GPT,云盘进行云盘容量扩容后,使用growpart工具扩展分区(例如/dev/vdb1)或者文件系统时提示如下图所示的报错信息,导致云盘容量扩容了但是分区和文件系统的可用空间没有增加。本文以/dev/vdb1分区为例进行说明。 可能原因 初始化数据盘(例如/dev/vdb)时,未按推荐的分区对齐方式进行分区,即未按要求执行mkpa…

    2023年12月9日
  • 阿里云RDS数据库变更配置-云淘科技

    本文介绍如何变更RDS SQL Server实例配置,包括存储类型、实例规格、存储空间。 说明 RDS SQL Server Serverless实例变更配置,请参见变更计算资源扩缩范围(RCU)和增加存储空间。 变更项 如果您需要横向扩展数据库的读取能力,请参见SQL Server只读实例简介和创建SQL Server只读实例,通过只读实例来分担主实例的压…

    2023年12月9日

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
本站为广大会员提供阿里云、腾讯云、华为云、百度云等一线大厂的购买,续费优惠,保证底价,买贵退差。