通过HPA进行Pod水平弹性伸缩

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 本场景带您体验如何使用阿里云指标完成Pods的自动伸缩。

通过HPA进行Pod水平弹性伸缩


1. 创建实验资源

开始实验之前,您需要先创建云服务器ECS和ACK集群资源。

说明:在实验资源创建过程中,ECS会安装命令行工具kubectl并连接ACK集群,方便您在后续实验中通过ECS中的Kubernetes命令行工具kubectl来管理ACK集群以及应用。

  1. 在实验室页面,单击创建资源
  2. (可选)在实验室页面左侧导航栏中,单击云产品资源列表,可查看本次实验资源相关信息(例如IP地址、用户信息等)。

说明:资源创建过程需要7~10分钟。

2. 安装组件ack-alibaba-cloud-metrics-adapter

本步骤指导您如何通过容器服务管理控制台在k8s集群中,安装组件ack-alibaba-cloud-metrics-adapter。

  1. 双击打开远程桌面的Chromium网页浏览器
  2. 在RAM用户登录框中单击下一步,并复制粘贴页面左上角的子用户密码用户密码输入框,单击登录
  3. 复制下方地址,在Firefox浏览器打开新页签,粘贴并访问容器服务管理控制台。
https://cs.console.aliyun.com/
  1. 集群列表页面,找到云起实验室分配给您的集群资源,单击集群ID

说明:您可以在云产品资源列表中查看到实验室分配给您的集群资源。

  1. 在左侧导航栏中,选择市场>应用市场

  1. 应用市场页面的应用目录区域,应用场景选择弹性伸缩

  1. 应用市场页面的应用目录区域,单击ack-alibaba-cloud-metrics-adapter

  1. ack-alibaba-cloud-metrics-adapter页面,单击右上角的一键部署

  1. 创建面板中,集群选择为云起实验室为您分配的集群资源,单击下一步

说明:您可以在云产品资源列表中查看到实验室分配给您的集群资源。

  1. 创建面板中,单击确定

  1. 在左侧导航栏中,选择应用>Helm

返回如下页面,您可以看到状态为已部署,表示ack-alibaba-cloud-metrics-adapter已成功部署。


3. 部署Nginx Deploymenet应用

本步骤指导你如何部署Nginx Deployment应用到k8s集群中,并使用Ingress实现Nginx Deployment应用的外部访问。

  1. 在实验室页面右侧的功能栏中,单击图标,切换至Web Terminal。
  2. 执行如下命令,创建名为nginx-deployment-svc.yaml的YAML文件。
vi nginx-deployment-svc.yaml
  1. i键进入编辑模式,将如下代码复制到文件中。
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment-basic
  labels:
    app: nginx
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.7.9
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: nginx
spec:
  ports:
    - port: 80
      protocol: TCP
      targetPort: 80
  selector:
    app: nginx
  type: ClusterIP
  1. ECS键退出编辑模式,输入:wq,然后回车保存并退出文件。
  2. 执行如下命令,部署Deployement应用。
kubectl apply -f nginx-deployment-svc.yaml
  1. 执行如下命令,创建名为nginx-svc-ingress.yaml的Ingress YAML文件。
vi nginx-svc-ingress.yaml
  1. i键进入编辑模式,将如下代码复制到文件中,并将hots参数中的集群id修改为k8s集群id。

说明:您可在云产品资源列表中查看k8s集群id。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: nginx-handsonack
  labels:
    app: my-app
spec:
  rules:
  - host: nginx.集群id.cn-shanghai.alicontainer.com
    http:
      paths:
      - backend:
          service:
            name: nginx
            port:
              number: 80
        path: /
        pathType: Prefix
  1. ECS键退出编辑模式,输入:wq,然后回车保存并退出文件。
  2. 执行如下命令,部署Ingress资源。
kubectl apply -f nginx-svc-ingress.yaml
  1. 将如下命令中的集群id修改为k8s集群id,并执行,进行测试。

说明:您可在云产品资源列表中查看k8s集群id。

curl nginx.集群id.cn-shanghai.alicontainer.com

返回结果如下,表示您Deployment应用部署成功。


4. 部署HPA水平扩缩策略

本步骤指导您如何为Nginx Deployment应用部署HPA水平扩缩策略。

  1. 执行如下命令,创建名为nginx-hpa.yaml的YAML文件。
vi nginx-hpa.yaml
  1. i键进入编辑模式,将如下代码复制到文件中。并将两个sls.project参数中的集群id修改为k8s集群id。

说明:您可在云产品资源列表中查看k8s集群id。

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_ingress_qps
          selector:
            matchLabels:
              # default ingress log project is k8s-log-clusterId
              sls.project: "k8s-log-集群id"
              # default ingress logstre is nginx-ingress
              sls.logstore: "nginx-ingress"
              # namespace-svc-port
              sls.ingress.route: "default-nginx-80"
        target:
          type: AverageValue
          averageValue: 10
    - type: External
      external:
        metric:
          name: sls_ingress_latency_p9999
          selector:
            matchLabels:
              # default ingress log project is k8s-log-clusterId
              sls.project: "k8s-log-集群id"
              # default ingress logstre is nginx-ingress
              sls.logstore: "nginx-ingress"
              # namespace-svc-port
              sls.ingress.route: "default-nginx-80"
              # sls vpc endpoint, default true
              # sls.internal.endpoint:ture
        target:
          type: Value
          # sls_ingress_latency_p9999 > 10ms
          value: 10

参数说明:

sls_ingress_qps与sls_ingress_latency_p9999是本实验实现伸缩使用的两个指标。在target的type中:

  • 为sls_ingress_qps设置的是AverageValue,表示QPS要除以Pod的数目进行判断。
  • 为sls_ingress_latency_p9999设置的是Value,表示无需除以Pod的数目。
  1. ECS键退出编辑模式,输入:wq,然后回车保存并退出文件。
  2. 执行如下命令,下发HPA策略。
