容器服务&&AHAS Sentinel 弹性 Demo

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: [应用高可用服务 AHAS](https://help.aliyun.com/document_detail/101132.html)(Application High Availability Service)是一款阿里云应用高可用服务相关产品。只要容器服务中的 Java 应用接入了 AHAS 应用流控组件后,用户的应用实例就可以自动根据 AHAS Sentinel 收集的指标(如 QPS、平均

应用高可用服务 AHAS(Application High Availability Service)是一款阿里云应用高可用服务相关产品。只要容器服务中的 Java 应用接入了 AHAS 应用流控组件后,用户的应用实例就可以自动根据 AHAS Sentinel 收集的指标(如 QPS、平均响应时间等)进行弹性伸缩,使得系统可以自动根据实时的流量情况进行扩缩容,保证系统的可用性。

0. 安装 alibaba-cloud-metrics-adapter

可以直接在容器服务控制台 应用目录 中安装 alibaba-cloud-metrics-adapter。

1572500649423-2884150b-aece-4c7f-88b0-f1c6ae223ea3.png

相关 repo:https://github.com/AliyunContainerService/alibaba-cloud-metrics-adapter

1. 安装 AHAS Sentinel Pilot

AHAS Sentinel 应用流控 pilot 插件可以自动将 AHAS Sentinel 注入到用户的 Java 应用中,用户无需修改任何代码,就能借助 AHAS 对 Java 应用进行全方位进行系统防护,方便针对系统进行流量管控、服务降级等操作。为了方便演示,我们首先安装 AHAS 应用流控组件 ack-ahas-sentinel-pilot。

登录容器服务 Kubernetes 版控制台,在左侧导航栏选择 市场 > 应用目录,在右侧选中 ack-ahas-sentinel-pilot。在应用目录 - ack-ahas-sentinel-pilot 页面上,在右侧的创建面板中选择前提条件中创建的集群和命名空间,并单击创建。

1572500649423-2884150b-aece-4c7f-88b0-f1c6ae223ea3.png

2. 启动 Java 应用

安装好 ack-ahas-sentinel-pilot 以后,我们可以拉起一个 Java 应用示例,对应的 ConfigMap/Deployment/Service 如下:

apiVersion: v1
kind: ConfigMap
metadata:
  name: foo-service-cm-pilot
data:
  application.yaml: |
    spring:
      application:
        name: foo-service
    server:
      port: 8700
    eureka:
      instance:
        preferIpAddress: true
      client:
        enabled: false
    logging:
      file: /foo-service/logs/application.log
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: agent-foo-on-pilot
  labels:
    name: agent-foo-on-pilot
spec:
  replicas: 1
  selector:
    matchLabels:
      name: agent-foo-on-pilot
  template:
    metadata:
      labels:
        name: agent-foo-on-pilot
      annotations:
        ahasAppName: "foo-service-on-pilot"
        ahasNamespace: "default"
    spec:
      containers:
        - name: master
          image: registry.cn-hangzhou.aliyuncs.com/sentinel-docker-repo/foo-service:latest
          imagePullPolicy: Always
          ports:
            - containerPort: 8700
          volumeMounts:
            - name: foo-service-logs
              mountPath: /foo-service/logs
            - name: foo-service-config
              mountPath: /foo-service/config
          resources:
            limits:
              cpu: "0.5"
              memory: 500Mi
            requests:
              cpu: "0.5"
              memory: 500Mi
      volumes:
        - name: foo-service-logs
          emptyDir: {}
        - name: foo-service-config
          configMap:
            name: foo-service-cm-pilot
            items:
              - key: application.yaml
                path: application.yml
---
apiVersion: v1
kind: Service
metadata:
  name: foo-service
  labels:
    name: foo-service
spec:
  ports:
  - port: 80
    targetPort: 8700
  selector:
    name: foo-service
  type: LoadBalancer
  externalTrafficPolicy: Local

我们在对应的 Deployment 的 template > metadata > annotation 中配置了 AHAS 应用名称(ahasAppName)和命名空间(ahasNamespace),部署后该应用会显示在 AHAS 流控降级控制台 对应 region 的应用列表中:

1571020560431-71fb4939-9f25-4a0f-b8a9-bdc0d4897aad.png

我们可以通过 SLB 对外暴露的 external IP 来访问该 Web 服务。可以在 容器服务控制台 - 服务 中拿到该 Service 对应的 external IP(或者通过 kubectl get services):

external-service-ip.png

该示例外部应用提供一个 /foo/time API,返回当前时间戳。我们可以访问该 API 来调用该服务,比如 http://121.196.243.208/foo/time

3. 创建 HPA 配置

接下来我们针对我们的 demo Java 应用来手动创建 HPA,通过 kubectl 命令实现容器自动伸缩配置。

AHAS Sentinel 目前支持四种 metric 判断指标:

  • ahas_sentinel_total_qps:应用的总 QPS(pass+block,平均到每台机器)
  • ahas_sentinel_pass_qps:应用的通过 QPS(平均到每台机器)
  • ahas_sentinel_block_qps:应用的拒绝 QPS(平均到每台机器)
  • ahas_sentinel_avg_rt:应用的平均响应时间

示例 HPA:

apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
  name: ahas-sentinel-hpa
spec:
  scaleTargetRef:
    apiVersion: apps/v1beta2
    kind: Deployment
    name: agent-foo-on-pilot
  minReplicas: 1
  maxReplicas: 3
  metrics:
    - type: External
      external:
        metric:
          name: ahas_sentinel_total_qps
          selector:
            matchLabels:
            # If you're using AHAS Sentinel pilot, then the appName and namespace
            # can be retrieved from the annotation of target Deployment automatically.
            # ahas.sentinel.app: "foo-service-on-pilot"
            # ahas.sentinel.namespace: "default"
        target:
          type: Value
          # ahas_sentinel_total_qps > 30
          value: 30

上述的配置针对 agent-foo-on-pilot Deployment 对应的应用进行自动弹性伸缩,判断的指标是 AHAS Sentinel 中统计的应用 QPS(平均到每台机器),超过 30 就进行扩容,最大扩容副本数为 3。

将以上配置保存成 ahas-sentinel-hpa.yml,我们可以执行 kubectl apply -f ahas-sentinel-hpa.yml 来创建 HPA 配置。

4. 发起压测流量,观察弹性效果

我们提供了发送压测流量的 image,方便测试弹性效果。以下是压测流量 runner 的 Deployment:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: flow-runner
  labels:
    name: flow-runner
spec:
  replicas: 1
  selector:
    matchLabels:
      name: flow-runner
  template:
    metadata:
      labels:
        name: flow-runner
    spec:
      containers:
        - name: runner
          image: registry.cn-hangzhou.aliyuncs.com/sentinel-docker-repo/flow-runner:0.1.0
          imagePullPolicy: Always
          env:
            # 在此处更新为实际的地址
            - name: TARGET_URL
              value: "http://112.124.154.227/foo/time"
            # 每次请求的时间间隔(s),比如 0.1 就代表 QPS 为 10
            - name: SLEEP_TIME
              value: "0.1"

我们可以控制该 runner 的副本数来控制压测的 QPS,比如上述示例中调整 replica = 3 即对应 30 QPS。

我们可以在 容器服务控制台 - 无状态 页面将 replica 数目调成 4,使得 QPS 超过临界值,触发扩容:

scale-4.png

一段时间后,可以看到对应的应用容器数目自动扩容成了 2:

hpa-to-2.png

AHAS 控制台 - 应用流控 - 机器列表页面也可以看到增加的实例:

machine-list.png

然后我们再把 flow-runner 的副本数调成 1,一段时间后(约 5 分钟)对应的容器会自动缩容到一个实例:

hpa-downscale-1.png

hpa-to-1-console.png

相关实践学习
巧用云服务器ECS制作节日贺卡
本场景带您体验如何在一台CentOS 7操作系统的ECS实例上,通过搭建web服务器,上传源码到web容器,制作节日贺卡网页。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
10月前
|
Java Spring 容器
java spring demo 容器
java spring demo 容器
50 0
|
应用服务中间件 AHAS Sentinel
《阿里云容器 AHAS Sentinel 网关流控揭秘》电子版地址
阿里云容器 AHAS Sentinel 网关流控揭秘
142 0
《阿里云容器 AHAS Sentinel 网关流控揭秘》电子版地址
|
缓存 监控 Java
如何利用 AHAS 保障 Web 服务稳如磐石?
应用高可用服务 AHAS (Application High Availability Service) 是经阿里巴巴内部多年高可用体系沉淀下来的云产品,基于阿里开源流控降级组件 Sentinel,以流量与容错为切入点,从流量控制、不稳定调用隔离、熔断降级、热点流量防护、系统自适应过载保护、集群流控、服务防抖动等多个维度来帮助保障服务和网关的稳定性,同时提供秒级的流量监控分析功能。
如何利用 AHAS 保障 Web 服务稳如磐石?
|
SQL 应用服务中间件 AHAS
阿里云应用高可用服务 AHAS 流控降级实现 SQL 自动防护功能
在影响系统稳定性的各种因素中,慢 SQL 是相对比较致命的,可能会导致 CPU、LOAD 异常、系统资源耗尽。线上生产环境出现慢 SQL 往往有很多原因: 硬件问题。如网络速度慢,内存不足,I/O 吞吐量小,磁盘空间满等。
3901 4
|
关系型数据库 应用服务中间件 数据库
【阿里云新品发布·周刊】第18期:应用高可用服务 AHAS 商业化首发,一步提升应用可用性
点击订阅新品发布会! 新产品、新版本、新技术、新功能、价格调整,评论在下方,下期更新!关注更多内容,了解更多 最新发布 应用高可用服务 AHAS 商业化首发 2019年7月17日15时,应用高可用服务 AHAS 商业化首发。
2333 0
|
应用服务中间件 AHAS Spring
阿里云容器 AHAS Sentinel 网关流控揭秘【资料下载】
简介 在本场直播中,我们将介绍 AHAS Sentinel 的新特性 —— 网关流控,演示如何从容器服务创建 Spring Cloud Gateway 实例,将其快速接入到 AHAS 并配置网关流控规则,查看实时的流控效果。
3202 0
|
5月前
|
Java Serverless 应用服务中间件
Serverless 应用引擎产品使用之在Serverless 应用引擎中跳过AHAS创建如何解决
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
138 3
|
消息中间件 安全 应用服务中间件
消息队列和应用工具产品体系 - AHAS 产品概述
消息队列和应用工具产品体系 - AHAS 产品概述
消息队列和应用工具产品体系 - AHAS  产品概述
|
SQL 运维 监控
|
安全 应用服务中间件 双11
AHAS-流量防护应用权限管理 最佳实践
流量防护子账号权限细粒度控制:不同子账号 只可见对其授权的应用。 AHAS应用防护以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度来保障业务的稳定性,提供更专业稳定的流量防护手段、秒级的流量水位分布分析功能,是阿里巴巴双十一技术体系中的核心组件,同时也是开源框架Sentinel的商业化产品。
389 0

相关产品

  • 容器计算服务