前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Kubernetes HPA:智能缩放应用以应对访问高峰

Kubernetes HPA:智能缩放应用以应对访问高峰

作者头像
希里安
发布2024-01-31 13:04:08
900
发布2024-01-31 13:04:08
举报
文章被收录于专栏:希里安希里安

近日见闻

  1. 天冷注意保暖!
  2. Linux的基础知识越学越觉得匮乏。
  3. 摘抄:
代码语言:javascript
复制
为最坏的情况做好准备,

为最好的情况敞开心扉。

——斯鲁日特尔《莫斯科小猫》

我们都知道,应用的流量可以说是波动不定。一款应用可能会在某个时间点突然遭遇巨大的访问量,而在其他时候则可能门可罗雀。为了应对这种情况,自动化缩放服务成为了维持服务稳定性和成本效率的关键。今天我们将介绍 Kubernetes 的一个强大功能 —— 水平Pod自动伸缩(Horizontal Pod Autoscaler,简称HPA),它可以帮助我们智能地调整应用的规模。

这里也可以参考官方给的例子:https://kubernetes.io/zh-cn/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/

什么是HPA?

Kubernetes HPA 允许用户根据特定的度量,如CPU或内存利用率,自动增加或减少Pod的数量。这意味着,当应用的负载增加时,HPA可以自动启动更多的Pod来处理增加的负载。相对地,当负载降低时,它也会减少Pod的数量以节省资源。

HPA的工作原理

HPA使用 Kubernetes Metrics API 获取选定资源的当前使用情况。然后,它会将实际使用情况与我们在HPA配置中设定的目标使用率进行比较,并据此调整Pod的数量。

实施HPA的步骤

为了使用HPA,我们首先需要一个运行中的 Kubernetes 集群,并且 metrics-server 必须在集群上运行。metrics-server 用于提供资源使用信息,这对于HPA计算是否需要扩缩容至关重要。

步骤一:部署metrics-server

如果你的集群还没有运行metrics-server,可以通过以下命令进行部署:

代码语言:javascript
复制
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml

步骤二:运行 php-apache 服务器并暴露服务

假设我们有一个简单的web应用需要部署。我们首先创建一个名为php-apache.yaml的service文件:

代码语言:javascript
复制
apiVersion: apps/v1
kind: Deployment
metadata:
  name: php-apache
spec:
  selector:
    matchLabels:
      run: php-apache
  template:
    metadata:
      labels:
        run: php-apache
    spec:
      containers:
      - name: php-apache
        image: registry.k8s.io/hpa-example
        ports:
        - containerPort: 80
        resources:
          limits:
            cpu: 500m
          requests:
            cpu: 200m
---
apiVersion: v1
kind: Service
metadata:
  name: php-apache
  labels:
    run: php-apache
spec:
  ports:
  - port: 80
  selector:
    run: php-apache

使用kubectl命令部署这个应用:

代码语言:javascript
复制
kubectl apply -f php-apache.yaml

步骤三:创建HPA

现在我们的应用正在运行,我们要创建HPA以自动调整Pod的数量来应对负载变化。使用这个命令来创建HPA:

代码语言:javascript
复制
kubectl autoscale deployment php-apache --cpu-percent=50 --min=1 --max=10

在这个例子中,我们设置了HPA来监控php-apache deployment,Pod数量的最小值和最大值分别为1和10,目标CPU使用率设定为50%。

步骤四:监控HPA状态

一旦HPA创建完成,我们可以通过如下命令来监控它的状态:

代码语言:javascript
复制
kubectl get hpa 

当CPU利用率超过50%时,HPA将自动增加Pod的数量直至最多10个。当负载降低,CPU利用率低于50%时,Pod的数量也会相应减少。

增加负载

启动一个不同的 Pod 作为客户端。客户端 Pod 中的容器在无限循环中运行,向 php-apache 服务发送查询。自动扩缩器如何对增加的负载做出反应。如下图所示,根据负载增加,pod数也相应的增加了。

代码语言:javascript
复制
# 在单独的终端中运行它
# 以便负载生成继续,你可以继续执行其余步骤kubectl run -i --tty load-generator --rm --image=busybox:1.28 --restart=Never -- /bin/sh -c "while sleep 0.01; do wget -q -O- http://php-apache; done"

停止产生负载

在我们创建 busybox 容器的终端中,输入+ C 来终止负载的产生。

然后验证结果状态(时间根据硬件不同):

代码语言:javascript
复制
# 准备好后按 Ctrl+C 结束观察
kubectl get hpa php-apache --watch

一旦 CPU 利用率降至 0,HPA 会自动将副本数缩减为 1。

结论

在现代应用部署中,HPA是一个不可或缺的工具,能够保障应用在负载波动时的稳定性,并且有助于节省成本。通过这篇文章,应该知道了如何在 Kubernetes 集群中实现HPA的基础知识和操作指南。快去实践一下吧!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-01-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 希里安 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 近日见闻
  • 什么是HPA?
  • HPA的工作原理
  • 实施HPA的步骤
    • 步骤一:部署metrics-server
      • 步骤二:运行 php-apache 服务器并暴露服务
        • 步骤三:创建HPA
          • 步骤四:监控HPA状态
            • 增加负载
              • 停止产生负载
              • 结论
              相关产品与服务
              容器服务
              腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档