kubeadm证书生成代码分析

前言

通过kubeadm init/join k8s集群时,会涉及证书及kubeconfig配置文件的创建。尤其在多master节点情况下,还涉及多节点之前证书的一致性问题。本文期望从源代码角度分析这个创建流程。

版本

kubernetes v1.30

kubeadm简介

kubeadm包含在kubernetes项目中,作为一个k8s cmd存在。主要负责k8s集群的初始化和集群节点加入集群等功能。为物理机成为k8s节点创建需要的配置。

kubeadm整体代码分析

指令代码路径

/kubernetes/cmd/kubeadm
ls
app  kubeadm.go  OWNERS  test
cat kubeadm.go

package main

import (
        "k8s.io/kubernetes/cmd/kubeadm/app"
        kubeadmutil "k8s.io/kubernetes/cmd/kubeadm/app/util"
)

func main() {
        kubeadmutil.CheckErr(app.Run())


ls app/
apis  cmd  componentconfigs  constants  discovery  features  images  kubeadm.go  phases  preflight  util

从上述代码可以看到kubeadm真正执行是app目录下的Run函数, 查看app目录,目录架构如上图所示,通过名字基本知道每个目录的作用。

package app

import (
        "flag"
        "os"

        "github.com/spf13/pflag"

        cliflag "k8s.io/component-base/cli/flag"
        "k8s.io/klog/v2"

        "k8s.io/kubernetes/cmd/kubeadm/app/cmd"
)

// Run creates and executes new kubeadm command
func Run() error {
        klog.InitFlags(nil)
        pflag.CommandLine.SetNormalizeFunc(cliflag.WordSepNormalizeFunc)
        pflag.CommandLine.AddGoFlagSet(flag.CommandLine)

        pflag.Set("logtostderr", "true")
        // We do not want these flags to show up in --help
        // These MarkHidden calls must be after the lines above
        pflag.CommandLine.MarkHidden("alsologtostderr")
        ..............
        cmd := cmd.NewKubeadmCommand(os.Stdin, os.Stdout, os.Stderr)
        // 最终调用command的Run函数
        return cmd.Execute()
}

如上面代码所示,通过NewKubeamCommand创建指令,并通过Execute执行命令

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值