kubelet启动--FeatureGate初始化

kubernetes有很多的功能特性,这些特性一般都有关联的KEP。特性的成熟度有alpha、beta、GA、Deprecated,alpha代表不稳定,beta代表相对稳定有可能有bug,GA代表已经可用。 特性的生命阶段有KEP提出、alpha阶段、beta阶段、GA阶段、废弃。alpha阶段默认不启用,beta阶段默认启用 。更多feature gate相关知识请访问–Feature GatesKEP

feature gate用来控制某项特性打开或关闭,当然GA的特性不能关闭。本文以kubelet源码为例,分析feature gate如何工作的。

kubelet启动--日志初始化

kubernetes 默认使用的日志库是klog,kubernetes的k8s.io/component-base/logs库,专门做日志初始化相关操作。

klog是glog的fork版本,由于glog不在开发、在容器中运行有一系列问题、不容易测试等问题,所以kubenetes自己维护了一个klog。

kubelet启动--命令行初始化

概述 kubelet命令行参数有177个,是kubernetes组件中配置项最多的。 kubelet的选项分为三类,一类是kubletFlags–(启动之后不能随时改变的,只能通过命令行配置,比如ip地址、路径等);另一类是kube

Taint Manager源码解析

taint manager是由pod和node事件触发执行,根据node或pod绑定的node是否有的noExcute taint,如果有则对node上所有的pod或这个pod执行删除。

上篇的node lifecycle controller中,如果启用了taint manager就会调用NewNoExecuteTaintManager对taint manager进行初始化。

在node lifecycle controller中定义了pod事件和node事件的handler,在启用taint manager时候还会将pod事件和node事件放入到taint manager里的nodeUpdateQueue和podUpdateQueue。

同时在node lifecycle controller中会启动一个goroutine 执行taintManager.Run(stopCh)。

Node Lifecycle Controller Manager源码解析

Node Lifecycle Controller根据node的lease和node status更新时间,决定是否驱逐node上的pod或设置taint,设置node ready condition为unknown。

并且根据整个集群状态和zone里不同数量的unready node,设置不同的node速率-来添加taint或执行驱逐pod。