k8s mysql 弹性_Kubernetes(k8s)的弹性伸缩

本文介绍了Kubernetes(K8s)的Horizontal Pod Autoscaler(HPA)用于实现弹性伸缩的基本原理和工作流程。通过监控Pod的CPU使用率,当达到预设阈值时,HPA会自动增加或减少Pod的数量。文中还展示了如何配置和使用HPA,以及通过压力测试观察伸缩效果。然而,由于k8s版本较低,未能成功实现伸缩,这可能与缺少metrics-server有关。metrics-server是Kubernetes 1.8及更高版本中用于提供资源使用指标的组件。
摘要由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]# ls3 book-master.war dashboard dashboard.zip deploy health heapster namespacepod rc skydns skydns.zip svc tomcat_demo tomcat_demo.zip4 [root@k8s-master k8s]# mkdir hpa5 [root@k8s-master k8s]# cd hpa/

6 [root@k8s-master hpa]# ls7 [root@k8s-master hpa]# cp ../rc/nginx_rc.yaml .8 [root@k8s-master hpa]# ls9 nginx_rc.yaml10 [root@k8s-master hpa]# vim nginx_rc.yaml

配置内容,如下所示:

1 apiVersion: v12 kind: Pod3 metadata:4 name: myweb5 labels:6 app: web7 env: myweb8 spec:9 containers:10 -name: myweb11 image: 192.168.110.133:5000/nginx:1.13

12 ports:13 - containerPort: 80

14 resources:15 # 最大可以使用的资源,100m的cpu时间片,50Mi的内存。16 limits:17 cpu: 100m18 memory: 50Mi19 # requests代表资源Pod需求的资源,100m的cpu时间片,50Mi的内存。20 requests:21 cpu: 100m22 memory: 50Mi

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

1 [root@k8s-master hpa]# kubectl create -f nginx_rc.yaml2 replicationcontroller "myweb"created3 [root@k8s-master hpa]#

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

1 [root@k8s-master hpa]# kubectl getall2 NAME DESIRED CURRENT READY AGE3 rc/myweb 2 2 231s4

5 NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE6 svc/kubernetes 10.254.0.1 443/TCP 23d7

8 NAME READY STATUS RESTARTS AGE9 po/myweb-c0rs7 1/1 Running 031s10 po/myweb-jkqc7 1/1 Running 031s11 [root@k8s-master hpa]# kubectl get all -o wide12 NAME DESIRED CURRENT READY AGE CONTAINER(S) IMAGE(S) SELECTOR13 rc/myweb 2 2 2 35s myweb 192.168.110.133:5000/nginx:1.13 app=myweb14

15 NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR16 svc/kubernetes 10.254.0.1 443/TCP 23d

17

18 NAME READY STATUS RESTARTS AGE IP NODE19 po/myweb-c0rs7 1/1 Running 0 35s 172.16.16.4 k8s-node320 po/myweb-jkqc7 1/1 Running 0 35s 172.16.94.3 k8s-node221 [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"autoscaled3 [root@k8s-master hpa]#

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

1 [root@k8s-master hpa]# kubectl getall2 NAME REFERENCE TARGET CURRENT MINPODS MAXPODS AGE3 hpa/myweb ReplicationController/myweb 5% 1 853s4

5 NAME DESIRED CURRENT READY AGE6 rc/myweb 2 2 27m7

8 NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE9 svc/kubernetes 10.254.0.1 443/TCP 23d10

11 NAME READY STATUS RESTARTS AGE12 po/myweb-c0rs7 1/1 Running 07m13 po/myweb-jkqc7 1/1 Running 07m14 [root@k8s-master hpa]# kubectl get all -o wide15 NAME REFERENCE TARGET CURRENT MINPODS MAXPODS AGE16 hpa/myweb ReplicationController/myweb 5% 1 856s17

18 NAME DESIRED CURRENT READY AGE CONTAINER(S) IMAGE(S) SELECTOR19 rc/myweb 2 2 2 7m myweb 192.168.110.133:5000/nginx:1.13 app=myweb20

21 NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR22 svc/kubernetes 10.254.0.1 443/TCP 23d

23

24 NAME READY STATUS RESTARTS AGE IP NODE25 po/myweb-c0rs7 1/1 Running 0 7m 172.16.16.4 k8s-node326 po/myweb-jkqc7 1/1 Running 0 7m 172.16.94.3 k8s-node227 [root@k8s-master hpa]#

404ee0cd3dab83ce975aeceee3506f00.png

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

1 [root@k8s-master hpa]# kubectl get all -o wide2 NAME REFERENCE TARGET CURRENT MINPODS MAXPODS AGE3 hpa/myweb ReplicationController/myweb 5% 1 83m4

5 NAME DESIRED CURRENT READY AGE CONTAINER(S) IMAGE(S) SELECTOR6 rc/myweb 2 2 2 10m myweb 192.168.110.133:5000/nginx:1.13 app=myweb7

8 NAME CLUSTER-IP EXTER

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值