HPA控制器

红米1年前技术文章493

HPA (动态扩缩容)

kubectl 有一个 scale 命令 kubectl scale deployment/nginx --replicas=4 它可以帮助 Pod 进行扩缩容,这个过程完全手动的,但是实际使用过程中,要应对线上的各种复杂情况,我们需要能够做到自动化去感知业务,来自动进行扩缩容。为此,Kubernetes 也为我们提供了这样的一个资源对象:Horizontal Pod Autoscaling(Pod 水平自动伸缩),简称 HPA,HPA 通过监控分析一些控制器控制的所有 Pod 的负载变化情况来确定是否需要调整 Pod 的副本数量,这是 HPA 最基本的原理:


1111.png

我们可以简单的通过 kubectl autoscale 命令来创建一个 HPA 资源对象,HPA Controller 默认30s轮询一次(可通过 kube-controller-manager 的--horizontal-pod-autoscaler-sync-period 参数进行设置),查询指定的资源中的 Pod 资源使用率,并且与创建时设定的值和指标做对比,从而实现自动伸缩的功能。

Metrics Server

在部署 HPA 服务之前,我们需要有一个服务能够让 HPA 获取到 API 格式的指标从而达到扩缩容的目的,这个时候有一个官方推荐的项目就是 Metrics Server。HPA 是通过访问 API 格式的指标内容,如下所示:

https://10.96.0.1/apis/metrics.k8s.io/v1beta1/namespaces/<namespace-name>/pods/<pod-name>

比如当我们访问上面的 API 的时候,我们就可以获取到该 Pod 的资源数据,这些数据其实是来自于 kubelet 的 Summary API 采集而来的。不过需要说明的是我们这里可以通过标准的 API 来获取资源监控数据,并不是因为 Metrics Server 就是 APIServer 的一部分,而是通过 Kubernetes 提供的 Aggregator 汇聚插件来实现的,是独立于 APIServer 之外运行的。

2222.png

安装

因为 Metrics Server 不是 API Server 自带的接口,所以使用 HPA 时需要安装一下这个服务。

我们可以通过官方网站获取这个项目的 Yaml 文件进行部署

# 官方仓库地址:https://github.com/kubernetes-sigs/metrics-serverwget https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.5.1/components.yaml

在部署之前,修改 components.yaml 添加 --kubelet-insecure-tls:

args:
- --cert-dir=/tmp
- --secure-port=443
- --kubelet-insecure-tls
- --kubelet-preferred-address-types=InternalIP

等部署完成后,可以查看 Pod 日志是否正常:

[root@kube01 ~]# kubectl get pod  -n kube-system -l k8s-app=metrics-server
NAME                                     READY   STATUS    RESTARTS      AGE
metrics-server-v0.5.2-678db5756d-qjq6r   2/2     Running   2 (86d ago)   97d

现在我们可以通过 kubectl top 命令来获取到资源数据了,证明 Metrics Server 已经安装成功了。

HPA

HPA 是检测 Pod 里的 request 资源声明来判断是否需要扩缩容的情况,所以使用 HPA 一定要有 requests

apiVersion: apps/v1kind: Deploymentmetadata:
  name: hpa-demospec:
  selector:
    matchLabels:
      app: hpa
  template:
    metadata:
      labels:
        app: hpa
    spec:
      containers:
      - name: nginx
        image: nginx
        ports:
        - containerPort: 80
        resources:
          requests:
            memory: 50Mi
            cpu: 50m

部署完 pod 后,通过 autoscale 快捷创建动态阔缩容

[root@kube01 ~]# kubectl autoscale deployment hpa-demo --cpu-percent=10 --min=1 --max=10

[root@kube01 ~]# kubectl get hpa
NAME       REFERENCE             TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
hpa-demo   Deployment/hpa-demo   0%/10%    1         10        1          8m42s

此命令创建了一个关联资源 hpa-demo 的 HPA,最小的 Pod 副本数为1,最大为10。HPA 会根据设定的 cpu 使用率(10%)动态的增加或者减少 Pod 数量。

创建一个 Pod,进行 CPU 压力测试
[root@kube01 hpa]# kubectl run -it --image busybox test-hpa --restart=Never --rm /bin/sh
/ # while true;do wget -q -O- http://172.30.1.238;done

在进行压力测试的过程中会发现 Pod 压力过大后会自动进行扩容,关掉压力测试后等 5 分钟自动进行缩容,具体扩缩容参数可以在controller-manager中进行设置

[root@kube01 ~]# kubectl get hpa -w
NAME       REFERENCE             TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
hpa-demo   Deployment/hpa-demo   0%/10%    1         10        1          8m47s
hpa-demo   Deployment/hpa-demo   152%/10%   1         10        1          9m
hpa-demo   Deployment/hpa-demo   152%/10%   1         10        4          9m15s
hpa-demo   Deployment/hpa-demo   278%/10%   1         10        8          9m30s
hpa-demo   Deployment/hpa-demo   278%/10%   1         10        10         9m45s
hpa-demo   Deployment/hpa-demo   68%/10%    1         10        10         10m


相关文章

HBase HBCK运维指南

HBase HBCK运维指南

HBase HBCK是HBase运维人员经常会用到的一个HBase运维工具,主要是用于检查 HBase region等元数据一致性以及修复的工具。目前HBCK工具有两个版本,本次主要介绍用于HBase...

MySQL性能优化(五)字符集不一致导致的隐式类型转换

MySQL性能优化(五)字符集不一致导致的隐式类型转换

上一篇文章中,我们介绍了隐式类型转换。这里我们介绍另一种形式的隐式类型转换,由于字符集不一致,导致关联查询无法使用索引。一个例子SELECT *  FROM funds...

大数据基础之HDFS入门

大数据基础之HDFS入门

一、NameNode是整个文件系统的管理节点。它维护着整个文件系统的文件目录树,文件/目录的元信息和每个文件对应的数据块列表。二、NameNode的工作特点Namenode始终在内存中保存meteda...

kafka单条消息过大导致线上OOM

1 线上问题kafka生产者罢工,停止生产,生产者内存急剧升高,导致程序几次重启。查看日志,发现Produce程序爆异常kafka.common.MessageSizeTooLargeExceptio...

Redis 持久化机制 RDB

Redis 持久化机制 RDB

前言Redis 有两种持久化机制,分别是 RDB 与 AOF 本篇文章将介绍 RDB 的执行过程与应用。1. RDB 简介RDB 持久化是把当前进程数据生成快照保存到硬盘的过程,触发 RDB 持久化过...

Hive优化之Spark执行引擎的参数优化(二)

Hive优化之Spark执行引擎的参数优化(二)

        Hive是大数据领域常用的组件之一,主要是大数据离线数仓的运算,关于Hive的性能调优在日常工作和面试中...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。