Kubernetes Node Controller源码分析之创建篇

Author: [email protected]

摘要:我认为,Node Controller是Kubernetes几十个Controller中最为重要的Controller之一,其重要程度在Top3,然而这可能也是最为复杂的一个Controller,因此对其的源码分析,我将做一个系列文章,希望能帮助自己有一个深入的理解。本博文主要对Node Controller的创建流程进行源码分析。

NewNodeController入口

Controller Manager在启动时,会启动一系列的Controller,Node Controller也是在Controller Manager启动时StartControllers方法中启动的Controller之一,其对应的创建代码如下。

cmd/kube-controller-manager/app/controllermanager.go:455

nodeController, err := nodecontroller.NewNodeController(
            sharedInformers.Core().V1().Pods(),
            sharedInformers.Core().V1().Nodes(),
            sharedInformers.Extensions().V1beta1().DaemonSets(),
            cloud,
            clientBuilder.ClientOrDie("node-controller"),
            s.PodEvictionTimeout.Duration,
            s.NodeEvictionRate,
            s.SecondaryNodeEvictionRate,
            s.LargeClusterSizeThreshold,
            s.UnhealthyZoneThreshold,
            s.NodeMonitorGracePeriod.Duration,
            s.NodeStartupGracePeriod.Duration,
            s.NodeMonitorPeriod.Duration,
            clusterCIDR,
            serviceCIDR,
            int(s.NodeCIDRMaskSize),
            s.AllocateNodeCIDRs,
            s.EnableTaintManager,
            utilfeature.DefaultFeatureGate.Enabled(features.TaintBasedEvictions),
        )

可见,Node Controller主要是ListWatch sharedInformers中的如下对象:

  • Pods
  • Nodes
  • DaemonSets

另外,需要注意:

  • s.EnableTaintManager的默认值为true,即表示默认开启Taint Manager,可通过--enable-taint-manager进行设置。
  • DefaultFeatureGate.Enabled(features.TaintBasedEvictions)的默认值为false,可通过--feature-gates中添加TaintBasedEvictions=true修改为true,true即表示Node上的Pods Eviction Operation通过TaintManager来进行。

补充:关于Kubernetes的Default FeaturesGate的设置见如下代码:

pkg/features/kube_features.go:100

var defaultKubernetesFeatureGates = map[utilfeature.Feature]utilfeature.FeatureSpec{
    ExternalTrafficLocalOnly:                    {
  Default: true, PreRelease: utilfeature.Beta},
    AppArmor:                                    {
  Default: true, PreRelease: utilfeature.Beta},
    DynamicKubeletConfig:                        {
  Default: false, PreRelease: utilfeature.Alpha},
    DynamicVolumeProvisioning:                   {
  Default: true, PreRelease: utilfeature.Alpha},
    ExperimentalHostUserNamespaceDefaultingGate: {
  Default: false, PreRelease: utilfeature.Beta},
    ExperimentalCriticalPodAnnotation:           {
  Default: false, PreRelease: utilfeature.Alpha},
    AffinityInAnnotations:                       {
  Default: false, PreRelease: utilfeature.Alpha},
    Accelerators:               
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值