zoukankan      html  css  js  c++  java
  • kubernetes自动扩缩容[HPA控制器 horizontal pod autoscaler]

    kubernetes自动扩缩容[HPA控制器 horizontal pod autoscaler]

    #查看当前hpa控制器版本:
    [root@k8s-master01 ~]# kubectl get apiservices |grep autosca
    v1.autoscaling                         Local                        True        17d
    v2beta1.autoscaling                    Local                        True        17d
    v2beta2.autoscaling                    Local                        True        17d
    
    
    #版本区别  
    v1.autoscaling        : v1是稳定版本,支持自定义cpu指标
    v2beta1.autoscaling   : v2bata版本,v2beta1{支持cpu,内存和自定义指标}
    v2beta2.autoscaling   : v2beta2版本(支持cpu,内存,自定义指标 custom和额外指标ExternalMerics)
    

    HPA实践

    #注意: daemonset是不支持自动扩容的 因为他是在每一个节点部署一个服务,无法自动扩缩容
    #使用HPA的前提,必须安装metrics-server或同等效果的服务器指标采集插件
    #必须配置requests
    
    #命令创建一个deployment
    kubectl create deployment nginx --image=nginx
    kubectl expose deployment nginx --port=80 --target-port=80 --type=NodePort
    
    
    
    #1. 创建一个deployment,并暴露service端口80
    kubectl create deployment hpa-nginx --image=registry.cn-beijing.aliyuncs.com/dotbalo/nginx --dry-run=client -oyaml >hpa-nginx.yaml
    
    #2. 添加resources参数:
    resources:
      cpu: 10m
      
    # hpa-nginx.yaml 整个结果如下:
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      creationTimestamp: null
      labels:
        app: hpa-nginx
      name: hpa-nginx
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: hpa-nginx
      strategy: {}
      template:
        metadata:
          creationTimestamp: null
          labels:
            app: hpa-nginx
        spec:
          containers:
          - image: registry.cn-beijing.aliyuncs.com/dotbalo/nginx
            name: nginx
            resources: 
              resources:
                cpu: 10m
    status: {}
    
    #3.yaml保存为 hpa-nginx.yaml 并执行
    [root@k8s-master01 pod]# kubectl create -f hpa-nginx.yaml 
    deployment.apps/hpa-nginx created
    
    
    
    #3. 查看deployment状态
    [root@k8s-master01 pod]# kubectl get pod -o wide
    NAME         READY  STATUS   REST  AGE  IP              NODE         NOMINATED NODE    READINESS GATE
    hpa-nginx-w  1/1    Running  0     2m3s 172.27.14.232   k8s-node02   <none>            <none>
    
    
    
    #4 检查访问
    [root@k8s-master01 pod]# curl 172.27.14.232
    <!DOCTYPE html>
    <html>
    <head>
    <title>Welcome to nginx!</title>
    <style>
        body {
             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/">nginx.org</a>.<br/>
    Commercial support is available at
    <a href="http://nginx.com/">nginx.com</a>.</p>
    
    <p><em>Thank you for using nginx.</em></p>
    </body>
    </html>
    
    
    #5. 检查pod状态指标
    [root@k8s-master01 pod]# kubectl top pod --use-protocol-buffers
    NAME                         CPU(cores)   MEMORY(bytes)   
    hpa-nginx-58ddb65c8d-mvt9f   0m           4Mi             
    nginx-server                 0m           9Mi             
    web-0                        0m           9Mi             
    web-1                        0m           10Mi            
    web-2                        0m           10Mi            
    
    
    # 6. 添加自动扩缩容配置
    [root@k8s-master01 pod]# kubectl autoscale deployment hpa-nginx --cpu-percent=10 --min=1 --max=10
    horizontalpodautoscaler.autoscaling/hpa-nginx autoscaled
    
    
    #检查配置:
    [root@k8s-master01 pod]# kubectl get hpa
    NAME        REFERENCE              TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
    hpa-nginx   Deployment/hpa-nginx   0%/10%    1         10        1          2m5s
    
    
    [root@k8s-master01 pod]# kubectl get pod -o wide
    NAME         READY  STATUS   RESTARTS  AGE  IP             NODE       NOMINATED NODE  READINESS GATES  
    hpa-nginx    1/1    Running  0         13m  172.27.14.232  k8s-node02 <none>          <none>
    nginx-server 1/1    Running  0         114m 172.17.125.21  k8s-node01 <none>          <none>
    web-0        1/1    Running  0         28h  172.17.125.35  k8s-node01 <none>          <none>
    web-1        1/1    Running   0        28h  172.27.14.233  k8s-node02 <none>          <none>
    web-2        1/1    Running   0        28h  172.27.14.226  k8s-node02 <none>          <none>
    
    
    
    #另外开启一个窗口 开始压力测试
    while true; do wget -q -O- http://172.27.14.232 > /dev/null; done
    
    
    # 隔一段时间 检查压力:
    [root@k8s-master01 pod]# kubectl get hpa
    NAME        REFERENCE              TARGETS    MINPODS   MAXPODS   REPLICAS   AGE
    hpa-nginx   Deployment/hpa-nginx   750%/10%   1         10        8          18m
    
    
    
    #检查hpa扩缩容得情况:
    [root@k8s-master01 pod]# kubectl get pod
    NAME                         READY   STATUS    RESTARTS   AGE
    hpa-nginx-58ddb65c8d-68tf9   1/1     Running   0          47s
    hpa-nginx-58ddb65c8d-99rdt   1/1     Running   0          47s
    hpa-nginx-58ddb65c8d-c64h2   1/1     Running   0          47s
    hpa-nginx-58ddb65c8d-ddzhs   1/1     Running   0          32s
    hpa-nginx-58ddb65c8d-lg62l   1/1     Running   0          47s
    hpa-nginx-58ddb65c8d-mvt9f   1/1     Running   0          28m
    hpa-nginx-58ddb65c8d-p257w   1/1     Running   0          62s
    hpa-nginx-58ddb65c8d-pxdv8   1/1     Running   0          62s
    hpa-nginx-58ddb65c8d-q4cwc   1/1     Running   0          62s
    hpa-nginx-58ddb65c8d-wkkn8   1/1     Running   0          32s
    nginx-server                 1/1     Running   0          129m
    web-0                        1/1     Running   0          28h
    web-1                        1/1     Running   0          28h
    web-2                        1/1     Running   0          28h
    
    
    #已经自动扩容了
    [root@k8s-master01 pod]# kubectl get pod -o wide
    NAME              READY   STATUS    RESTARTS     IP             NODE         NOMINATED  READINESS GATES
    hpa-nginx-68tf9   1/1     Running   0    103s   172.27.14.197   k8s-node02   <none>     <none>
    hpa-nginx-99rdt   1/1     Running   0    103s   172.17.125.19   k8s-node01   <none>     <none>
    hpa-nginx-c64h2   1/1     Running   0    103s   172.27.14.240   k8s-node02   <none>     <none>
    hpa-nginx-ddzhs   1/1     Running   0    88s    172.17.125.32   k8s-node01   <none>     <none>
    hpa-nginx-lg62l   1/1     Running   0    103s   172.17.125.33   k8s-node01   <none>     <none>
    hpa-nginx-mvt9f   1/1     Running   0    29m    172.27.14.232   k8s-node02   <none>     <none>
    hpa-nginx-p257w   1/1     Running   0    118s   172.17.125.6    k8s-node01   <none>     <none>
    hpa-nginx-pxdv8   1/1     Running   0    118s   172.17.125.7    k8s-node01   <none>     <none>
    hpa-nginx-q4cwc   1/1     Running   0    118s   172.27.14.235   k8s-node02   <none>     <none>
    hpa-nginx-wkkn8   1/1     Running   0    88s    172.27.14.237   k8s-node02   <none>     <none>
    

    微信赞赏

    支付宝赞赏

  • 相关阅读:
    asp.net Core 中间件Hello world
    MVC2 ,MVC3 ,MVC4,MVC5的区别,EF的各个版本的区别;LocalDB是个啥
    EF6 MVC5译文
    发布一个C++版本的ORM库SmartDB
    ORM
    Git图形化界面客户端大汇总
    Model工具
    HTTP协议的8种请求类型介绍
    五大主流数据库模型
    店铺装修——进阶模块介绍
  • 原文地址:https://www.cnblogs.com/superlinux/p/15036493.html
Copyright © 2011-2022 走看看