最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

kubeadm?init快速搭建k8s源碼解析

 更新時(shí)間:2023年04月07日 14:49:54   作者:Ted劉  
這篇文章主要為大家介紹了kubeadm?init快速搭建k8s源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

引言

我們都知道,從頭搭建k8s集群是個(gè)非常棘手的事情,所以在更多的情況下大家通常會(huì)選擇通過(guò) kubeadm 工具來(lái)搭建 k8s 集群。當(dāng)我們執(zhí)行 kubeadm init 命令后就可以進(jìn)行 k8s 的快速搭建

根據(jù)k8s的官方文檔以及源碼,我們可以對(duì)整個(gè) init 命令的工作原理做個(gè)了解,官方文檔地址:
kubernetes.io/zh-cn/docs/…

從上一篇 Reset 文章中已經(jīng)可以知道 kubeadm 源碼的一些目錄結(jié)構(gòu),進(jìn)入 app/cmd 目錄可以看到 init.go 文件,其中的方法:func newCmdInit(out io.Writer, initOptions *initOptions) *cobra.Command 就是 init 的入口函數(shù)

cmd := &cobra.Command{
   Use:   "init",
   Short: "Run this command in order to set up the Kubernetes control plane",
   RunE: func(cmd *cobra.Command, args []string) error {
      c, err := initRunner.InitData(args)
      if err != nil {
         return err
      }
      data := c.(*initData)
      fmt.Printf("[init] Using Kubernetes version: %s\n", data.cfg.KubernetesVersion)
      return initRunner.Run(args)
   },
   Args: cobra.NoArgs,
}

依然是對(duì) cobra 庫(kù)的一個(gè)應(yīng)用, Use 來(lái)規(guī)定子命令,Short 來(lái)做簡(jiǎn)短描述,RunE用來(lái)將執(zhí)行中的錯(cuò)誤捕獲并返回給調(diào)用者

下面的代碼就都是為 init 命令綁定和添加一些標(biāo)志

// add flags to the init command.
// init command local flags could be eventually inherited by the sub-commands automatically generated for phases
AddInitConfigFlags(cmd.Flags(), initOptions.externalInitCfg)
AddClusterConfigFlags(cmd.Flags(), initOptions.externalClusterCfg, &initOptions.featureGatesString)
AddInitOtherFlags(cmd.Flags(), initOptions)
initOptions.bto.AddTokenFlag(cmd.Flags())
initOptions.bto.AddTTLFlag(cmd.Flags())
options.AddImageMetaFlags(cmd.Flags(), &initOptions.externalClusterCfg.ImageRepository)
// defines additional flag that are not used by the init command but that could be eventually used
// by the sub-commands automatically generated for phases
initRunner.SetAdditionalFlags(func(flags *flag.FlagSet) {
   options.AddKubeConfigFlag(flags, &initOptions.kubeconfigPath)
   options.AddKubeConfigDirFlag(flags, &initOptions.kubeconfigDir)
   options.AddControlPlanExtraArgsFlags(flags, &initOptions.externalClusterCfg.APIServer.ExtraArgs, &initOptions.externalClusterCfg.ControllerManager.ExtraArgs, &initOptions.externalClusterCfg.Scheduler.ExtraArgs)
})

以方法 AddInitConfigFlags 為例

他的作用是將綁定到配置的初始化標(biāo)志添加到指定的標(biāo)志集:

// AddInitConfigFlags adds init flags bound to the config to the specified flagset
func AddInitConfigFlags(flagSet *flag.FlagSet, cfg *kubeadmapiv1.InitConfiguration) {
   flagSet.StringVar(
      &cfg.LocalAPIEndpoint.AdvertiseAddress, options.APIServerAdvertiseAddress, cfg.LocalAPIEndpoint.AdvertiseAddress,
      "The IP address the API Server will advertise it's listening on. If not set the default network interface will be used.",
   )
   flagSet.Int32Var(
      &cfg.LocalAPIEndpoint.BindPort, options.APIServerBindPort, cfg.LocalAPIEndpoint.BindPort,
      "Port for the API Server to bind to.",
   )
   flagSet.StringVar(
      &cfg.NodeRegistration.Name, options.NodeName, cfg.NodeRegistration.Name,
      `Specify the node name.`,
   )
   flagSet.StringVar(
      &cfg.CertificateKey, options.CertificateKey, "",
      "Key used to encrypt the control-plane certificates in the kubeadm-certs Secret.",
   )
   cmdutil.AddCRISocketFlag(flagSet, &cfg.NodeRegistration.CRISocket)
}

kubeadm init --help 指令

通過(guò) kubeadm init --help 指令,可以看到相應(yīng)的標(biāo)志應(yīng)用,例如服務(wù)地址,端口號(hào)等基本配置:

通過(guò)上面的 help 命令我們也可以看到,在 init 命令中就已經(jīng)告訴了我們工作的幾個(gè)流程階段:

