Deploy扩缩容源码分析
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副本数设置成目标值