《 Kubernetes进阶实战》一2.4.4扩容和缩容

举报
华章计算机 发表于 2019/05/29 13:40:29 2019/05/29
【摘要】 本书摘自《 Kubernetes进阶实战》一第二章,第2.4.4节,作者是马永亮

2.4.4 扩容和缩容

       前面示例中创建的Deployment对象myapp仅创建了一个Pod对象,其所能够承载的访问请求数量即受限于这单个Pod对象的服务容量。请求流量上升到接近或超出其容量之前,用户可以通过Kubernetes的“扩容机制”来扩展Pod的副本数量,从而提升其服务容量。
       简单来说,所谓的“伸缩”(Scaling)就是指改变特定控制器上Pod副本数量的操作,“扩容”(scaling up)即为增加副本数量,而“缩容”(scaling down)则意指缩减副本数量。不过,无论是扩容还是缩容,其数量都需要由用户明确给出。
       Service对象内建的负载均衡机制可在其后端副本数量不止一个时自动进行流量分发,它还会自动监控关联到的Pod的健康状态,以确保仅将请求流量分发至可用的后端Pod对象。若某Deployment控制器管理包含多个Pod实例,则必要时用户还可以为其使用“滚动更新”机制将其容器镜像升级到新的版本或变更那些支持动态修改的Pod属性。
       使用kubectl run命令创建Deployment对象时,“--replicas=”选项能够指定由该对象创建或管理的Pod对象副本的数量,且其数量支持运行时进行修改,并立即生效。“kubectl scale”命令就是专用于变动控制器应用规模的命令,它支持对Deployment资源对象的扩容和缩容操作。例如,如果要将myapp的Pod副本数量扩展为3个,则可以使用如下命令来完成:
~]$ kubectl scale deployments/myapp --replicas=3
deployment.extensions "myapp" scaled
而后列出由myapp创建的Pod副本,确认其扩展操作的完成状态。如下命令显示出其Pod副本数量已经扩增至3个,其中包括此前的myapp-6865459dff-5nsjc:
          ~]$ kubectl get pods -l run=myapp
          NAME                     READY    STATUS               RESTARTS    AGE
          myapp-6865459dff-52j7t   0/1      ContainerCreating    0           53s
          myapp-6865459dff-5nsjc   1/1      Running              0           2h
          myapp-6865459dff-jz7t6   0/1      ContainerCreating    0           53s
          Deployment对象myapp规模扩展完成之后,default名称空间中的资源对象及其关联关系如图2-13所示。

图2-13 Deployment对象规模扩增完成

image.png

       而后由“kubectl describe deployment”命令打印Deployment对象myapp的详细信息,了解其应用规模的变动及当前Pod副本的状态等相关信息。从下面的命令结果可以看出,其Pod副本数量的各项指标都已经转换到了新的目标数量,而其事件信息中也有相应的事件显示其扩增操作已成功完成:
                    ~]$ kubectl describe deployments/myapp
                    Name:                   myapp
                    ……
                    Selector:               run=myapp
                    Replicas:               3 desired | 3 updated | 3 total | 3 available | 0
                     unavailable
                    ……
                     Events:
                     Type    Reason             Age   From           Message
                      ----    ------             ----  ----                   -------
                     Normal ScalingReplicaSet  2m  deployment-controller Scaled up replica set
                     myapp-6865459dff to 3
        由myapp自动创建的Pod资源全都拥有同一个标签选择器“run=myapp”,因此,前面创建的Service资源对象myapp的后端端点也已经通过标签选择器自动扩展到了这3个Pod对象相关的端点,如下面的命令结果及图2-13所示:
                    ~]$ kubectl describe services/myapp
                    Name:                     myapp
                    ……
                    Endpoints:                10.244.1.3:80,10.244.2.2:80,10.244.3.2:80
                    ……
       回到此前创建的客户端Pod对象client的交互式接口,对Service对象myapp反复发起测试请求,即可验正其负载均衡的效果。由如下命令及其结果可以看出,它会将请求调度至后端的各Pod对象进行处理:
                ~]$ / # while true; do wget -O - -q http://myapp.default:80/hostname.html;
                  sleep 1; done
              myapp-6865459dff-jz7t6
              myapp-6865459dff-52j7t
              myapp-6865459dff-5nsjc
              ……
       应用规模缩容的方式与扩容相似,只不过是将Pod副本的数量调至比原来小的数字即可。例如,将myapp的Pod副本缩减至2个,可以使用如下命令进行:
~]$ kubectl scale deployments/myapp --replicas=2
deployment.extensions "myapp" scaled
       至此,功能基本完整的容器化应用已在Kubernetes上部署完成,即便是一个略复杂的分层应用也只需要通过合适的镜像以类似的方式就能部署完成。


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。