iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >kubeadm init快速搭建k8s源码分析
  • 808
分享到

kubeadm init快速搭建k8s源码分析

2023-07-05 23:07:04 808人浏览 薄情痞子
摘要

今天小编给大家分享一下kubeadm init快速搭建k8s源码分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

今天小编给大家分享一下kubeadm init快速搭建k8s源码分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

引言

我们都知道,从头搭建k8s集群是个非常棘手的事情,所以在更多的情况下大家通常会选择通过 kubeadm 工具来搭建 k8s 集群。当我们执行 kubeadm init 命令后就可以进行 k8s 的快速搭建

根据k8s的官方文档以及源码,我们可以对整个 init 命令的工作原理做个了解,官方文档地址:
kubernetes.io/zh-cn/docs/…

进入 app/cmd 目录可以看到 init.Go 文件,其中的方法:func newCmdInit(out io.Writer, initOptions *initOptions) *cobra.Command 就是 init 的入口函数

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,}

依然是对 cobra 库的一个应用, Use 来规定子命令,Short 来做简短描述,RunE用来将执行中的错误捕获并返回给调用者

下面的代码就都是为 init 命令绑定和添加一些标志:

// add flags to the init command.// init command local flags could be eventually inherited by the sub-commands automatically generated for phasesAddInitConfigFlags(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 phasesinitRunner.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 为例,他的作用是将绑定到配置的初始化标志添加到指定的标志集:

// AddInitConfigFlags adds init flags bound to the config to the specified flagsetfunc 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 指令,可以看到相应的标志应用,例如服务地址,端口号等基本配置:

kubeadm init快速搭建k8s源码分析

通过上面的 help 命令我们也可以看到,在 init 命令中就已经告诉了我们工作的几个流程阶段:

kubeadm init快速搭建k8s源码分析

从源码中来看,绑定完一系列标志位后,init 命令正式开始绑定工作流程的执行,正好对应上图中的几个执行阶段:(集群的环境和源码的版本不是完全一致,集群的环境较为老旧一些,例如源码中的最后一个阶段 NewShowJoinCommandPhase 在集群命令中没有打印出来,因为老版本的最后一个阶段是放在命令绑定时的 RunE 中没有错误时最后执行的,最新的源码已经提取出来单独作为一个阶段了,基本逻辑还是没有变化的,调整后结构更加清晰合理了)

// initialize the workflow runner with the list of phasesinitRunner.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())

也就是说,kubeadm init 的执行共经历了14个阶段,分别是:

  • NewPreflightPhase:在做出变更前运行一系列的预检项来验证系统状态,可以通过指定 --ignore-preflight-errors=<错误列表> 参数来忽略错误

  • NewCertsPhase:生成一个自签名的 CA 证书来为集群中的每一个组件建立身份标识

  • NewKubeConfigPhase:建立配置目录及默认或指定的配置文件,以便 kubelet、控制器管理器和调度器用来连接到 API 服务器

  • NewKubeletStartPhase:在一个节点上启动 kubelet

  • NewControlPlanePhase:用来引导创建控制面节点,生成 apiserver、controller-manager、scheduler 静态pod描述文件

  • NewEtcdPhase:实现对 etcd 的处理,没有提供外部的 etcd 时,会生成一份 etcd 的静态资源文件

  • NewWaitControlPlanePhase:是在控制平面和 etcd 阶段之后运行的隐藏阶段,作用是等待控制面节点任务的执行,如果 kubelet 启动异常或者控制面节点崩溃将会停止后面的流程

  • NewUploadConfigPhase:上传配置

  • NewUploadCertsPhase:上传证书

  • NewMarkControlPlanePhase:为 master 做标记,即添加污点

  • NewBootstrapTokenPhase:生成bootstrap token和ca证书configmap,后续 node 可以通过生成的 token join加入集群

  • NewKubeletFinalizePhase:在 TLS 引导后更新与 kubelet 相关的设置,其实就是将kubelet与kube-apiserver通信的kubeconfig文件中的证书替换成由kube-controller-manager签发返回的证书

  • NewAddonPhase:通过 API 服务器安装一个 DNS 服务器 (CoreDNS) 和 kube-proxy 附加组件

  • NewShowJoinCommandPhase:打印初始化成功的命令,同时为用户提供后续的操作指导,例如工作节点的加入等

14个执行阶段都成功执行后,kubeadm 的任务也就完成了,k8s 集群部署成功!

以上就是“kubeadm init快速搭建k8s源码分析”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网精选频道。

--结束END--

本文标题: kubeadm init快速搭建k8s源码分析

