• 12-k8s-HPA自动扩缩容



    master操作即可

    一、k8s弹性伸缩类型

    1. Cluster-Autoscale: 集群容量(node数量)自动伸缩,跟自动化部署相关的,依赖iaas的弹性伸缩,主要用于虚拟机容器集群
    2. Vertical Pod Autoscaler: 工作负载Pod垂直(资源配置)自动伸缩,如自动计算或调整deployment的Pod模板limit/request,依赖业务历史负载指标
    3. Horizontal-Pod-Autoscaler: 工作负载Pod水平自动伸缩,如自动scale deployment的replicas,依赖业务实时负载指标

    二、HPA原理

    HPA在k8s中也由一个controller控制,controller会间隔循环HPA,检查每个HPA中监控的指标是否触发伸缩条件,默认的间隔时间为15s。一旦触发伸缩条件,controller会向k8s发送请求,修改伸缩对象(statefulSet、replicaController、replicaSet)子对象scale中控制pod数量的字段。k8s响应请求,修改scale结构体,然后会刷新一次伸缩对象的pod数量。伸缩对象被修改后,自然会通过list/watch机制增加或减少pod数量,达到动态伸缩的目的。

    三、metrics-server插件

    1. 概念:用来收集K8s集群中的资源使用情况。每15秒进行一次数据采集(可以通过-horizontal-pod-autoscaler-sync-period修改查询metrics的资源使用情况),占用资源少,每个Node占用1 mili core的CPU和2 MB内存,目前只能对CPU和内存进行监控

    2. 下载yaml文件:wget https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.6.1/components.yaml

    3. 修改yaml文件配置:vi components.yaml

      1. 注释- --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname
         在底下添加
         - --kubelet-preferred-address-types=InternalIP,Hostname,InternalDNS,ExternalDNS,ExternalIP    # node address类型的优先权设置
         - --kubelet-insecure-tls    # 取消安全验证 
      2. 注释image: registry.k8s.io/metrics-server/metrics-server:v0.6.3
         在底下添加
         image: registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-server:v0.6.1
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
    4. 部署:kubectl apply -f components.yaml

    5. 查看pod:kubectl get pod -n kube-system
      在这里插入图片描述

    6. 查看资源使用情况:

      1)kubectl top node
      在这里插入图片描述

      2)kubectl top pod -n kube-system

      ps:查看全部空间的命令为kubectl top pod --all-namespaces
      在这里插入图片描述

    四、创建nginx提供负载测试

    1. 创建yaml:vi /opt/pod-controller.yaml

      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: pod-controller
        labels:
          controller: deploy 
      spec:
        replicas: 1
        selector:
          matchLabels:
            app: nginx-pod
        template:
          metadata:
            labels:
              app: nginx-pod
          spec:
            containers:
              - name: nginx
                image: nginx:latest
                ports:
                  - name: nginx-port
                    containerPort: 80
                    protocol: TCP
                resources: # 要设置每个容器最低使用的CPU,不然测试不出效果
                  requests:
                    cpu: "0.1"
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      • 22
      • 23
      • 24
      • 25
      • 26
    2. 创建pod:kubectl apply -f /opt/pod-controller.yaml

    3. 暴露端口:kubectl expose deployment pod-controller --name=nginx-service --type=NodePort --port=80 --target-port=80

    4. 查看端口:kubectl get svc
      在这里插入图片描述

    5. 访问:http://192.168.248.11:31409/

    五、部署HPA

    1. 新建pod-hpa.yaml:vi /opt/pod-hpa.yaml

      ps:也可以直接设置控制器的资源限制:kubectl autoscale deploy 控制器 --cpu-percent=3 --min=1 --max=10

      apiVersion: autoscaling/v1
      kind: HorizontalPodAutoscaler
      metadata:                                 
        name: pod-hpa                             # hpa的名称
        labels:
          controller: hpa                         # 给hpa打标签
      spec:
        minReplicas: 1                            # 缩容最小Pod数量
        maxReplicas: 10                           # 扩容最大Pod数量
        targetCPUUtilizationPercentage: 3         # 为了便于测试,这里设置CPU使用率警戒线为3%
        scaleTargetRef:                           # 指定要控制的Deployment的信息
          apiVersion: apps/v1
          kind: Deployment
          name: pod-controller
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
    2. 创建pod:kubectl apply -f /opt/pod-hpa.yaml

    3. 查看HPA: kubectl get hpa
      在这里插入图片描述

    4. 查看服务pod个数:kubectl get deploy pod-controller -o wide
      在这里插入图片描述

    5. 使用postman测压工具不断访问:http://192.168.248.11:31409/
      在这里插入图片描述

  • 相关阅读:
    搜索结果处理
    大容量疯了!居然想把磁带放到硬盘,100TB+是否可以实现?
    浅谈CDN内容分发与全局负载均衡
    Python学习十二:Flask框架
    时间复杂度吐血总结
    神经元的计算
    net/http库中request.RemoteAddr的值不确定性-【Golang踩坑笔记】
    潮玩宇宙源码开发:开启全新的数字潮流时代
    探讨:围绕 props 阐述 React 通信
    Linux系统如何重装Windows系统
  • 原文地址:https://blog.csdn.net/weixin_40496191/article/details/133870710