zoukankan      html  css  js  c++  java
  • kubernetes云平台管理实战:k8s弹性伸缩(十八)

    一、什么是弹性伸缩

    Horizontal Pod Autoscaler的操作对象是Replication Controller、ReplicaSet或Deployment对应的Pod,根据观察到的CPU使用量与用户的阈值进行比对,做出是否需要增减实例数量的决策。controller目前使用heapSter来检测CPU使用量,检测周期默认是30秒

    二、创建hpa

    nginx-rc.yaml

    [root@master hpa]# cat nginx-rc.yaml
    apiVersion: v1
    kind: ReplicationController
    metadata:
      name: myweb1
    spec:
      replicas: 2
      selector:
        app: myweb1
      template:
        metadata:
          labels:
            app: myweb1
        spec:
          containers:
          - name: myweb1
            image: 192.168.118.18:5000/nginx:1.13
            ports:
            - containerPort: 80
            resources:
              limits:
                cpu: 100m
                memory: 50Mi
              requests:
                cpu: 100m
                memory: 50Mi

    创建检查

    [root@master hpa]# kubectl create -f nginx-rc.yaml 
    replicationcontroller "myweb1" created
    [root@master hpa]# kubectl get pods -o wide --all-namespaces
    NAMESPACE     NAME                                           READY     STATUS    RESTARTS   AGE       IP            NODE
    default       mysql-3qkf1                                    1/1       Running   0          1d        172.16.60.7   192.168.118.19
    default       myweb1-g1x3r                                   1/1       Running   0          25s       172.16.56.5   192.168.118.18
    default       myweb1-xxxqs                                   1/1       Running   0          25s       172.16.60.2   192.168.118.19
    kube-system   heapster-hrfmb                                 1/1       Running   0          36m       172.16.56.3   192.168.118.18
    kube-system   influxdb-grafana-0lj0n                         2/2       Running   0          36m       172.16.56.4   192.168.118.18
    kube-system   kube-dns-1835838994-jm5bk                      4/4       Running   0          7h        172.16.99.3   192.168.118.20
    kube-system   kubernetes-dashboard-latest-2728556226-fc2pc   1/1       Running   0          5h        172.16.60.6   192.168.118.19
    luoahong      myweb-qsml7                                    1/1       Running   0          3h        172.16.60.8   192.168.118.19
    luoahong      myweb-sbsw2                                    1/1       Running   0          3h        172.16.99.4   192.168.118.20
    [root@master hpa]# kubectl get rc -o wide --all-namespaces
    NAMESPACE     NAME               DESIRED   CURRENT   READY     AGE       CONTAINER(S)       IMAGE(S)                                                                                 SELECTOR
    default       mysql              1         1         1         1d        mysql              192.168.118.18:5000/mysql:5.7                                                            app=mysql
    default       myweb1             2         2         2         45s       myweb1             192.168.118.18:5000/nginx:1.13                                                           app=myweb1
    kube-system   heapster           1         1         1         36m       heapster           192.168.118.18:5000/heapster:canary                                                      k8s-app=heapster,version=v6
    kube-system   influxdb-grafana   1         1         1         36m       influxdb,grafana   192.168.118.18:5000/heapster_influxdb:v0.5,192.168.118.18:5000/heapster_grafana:v2.6.0   name=influxGrafana
    luoahong      myweb              2         2         2         3h        myweb              192.168.118.18:5000/nginx:1.13                                                           app=myweb

    创建hpa

    [root@master hpa]# kubectl autoscale replicationcontroller myweb1 --max=8 --min=1 --cpu-percent=10
    replicationcontroller "myweb1" autoscaled
    [root@master hpa]# kubectl get pods -o wide --all-namespaces
    NAMESPACE     NAME                                           READY     STATUS    RESTARTS   AGE       IP            NODE
    default       mysql-3qkf1                                    1/1       Running   0          1d        172.16.60.7   192.168.118.19
    default       myweb1-xxxqs                                   1/1       Running   0          7m        172.16.60.2   192.168.118.19
    kube-system   heapster-hrfmb                                 1/1       Running   0          42m       172.16.56.3   192.168.118.18
    kube-system   influxdb-grafana-0lj0n                         2/2       Running   0          42m       172.16.56.4   192.168.118.18
    kube-system   kube-dns-1835838994-jm5bk                      4/4       Running   0          7h        172.16.99.3   192.168.118.20
    kube-system   kubernetes-dashboard-latest-2728556226-fc2pc   1/1       Running   0          6h        172.16.60.6   192.168.118.19
    luoahong      myweb-qsml7                                    1/1       Running   0          3h        172.16.60.8   192.168.118.19
    luoahong      myweb-sbsw2                                    1/1       Running   0          3h        172.16.99.4   192.168.118.2

    三、压力测试

    1、执行压力测试命令

    [root@master hpa]# ab -n 500000 -c 100 http://172.16.60.2/index.html 
    This is ApacheBench, Version 2.3 <$Revision: 1430300 $>
    Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
    Licensed to The Apache Software Foundation, http://www.apache.org/
    
    Benchmarking 172.16.60.2 (be patient)
    Completed 50000 requests
    Completed 100000 requests
    Completed 150000 requests
    Completed 200000 requests
    Completed 250000 requests
    Completed 300000 requests
    Completed 350000 requests
    Completed 400000 requests
    Completed 450000 requests
    Completed 500000 requests
    Finished 500000 requests
    
    
    Server Software:        nginx/1.13.12
    Server Hostname:        172.16.60.2
    Server Port:            80
    
    Document Path:          /index.html
    Document Length:        612 bytes
    
    Concurrency Level:      100
    Time taken for tests:   389.121 seconds
    Complete requests:      500000
    Failed requests:        0
    Write errors:           0
    Total transferred:      423000000 bytes
    HTML transferred:       306000000 bytes
    Requests per second:    1284.95 [#/sec] (mean)
    Time per request:       77.824 [ms] (mean)
    Time per request:       0.778 [ms] (mean, across all concurrent requests)
    Transfer rate:          1061.59 [Kbytes/sec] received
    
    Connection Times (ms)
                  min  mean[+/-sd] median   max
    Connect:        0   18 146.3      3   15028
    Processing:     0   60  80.5     74    5091
    Waiting:        0   59  79.2     73    5091
    Total:          2   78 171.3     77   15103
    
    Percentage of the requests served within a certain time (ms)
      50%     77
      66%     89
      75%     96
      80%     98
      90%    100
      95%    284
      98%    303
      99%   1077
     100%  15103 (longest request)

    2、查看容器状态描述

    1、查看pod数量

    [root@master kubernetes]# kubectl get pods -o wide |grep myweb1
    myweb1-46kz9   1/1       Running   0          11s       172.16.99.5   192.168.118.20
    myweb1-9nq3c   1/1       Running   0          4m        172.16.99.2   192.168.118.20
    myweb1-9nsks   1/1       Running   0          11s       172.16.60.4   192.168.118.19
    myweb1-flbds   1/1       Running   0          11s       172.16.60.3   192.168.118.19
    myweb1-nhkqr   1/1       Running   0          11s       172.16.56.7   192.168.118.18
    myweb1-q722p   1/1       Running   0          4m        172.16.56.6   192.168.118.18
    myweb1-q78qh   1/1       Running   0          4m        172.16.56.5   192.168.118.18
    myweb1-xxxqs   1/1       Running   0          14m       172.16.60.2   192.168.118.19

    2、查看HPA状态描述

    [root@master kubernetes]# kubectl describe hpa myweb1
    Name:				myweb1
    Namespace:			default
    Labels:				<none>
    Annotations:			<none>
    CreationTimestamp:		Wed, 13 May 2020 17:59:04 +0800
    Reference:			ReplicationController/myweb1
    Target CPU utilization:		10%
    Current CPU utilization:	25%
    Min replicas:			1
    Max replicas:			8
    ReplicationController pods:	8 current / 8 desired
    Events:
      FirstSeen	LastSeen	Count	From				SubObjectPath	Type		Reason			Message
      ---------	--------	-----	----				-------------	--------	------			-------
      12m		12m		2	{horizontal-pod-autoscaler }			Normal		MetricsNotAvailableYet	unable to get metrics for resource cpu: no metrics returned from heapster
      12m		12m		3	{horizontal-pod-autoscaler }			Normal		DesiredReplicasComputed	Computed the desired num of replicas: 0 (avgCPUutil: 0, current replicas: 2)
      12m		12m		1	{horizontal-pod-autoscaler }			Normal		SuccessfulRescale	New size: 1; reason: All metrics below target
      11m		4m		16	{horizontal-pod-autoscaler }			Normal		DesiredReplicasComputed	Computed the desired num of replicas: 0 (avgCPUutil: 0, current replicas: 1)
      4m		4m		1	{horizontal-pod-autoscaler }			Normal		DesiredReplicasComputed	Computed the desired num of replicas: 4 (avgCPUutil: 39, current replicas: 1)
      4m		4m		1	{horizontal-pod-autoscaler }			Normal		SuccessfulRescale	New size: 4; reason: CPU utilization above target
      3m		2m		3	{horizontal-pod-autoscaler }			Normal		DesiredReplicasComputed	Computed the desired num of replicas: 10 (avgCPUutil: 99, current replicas: 4)
      2m		15s		7	{horizontal-pod-autoscaler }			Normal		DesiredReplicasComputed	Computed the desired num of replicas: 10 (avgCPUutil: 25, current replicas: 4)
      15s		15s		1	{horizontal-pod-autoscaler }			Normal		SuccessfulRescale	New size: 8; reason: CPU utilization above target
      15s		15s		2	{horizontal-pod-autoscaler }			Normal		DesiredReplicasComputed	Computed the desired num of replicas: 10 (avgCPUutil: 25, current replicas: 8)

    3、通过监控截图查看

  • 相关阅读:
    Java-Class-@I:org.springframework.web.bind.annotation.RequestBody.java
    Java-Class-@I:org.springframework.validation.annotation.Validated.java
    Java-Class-@I:org.springframework.beans.factory.annotation.Autowired.java
    Java-Class-@I:org.springframework.stereotype.Service.java
    Murano环境搭建、使用介绍和思考
    简洁经常使用权限系统的设计与实现(一):构造权限菜单树的N(N&gt;=4)种方法
    Android 依赖注入: Dagger 2 实例解说(一)
    mybatis的#和$的差别
    国内外优秀呼叫中心系统简单介绍
    openWRT学习之LUCI之中的一个helloworld演示样例
  • 原文地址:https://www.cnblogs.com/luoahong/p/12937138.html
Copyright © 2011-2022 走看看