kubectl apply -f nginx-hpa.yaml
  1. 执行如下命令,查看HPA状态。
kubectl get hpa

返回结果如下,您可查看到HPA状态。


5. 通过ab工具进行压测

本步骤指导您如何使用ab工具进行压测,并观察Nginx Deployment应用的HPA状态、pods数量和状态。

  1. 执行如下命令,安装ab工具。
yum install httpd-tools -y
  1. 将如下命令中的集群id修改为k8s集群id,并执行,进行压测。

说明:您可在云产品资源列表中查看k8s集群id。

ab -t 300 -c 10 nginx.集群id.cn-shanghai.alicontainer.com/
  1. 执行如下命令,查看HPA状态。
kubectl get hpa

返回结果如下,您可查看到HPA状态。

  1. 查看pods数量和状态。
kubectl get pods

返回结果如下,您可查看到Nginx deployment已经根据阿里云指标进行了HPA弹性伸缩。


实验链接https://developer.aliyun.com/adc/scenario/f09ade45b65844aabe5c00ee64a33897

相关文章
|
弹性计算 监控 Kubernetes
k8s-对Pod自动弹性伸缩(HPA)
HPA介绍 部署metrics-server 案例自动缩容
k8s-对Pod自动弹性伸缩(HPA)
|
弹性计算 Kubernetes 监控
Kubernetes弹性伸缩全场景解读(八) - 定时伸缩组件支持HPA兼容
在之前的文章中,我们介绍了kubernetes-cronhpa-controller是如何通过设置定时的方式触发容器的水平副本伸缩,但是在实际的场景下,虽然定时伸缩对于负载有规律的应用比较友好,但是应用为了防止突发的流量冲击,还是会配置HPA来做最后的保障的。
4155 0
|
弹性计算 Kubernetes 算法
Kubernetes 弹性伸缩HPA功能增强Advanced Horizontal Pod Autoscaler -介绍部署篇
背景 WHAT(做什么) Advanced Horizontal Pod Autoscaler(简称:AHPA)是kubernetes中HPA的功能增强. 在兼容原生HPA功能基础上,增加预测、执行模式配置、缩容控制等功能。
3522 0
|
弹性计算 Prometheus 监控
使用自定义指标进行Pod弹性伸缩
Horizontal Pod Autoscaling,简称HPA,是Kubernetes中实现Pod水平自动伸缩功能的资源对象。Kubernetes 1.9 或更高版本支持HPA V2版本,允许我们是用自定义监控指标来控制Pod数目。
6429 0
|
容器 Kubernetes 弹性计算
Kubernetes 弹性伸缩全场景解析(三) - HPA 实践手册
在上一篇文章中,给大家介绍和剖析了 HPA 的实现原理以及演进的思路与历程。本文我们将会为大家讲解如何使用 HPA 以及一些需要注意的细节。  实践 v1 的模板可能是大家平时见到最多的也是最简单的,v1 版本的 HPA 只支持一种指标 ——  CPU。
|
弹性计算 监控 Kubernetes
Kubernetes 弹性伸缩全场景解读(二)- HPA 的原理与演进
前言 在上一篇文章 Kubernetes 弹性伸缩全场景解析 (一):概念延伸与组件布局中,我们介绍了在 Kubernetes 在处理弹性伸缩时的设计理念以及相关组件的布局,在今天这篇文章中,会为大家介绍在 Kubernetes 中弹性伸缩最常用的组件 HPA(Horizontal Pod Autoscaler)。
|
弹性计算 Kubernetes Cloud Native
Kubernetes弹性伸缩全场景解析(三) - HPA实践手册
#### 前言 在上一篇文章中,给大家介绍和剖析了HPA的实现原理以及演进的思路与历程。在本文中,我们会为大家讲解如何使用HPA以及一些需要注意的细节。 #### `autoscaling/v1`实践 v1的模板可能是大家平时见到最多的也是最简单的,v1版本的HPA只支持一种指标 —— CPU。传统意义上,弹性伸缩最少也会支持CPU与Memory两种指标,为什么在Ku
3719 0
|
弹性计算 监控 容器
Kubernetes弹性伸缩全场景解读(二) - HPA的原理与演进
#### 前言 在上一篇文章中,我们介绍了在Kubernetes在处理弹性伸缩时的设计理念以及相关组件的布局,在今天这篇文章中,会为大家介绍在Kubernetes中弹性伸缩最常用的组件HPA(Horizontal Pod Autoscaler)。HPA是通过计算Pod的实际工作负载进行重新容量规划的组件,在资源池符合满足条件的前提下,HPA可以很好的实现弹性伸缩的模型。HPA到目前为止,
5067 0
Kubernetes弹性伸缩全场景解读(二) - HPA的原理与演进
|
弹性计算 应用服务中间件 nginx
阿里云容器服务使用HPA弹性伸缩容器
前言 弹性伸缩是开发者使用容器过程中非常关注的特性,如果从资源类型的角度来讲,可以分为物理资源的弹性伸缩与容器资源的弹性伸缩。在本篇中,主要向大家介绍的是容器资源的弹性伸缩,在Kubernetes中,HPA(Horizontal Pod Autoscaling)是用来抽象容器水平弹性伸缩的概念。
4912 0
|
8月前
|
弹性计算 缓存 运维
【运维知识进阶篇】用阿里云部署kod可道云网盘(DNS解析+CDN缓存+Web应用防火墙+弹性伸缩)(三)
【运维知识进阶篇】用阿里云部署kod可道云网盘(DNS解析+CDN缓存+Web应用防火墙+弹性伸缩)(三)
136 0