Kubernetes(k8s)的弹性伸缩

本文介绍了Kubernetes的Horizontal Pod Autoscaler(HPA)功能,详细阐述了HPA的工作原理,即监控Pod的CPU使用率以决定是否增减实例。在实践中,作者设置了一个RC并进行压力测试,展示了HPA如何根据预设阈值进行伸缩。然而,由于缺少metrics-server,HPA未能成功实现Pod的伸缩。文章还提及了metrics-server作为新的监控组件,以及heapster的停更情况。
摘要由CSDN通过智能技术生成

1、什么是K8s的弹性伸缩?

答:Hpa(全称叫做Horizontal Pod Autoscaler),Horizontal Pod Autoscaler的操作对象是Replication Controller、ReplicaSet或者Deployment对应的Pod(k8s中可以控制Pod的是rc、rs、deployment),根据观察到的CPU使用量与用户的阈值进行比对,做出是否需要增加或者减少实例数量的决策。controller目前使用heapSter来检测CPU使用量,检测周期默认是30秒。

 

2、K8s的弹性伸缩的工作原理?

答:Horizontal Pod Autoscaler的工作原理,主要是监控一个Pod,监控这个Pod的资源CPU使用率,一旦达到了设置的阈值,就做策略来决定它是否需要增加,做策略的时候还需要一个周期,比如,持续五分钟都发现CPU使用率高,就抓紧增加Pod的数量来减轻它的压力。当然也有一个策略,就是持续五分钟之后,压力一直都很低,那么会减少Pod的数量。这就是k8s的弹性伸缩的工作原理,主要是监控CPU的使用率,然后来决定是否增加或者减少Pod的数量。

 

3、K8s的弹性伸缩的实践,为了演示效果,这里对rc进行cpu资源的进行限制,方便压力测试效果。

 1 [root@k8s-master ~]# cd k8s/
 2 [root@k8s-master k8s]# ls
 3 book-master.war  dashboard  dashboard.zip  deploy  health  heapster  namespace  pod  rc  skydns  skydns.zip  svc  tomcat_demo  tomcat_demo.zip
 4 [root@k8s-master k8s]# mkdir hpa
 5 [root@k8s-master k8s]# cd hpa/
 6 [root@k8s-master hpa]# ls
 7 [root@k8s-master hpa]# cp ../rc/nginx_rc.yaml .
 8 [root@k8s-master hpa]# ls
 9 nginx_rc.yaml
10 [root@k8s-master hpa]# vim nginx_rc.yaml 

配置内容,如下所示:

 1 apiVersion: v1
 2 kind: Pod
 3 metadata:
 4   name: myweb
 5   labels:
 6     app: web
 7     env: myweb
 8 spec:
 9   containers:
10     - name: myweb
11       image: 192.168.110.133:5000/nginx:1.13
12       ports:
13         - containerPort: 80
14       resources:
15         # 最大可以使用的资源,100m的cpu时间片,50Mi的内存。 
16         limits:
17           cpu: 100m
18           memory: 50Mi
19         # requests代表资源Pod需求的资源,100m的cpu时间片,50Mi的内存。 
20         requests:
21           cpu: 100m
22           memory: 50Mi

开始创建这个RC,如下所示:

1 [root@k8s-master hpa]# kubectl create -f nginx_rc.yaml 
2 replicationcontroller "myweb" created
3 [root@k8s-master hpa]# 

查看初始的数量是两个,如下所示:

 1 [root@k8s-master hpa]# kubectl get all
 2 NAME       DESIRED   CURRENT   READY     AGE
 3 rc/myweb   2         2         2         31s
 4 
 5 NAME             CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
 6 svc/kubernetes   10.254.0.1   <none>        443/TCP   23d
 7 
 8 NAME             READY     STATUS    RESTARTS   AGE
 9 po/myweb-c0rs7   1/1       Running   0          31s
10 po/myweb-jkqc7   1/1       Running   0          31s
11 [root@k8s-master hpa]# kubectl get all -o wide
12 NAME       DESIRED   CURRENT   READY     AGE       CONTAINER(S)   IMAGE(S)                          SELECTOR
13 rc/myweb   2         2         2         35s       myweb          192.168.110.133:5000/nginx:1.13   app=myweb
14 
15 NAME             CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE       SELECTOR
16 svc/kubernetes   10.254.0.1   <none>        443/TCP   23d       <none>
17 
18 NAME             READY     STATUS    RESTARTS   AGE       IP            NODE
19 po/myweb-c0rs7   1/1       Running   0          35s       172.16.16.4   k8s-node3
20 po/myweb-jkqc7   1/1       Running   0          35s       172.16.94.3   k8s-node2
21 [root@k8s-master hpa]# 

4、开始创建hpa,可以通过配置文件或者命令进行声明,如下所示:

1 kubectl autoscale 资源类型(rc、deployment) 资源的名称 最大的pod数量  最小的pod数量  pod设定的阈值,cpu达到%多少使用率的时候就会触发hpa。

pod设定的阈值,cpu达到%多少使用率的时候就会触发hpa,这里测试的时候设置的比较低,生产环境可以设置60%、70%这些,较高些。

1 [root@k8s-master hpa]# kubectl autoscale replicationcontroller myweb --max=8 --min=1 --cpu-percent=5
2 replicationcontroller "myweb" autoscaled
3 [root@k8s-master hpa]# 

此时,查看启动的资源,如下所示:

 1 [root@k8s-master hpa]# kubectl get all
 2 NAME        REFERENCE                     TARGET    CURRENT     MINPODS   MAXPODS   AGE
 3 hpa/myweb   ReplicationController/myweb   5%        <waiting>   1         8         53s
 4 
 5 NAME       DESIRED   CURRENT   READY     AGE
 6 rc/myweb   2         2         2         7m
 7 
 8 NAME             CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
 9 svc/kubernetes   10.254.0.1   <none>        443/TCP   23d
10 
11 NAME             READY     STATUS    RESTARTS   AGE
12 po/myweb-c0rs7   1/1       Running   0          7m
13 po/myweb-jkqc7   1/1       Running   0          7m
14 [root@k8s-master hpa]# kubectl get all -o wide
15 NAME        REFERENCE                     TARGET    CURRENT     MINPODS   MAXPODS   AGE
16 hpa/myweb   ReplicationController/myweb   5%        <waiting>   1         8         56s
17 
18 NAME       DESIRED   CURRENT   READY     AGE       CONTAINER(S)   IMAGE(S)                          SELECTOR
19 rc/myweb   2         2         2         7m        myweb          192.168.110.133:5000/nginx:1.13   app=myweb
20 
21 NAME             CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE       SELECTOR
22 svc/kubernetes   10.254.0.1   <none>        443/TCP   23d       <none>
23 
24 NAME             READY     STATUS    RESTARTS   AGE       IP            NODE
25 po/myweb-c0rs7   1/1       Running   0          7m        172.16.16.4   k8s-node3
26 po/myweb-jkqc7   1/1       Running   0          7m        172.16.94.3   k8s-node2
27 [root@k8s-master hpa]# 

这里可以看到由hpa控制rc,rc来控制pod的数量,现在开始进行压力测试,这里使用的ab的命令,首先查询到这个pod的ip地址,如下所示:

 1 [root@k8s-master hpa]# kubectl get all -o wide
 2 NAME        REFERENCE                     TARGET    CURRENT     MINPODS   MAXPODS   AGE
 3 hpa/myweb   Rep
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值