Deploy扩缩容源码分析

发布时间 2023-05-07 11:07:32作者: 王景迁

k8s v1.15.0

Informer监听

作为Deployment资源控制器,DeploymentController通过DeploymentInformer、ReplicaSetInformer、PodInformer来监听事件。

cmd/kube-controller-manager/app/apps.go
startDeploymentController函数

pkg/controller/deployment/deployment_controller.go
NewDeploymentController函数
实例化控制器时通过Informer来监听事件

扩缩容Deployment

pkg/controller/deployment/deployment_controller.go
NewDeploymentController函数
更新Deployment

updateDeployment函数
当前Deployment对象入队列

协程每隔1s处理队列元素,最终调用syncDeployment函数

syncDeployment函数
当执行scale操作时,首先会通过isScalingEvent方法判断是否为扩缩容操作,然后通过dc.sync方法来执行实际的扩缩容动作。

pkg/controller/deployment/sync.go
isScalingEvent函数
判断rs要求的Pod数量是否和Deployment Pod数量期望值相等(单纯扩缩容deploy不会产生新的rs)

扩容

缩容

不同于滚动更新

pkg/controller/deployment/sync.go
scaleReplicaSet函数
把rs副本数设置成目标值

参考资料

deployment controller 源码分析

源码分析 kubernetes deployment controller 的设计实现