從源碼中來(lái)看,綁定完一系列標(biāo)志位后,init 命令正式開始綁定工作流程的執(zhí)行,正好對(duì)應(yīng)上圖中的幾個(gè)執(zhí)行階段:(集群的環(huán)境和源碼的版本不是完全一致,集群的環(huán)境較為老舊一些,例如源碼中的最后一個(gè)階段 NewShowJoinCommandPhase 在集群命令中沒(méi)有打印出來(lái),因?yàn)槔习姹镜淖詈笠粋€(gè)階段是放在命令綁定時(shí)的 RunE 中沒(méi)有錯(cuò)誤時(shí)最后執(zhí)行的,最新的源碼已經(jīng)提取出來(lái)單獨(dú)作為一個(gè)階段了,基本邏輯還是沒(méi)有變化的,調(diào)整后結(jié)構(gòu)更加清晰合理了)

// initialize the workflow runner with the list of phases
initRunner.AppendPhase(phases.NewPreflightPhase())
initRunner.AppendPhase(phases.NewCertsPhase())
initRunner.AppendPhase(phases.NewKubeConfigPhase())
initRunner.AppendPhase(phases.NewKubeletStartPhase())
initRunner.AppendPhase(phases.NewControlPlanePhase())
initRunner.AppendPhase(phases.NewEtcdPhase())
initRunner.AppendPhase(phases.NewWaitControlPlanePhase())
initRunner.AppendPhase(phases.NewUploadConfigPhase())
initRunner.AppendPhase(phases.NewUploadCertsPhase())
initRunner.AppendPhase(phases.NewMarkControlPlanePhase())
initRunner.AppendPhase(phases.NewBootstrapTokenPhase())
initRunner.AppendPhase(phases.NewKubeletFinalizePhase())
initRunner.AppendPhase(phases.NewAddonPhase())
initRunner.AppendPhase(phases.NewShowJoinCommandPhase())

也就是說(shuō),kubeadm init 的執(zhí)行共經(jīng)歷了14個(gè)階段,分別是:

  • NewPreflightPhase:在做出變更前運(yùn)行一系列的預(yù)檢項(xiàng)來(lái)驗(yàn)證系統(tǒng)狀態(tài),可以通過(guò)指定 --ignore-preflight-errors=<錯(cuò)誤列表> 參數(shù)來(lái)忽略錯(cuò)誤
  • NewCertsPhase:生成一個(gè)自簽名的 CA 證書來(lái)為集群中的每一個(gè)組件建立身份標(biāo)識(shí)
  • NewKubeConfigPhase:建立配置目錄及默認(rèn)或指定的配置文件,以便 kubelet、控制器管理器和調(diào)度器用來(lái)連接到 API 服務(wù)器
  • NewKubeletStartPhase:在一個(gè)節(jié)點(diǎn)上啟動(dòng) kubelet
  • NewControlPlanePhase:用來(lái)引導(dǎo)創(chuàng)建控制面節(jié)點(diǎn),生成 apiserver、controller-manager、scheduler 靜態(tài)pod描述文件
  • NewEtcdPhase:實(shí)現(xiàn)對(duì) etcd 的處理,沒(méi)有提供外部的 etcd 時(shí),會(huì)生成一份 etcd 的靜態(tài)資源文件
  • NewWaitControlPlanePhase:是在控制平面和 etcd 階段之后運(yùn)行的隱藏階段,作用是等待控制面節(jié)點(diǎn)任務(wù)的執(zhí)行,如果 kubelet 啟動(dòng)異?;蛘呖刂泼婀?jié)點(diǎn)崩潰將會(huì)停止后面的流程
  • NewUploadConfigPhase:上傳配置
  • NewUploadCertsPhase:上傳證書
  • NewMarkControlPlanePhase:為 master 做標(biāo)記,即添加污點(diǎn)
  • NewBootstrapTokenPhase:生成bootstrap token和ca證書configmap,后續(xù) node 可以通過(guò)生成的 token join加入集群
  • NewKubeletFinalizePhase:在 TLS 引導(dǎo)后更新與 kubelet 相關(guān)的設(shè)置,其實(shí)就是將kubelet與kube-apiserver通信的kubeconfig文件中的證書替換成由kube-controller-manager簽發(fā)返回的證書
  • NewAddonPhase:通過(guò) API 服務(wù)器安裝一個(gè) DNS 服務(wù)器 (CoreDNS) 和 kube-proxy 附加組件
  • NewShowJoinCommandPhase:打印初始化成功的命令,同時(shí)為用戶提供后續(xù)的操作指導(dǎo),例如工作節(jié)點(diǎn)的加入等

14個(gè)執(zhí)行階段都成功執(zhí)行后,kubeadm 的任務(wù)也就完成了,k8s 集群部署成功!

