k8s 开源_jdk源码剖析手册

k8s 开源_jdk源码剖析手册createfunc main() { #随机数 rand.Seed(time.Now().UnixNano()) #创建一个新的命令行对象 command := cmd.NewDefaultKubectlCommand() #日志 logs.InitLogs() defer logs.FlushLogs() #真正执行的命令行 if err := command.Execute(); err != nil { os.Exit(1) }}# NewDefaultKubectl

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

create

func main() { 
   
	#随机数
	rand.Seed(time.Now().UnixNano())
	#创建一个新的命令行对象
	command := cmd.NewDefaultKubectlCommand()
	#日志
	logs.InitLogs()
	defer logs.FlushLogs()
	#真正执行的命令行
	if err := command.Execute(); err != nil { 
   
		os.Exit(1)
	}
}
# NewDefaultKubectlCommand函数
# in io.Reader, out, errout io.Writer 标准输入 标准输出 标准错误输出
func NewDefaultKubectlCommandWithArgs(pluginHandler PluginHandler, args []string, in io.Reader, out, errout io.Writer) *cobra.Command { 
   
	#创建一个新的命令行
	cmd := NewKubectlCommand(in, out, errout)
	if len(args) > 1 { 
   
	
	#第一个参数 即create -f nginx_pod.yml部分
		cmdPathPieces := args[1:]
		#调用cmd的find函数去匹配参数
		if _, _, err := cmd.Find(cmdPathPieces); err != nil { 
   
			if err := HandlePluginCommand(pluginHandler, cmdPathPieces); err != nil { 
   
				fmt.Fprintf(errout, "Error: %v\n", err)
				os.Exit(1)
			}
		}
	}

	return cmd
}
func NewKubectlCommand(in io.Reader, out, err io.Writer) *cobra.Command { 

#打印help出现的信息
cmds := &cobra.Command{ 

Use:   "kubectl",
Short: i18n.T("kubectl controls the Kubernetes cluster manager"),
Long: templates.LongDesc(` kubectl controls the Kubernetes cluster manager. Find more information at: https://kubernetes.io/docs/reference/kubectl/overview/`),
Run: runHelp,
#运行函数之前的钩子
PersistentPreRunE: func(*cobra.Command, []string) error { 

rest.SetDefaultWarningHandler(warningHandler)
#运行前初始化性能评估的工作
return initProfiling()
},
#运行函数之后的钩子
PersistentPostRunE: func(*cobra.Command, []string) error { 

#运行后的保存性能检测的工作
if err := flushProfiling(); err != nil { 

return err
}
#打印警报
if warningsAsErrors { 

,,,
}
return nil
},
}
groups := templates.CommandGroups{ 

{ 

#命令的信息 初级命令
Message: "Basic Commands (Beginner):",
#里面有create expose run set 命令
Commands: []*cobra.Command{ 

create.NewCmdCreate(f, ioStreams),
expose.NewCmdExposeService(f, ioStreams),
run.NewCmdRun(f, ioStreams),
set.NewCmdSet(f, ioStreams),
},
},
{ 

#中级命令
Message: "Basic Commands (Intermediate):",
#包含explain get edit 等
Commands: []*cobra.Command{ 

explain.NewCmdExplain("kubectl", f, ioStreams),
get.NewCmdGet("kubectl", f, ioStreams),
edit.NewCmdEdit(f, ioStreams),
delete.NewCmdDelete(f, ioStreams),
},
},
{ 
	#部署相关的内容
Message: "Deploy Commands:",
Commands: []*cobra.Command{ 

rollout.NewCmdRollout(f, ioStreams),
scale.NewCmdScale(f, ioStreams),
autoscale.NewCmdAutoscale(f, ioStreams),
},
},
...
# kubectl下面添加的其他的一些子命令
cmds.AddCommand(alpha)
cmds.AddCommand(cmdconfig.NewCmdConfig(clientcmd.NewDefaultPathOptions(), ioStreams))
cmds.AddCommand(plugin.NewCmdPlugin(ioStreams))
#create.NewCmdCreate(f, ioStreams),
func NewCmdCreate(f cmdutil.Factory, ioStreams genericclioptions.IOStreams) *cobra.Command { 

o := NewCreateOptions(ioStreams)
cmd := &cobra.Command{ 

Use:                   "create -f FILENAME",#范例和我们的命令很相似
DisableFlagsInUseLine: true,
Short:                 i18n.T("Create a resource from a file or from stdin"),
Long:                  createLong,
Example:               createExample,	#提供的其他一些创建的实例
Run: func(cmd *cobra.Command, args []string) { 

#文件名是否为空
if cmdutil.IsFilenameSliceEmpty(o.FilenameOptions.Filenames, o.FilenameOptions.Kustomize) { 

...
}
#验证参数
cmdutil.CheckErr(o.ValidateArgs(cmd, args))
#真正的运行create函数
cmdutil.CheckErr(o.RunCreate(f, cmd))
},
}
...
#创建create 下面的子命令
// create subcommands
cmd.AddCommand(NewCmdCreateNamespace(f, ioStreams))
...
}
#RunCreate
#f为传入的Factory 主要是封装了与kube-apiserver交互的客户端
func (o *CreateOptions) RunCreate(f cmdutil.Factory, cmd *cobra.Command) error { 
	
...
#验证命令是否合法
schema, err := f.Validator(cmdutil.GetFlagBool(cmd, "validate"))
if err != nil { 

return err
}
...
#builder
r := f.NewBuilder().
...
NamespaceParam(cmdNamespace).DefaultNamespace().
#支持那种类型的filename  支持 管道的 也支持http 和 https的
FilenameParam(enforceNamespace, &o.FilenameOptions).
...
#真正执行代码
Do()
err = r.Err()
if err != nil { 

return err
}
...
count++
#最后在命令行打印create XXX成功创建
return o.PrintObj(info.Object)
})
...
}

Create->CreateWithOptions->createResource

# createResource
#客户端采用RESTFUL风格的 runtime,object是对资源的抽象
func (m *Helper) createResource(c RESTClient, resource, namespace string, obj runtime.Object, options *metav1.CreateOptions) (runtime.Object, error) { 

#Post对应RestFul里面 post方法
return c.Post().
NamespaceIfScoped(namespace, m.NamespaceScoped).
Resource(resource).
VersionedParams(options, metav1.ParameterCodec).
Body(obj).
#将request转换成result
Do(context.TODO()).
#将result转换成为资源对象
Get()
}
#Do函数
func (r *Request) Do(ctx context.Context) Result { 

var result Result
#发送请求到server创建资源
err := r.request(ctx, func(req *http.Request, resp *http.Response) { 

根据返回的resp和req转换对象
result = r.transformResponse(resp, req)
})
return result
}

Do –> r.request->resp, err := client.Do(req) –> resp, err := client.Do(req) –> esp, didTimeout, err = c.send(req, deadline) –> resp, didTimeout, err = send(req, c.transport(), deadline) –> RoundTrip(*Request) (*Response, error) 轮询算法 –> 发送请求给server 获得response

在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/169046.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • CareerCup它1.8 串移包括问题

    CareerCup它1.8 串移包括问题

  • 矩阵的模的平方matlab,matlab求矩阵、向量的模

    矩阵的模的平方matlab,matlab求矩阵、向量的模求矩阵的模:functioncount=juZhenDeMo(a,b)[r,c]=size(a);%求a的行列[r1,c1]=size(b);%求b的行列count=0;forj=1:r-r1+1%所求的行数中取fori=1:c-c1+1%所有的列数中取d=a(j:j+r1-1,i:i+c1-1);e=double(d==b);if(sum(e(:))==r1*c1)…

  • 游戏数据实时监控和分析[通俗易懂]

    游戏数据实时监控和分析[通俗易懂]概述为了更好的了解到游戏运行时的状态,对相关的功能和数据进行分析是很重要的,设计了本系统。现有的游戏数据大部分采用的是文本输出,备份,然后离线数据分析的方式,不能实时的监控的游戏的状态.相关技术:1:产生日志服务器采用c++实现2:日志监控服务器采用Java实现3:采用hadloop分布式架构.为应付大规模数据和实时的要求,尽快对数据进行分析4:存储日志采用mo

  • 拼多多下载安装_快影下载安装

    拼多多下载安装_快影下载安装SQLite的最新版本可以从这里下载。下面我们以Windows版本sqlite-3_5_1.zip为例介绍其安装方法。(大家可以选择下载安装适合自己的版本)下载后,将sqlite-3_5_1.zip解压缩至C:/sqlite目录即完成安装。C:/sqlite目录构造为:C:/sqlite|+–sqlite3.exe打开一个CMD命令窗口

    2022年10月28日
  • okhttp的MediaType.parse属性

    okhttp的MediaType.parse属性okhttp的MediaType.parse属性学习记录MediaType指的是要传递的数据的MIME类型,MediaType对象包含了三种信息:type、subtype以及charset,一般将这些信息传入parse()方法中,这样就可以解析出MediaType对象,比如“text/x-markdown;charset=utf-8”,type值是text,表示是文本这一大类;/后面的…

  • 怎么将pdf转换成image_php从入门到精通 pdf

    怎么将pdf转换成image_php从入门到精通 pdf上次找到fpdf发现文档支持不足。而且含有php5.4不能用了的过期函数,图片进去也显示不了等问题。特意找到这个tcpdf。下载的地址搞一个试试中文字体包下载%20Sans%20Fallback%20-%20PHP.zip/download下载后,将它解压放在droidsansfallback.php、droidsansfallback.z以及droidsansfallback.ctg.z这三个文…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号