kubeadm探秘

news2024/11/25 20:34:08

为什么kubeadm可以用于生产?

第一是kubeadm已经被官方收编,可以在官网文档中找到它的身影。

另外一个是kubeadm是用golang调用k8s的命令去执行创建k8s集群的。查看一下kubeadm的代码即可知道。

本文来源于csdn作者 sunican

挨个打开目录查看文件可知,源代码基本就在kinder目录。为什么这个目录名叫kinder呢?熟悉k8s项目的同学应该知道,有个项目叫kind。

查看roadmap.md可知,原来kinder(或者说kubeadm)作者从kind项目得到了灵感。

查看kinder/main.go可知,主体代码在kinder/cmd/kinder目录下

import (
    "k8s.io/kubeadm/kinder/cmd/kinder"
)

func main() {
    kinder.Main()
}

根据这个去看一下kinder.go文件,可以看到是Main函数调用了Run函数,而Run函数就一行

return NewCommand().Execute()

再找到NewCommand函数的定义就会发现,这个就是我们今天要看的主角。它借用了cobra来对构建k8s用到的命令进行统一的封装和调用。

func NewCommand() *cobra.Command {
    flags := &Flags{}
    cmd := &cobra.Command{
        Args:  cobra.NoArgs,
        Use:   "kinder",
        Short: "kinder is an example of kind(https://github.com/kubernetes-sigs/kind) used as a library",
        Long: "   _  ___         _\n" +
            "  | |/ (_)_ _  __| |___ _ _\n" +
            "  | ' <| | ' \\/ _` / -_) '_|\n" +
            "  |_|\\_\\_|_||_\\__,_\\___|_|\n\n" +
            "kinder is an example of kind(https://github.com/kubernetes-sigs/kind) used as a library.\n\n" +
            "All the kind commands will be available in kinder, side by side with additional commands \n" +
            "designed for helping kubeadm contributors.\n\n" +
            "kinder is still a work in progress. Test It, Break It, Send feedback!",
        PersistentPreRunE: func(cmd *cobra.Command, args []string) error {
            return runE(flags, cmd, args)
        },
        SilenceUsage: true,
        Version:      constants.KinderVersion,
    }
    cmd.PersistentFlags().StringVar(
        &flags.LogLevel,
        "loglevel",
        defaultLevel.String(),
        "logrus log level [panic, fatal, error, warning, info, debug, trace]",
    )

    logger := kindcmd.NewLogger()
    ioStreams := kindcmd.StandardIOStreams()

    // add kind top level subcommands re-used without changes
    cmd.AddCommand(kinddelete.NewCommand(logger, ioStreams))
    cmd.AddCommand(kindexport.NewCommand(logger, ioStreams))

    // add kind commands customized in kind
    cmd.AddCommand(build.NewCommand())
    cmd.AddCommand(create.NewCommand())
    cmd.AddCommand(version.NewCommand())
    cmd.AddCommand(get.NewCommand())

    // add kinder only commands
    cmd.AddCommand(cp.NewCommand())
    cmd.AddCommand(do.NewCommand())
    cmd.AddCommand(exec.NewCommand())
    cmd.AddCommand(test.NewCommand())

    return cmd
}

cmd对应的每个函数调用,大家可以自行下载代码之后查看。今天分享就到这里。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/403290.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Guitar Pro8吉他学习辅助软件

Guitar Pro8最大的特色就是可以直接用鼠标和键盘按标准的六线谱、四线谱进行乐谱输入、查看、打印和试听&#xff0c;可以实时、自动滚屏、多种模式的显示单声部或乐曲总谱&#xff0c;在做弹拨乐器的滑音、倚音、推弦、揉弦、泛音、摇把、闷音、琶音、分解和弦、BASS打弦等方面…

【汽车应用处理器】DRA770PJGACDQ1、TDA4VM88TGBALFR功能应用

DRA770PJGACDQ1 汽车应用处理器旨在满足现代车内数字驾驶舱体验对于处理性能的强烈需求。利用该器件&#xff0c;原始设备制造商(OEM)和原始设计制造商(ODM)得以将创新型连接技术、语音识别和音频流式传输等快速投入实施。Jacinto6 Plus器件通过极其灵活的全集成混合处理器解决…

zigbee学习笔记:IO操作

1、IAR新建工程 &#xff08;1&#xff09;Projetc→Create New Projetc→OK→选择位置&#xff0c;确定 &#xff08;2&#xff09;新建一个c文件&#xff0c;保存在路径中 &#xff08;3&#xff09;点击工程&#xff0c;右键→add→加入c文件 &#xff08;4&#xff09;…

10、go工程化与标准库

目录一、用go mod管理工程二、包引入规则三、init调用链四、可见性五、标准库1 - 时间函数2 - 数学计算3 - I/O操作4 - 编码一、用go mod管理工程 初始化项目&#xff1a;go mod init $module_name&#xff0c;$module_name和目录名可以不一样。上述命令会生成go.mod文件 mod…

除了「加机器」,其实你的微服务还能这样优化

生产实践中&#xff0c;如果遇到业务流量变高导致服务负载升高甚至报警&#xff0c;我们的第一反应往往是「加机器」。 俗话说&#xff0c;能用钱解决的问题都不是问题。 俗话又说&#xff0c;充钱你就能变得更强。 但是&#xff0c;作为一个有理想有抱负的架构师&#xff0c;…

前端——7.图像标签和路径

这篇文章&#xff0c;我们来讲解一下图像标签 目录 1.图像标签 1.1介绍 1.2实际展示 1.3图像标签的属性 1.3.1 alt属性 1.3.2 title属性 1.3.3 width / height 属性 1.3.4 border属性 1.4注意事项 2.文件夹 2.1目录文件夹和根目录 2.2 VSCode打开目录文件夹 3.路…

