kubernetes源码之kubelet初始化

从这篇开始阅读一下kubernetes的源码,kubernetes是使用cobra构建的,如果对cobra还不了解的,可以查看我的上篇文章。

零基础入门Cobra---kubernetes源码学习必备

kubernetes的源码先从kubelet开始看起。

kubelet的启动文件在cmd/kubelet/kubelet.go,入口通过app.NewKubeletCommand()初始化了kubelet的command,这是一个*cobra.Command对象。kubelet启动核心就是command.Execute(),会执行cmd/kubelet/app/server.go中的Run函数。

func main() {
    command := app.NewKubeletCommand()
    code := run(command)
    os.Exit(code)
}
func run(command *cobra.Command) int {
    defer logs.FlushLogs()
    rand.Seed(time.Now().UnixNano())
    command.SetGlobalNormalizationFunc(cliflag.WordSepNormalizeFunc)
    if err := command.Execute(); err != nil {
        return 1
    }
    return 0
}

先看NewKubeletCommand函数,函数的主要功能就是通过cleanFlagSet来获取kubelet启动时传入的参数信息,通过NewKubeletFlags、NewKubeletConfiguration初始化一些默认flag和参数。最后将初始化好的各种参数传入再执行Run函数的时候传入。

func NewKubeletCommand() *cobra.Command {
    cleanFlagSet := pflag.NewFlagSet(componentKubelet, pflag.ContinueOnError)
    kubeletFlags := options.NewKubeletFlags()
    kubeletConfig, err := options.NewKubeletConfiguration()
    cmd := &cobra.Command{
        Use: componentKubelet,
        DisableFlagParsing: true,
        RunE: func(cmd *cobra.Command, args []string) error {
            // kubeadm部署时使用的是/var/lib/kubelet/config.yaml
            if configFile := kubeletFlags.KubeletConfigFile; len(configFile) > 0 {
                kubeletConfig, err = loadConfigFile(configFile)
                // update feature gates based on new config
                if err := utilfeature.DefaultMutableFeatureGate.SetFromMap(kubeletConfig.FeatureGates); err != nil {
                    return fmt.Errorf("failed to set feature gates from initial flags-based config: %w", err)
                }
            }
            kubeletServer := &options.KubeletServer{
                KubeletFlags:         *kubeletFlags,
                KubeletConfiguration: *kubeletConfig,
            }
            kubeletDeps, err := UnsecuredDependencies(kubeletServer, utilfeature.DefaultFeatureGate)
            // set up signal context here in order to be reused by kubelet and docker shim
            ctx := genericapiserver.SetupSignalContext()


            return Run(ctx, kubeletServer, kubeletDeps, utilfeature.DefaultFeatureGate)
        },
    }
    kubeletFlags.AddFlags(cleanFlagSet)
    options.AddKubeletConfigFlags(cleanFlagSet, kubeletConfig)
    options.AddGlobalFlags(cleanFlagSet)
    return cmd
}

KubeletFlag指的是那些不允许在kubelet运行时进行修改的配置集,或者不能在集群中所有Nodes之间共享的配置。例如node ip等。

KubeletConfiguration指的是可以在集群中各个Nodes之间共享的配置集。

在较老的版本中,kubelet只有flag,直到1.10之后引入了KubeletConfiguration,通过flag中的--config参数传入本地文件,作为KubeletConfiguration的参数,kubeadm部署的kubelet本地文件在/var/lib/kubelet/config.yaml,内容如下:

apiVersion: kubelet.config.k8s.io/v1beta1
authentication:
  anonymous:
    enabled: false
  webhook:
    cacheTTL: 0s
    enabled: true
  x509:
    clientCAFile: /etc/kubernetes/pki/ca.crt
authorization:
  mode: Webhook
  webhook:
    cacheAuthorizedTTL: 0s
    cacheUnauthorizedTTL: 0s
cgroupDriver: systemd
clusterDNS:
- 10.1.0.10
clusterDomain: cluster.local
cpuManagerReconcilePeriod: 0s
evictionPressureTransitionPeriod: 0s
fileCheckFrequency: 0s
healthzBindAddress: 127.0.0.1
healthzPort: 10248
httpCheckFrequency: 0s
imageMinimu
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值