K8s:HPA控制器

HPA控制器

1、作用
实现层面:
node级别的资源伸缩、需要配合公有云。(node伸缩:https://github.com/kubernetes/autoscaler)
pod级别

功能及作用:
1、自动对pod副本的弹性伸
2、提高响应时间
3、pod数量动态、不需要人工干预(根据业务数量扩容:业务高峰期自动扩容、低峰期自动缩容)
4、


好处:
降低业低峰期的消耗、降资源成本、云主机资源成本(删除pod或者node)。


支持类型:Statefulset、deployment、ReplicaSet、Replication Controller 、Replica set
不支持流行:Daemonset
2、伸缩配置

伸缩类型

HPA水平:横向扩展、增加pod副本
VPA垂直:对pod资源利用率调整对单个pod的资源限制
Cluster Autoscaler CA 集群扩容

定义伸缩规则

根据伸缩配置信息定义规则:

间隔时间:查看pod的cpu和内存使用指标是多少
缩容间隔周期:默认五分钟
HPA同步副本数的生命周期
初始化pod延迟时间、默认五分钟

3、扩容公式
三个pod

CPU:50%的规则扩容 


3个相加/3=80/50=1.6-1=0.6 >0.1     
扩容:0.6*3=1.8  (浮点数就取整、大于当前一位的浮点数)

4、部署
#安装:(官方下载)
https://github.com/kubernetes-sigs/metrics-server/releases

1.26.3		#k8s版本
v0.6.3		#metrics-server

###1. 下载最新版 的配置文件包
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.6.3/components.yaml

###2、拉取镜像
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-server:v0.6.3

###3、修改配置文件,更改image配置
修改yaml文件的deployment部分,添加- --kubelet-insecure-tls,然后重新apply yaml文件

containers:
- args:
  - --cert-dir=/tmp
  - --secure-port=4443
  - --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname
  - --kubelet-use-node-status-port
  - --metric-resolution=15s
  - --kubelet-insecure-tls  #增加证书忽略
  image: registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-server:v0.6.3 #修改image为阿里云下载的这个
  
###4、应用下配置文件
kubectl apply -f   components.yaml

###5、最后查看
kubectl get pods -n kube-system
5、编写伸缩配置文件yaml
###创建hpa控制器
1、定义api
2、定义类型(HAP控制器)
3、定义名称(HPA控制器必须和pod在同一namespace)(对哪些pod生效、就必须在一个namespace)
4、类型、对什么类型的控制器伸缩(必须指定deployment)

yaml文件

###1、先创建tomcat的pod(镜像拉取从私有仓库)
###2、然后创建hpa控制器(hpa控制器优先级高于deployment控制器)
magedu-tomcat-app1-deployment		###pod的控制器名称

###1111111
kind: Deployment
#apiVersion: extensions/v1beta1
apiVersion: apps/v1
metadata:
  labels:
    app: magedu-tomcat-app1-deployment-label
  name: magedu-tomcat-app1-deployment				###deployment控制器
  namespace: magedu
spec:
  replicas: 3										###副本数量
  selector:
    matchLabels:
      app: magedu-tomcat-app1-selector
  template:
    metadata:
      labels:
        app: magedu-tomcat-app1-selector
    spec:
      containers:
      - name: magedu-tomcat-app1-container
   											####下面是两个容器(一个tomcat、一个压力测试的)
        image: registry.cn-hangzhou.aliyuncs.com/docker-jigaobo/tomcat:7.0.93-alpine
        #image: registry.cn-hangzhou.aliyuncs.com/docker-jigaobo/docker-stress-ng
        #args: ["--vm", "2", "--vm-bytes", "256M"]
        ##command: ["/apps/tomcat/bin/run_tomcat.sh"]
        imagePullPolicy: IfNotPresent
        ##imagePullPolicy: Always
        ports:
        - containerPort: 8080
          protocol: TCP
          name: http
        env:
        - name: "password"
          value: "123456"
        - name: "age"
          value: "18"
        resources:
          limits:
            cpu: 1
            memory: "512Mi"
          requests:
            cpu: 500m
            memory: "512Mi"

---
kind: Service
apiVersion: v1
metadata:
  labels:
    app: magedu-tomcat-app1-service-label
  name: magedu-tomcat-app1-service
  namespace: magedu
spec:
  type: NodePort
  ports:
  - name: http
    port: 80
    protocol: TCP
    targetPort: 8080
    #nodePort: 40003
  selector:
    app: magedu-tomcat-app1-selector



###222
#apiVersion: autoscaling/v2beta1
apiVersion: autoscaling/v1 
kind: HorizontalPodAutoscaler
metadata:
  namespace: magedu
  name: magedu-tomcat-app1-deployment
  labels:
    app: magedu-tomcat-app1
    version: v2beta1
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    #apiVersion: extensions/v1beta1 
    kind: Deployment						####hpa扩容的资源类型
    name: magedu-tomcat-app1-deployment
  minReplicas: 4							###hap最小数量(权重高于deployment控制器)
  maxReplicas: 10							###扩容的最大数量
  targetCPUUtilizationPercentage: 60
  #metrics:				###根据Prometheus指标实现hpa
  #- type: Resource
  #  resource:
  #    name: cpu
  #    targetAverageUtilization: 60
  #- type: Resource
  #  resource:
  #    name: memory

测试伸缩到10个pod

修改tomcat镜像换成cpu飙升镜像


然后使用kubectl top pod  -n  magedu   (注意:有的pod会pending状态、内存使用完了)

最后修改副本数量为5个、来控制、把压力测试工具去掉。

注意:内存被占用完成之后可能node节点会出问题、kubelet可能都没内存了(重启节点、然后启动kubelet)

6、查看
查看命令
kubectl  get  hpa  -n  myserver

注意:hpa控制器优先级高于deployment控制器(副本数量按照hpa控制器)

查看
kubectl  get  deployments.apps -n magedu   pod-name
kubectl  describe  deployments.apps -n magedu   pod-name

查看资源
kubectl  api-resources  | grep me
kubectl  api-versions


posted @ 2024-08-09 10:05  姬高波  阅读(71)  评论(0)    收藏  举报