Openstack+Kubernetes+Docker微服务实践之路--弹性扩容

服务上线就要顶的住压力、扛的住考验,否则挨说的仍是咱们这帮作事的兄弟,还记得上图这个场景吗数据库

老办法是服务集群部署,但总归有个上限,以前跟阿里合做的时候他们有个弹性计算能够经过设置CPU的阀值来动态扩展和收缩计算能力,那时感受颇有逼格,至少在当时咱们常规的作法很难作到,没想到时至今日有了Kubernetes咱们能也扬眉吐气了,看我来给你们实实在在的秀一把。api

Kubernetes的自动扩容针对的是ReplicationController的,它会监控全部Pods的CPU使用状况,若是超过比例就启动更多的Pods来提供服务,反之减小Pods,在通常的状况下咱们不会设置Pods的CPU的上限,但要使用自动扩容就要设置它的阀值所以也要设置Pods的CPU使用上限,否则Kubernetes没办法计算它的占用比例,因此咱们在建立RC的时候就要指定每一个Pod CPU资源占用的上限服务器

配置

apiVersion: v1
kind: ReplicationController
metadata:
  name: thrift-c
  namespace: thrift-demo
spec:
  replicas:1
  selector:
    app: thrift-c
  template:
    metadata:
      name: thrift-c
      labels:
        app: thrift-c
    spec:
      containers:
      - name: thrift-c
        resources:
          requests:
            cpu: 200m
        image: registry2.io/thrift/thrift-c:0.0.2
        imagePullPolicy: Always
        ports:
        - containerPort: 9091
      imagePullSecrets:
        - name: registry2key

注意resources的配置,指定CPU最高占用为200m,若是是修改的话必需要删除RC,从新建立,apply不行,另外注意咱们这里的replicas是1。网络

在Dashboard中查看,是否是生效了,并发

压力测试

咱们的配置肯定生效以后就要看Kubernetes弹性扩容的效果了,第一步要先给咱们的服务增长自动扩容的能力,有两种方法,一种是配置文件,另外一种是经过Kubectl命令完成,看命令app

kubectl autoscale rc thrift-c -nthrift-demo --max=10 --cpu-percent=10 --min=1

参数--max是弹性扩容最大Pods数量,--min天然是最小数量,--cpu-percent是阀值,是一个百分比这里配置的是至关于10%,这条命令运行以后就给咱们指定的RC thrift-c增长了自动扩容的能力,查看一下测试

能够看到target和current以及数量等信息,目前咱们没有访问量spa

第二步,加压,增长访问量和并发,给你一条简单的命令code

while true; do wget -q -O- http://test.k8s.io/hi?name=3213; done

我分别在三台机器上执行了这条命令,压力直线上升,blog

当CPU超过10%的时候咱们看下Pods的数量

Pods从一个迅速给扩容到4个,若是服务能力没到达到要求还会增长Pods数量,当我把压力测试命令终止后CPU降下来时Kubernetes大概过了几分钟把Pods减小到最初的一个,我反复测试了屡次,这个功能很是好用也很稳定,它可以及时的根据服务的压力作出响应,在收缩的时候有延迟多是防止短期内再次发生,CPU稳定一段时间后Pods被减小到咱们配置的--min个。

有了这个功能咱们不再怕突发其来的压力和服务器宕机,瓶颈就丢给网络和磁盘IO以及数据库了,服务器方面若是有宕机Kubernetes会把它上面的Pods所有移到其它结点上启动起来,保证你的Pods始终是运行的,但有一点Kubernetes的Master是单点运行的,在后面若是有空研究一下Master的高可用,其实已经有不少网友研究过并给出解决办法,若是有兴趣能够先了解一下。

相关文章
相关标签/搜索