决策树学习报告

报告 一、基本概念 决策树的定义&#xff1a;首先&#xff0c;决策树是一种有监督的分类算法——即给定X&#xff0c;Y值&#xff0c;构建X&#xff0c;Y的映射关系。不同于线性回归等是多项式&#xff0c;决策树是一种树形的结构&#xff0c;一般由根节点、父节点、子节点、…

MyBatis-Plus的入门学习

MyBatis-Plus入门学习简介特性快速开始MyBatis-Plus的注解详解Tableld主键生成策略1、数据库自动增长 AUTO2、UUID3、Redis生成id4、MP主键自动生成TableNameTableField自动填充测试方法&#xff1a;update乐观锁select查所有根据id查多个id批量查询简单条件查询&#xff08;通…

MySQL性能优化

MySQL性能调优 存储数据类型优化 尽量避免使用 NULL尽量使用可以的最小数据类型。但也要确保没有低估需要存储的范围整型比字符串操作代价更低使用 MySQL 内建的数据类型&#xff08;比如date、time、datetime&#xff09;&#xff0c;比用字符串更快 基本数据类型 数字 整数…

中国巨头在NLP领域的大模型布局

什么是大模型&#xff1f; 大规模模型&#xff08;large-scale model&#xff09;是近年来人工智能领域的一个热点话题&#xff0c;因为它们可以对自然语言处理&#xff08;NLP&#xff09;和其他任务进行更准确和深入的处理。由于大模型需要庞大的计算资源和数据支持&#xf…

论文投稿指南——中文核心期刊推荐(国家财政)

【前言】 &#x1f680; 想发论文怎么办&#xff1f;手把手教你论文如何投稿&#xff01;那么&#xff0c;首先要搞懂投稿目标——论文期刊 &#x1f384; 在期刊论文的分布中&#xff0c;存在一种普遍现象&#xff1a;即对于某一特定的学科或专业来说&#xff0c;少数期刊所含…

SpringSecurity第二讲

目录 二、SpringSecurity02 2.1 JWT概述 2.1.1 JWT介绍 2.1.2 跨域认证问题 2.2 JWT的原理 2.3 JWT的数据结构 2.3.1 Header 2.3.2 Payload 2.3.3 Signature 2.4 JWT的使用方式 2.5 JWT的使用 2.5.1 引入JWT依赖 2.5.2 编写JWT工具类 2.6 编写前后端不分离的项目…

【C语言】每日刷题 —— 牛客语法篇(3)

前言 大家好&#xff0c;继续更新专栏c_牛客&#xff0c;不出意外的话每天更新十道题&#xff0c;难度也是从易到难&#xff0c;自己复习的同时也希望能帮助到大家&#xff0c;题目答案会根据我所学到的知识提供最优解。 &#x1f3e1;个人主页&#xff1a;悲伤的猪大肠9的博客…

sd卡格式化后数据恢复怎么操作

有时候我们需要清空SD卡数据文件&#xff0c;有时候则是因为需要修复SD卡所以需要格式化&#xff0c;但是却被提示无法格式化SD卡。这种情况往往是由于平时SD卡使用时的一些不良习惯或是SD卡中病毒&#xff0c;病毒在运行SD卡中的软件所造成的。那么sd卡格式化后数据恢复怎么操…

[数据结构]栈的深入学习-java实现

CSDN的各位uu们你们好,今天千泽带来了栈的深入学习,我们会简单的用代码实现一下栈, 接下来让我们一起进入栈的神奇小世界吧!0.速览文章一、栈的定义1. 栈的概念2. 栈的图解二、栈的模拟实现三.栈的经典使用场景-逆波兰表达式总结一、栈的定义 1. 栈的概念 栈&#xff1a;一种…

国密SM4分组密码算法

前言密码&#xff0c;是指使用特定变换对数据等信息进行加密保护或安全认证的物项&#xff08;承载算法、密钥、密文的介质&#xff09;和技术&#xff0c;主要用于加密和安全认证&#xff08;身份识别、完整性、抗抵赖性&#xff09;。密码按照保密等级&#xff0c;又分为核密…

06 电力电子仿真 MATLAB/Simulink

文章目录01 单相半波整流电路02 单相全波整流电路&#xff08;子系统封装模块&#xff09;03 三相桥式整流电路&#xff08;三相模块与示波器使用&#xff09;04 相控与斩控交交调压&#xff08;THD计算&#xff09;05 Buck电路&#xff08;PWM实现与闭环反馈&#xff09;06 单…

【STL】Vector剖析及模拟实现

✍作者&#xff1a;阿润菜菜 &#x1f4d6;专栏&#xff1a;C vector的常用接口 首先贴上&#xff1a;vector的文档介绍,以备查阅使用。 vector的基本框架&#xff1a; vector的成员变量分别是空间首部分的_start指针和最后一个元素的下一个位置的_finish指针&#xff0c;以…

Tomcat安装及启动

日升时奋斗&#xff0c;日落时自省 目录 1、Tomcat下载 2、JDK安装及配置环境 3、Tomcat配置环境 4、启动Tomcat 5、部署演示 1、Tomcat下载 直接入主题&#xff0c;下载Tomcat 首先就是别下错了&#xff0c;直接找官方如何看是不是广告&#xff0c;或者造假 搜索Tomc…

【强度混合和波段自适应细节融合:PAN-Sharpening】

Intensity mixture and band-adaptive detail fusion for pansharpening &#xff08;用于全色锐化的强度混合和波段自适应细节融合&#xff09; 全色锐化的目的是通过高分辨率单通道全色&#xff08;PAN&#xff09;图像锐化低分辨率多光谱&#xff08;MS&#xff09;图像&a…