容器服务&&AHAS Sentinel 弹性 Demo

本文涉及的产品
容器镜像服务 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

相关实践学习
使用ACS算力快速搭建生成式会话应用
阿里云容器计算服务 ACS(Container Compute Service)以Kubernetes为使用界面,采用Serverless形态提供弹性的算力资源,使您轻松高效运行容器应用。本文将指导您如何通过ACS控制台及ACS集群证书在ACS集群中快速部署并公开一个容器化生成式AI会话应用,并监控应用的运行情况。
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
Java Spring 容器
java spring demo 容器
java spring demo 容器
100 0
|
应用服务中间件 AHAS Sentinel
《阿里云容器 AHAS Sentinel 网关流控揭秘》电子版地址
阿里云容器 AHAS Sentinel 网关流控揭秘
205 0
《阿里云容器 AHAS Sentinel 网关流控揭秘》电子版地址
|
数据采集 缓存 Kubernetes
容器服务 AHPA 弹性预测最佳实践-元毅 | 学习笔记
快速学习容器服务 AHPA 弹性预测最佳实践-元毅
容器服务 AHPA 弹性预测最佳实践-元毅 | 学习笔记
|
达摩院 Kubernetes Cloud Native
直播预告 | 容器服务 ACK 弹性预测最佳实践
阿里巴巴云原生团队和阿里达摩院决策智能时序团队合作开发了 AHPA (Advanced Horizontal Pod Autoscaler)弹性预测产品,该产品主要出发点是基于检测到的周期做“定时规划”,通过规划实现提前扩容的目的,在保证业务稳定的情况下,让你真正实现按需使用。
直播预告 | 容器服务 ACK 弹性预测最佳实践
|
弹性计算 运维 Kubernetes
比心云平台基于阿里云容器服务 ACK 的弹性架构实践
本文主要探讨比心云平台如何利用阿里云容器服务 ACK,来构建应用弹性架构,进一步优化计算成本。
比心云平台基于阿里云容器服务 ACK 的弹性架构实践
|
缓存 监控 Java
如何利用 AHAS 保障 Web 服务稳如磐石?
应用高可用服务 AHAS (Application High Availability Service) 是经阿里巴巴内部多年高可用体系沉淀下来的云产品,基于阿里开源流控降级组件 Sentinel,以流量与容错为切入点,从流量控制、不稳定调用隔离、熔断降级、热点流量防护、系统自适应过载保护、集群流控、服务防抖动等多个维度来帮助保障服务和网关的稳定性,同时提供秒级的流量监控分析功能。
如何利用 AHAS 保障 Web 服务稳如磐石?
|
存储 弹性计算 Kubernetes
尝鲜阿里云容器服务Kubernetes 1.16,共享TensorFlow实验室《二》--共享GPU的弹性
上一篇文章《尝鲜阿里云容器服务Kubernetes 1.16,共享TensorFlow实验室》我们讲述了如何通过CGPU的方案来实现CGPU资源的共享和隔离。 本文介绍基于CGPU资源的弹性能力。 ps:下面的说明是基于上一篇文章的环境来进行的描述,环境的搭建请参考上一篇文章。 ## 配置弹性伸缩组 1. 在“集群列表”中目标集群的“更多”的下拉菜单中选中“自动伸缩” ![001.j
826 0
尝鲜阿里云容器服务Kubernetes 1.16,共享TensorFlow实验室《二》--共享GPU的弹性
|
Java Serverless 应用服务中间件
Serverless 应用引擎产品使用之在Serverless 应用引擎中跳过AHAS创建如何解决
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
249 3
|
消息中间件 安全 应用服务中间件
消息队列和应用工具产品体系 - AHAS 产品概述
消息队列和应用工具产品体系 - AHAS 产品概述
消息队列和应用工具产品体系 - AHAS  产品概述
|
应用服务中间件 AHAS 监控
阿里云应用高可用 AHAS 正式商用,可一键提升云上应用可用性
在分布式架构环境下,服务间的依赖日益复杂,可能没有人能说清单个故障对整个系统的影响,构建一个高可用的分布式系统面临着很大挑战。 7月17日,阿里云应用高可用服务AHAS 正式商用,包含架构感知、流控降级和故障演练三大独立的功能模块,可快速提高应用的高可用能力,解决分布式架构下的高可用难题。
3561 58

相关产品

  • 容器计算服务
  • 容器服务Kubernetes版