本节重点介绍 :
-
kubectl的职责和 kubectl 的代码原理
-
cobra库的使用简介
kubectl的职责
-
主要的工作是处理用户提交的东西(包括,命令行参数,yaml文件等)
-
然后其会把用户提交的这些东西组织成一个数据结构体
-
然后把其发送给 API Server
Kubectl系统架构图

kubectl 的代码原理
-
从命令行和yaml文件中获取信息
-
通过Builder模式并把其转成一系列的资源
-
最后用 Visitor 模式模式来迭代处理这些Reources
kubectl create命令 执行入口在 cmd目录下各个组件下面
-
代码位置 D:\go_path\src\github.com\kubernetes\kubernetes\cmd\kubectl\kubectl.go
package main
import (
goflag "flag"
"math/rand"
"os"
"time"
"github.com/spf13/pflag"
cliflag "k8s.io/component-base/cli/flag"
"k8s.io/kubectl/pkg/cmd"
"k8s.io/kubectl/pkg/util/logs"
// Import to initialize client auth plugins.
_ "k8s.io/client-go/plugin/pkg/client/auth"
)
func main() {
rand.Seed(time.Now().UnixNano())
command := cmd.NewDefaultKubectlCommand()
// TODO: once we switch everything over to Cobra commands, we can go back to calling
// cliflag.InitFlags() (by removing its pflag.Parse() call). For now, we have to set the
// normalize func and add the go flag set by hand.
pflag.CommandLine.SetNormalizeFunc(cliflag.WordSepNormalizeFunc)
pflag.CommandLine.AddGoFlagSet(goflag.CommandLine)
// cliflag.InitFlags()
logs.InitLogs()
defer logs.FlushLogs()
if err := command.Execute(); err != nil {
os.Exit(1)
}
}
rand.Seed设置随机数
调用kubectl库调用cmd 创建command对象
command := cmd.NewDefaultKubectlCommand()
cobra的使用
cobra 的主要功能如下
-
简易的子命令行模式,如 app server, app fetch 等等
-
完全兼容 posix 命令行模式
-
嵌套子命令 subcommand
-
支持全局,局部,串联 flags
-
使用 cobra 很容易的生成应用程序和命令,使用 cobra create appname 和 cobra add cmdname
-
如果命令输入错误,将提供智能建议,如 app srver,将提示 srver 没有,是不是 app server
-
自动生成 commands 和 flags 的帮助信息
-
自动生成详细的 help 信息,如 app help
-
自动识别帮助 flag -h,--help
-
自动生成应用程序在 bash 下命令自动完成功能
-
自动生成应用程序的 man 手册
-
命令行别名
-
自定义 help 和 usage 信息
-
可选的与 viper apps 的紧密集成
cobra 中的主要概念
-
Commands 表示执行动作
<

本文详细介绍了kubectl的职责,包括处理用户命令行参数和YAML文件,与API Server交互。同时,文章深入剖析了kubectl的代码原理,特别是create命令的执行入口。此外,文章还探讨了cobra库的使用,包括子命令、参数验证、帮助信息等功能,以及如何利用cobra创建和定制CLI应用。
最低0.47元/天 解锁文章
1140

被折叠的 条评论
为什么被折叠?



