首页 > 其他分享 >Pod控制器详解(HPA)

Pod控制器详解(HPA)

时间:2022-11-22 21:37:39浏览次数:39  
标签:kubectl dev nginx 详解 master deployment HPA root Pod

Horizontal Pod Autoscaler(HPA)

前面可以实现通过手工执行`kubectl scale`命令实现Pod扩容或缩容,但是这显然不符合Kubernetes的定位目标--自动化、智能化。

Kubernetes期望可以实现通过监测Pod的使用情况,实现pod数量的自动调整,于是就产生了Horizontal Pod Autoscaler(HPA)这种控制器。

HPA可以获取每个Pod利用率,然后和HPA中定义的指标进行对比,同时计算出需要伸缩的具体值,最后实现Pod的数量的调整。

其实HPA与之前的Deployment一样,也属于一种Kubernetes资源对象,它通过追踪分析RC控制的所有目标Pod的负载变化情况,来确定是否需要针对性地调整目标Pod的副本数,这是HPA的实现原理。

接下来,我们来做一个实验

安装metrics-server(v0.3.6)
# 安装git
[root@master ~]# yum install git -y
# 获取metrics-server, 注意使用的版本 [root@master ~]# git clone -b v0.3.6 https://github.com/kubernetes-incubator/metrics-server
# 修改deployment, 注意修改的是镜像和初始化参数 [root@master ~]# cd /root/metrics-server/deploy/1.8+/ [root@master 1.8+]# vim metrics-server-deployment.yaml
按图中添加下面选项 hostNetwork: true image: registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-server-amd64:v0.3.6 args: - --kubelet-insecure-tls - --kubelet-preferred-address-types=InternalIP,Hostname,InternalDNS,ExternalDNS,ExternalIP

# 安装metrics-server

[root@master 1.8+]# kubectl apply -f ./

# 查看pod运行情况

[root@master 1.8+]# kubectl get pod -n kube-system

# 使用kubectl top node 查看资源使用情况

注:刚安装好,metrics-server要先进行数据采集,需要一点儿时间,要稍等一会再执行命令查看

[root@master 1.8+]# kubectl top node
[root@master 1.8+]# kubectl top pod -n kube-system

# 至此,metrics-server安装完成

准备deployment和servie

# 创建deployment

[root@master 1.8+]# kubectl run nginx --image=nginx:1.17.1 --requests=cpu=100m -n dev

注:1.18版本及以后用kubectl run不能创建deployment,建议参考下面操作

用命令创建deployment,生成yaml
生成deployment的yaml文件,并修改资源限制
[root@master ~]# kubectl create deployment nginx --image=nginx:1.17.1 -n dev --dry-run=client -o yaml > nginx.yaml

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

[root@master ~]# kubectl get deploy,pod -n dev

创建service
[root@master ~]# kubectl expose deployment nginx --type=NodePort --port=80 -n dev
[root@master ~]# kubectl get deploy,pod,svc -n dev

部署HPA

创建pc-hpa.yaml文件,内容如下:

apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
  name: pc-hpa
  namespace: dev
spec:
  minReplicas: 1  #最小pod数量
  maxReplicas: 10 #最大pod数量
  targetCPUUtilizationPercentage: 3 # CPU使用率指标,这里限制为3%
  scaleTargetRef:   # 指定要控制的nginx信息
    apiVersion:  apps/v1
    kind: Deployment
    name: nginx

# 创建hpa

[root@master ~]# vim pc-hpa.yaml
[root@master ~]# kubectl create -f pc-hpa.yaml

# 查看hpa

[root@master ~]# kubectl get hpa -n dev

测试

192.168.1.50:32178

这里使用脚本测试

vim test.sh

#!bin/bash
while true
do
curl  192.168.1.50:32178 &> /dev/null
done

chmod 755 test.sh
bash test.sh

hpa变化

[root@master ~]# kubectl get hpa -n dev -w

deployment变化

[root@master ~]# kubectl get deployment -n dev -w

pod变化

[root@master ~]# kubectl get pods -n dev -w

参考

黑马B站k8s课程https://www.bilibili.com/video/BV1Qv41167ck/
https://gitee.com/yooome/golang/blob/main/k8s%E8%AF%A6%E7%BB%86%E6%95%99%E7%A8%8B-%E8%B0%83%E6%95%B4%E7%89%88/k8s%E8%AF%A6%E7%BB%86%E6%95%99%E7%A8%8B.md
https://www.yuque.com/fairy-era/yg511q/xyqxge

标签:kubectl,dev,nginx,详解,master,deployment,HPA,root,Pod
From: https://www.cnblogs.com/gys001/p/16916462.html

相关文章

  • 关于Spring注解的基础详解(补充上次并不清楚的内容)
    注解,需要在.xml文件里面加这么一句话:<context:component-scanbase-package=""/>(组件)Component注解主要用于接口的实现类里面,代替掉.xml文件里面的这句话:(主要作用:代替......
  • Day19:属性封装详解
    属性封装详解封装即隐藏一些数据,让外部不能直接访问,而是需要通过一些方法才能设置或者访问。首先我们来看未封装的属性被外部调用的情况publicclassStudents{//创建一......
  • 一文详解:Quick BI、帆软Fine BI等主流BI软件,各有哪些特点
    近几年,随着数据价值被越来越多企业所重视,商业智能工具市场也迎来了全面大爆发。一时间,市面上各种BI工具层出不穷,导致很多企业在选择BI供应商的时候没了方向,不知道从何决策。......
  • ECharts – 饼状图图代码实例及其注释详解
    mytextStyle={color:"#333",//文字颜色fontStyle:"normal",//italic斜体oblique倾斜fontWeight:"normal",//文字粗细boldbolderl......
  • ABAP CDS注解详解
    系统常量$session.client$session.clientSAP客户端$session.system_date$session.system_date系统时间,SY-DATUM$session.system_language$session.system_l......
  • ECharts – 柱形图代码实例及其注释详解
    mytextStyle={color:"#333",//文字颜色fontStyle:"normal",//italic斜体oblique倾斜fontWeight:"normal",//文字粗细boldbolderl......
  • Docker Compose详解
    使用 DockerComposeDockerCompose是一种用于帮助定义和共享多容器应用程序的工具。使用Compose,我们可以创建一个YAML文件来定义服务,并且使用一个命令,可以启动所有内容......
  • Linux程序编译过程详解
    大家肯定都知道计算机程序设计语言通常分为机器语言、汇编语言和高级语言三类。高级语言需要通过翻译成机器语言才能执行,而翻译的方式分为两种,一种是编译型,另一种是解释型,因......
  • C语言abs和labs函数详解和示例
    文章目录​​1、包含头文件​​​​2、函数声明​​​​3、功能说明​​​​4、示例​​​​5、其它说明​​​​6、获取视频教程​​​​7、版权声明​​C语言提供了一系......
  • C语言rand函数生成随机数详解和示例
    文章目录​​1、生成随机数​​​​2、生成一定范围随机数​​​​3、获取视频教程​​​​4、版权声明​​在C/C++程序开发中,会经常用到随机数这个功能,例如编写游戏类(纸牌......