k8s监控数据组件Pod自动化进行扩缩容HPA

自动扩缩容HPA:全称是Horizontal Pod Autoscaler

我们安装k8s集群的时候,安装过一个metrics-server的组件,这是一个监控数据组件,提供HPA和基础资源监控的能力。就是这面这个Pod:

[root@k8s-master01 ~]# kubectl get pod -n kube-system
metrics-server-6bf7dcd649-5fhrw            1/1     Running   2 (3d5h ago)   8d

通过这个组件可以看到节点或者Pod的内存和CPU的使用率:

[root@k8s-master01 ~]# kubectl top pod -A
NAMESPACE              NAME                                         CPU(cores)   MEMORY(bytes)
default                busybox                                      0m           0Mi
kube-system            calico-kube-controllers-5dffd5886b-4blh6     3m           18Mi
kube-system            calico-node-fvbdq                            42m          135Mi
kube-system            calico-node-g8nqd                            52m          73Mi

除了可以进行简单的监控功能,还可以利用这个监控的数据做一些其他的操作。

比如我们可以给Pod的资源设定某个值,当资源的使用超过这个值,那么系统就会认为这个Pod当前存在压力,从而就行扩容。

一般使用CPU和自定义指标进行扩容,内存相对较少。

HPA实践:

注意事项:要想实现HPA的自动扩容,需要满足以下几个条件

  • 必须安装metrics-server组件或其他自定义版本的metrics-server
  • 必须配置requests参数
  • 不能扩容无法缩放的对象,如DaemonSet

首先创建一个nginx的yaml文件:

kubectl create deployment hpa-nginx --image=nginx --dry-run=client -o yaml > hpa-nginx.yaml

然后进入yaml文件中进行配置:在配置镜像那里进行配置,下列代码的后三行,如果也想对基于内存扩容的话也可以将内存写上。

resources:是资源的意思

requests:是请求的意思,这里应该是请求资源的意思

    spec:
      containers:
      - image: nginx
        name: nginx
        resources:
          requests:
            cpu: 10m

执行yaml文件创建副本:

[root@k8s-master01 ~]# kubectl create -f hpa-nginx.yaml
deployment.apps/hpa-nginx created

暴露出一个service端口:

[root@k8s-master01 ~]# kubectl expose deployment hpa-nginx --port=80
[root@k8s-master01 ~]# kubectl get svc
NAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)   AGE
hpa-nginx    ClusterIP   10.98.236.134   <none>        80/TCP    3m17s
kubernetes   ClusterIP   10.96.0.1       <none>        443/TCP   8d

访问测试一下:证明这个Pod可以用了

[root@k8s-master01 ~]# curl 10.98.236.134
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/" rel="external nofollow"   >nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/" rel="external nofollow"   >nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

配置Hpa自动扩缩容的规则:这条命令是说当hpa-nginx这个Pod的cpu值达到10的时候,将进行自动扩容,最小扩容1个,最大扩容10个。

[root@k8s-master01 ~]# kubectl autoscale deployment hpa-nginx --cpu-percent=10 --min=1 --max=10
horizontalpodautoscaler.autoscaling/hpa-nginx autoscaled

看一下hpa的规则情况:

[root@k8s-master01 ~]# kubectl get hpa
NAME        REFERENCE              TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
hpa-nginx   Deployment/hpa-nginx   0%/10%    1         10        1          2m38s

下面进行一个循环访问hpa-nginx:观察hpa的cpu值会不会上升

[root@k8s-master01 ~]# while true; do wget -q -O- http://10.98.236.134 >/dev/null; done

观察是否已经进行扩容:可以看到hpa-nginx的副本数已经进行了自动扩容

[root@k8s-master01 ~]# kubectl get hpa
NAME        REFERENCE              TARGETS    MINPODS   MAXPODS   REPLICAS   AGE
hpa-nginx   Deployment/hpa-nginx   640%/10%   1         10        1          7m14s
[root@k8s-master01 ~]# kubectl top pod
NAME                        CPU(cores)   MEMORY(bytes)
busybox                     0m           0Mi
hpa-nginx-bd88bdd8f-7gdwq   1m           3Mi
hpa-nginx-bd88bdd8f-8c6j6   1m           3Mi
hpa-nginx-bd88bdd8f-cfcjs   1m           7Mi
hpa-nginx-bd88bdd8f-h8vx7   74m          7Mi
hpa-nginx-bd88bdd8f-kpgl8   2m           3Mi
hpa-nginx-bd88bdd8f-lpf45   1m           3Mi
hpa-nginx-bd88bdd8f-lwc2h   1m           3Mi
hpa-nginx-bd88bdd8f-qkgfd   1m           3Mi
hpa-nginx-bd88bdd8f-t9fj9   1m           3Mi
hpa-nginx-bd88bdd8f-tbrl4   1m           7Mi

