k8s 开源_openstack源码

k8s 开源_openstack源码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/168520.html原文链接:https://javaforall.net

(0)
上一篇 2022年8月9日 下午5:46
下一篇 2022年8月9日 下午5:46


相关推荐

  • repeater嵌套以及合计问题

    repeater嵌套以及合计问题这次是做免费品订单的详情页面,根据需求,要做如下展示看着还行,就是repeater里面嵌套一个repeater呗,因为之前做过类似的,代码实现不是什么大问题,存储过程也都可以搞定,第二层的repeater这么绑定就可以了protectedvoidrptSapOrderList_ItemDataBound(objectsender,RepeaterItemEventArgse)

    2022年7月14日
    31
  • vscode python flake8 报错怎么办

    vscode python flake8 报错怎么办vscodepythonflake8报错怎么办

    2025年11月8日
    4
  • Fluentd学习笔记

    Fluentd学习笔记转载自 https blog laisky com p fluentd fluentd 学习笔记 fluentd 学习笔记最近为了做一些数据分析 把我自己服务器上所有应用的日志都通过 fluentd 转存到 mongodb 了 第一次用 fluentd 记录一些笔记 因为是初学 绝大部分内容来源于官方文档 2 等实际线上使用一段时

    2026年3月17日
    1
  • Kibana 使用 KQL 查询语法-kibana 常用查询语法

    Kibana 使用 KQL 查询语法-kibana 常用查询语法Kibana 查询语言 KQL 是一种使用自由文本搜索或基于字段的搜索过滤 Elasticsearc 数据的简单语法 KQL 仅用于过滤数据 并没有对数据进行排序或聚合的作用 KQL 能够在您键入时建议字段名称 值和运算符 建议的性能由 Kibana 设置控制 KQL 具有与 Lucene 查询语法不同的一组特性 KQL 能够查询嵌套字段和脚本字段 KQL 不支持正则表达式或使用模糊术语进行搜索 要使用旧版 Lucene 语法 请单击搜索字段旁边的 KQL 然后关闭 KQL 术语

    2026年3月18日
    1
  • 微信公众号网页开发和小程序开发之路哪个好_如何制作微信公众号

    微信公众号网页开发和小程序开发之路哪个好_如何制作微信公众号在微信公众号网页和小程序开发的过程中,难免会遇到一些知识外的兼容问题。在此记录我所遇到的问题,以便给需要的前端开发者查阅。

    2022年10月12日
    5
  • mysql数据库面试题目及答案_数据库面试题2021

    mysql数据库面试题目及答案_数据库面试题2021MySQL数据库面试题(2022版)文章目录一、基础基本概念MySQL有哪些数据库类型?CHAR和VARCHAR区别?数据库设计什么是三大范式?什么是范式和反范式,以及各自优缺点?二、索引索引的几种类型或分类?索引的优缺点?索引设计原则?索引的数据结构?Hash和B+树索引的区别?为何使用B+树而非B树做索引?什么是最左匹配原则?什么是覆盖索引?什么是索引下推?三、存储存储引擎有哪些常见的存储引擎?MyISAM和InnoDB的区别?InnoDB的四大特性?InnoDB为.

    2022年10月8日
    6

发表回复

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

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