本文链接: https://www.lsjlt.com/news/356085.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • kubeadm init快速搭建k8s源码分析
    今天小编给大家分享一下kubeadm init快速搭建k8s源码分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。...
    99+
    2023-07-05
  • kubeadm init快速搭建k8s源码解析
    目录引言下面的代码就都是为 init 命令绑定和添加一些标志以方法 AddInitConfigFlags 为例kubeadm init --help 指令引言 我们都知道,从头搭建...
    99+
    2023-05-14
    kubeadm init搭建k8s kubeadm init
  • 如何使用Kubeadm快速搭建Kubernetes
    这篇文章主要讲解了“如何使用Kubeadm快速搭建Kubernetes”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何使用Kubeadm快速搭建Kubernetes”吧!##版本说明 ##...
    99+
    2023-06-19
  • 使用sealos快速搭建K8s集群环境的过程
    目录一、前言二、sealos三、准备环境sealos 安装虚拟机设置网络windows网络虚拟机的网络网卡配置其他配置RPM 源四、安装开始五、可能遇见的问题sealos run的时...
    99+
    2024-04-02
  • 如何利用源码快速建网站
    如何利用源码快速建网站,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。  现在想建网站的朋友日渐增多,可多还都是想快速建站的。飘仙是从零学过来的,很理解想建网站的...
    99+
    2023-06-10
  • 如何利用网站源码快速建站
    利用网站源码快速建站的方法:确定企业网站发展的方向。在百度或者建站系统上,选择合适的建站源码。购买源码权限,避免侵权。建站的时候,要确定源码的语言类型,如:语言类型是ASP,则使用ISS组件,若语言类型是PHP,则使用PHP系统。...
    99+
    2024-04-02
  • Tomcat9源代码浅析-环境搭建
    1.概要Apache Tomcat是一个非常受欢迎的开源Web容器,使用Java语言开发。近期公司开始推行开源技术的应用,目前正在将Weblogic替换为Tomcat,我们称之为W2T。本系列为项目过程中对Tomcat 9源代码分析的记录,...
    99+
    2023-06-02
  • lazy init控制加载在Spring中如何实现源码分析
    目录一、lazy-init说明二、lazy-init 属性被设置的地方三、lazy-init发挥作用的地方四、问答一、lazy-init说明 ApplicationContext实现...
    99+
    2024-04-02
  • 知识付费系统源码搭建流程讲解、代码分析
    知识付费系统是现在多数教培机构优先考虑的线上教学系统,而很多机构自身有技术人员常驻,所以不需要再花费资金去直接购买搭建好的成品系统,转而直接购买源码后,自行搭建配置。 目前,知识付费系统是许多教培机构...
    99+
    2023-09-16
    数据库 服务器 前端 教育电商 php
  • python数学建模源码分析
    这篇文章主要介绍了python数学建模源码分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇python数学建模源码分析文章都会有所收获,下面我们一起来看看吧。SciPy 学习'''Sc...
    99+
    2023-07-06
  • Python快速入门实例代码分析
    这篇文章主要介绍了Python快速入门实例代码分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Python快速入门实例代码分析文章都会有所收获,下面我们一起来看看吧。Python 安装已经安装软件的小伙伴要检...
    99+
    2023-07-05
  • Canvaskit快速入门实例代码分析
    这篇“Canvaskit快速入门实例代码分析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Canvaskit快速入门实例代码...
    99+
    2023-07-05
  • 【SA8295P 源码分析】87 - SA8295P HQNX + Android 编译环境搭建指导
    【SA8295P 源码分析】87 - SA8295P HQNX + Android 编译环境搭建指导 一、Android 编译环境搭建:Android + sa8295p-hqx-4-2-...
    99+
    2023-09-25
    QAM8295P SA8295P HQNX Android
  • 教你怎么用SpringBoot+Mybati-Plus快速搭建代码
    目录前言一、搭建一个springboot项目二、配置依赖三、配置application.yml文件四、启动类五、运行main方法六、项目结构前言 先放一个官网吧,其实本案例就是根据官...
    99+
    2024-04-02
  • Python内建类型int源码分析
    今天小编给大家分享一下Python内建类型int源码分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。问题:对于C语言,下面...
    99+
    2023-06-30
  • Python内建类型dict源码分析
    本篇内容主要讲解“Python内建类型dict源码分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python内建类型dict源码分析”吧!深入认识Python内建类型&mdash;&...
    99+
    2023-07-05
  • Python内建类型float源码分析
    这篇文章主要介绍“Python内建类型float源码分析”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Python内建类型float源码分析”文章能帮助大家解决问题。1 回顾float的基础知识1....
    99+
    2023-06-30
  • Python内建类型str源码分析
    这篇文章主要讲解了“Python内建类型str源码分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python内建类型str源码分析”吧!1 Unicode计算机存储的基本单位是字节,由8...
    99+
    2023-06-30
  • ubuntu 使用阿里云镜像源快速搭建kubernetes 1.15.2集群
    搭建k8s集群时,需要访问google,下载相关镜像以及安装软件,非常麻烦。正好阿里云提供了k8s的更新源,国内用户就可以直接使用了。 操作系统主机名IP地址功能配置ubuntu-16.04.5-server-amd64k8s-m...
    99+
    2023-01-31
    阿里 镜像 集群
  • go语言构建顺序源码分析
    这篇文章主要介绍“go语言构建顺序源码分析”,在日常操作中,相信很多人在go语言构建顺序源码分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”go语言构建顺序源码分析”的疑惑有所帮助!接下来,请跟着小编一起来...
    99+
    2023-07-05
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作