Author: xidianwangtao@gmail.com
PodGC Controller配置
关于PodGC Controller的相关配置(kube-controller-manager配置),一共只有两个:
| flag | default value | comments |
|---|---|---|
| –controllers stringSlice | * | 这里配置需要enable的controlllers列表,podgc当然也可以在这里设置是都要enable or disable,默认podgc是在enable列表中的。 |
| –terminated-pod-gc-threshold int32 | 12500 | Number of terminated pods that can exist before the terminated pod garbage collector starts deleting terminated pods. If <= 0, the terminated pod garbage collector is disabled. (default 12500) |
PodGC Controller入口
PodGC Controller是在kube-controller-manager Run的时候启动的。CMServer Run时会invoke StartControllers将预先注册的enabled Controllers遍历并逐个启动。
cmd/kube-controller-manager/app/controllermanager.go:180
func Run(s *options.CMServer) error {
...
err := StartControllers(newControllerInitializers(), s, rootClientBuilder, clientBuilder, stop)
...
}
在newControllerInitializers注册了所有一些常规Controllers及其对应的start方法,为什么说这些是常规的Controllers呢,因为还有一部分Controllers没在这里进行注册,比如非常重要的service Controller,node Controller等,我把这些称为非常规Controllers。
func newControllerInitializers() map[string]InitFunc {
controllers := map[string]InitFunc{}
controllers["endpoint"] = startEndpointController
...
controllers["podgc"] = startPodGCController
...
return controllers
}
因此CMServer最终是invoke startPodGCController来启动PodGC Controller的。
cmd/kube-controller-manager/app/core.go:66
func startPodGCController(ctx ControllerContext) (bool, error) {
go podgc.NewPodGC(
ctx.ClientBuilder.ClientOrDie("pod-garbage-collector"),
ctx.InformerFactory.Core().V1().Pods(),
int(ctx.Options.TerminatedPodGCThreshold),
).Run(ctx.Stop)
return true, nil
}
startPodGC

本文详细分析了Kubernetes PodGC Controller的配置、启动过程和主要功能,包括如何回收Terminated、Orphaned及Unscheduled Terminating的Pods。PodGC Controller每隔20s执行一次Pod清理,通过设定阈值控制Pod删除,并采用串行执行的策略进行不同类型的Pod回收。

1541

被折叠的 条评论
为什么被折叠?



