• 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、通过监控截图查看

  • 相关阅读:
    Mac OS X下GnuPlot的安装
    为PHP编译imap扩展
    jQuery做个TextBox自动完成条
    sql 查询模块
    WinForm控件查找奇思
    支持拼音检索的TextBox扩展控件使用
    自定义控件重写Listbox实现item图标变换和item点击事件
    支持拼音检索的TextBox扩展控件
    (转)SendMessage API
    使用C#获取CPU及硬盘序列号的源代码
  • 原文地址:https://www.cnblogs.com/luoahong/p/12937138.html
Copyright © 2020-2023  润新知