那么,接下来将访问测试停下,看副本是否会自动缩容到最初;等待一会发现副本回到了最原始的一个。注意这个时间可能会有点慢,稍微等一会,不是报错了。

[root@k8s-master01 ~]# kubectl get hpa
NAME        REFERENCE              TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
hpa-nginx   Deployment/hpa-nginx   2%/10%    1         10        10         11m
[root@k8s-master01 ~]# kubectl get pod
NAME                        READY   STATUS    RESTARTS       AGE
busybox                     1/1     Running   26 (46m ago)   8d
hpa-nginx-bd88bdd8f-h8vx7   1/1     Running   0              27m

这个功能虽然好用,但在实际生成中一定要结合实际的情况使用!!!

以上就是监控数据组件Pod自动化进行扩缩容-HPA的详细内容,更多关于Pod自动化扩缩容HPA的资料请关注我们其它相关文章!

(0)

相关推荐

  • 详解kubernetes pod的编排和生命周期

    目录 K8S Master基本架构 Pod的编排思想 Pod对象的属性和容器的属性? Pod的生命周期 K8S Master基本架构 K8S的集群运行依赖Master节点和Node节点的通信,为了更好的理解第4部分的Pod生命周期,我们这里先给出K8S Master的简单架构图,后续的文章中,我们会分析Master.Node和Pod之间的关系. Master的架构图: 其中: API Server提供了HTTP Rest接口,它是k8s中的所有资源增删改查的唯一入口,也是集群控制的入口: Sch

  • 升级到mac 10.10之后使用pod出现问题的解决方法

    最新对mac 10.10的强大功能好奇,于是将系统升级到了10.10,结果发现使用pod出现了下面的问题: /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/rubygems/core_ext/kernel_require.rb:55:in `require': cannot load such file -- xcodeproj/prebuilt/universal.x86_64-darwin14

  • 云原生技术kubernetes调度单位pod的使用详解

    k8s中的最小调度单位---pod 之前的文章中,我们对k8s能够解决的问题做了简单介绍,简单来说,它解决的问题是容器的编排与调度,它的核心价值在于:运行在大规模集群的任务之间,实际上存在着各种各样的关系,这些关系的处理,才是任务编排和系统管理最困难的地方,k8s就是为了这个问题而生的. 这句话比较难理解,我们从已有的知识入手,抽丝剥茧,慢慢理解它.我们已经知道,容器的本质是一个进程,它包含三个部分: 如果说容器是云环境的一个进程,那么你可以将k8s理解成云环境中的一个操作系统. 在一个操作系统

  • 如何在kubernetes中创建Pod

    目录 如何创建Pod? kubectl工具 如何创建Pod? 在之前的文章中,我们介绍了容器和Pod的区别和关系.我们知道Pod是k8s调度的最小单位,而一个Pod中可以有多个容器,那么我们如何来定义一个我们自己的Pod呢? 在k8s中,我们通常使用编写配置文件的方式创建一个Pod,配置文件的格式通常采用yaml格式,(yaml格式如何表示list.key-value键值对,这些知识在前一篇文章中说过了),编写好yaml文件之后,通过下面的办法来启动一个Pod: kubectl create -

  • k8s监控数据组件Pod自动化进行扩缩容HPA

    自动扩缩容HPA:全称是Horizontal Pod Autoscaler 我们安装k8s集群的时候,安装过一个metrics-server的组件,这是一个监控数据组件,提供HPA和基础资源监控的能力.就是这面这个Pod: [root@k8s-master01 ~]# kubectl get pod -n kube-system metrics-server-6bf7dcd649-5fhrw 1/1 Running 2 (3d5h ago) 8d 通过这个组件可以看到节点或者Pod的内存和CPU

  • k8s中如何实现pod自动扩缩容详解

    目录 k8s应用自动扩缩容概述 为什么要自动扩缩容 扩缩容分类 按对象层面 按方式分类 如何实现自动扩缩容 HPA运作方式 指标信息来源 部署HPA实现pod自动扩缩容 数据采集组件metrics-server 概述 部署 测试环境准备 创建php-apache服务 创建nginx服务 HPA基于cpu自动扩缩容 创建HPA基于cpu自动扩缩容 压测php-apache服务,看扩容 停止对 php-apache 服务压测,看缩容 HPA基于内存自动扩缩容 创建HPA基于内存自动扩缩容 压测ngi

  • Python调用Prometheus监控数据并计算

    目录 Prometheus是什么 Prometheus基础概念 什么是时间序列数据 什么是targets(目标) 什么是metrics(指标) 什么是PromQL(函数式查询语言) 如何监控远程Linux主机 Prometheus HTTP API 支持的 API 认证方法 数据返回格式 数据写入 监控数据查询 什么是Grafana 工作使用场景 CPU峰值计算 CPU均值计算 内存峰值计算 内存均值计算 导出excel 参考链接: Prometheus是什么 Prometheus是一套开源监控

  • SpringCloud之监控数据聚合Turbine的实现

    前言 SpringCloud 是微服务中的翘楚,最佳的落地方案. 使用 SpringCloud 的 Hystrix Dashboard 组件可以监控单个应用服务的调用情况,但如果是集群环境,可能就 不能满足需求了,这时就用到了 SpringCloud 另一个组件:Turbine. Turbine 将每个应用服务的调用情况聚合在一起展示出来. 如果了解过 Hystrix Dashboard,那么可以简单认为 Turbine 就相当于另起了一个工程,把其他工程的监控情况 全部显示到了 Turbine

  • kubernetes k8s入门定义一个Pod

    目录 什么是Pod? 为什么要引入Pod? 定义一个Pod:pod.yaml Pod探针: Pod探针检测方式: Pod退出流程 什么是Pod? pod是kubernetes中最小的单元,由一组.一个或多个容器组成,每个pod中包含了一个pause容器. pause容器是pod的父容器,主要负责僵尸进程的回收管理,通过pause容器可以使同一个pod中多个容器共享存储.网络.PID.IPC等,同一个Pod中多容器间访问仅通过localhost就可以通信. 为什么要引入Pod? 将有强依赖性的容器

  • 浅析k8s中各组件和kube apiserver通信时的认证和鉴权问题

    目录 背景 kubectl的身份和权限 kubectl用的是什么身份? 能操作哪些资源呢? kube-scheduler的身份和权限 kube-scheduler用的是什么身份? kubelet的身份和权限 kubelet用的是什么身份? kubelet能操作哪些资源? 验证kubelet的权限 calico calico用的是什么身份? pod pod用的是什么身份? 总结 背景 和master节点kube api-server通信的组件有很多,包括: kubelet calico sched

  • vue2.0 获取从http接口中获取数据,组件开发,路由配置方式

    vue 2.0 从接口中获取数据 <template> <div id="admins"> <h1>I am a title.</h1> <a> written by {{ author }} </a> <div v-for="admin in users"> {{admin.name}}<br>{{admin.password}} </div> </d

  • Vue按时间段查询数据组件使用详解

    本文实例为大家分享了Vue按时间段查询数据组件的具体使用代码,供大家参考,具体内容如下 首先是前端效果: 界面代码如下: <template> <a-col :md="6" :sm="10"> <a-form-item label="执行时间" :labelCol="labelCol" :wrapperCol="wrapperCol"> <a-range-picke

  • vue 实现基础组件的自动化全局注册

    参考官网:https://cn.vuejs.org/v2/guide/components-registration.html 在日常开发中,有一些组件是比较常用,但是为了避免在开发过程中不停地引入,或者在main.js中注册,,或者每添加一个组件就需要手动注册一次.则直接进行自动化全局注册. 自动化全局注册,官网上都详细的说明,以下是自己官网的说明基础上进行了一个demo开发实例: 1.自定义文件夹: 在src下新建一个components文件夹,用于存放组件.并新建一个用于存放需要自动化全局

  • CZGL.ProcessMetrics处理监控数据的三种方式介绍

    目录 导读 三种方式处理监控数据 主动推送 ASP.NET Core 自定义URL .NET diagnostics 自定义监控指标 导读 CZGL.ProcessMetrics 是一个 Metrics 库,能够将程序的 GC.CPU.内存.机器网络.磁盘空间等信息记录下来,使用 Prometheus 采集信息,然后使用 Grafana 显示. 周日花了时间把这个库更新,修复了一些 Bug,增加了一些有趣的功能,支持多服务器多应用,支持 wpf.winfrom..NET Core 等应用,在不需

随机推荐