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

在这里插入图片描述

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • KLayout教程(五)Pcells(parametric cells)可以画圆

    KLayout教程(五)Pcells(parametric cells)可以画圆1、instance里面,有一个basiclayoutobjects,然后点击下面cell里的cicle就可以画圆,然后旁边pcell可以选圆的半径,图层,由多少点构成(KLayout里没有真正的圆,都是由多边形构成的)。2、其他的,还有个功能,比如你创建好后一个多边形,然后选中后edit-selection-converttoPcells,我这个地方选的round-polygon(其他的可以自己试一下)3、光刻的时候想添加字体的话,就点击上方的按钮text,然后输上自己想要显示的话,然后.

    2025年6月28日
    0
  • OKhttpClient 简单使用总结「建议收藏」

    http优化,由httpClient改为OKHttpClient,研究了一下,网上资料不多大部分是安卓的,就着httpClient的入参简单写了一个公共方法,因为上一层使用了hystrix,就没有使用异步调用。后期看业务需要增加OKHttp的拦截和其他特性。注意请求timeout报java.io.InterruptedIOException:threadinterrupted异常,希望最新…

    2022年4月16日
    53
  • jquery拼音转汉字搜索[通俗易懂]

    jquery拼音转汉字搜索[通俗易懂]HTML:1DOCTYPEhtmlPUBLIC”-//W3C//DTDXHTML1.0Transitional//EN””http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>2htmlxmlns=”http://www.w3.org/1999/xhtml”>34head>5

    2022年7月24日
    12
  • Xna中利用Slimdx绘制中文

    Xna中利用Slimdx绘制中文国外网站看到的 在这分享给大家 http teamessell shiftarch com sixfont SIXFONT SlimDXinXNAF isawrapperth Itisopensour Itiscomplete

    2025年9月21日
    3
  • cada0图纸尺寸_a0图纸尺寸[通俗易懂]

    cada0图纸尺寸_a0图纸尺寸[通俗易懂]a0图纸尺寸a0图纸尺寸问题:a0图纸尺寸答案:841mm*1189mm【相关阅读】1、什么是a0图纸a0图纸是一种很大的绘图纸,这种纸张比一般的复印纸要厚,也比一般的复印纸要黄一点,这种绘图纸一面比较光滑,适合画图用,另一面比较粗糙。但是很多人都感觉不出来,也看不出来。a0图纸广泛的运用于各种建筑设计,规划设计,工业设计,产品设计等等,很多这个专业的学生,从大一开…

    2022年6月20日
    74
  • html文件怎么转换成word文件_word转换成网页文件格式不对

    html文件怎么转换成word文件_word转换成网页文件格式不对1回答2021-05-06浏览:0分类:办公入门回答:点击菜单,选择另存为在弹出的窗口选择文档类型为:网页类型(htm*HTML)取好名字和路径,确认保存2回答2020-11-28浏览:5分类:其他问题回答:1、打开HTML文件,点击菜单栏文件→使用MicrosoftOfficeWord编辑,之后系统会自动打开Word并显示HTML文件的内容,这是保存即可。2、如果…

    2022年10月10日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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