《 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对象规模扩增完成
而后由“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上部署完成,即便是一个略复杂的分层应用也只需要通过合适的镜像以类似的方式就能部署完成。
- 点赞
- 收藏
- 关注作者
评论(0)