首页 > 其他分享 >Horizontal Pod Autoscaler(HPA)

Horizontal Pod Autoscaler(HPA)

时间:2023-03-26 20:46:14浏览次数:37  
标签:kubectl k8s hpa nginx Running 58ddb65c8d Pod Horizontal HPA

目录

环境

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

接口类型

  • HPA v1为稳定版自动水平伸缩,只支持CPU指标
  • V2为beta版本,分为v2beta1(支持CPU、内存和自定义指标)
  • v2beta2(支持CPU、内存、自定义指标Custom和额外指标ExternalMetrics)
$ kubectl get apiservices |grep autoscal
v1.autoscaling                         Local                        True        88d
v2beta1.autoscaling                    Local                        True        88d
v2beta2.autoscaling                    Local                        True   

创建HPA deployment

[root@k8s-master01 ~]$ kubectl create deployment hpa-nginx --image=registry.cn-beijing.aliyuncs.com/dotbalo/nginx  --dry-run=client -oyaml > hpa-nginx.yaml
[root@k8s-master01 ~]$ vim hpa-nginx.yaml 

##container下设置pod资源
    spec:
      containers:
      - image: registry.cn-beijing.aliyuncs.com/dotbalo/nginx
        name: nginx
        resources:
          requests:
            cpu: 10m
#创建deployment
[root@k8s-master01 ~]$ kubectl create -f hpa-nginx.yaml 
deployment.apps/hpa-nginx created
[root@k8s-master01 ~]$ kubectl  top po
NAME                         CPU(cores)   MEMORY(bytes)   
busybox                      0m           0Mi             
hpa-nginx-58ddb65c8d-5cs9h   1m           6Mi             

创建HPA对象

最小副本1,最大副本10,cpu超过10%自动扩容,小于10%自动缩容

[root@k8s-master01 ~]$ kubectl autoscale deployment hpa-nginx --cpu-percent=10 --min=1 --max=10
horizontalpodautoscaler.autoscaling/hpa-nginx autoscaled
[root@k8s-master01 ~]$ kubectl get hpa
NAME        REFERENCE              TARGETS         MINPODS   MAXPODS   REPLICAS   AGE
hpa-nginx   Deployment/hpa-nginx   <unknown>/10%   1         10        0          6s
#等待一会设置成功TARGETS状态改变
[root@k8s-master01 ~]$ kubectl get hpa
NAME        REFERENCE              TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
hpa-nginx   Deployment/hpa-nginx   0%/10%    1         10        1          8m24s

模拟触发自动扩缩容

暴露服务端口:
$ kubectl expose deployment hpa-nginx --port=80
设置循环请求:
$ while true; do wget -q -O- http:// 172.25.244.241 > /dev/null; done

#此时cpu飙升,触发扩容
[root@k8s-master01 ~]$ kubectl top po
NAME                         CPU(cores)   MEMORY(bytes)   
busybox                      0m           0Mi             
hpa-nginx-58ddb65c8d-5cs9h   78m          6Mi
[root@k8s-master01 ~]$ kubectl get hpa
NAME        REFERENCE              TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
hpa-nginx   Deployment/hpa-nginx   79%/10%   1         10        10         15m     
[root@k8s-master01 ~]$ kubectl get po
NAME                         READY   STATUS              RESTARTS   AGE
busybox                      1/1     Running             110        88d
hpa-nginx-58ddb65c8d-4pp59   1/1     Running             0          11s
hpa-nginx-58ddb65c8d-4znxs   0/1     ContainerCreating   0          26s
hpa-nginx-58ddb65c8d-5cs9h   1/1     Running             0          17m
hpa-nginx-58ddb65c8d-627f4   1/1     Running             0          11s
hpa-nginx-58ddb65c8d-97kbf   0/1     ContainerCreating   0          11s
hpa-nginx-58ddb65c8d-cjblq   0/1     ContainerCreating   0          11s
hpa-nginx-58ddb65c8d-ds758   1/1     Running             0          26s
hpa-nginx-58ddb65c8d-t44gh   1/1     Running             0          26s