以上就是kubeadm init快速搭建k8s源碼解析的詳細(xì)內(nèi)容,更多關(guān)于kubeadm init搭建k8s的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • k8s設(shè)置非強(qiáng)一致反親和性示例

    k8s設(shè)置非強(qiáng)一致反親和性示例

    這篇文章主要為大家介紹了k8s設(shè)置非強(qiáng)一致反親和性示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10
  • K8s中pod間通信的兩種情況總結(jié)詳解

    K8s中pod間通信的兩種情況總結(jié)詳解

    在Kubernetes集群中,同一節(jié)點(diǎn)上的Pod通過(guò)本地虛擬網(wǎng)橋進(jìn)行高效通信,這篇文章主要介紹了K8s中pod間通信的兩種情況的相關(guān)資料,文中介紹的非常詳細(xì),需要的朋友可以參考下
    2024-11-11
  • K8S  Config應(yīng)用配置小結(jié)

    K8S  Config應(yīng)用配置小結(jié)

    本文主要介紹了Kubernetes中ConfigMap和Secret的使用方法,以及如何在Pod和容器中進(jìn)行資源配置,文中詳細(xì)講解了如何創(chuàng)建和使用ConfigMap來(lái)管理非機(jī)密性配置,以及如何使用Secret來(lái)存儲(chǔ)敏感信息,同時(shí),還介紹了如何在Pod中配置資源請(qǐng)求和限制,感興趣的朋友一起看看吧
    2025-03-03
  • k8s控制deamonset中pod數(shù)量的方法

    k8s控制deamonset中pod數(shù)量的方法

    DaemonSet是Kubernetes中用于確保每個(gè)節(jié)點(diǎn)運(yùn)行一個(gè)Pod副本的控制器,常用于運(yùn)行集群守護(hù)進(jìn)程,通過(guò)節(jié)點(diǎn)選擇器、節(jié)點(diǎn)親和性、容忍度和更新策略,可以精確控制Pod的數(shù)量和調(diào)度,本文介紹k8s控制deamonset中pod數(shù)量的方法,感興趣的朋友一起看看吧
    2025-01-01
  • KubeSphere分級(jí)管理實(shí)踐及解析

    KubeSphere分級(jí)管理實(shí)踐及解析

    這篇文章主要為大家介紹了KubeSphere分級(jí)管理實(shí)踐及解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • 使用kubeadm部署多節(jié)點(diǎn)集群

    使用kubeadm部署多節(jié)點(diǎn)集群

    這篇文章介紹了使用kubeadm部署多節(jié)點(diǎn)集群的方法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • k8s?常見(jiàn)面試題集錦

    k8s?常見(jiàn)面試題集錦

    這篇文章主要為大家介紹了k8s?常見(jiàn)面試題集錦,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09
  • k8s目錄和文件掛載到宿主機(jī)的方式

    k8s目錄和文件掛載到宿主機(jī)的方式

    Docker是一種流行的容器化技術(shù),它允許開發(fā)人員在不同的環(huán)境中構(gòu)建、打包和運(yùn)行應(yīng)用程序,下面這篇文章主要給大家介紹了關(guān)于k8s目錄和文件掛載到宿主機(jī)的相關(guān)資料,需要的朋友可以參考下
    2024-01-01
  • kubernetes認(rèn)證鑒權(quán)內(nèi)容淺析

    kubernetes認(rèn)證鑒權(quán)內(nèi)容淺析

    這篇文章主要為大家介紹了kubernetes認(rèn)證鑒權(quán)內(nèi)容淺析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • 使用k8tz解決pod內(nèi)的時(shí)區(qū)問(wèn)題(坑的解決)

    使用k8tz解決pod內(nèi)的時(shí)區(qū)問(wèn)題(坑的解決)

    時(shí)區(qū)的不一致,會(huì)帶來(lái)很多困擾。即使代碼與時(shí)區(qū)無(wú)關(guān),但容器日志與系統(tǒng)日志時(shí)間相關(guān)聯(lián)排查問(wèn)題也會(huì)讓人頭疼,這篇文章主要介紹了使用k8tz優(yōu)雅的解決pod內(nèi)的時(shí)區(qū)問(wèn)題,需要的朋友可以參考下
    2022-10-10

最新評(píng)論

大冶市| 娄烦县| 灵寿县| 久治县| 乌什县| 平南县| 太和县| 呼和浩特市| 驻马店市| 即墨市| 淮北市| 东丰县| 九龙县| 余江县| 石屏县| 克什克腾旗| 眉山市| 柳林县| 黄梅县| 楚雄市| 读书| 鱼台县| 长治县| 凤阳县| 临朐县| 防城港市| 扎兰屯市| 池州市| 改则县| 长阳| 和林格尔县| 英山县| 德昌县| 岑巩县| 米泉市| 桓仁| 宽城| 丰台区| 二手房| 祁连县| 衡水市|