容器服务&&AHAS Sentinel 弹性 Demo

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器镜像服务 ACR,镜像仓库100个 不限时长
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: [应用高可用服务 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搭建和管理企业级网站应用
目录
相关文章
|
11月前
|
Java Spring 容器
java spring demo 容器
java spring demo 容器
52 0
|
应用服务中间件 AHAS Sentinel
《阿里云容器 AHAS Sentinel 网关流控揭秘》电子版地址
阿里云容器 AHAS Sentinel 网关流控揭秘
143 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
674 0
尝鲜阿里云容器服务Kubernetes 1.16,共享TensorFlow实验室《二》--共享GPU的弹性
|
2月前
|
运维 Kubernetes 调度
阿里云容器服务 ACK One 分布式云容器企业落地实践
3年前的云栖大会,我们发布分布式云容器平台ACK One,随着3年的发展,很高兴看到ACK One在混合云,分布式云领域帮助到越来越多的客户,今天给大家汇报下ACK One 3年来的发展演进,以及如何帮助客户解决分布式领域多云多集群管理的挑战。
阿里云容器服务 ACK One 分布式云容器企业落地实践
|
2月前
|
人工智能 Kubernetes Cloud Native
阿里云容器服务,全面助力云上体育盛会
本文讲述了阿里云容器服务,通过安全稳定的产品能力和成熟的稳定性保障体系,全面助力云上体育赛场,促进科技之光与五环之光交相辉映。
阿里云容器服务,全面助力云上体育盛会
|
2月前
|
人工智能 Prometheus 监控
使用 NVIDIA NIM 在阿里云容器服务(ACK)中加速 LLM 推理
本文介绍了在阿里云容器服务 ACK 上部署 NVIDIA NIM,结合云原生 AI 套件和 KServe 快速构建高性能模型推理服务的方法。通过阿里云 Prometheus 和 Grafana 实现实时监控,并基于排队请求数配置弹性扩缩容策略,提升服务稳定性和效率。文章提供了详细的部署步骤和示例,帮助读者快速搭建和优化模型推理服务。
154 7
使用 NVIDIA NIM 在阿里云容器服务(ACK)中加速 LLM 推理

相关产品

  • 容器计算服务