#停止循环,自动缩容
[root@k8s-master01 ~]$ kubectl get po -l  app=hpa-nginx -w
NAME                         READY   STATUS    RESTARTS   AGE
hpa-nginx-58ddb65c8d-4pp59   1/1     Running   0          6m33s
hpa-nginx-58ddb65c8d-4znxs   1/1     Running   0          6m48s
hpa-nginx-58ddb65c8d-5cs9h   1/1     Running   0          23m
hpa-nginx-58ddb65c8d-627f4   1/1     Running   0          6m33s
hpa-nginx-58ddb65c8d-97kbf   1/1     Running   0          6m33s
hpa-nginx-58ddb65c8d-cjblq   1/1     Running   0          6m33s
hpa-nginx-58ddb65c8d-ds758   1/1     Running   0          6m48s
hpa-nginx-58ddb65c8d-p7dmv   1/1     Running   0          6m17s
hpa-nginx-58ddb65c8d-pkdf4   1/1     Running   0          6m17s
hpa-nginx-58ddb65c8d-t44gh   1/1     Running   0          6m48s
hpa-nginx-58ddb65c8d-97kbf   1/1     Terminating   0          9m40s
hpa-nginx-58ddb65c8d-cjblq   1/1     Terminating   0          9m40s
hpa-nginx-58ddb65c8d-ds758   1/1     Terminating   0          9m55s
hpa-nginx-58ddb65c8d-pkdf4   1/1     Terminating   0          9m24s
hpa-nginx-58ddb65c8d-4pp59   1/1     Terminating   0          9m40s
hpa-nginx-58ddb65c8d-627f4   1/1     Terminating   0          9m40s
[root@k8s-master01 ~]$ kubectl get po
NAME                         READY   STATUS    RESTARTS   AGE
busybox                      1/1     Running   110        88d
hpa-nginx-58ddb65c8d-5cs9h   1/1     Running   0          29m

标签:kubectl,k8s,hpa,nginx,Running,58ddb65c8d,Pod,Horizontal,HPA
From: https://www.cnblogs.com/xgg123/p/17259472.html

相关文章

  • 搜索面板和过滤数据(SearchPanel)
    搜索面板和过滤数据(SearchPanel)行政2023年3月2日约3分钟DBGridEh可以显示一个特殊的面板来搜索和过滤网格中的数据。在搜索模式下,网格在所有网格单元格中以......
  • iphone5s 耳机更换插头 EarPods change jack
    iphone5s耳机使用了不到两年,出现了接头接触不良,话筒线短路的状况,经常自动出现暂停或者siri。买了一个新耳机,这几天有时间,把旧耳机修好了,更换了一个新的插头。首先用小刀划......
  • 通过shell脚本更新DNSPOD域名
      #请先检查本机是否有安装jq#可通过命令yuminstalljq-y或apt-getinstalljq安装#登录dnspod#在用户管理-密钥管理-创建密钥#记录ID和TokenID=XX......
  • 在k8s集群中,如何知道某个pod ip段,是属于哪个主机的?
    问题:你如何才能知道,k8s集群中,某个pod网段是属于节点的? 有两种方法,可以轻松获取到pod网段所在的主机信息... 方法一:通过kubectlgetpod-owide来查看[root@ncc......
  • Python 和 Podman
    Python和Podman 1.Windows10上安装Python开始在Windows上使用Python(初学者)2.使用pipPython的MicrosoftStore安装包括pip(标准包管理器)。通过pip......
  • chrome谷歌浏览器崩溃无法使用(错误代码:Crashpad_FailedToCaptureProcess)
    错误代码:Crashpad_FailedToCaptureProcess 解决方法:1。点击chrome浏览器快捷图标,然后右击选择属性。  2。在目标位置后面先打一个空格,然后后面加上--test-type......
  • MacOS 安装Podman 替代Docker
    一、安装下载地址:https://github.com/containers/podman/blob/main/DOWNLOADS.md桌面版:https://podman-desktop.io/docs/getting-started/getting-started$brewinstal......
  • k8s通过deployment创建pod失败排查
    k8s集群中,deployment启动后没有成功创建pod,通过“kubectldescribedeployment${DEPLOY_NAME}”,看到如下日志,只看到“ReplicaFailureTrueFailedCreate”,但是没有failed......
  • 不背锅运维:选择辅助容器还是另外拉起监控Pod?
    监控方案方案一对于一个Pod中只有一个业务容器的情况,可以考虑在该Pod中增加一个辅助容器,来完成对业务容器的监控。辅助容器可以使用各种监控工具的采集器,如Prometheu......
  • 18、Pod资源限制
    1、基础知识1.1、需求Kubernetes是分布式的容器管理平台,所有资源都有Node节点提供,而Node节点上运行着很多Pod业务有很多,在一个项目中,有的业务占用的资源比重大,有的小,想......