Kubernetes Node Controller源码分析之配置篇

Author: [email protected]

摘要:我认为,Node Controller是Kubernetes几十个Controller中最为重要的Controller之一,其重要程度在Top3,然而这可能也是最为复杂的一个Controller,网上还没有Node Controller的源码分析的文章,因此我觉得有必要对此做一个系列文章,希望能帮助自己有一个深入浅出的理解。本博文主要对NodeController的启动、定义及其行为配置做出一些分析,要求读者对Kubernetes的相关特性有较深的理解。

Node Controller的启动


if ctx.IsControllerEnabled(nodeControllerName) {

    // 解析得到Cluster CIDR, # clusterCIDR is CIDR Range for Pods in cluster.
    _, clusterCIDR, err := net.ParseCIDR(s.ClusterCIDR)

    // 解析得到Service CIDR,# serviceCIDR is CIDR Range for Services in cluster.
    _, serviceCIDR, err := net.ParseCIDR(s.ServiceCIDR)

    // 创建NodeController实例
    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),
    )

    // 执行Run方法启动该Controller
    nodeController.Run()

    // sleep一个随机时间,该时间大小为 “ControllerStartInterval + rand.Float64()*1.0*float64(ControllerStartInterval))”,其中ControllerStartInterval可以通过配置kube-controller-manager的"--controller-start-interval”参数指定。
    time.Sleep(wait.Jitter(s.ControllerStartInterval.Duration, ControllerStartJitter))
} 

因此,很清晰地,关键就在以下两步:

  • nodeController, err := nodecontroller.NewNodeController创建NodeController实例。
  • nodeController.Run()执行Run方法启动该Controller。

NodeController的定义

在分析NodeController的原理之前,我们有必要先看看NodeController是如何定义的,其完整的定义如下:

type NodeController struct {
    allocateNodeCIDRs bool
    cloud             cloudprovider.Interface
    clusterCIDR       *net.IPNet
    serviceCIDR       *net.IPNet
    knownNodeSet      map[string]*v1.Node
    kubeClient        clientset.Interface
    // Method for easy mocking 
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值