当前位置: 首页 > news >正文

网站开发安全性分析深圳市门户网站建设多少钱

网站开发安全性分析,深圳市门户网站建设多少钱,企业站模板明细,定制网站开发都提供那些东西目录 概述实践样例yaml 中的必须字段 kubectl 代码原理kubectl 命令行设置pprof 抓取火焰图kubectl 中的 cobra 七大分组命令kubectl createcreateCmd中的builder模式createCmd中的visitor访问者模式外层VisitorFunc分析 结束 概述 k8s 版本 v1.24.16 kubectl的职责 1.主要的… 目录 概述实践样例yaml 中的必须字段 kubectl 代码原理kubectl 命令行设置pprof 抓取火焰图kubectl 中的 cobra 七大分组命令kubectl createcreateCmd中的builder模式createCmd中的visitor访问者模式外层VisitorFunc分析 结束 概述 k8s 版本 v1.24.16 kubectl的职责 1.主要的工作是处理用户提交的东西(包括命令行参数yaml文件等)2.将用户提交的这些东西组织成一个数据结构体3.再将其发送给 api server 实践 文章名链接linux k8s 源码编译及单集群测试地址k8s源码debug地址 样例 cat test/fixtures/doc-yaml/user-guide/pod.yaml apiVersion: v1 kind: Pod metadata:name: nginxlabels:app: nginx spec:containers:- name: nginximage: nginxports:- containerPort: 80字段名含义kindPodmetadata.namespec.containers.namespec.containers.imageimage名称:版本 对象规约(Spec) 与状态 (Status) 几乎每个 Kubernetes 对象包含两个嵌套的对象字段它们负责管理对象的配置对象 spec (规约) 和对象 status (状态)对于具有 spec 的对象必须在创建对象时设置具体内容描述你希望对象所具有的特征期望状态 (Desired State) yaml 中的必须字段 在想要创建的 Kubernetes 对象对应的 yaml 文件中需要配置如下的字段 apiVersion - 创建该对象所使用的 Kubernetes API 的版本kind - 想要创建的对象的类别metadata - 帮助唯一标识对象的一些数据包括一个 name 字符串、UID和可选的 namespace [roottest kubernetes]# ./cluster/kubectl.sh get pods NAME READY STATUS RESTARTS AGE nginx 1/1 Running 0 89s字段名含义NAMEnginx就是对应yaml中metadata.nameREADY就绪个数STATUS当前的状态RUNNING表示运行中RESTARTS重启的次数代表没有重启过AGE运行的时长 kubectl 代码原理 1.从命令行和 yaml 文件中获取信息2.通过 Builder 模式并将其转成一系列的资源3.最后用 Visitor 模式来迭代处理这些 Resources 源码位置 kubectl 命令行设置pprof 抓取火焰图 kubectl 中的 cobra 底层函数 NewKubectlCommand 解析在 PersistentPreRunE 设置 prrof 采集相关指令在 PersistentPostRunE 设置了 pprof 统计结果落盘执行采集 pprof cpu 的 kubelet 命令 kubectl.go -- command : cmd.NewDefaultKubectlCommand()cmd.go -- return NewDefaultKubectlCommandWithArgs(KubectlOptions{ --cmd : NewKubectlCommand(o)# cpu.pprof 文件在当前命令执行目录下 kubectl get node --profilecpu --profile-outputcpu.pprof # ll # 使用 go 工具将 pprof 转换成 svg 火焰图 go tool pprof -svg cpu.pprof kubectl_get_node_cpu.svg # 下载下来在浏览器打开七大分组命令 kubectl.go -- command : cmd.NewDefaultKubectlCommand()cmd.go -- var defaultConfigFlags genericclioptions.NewConfigFlags(true).WithDeprecatedPasswordFlag().WithDiscoveryBurst(300).WithDiscoveryQPS(50.0) -- f : cmdutil.NewFactory(matchVersionKubeConfigFlags) -- proxyCmd : proxy.NewCmdProxy(f, o.IOStreams)proxyCmd.PreRun func(cmd *cobra.Command, args []string) {kubeConfigFlags.WrapConfigFn nil}groups : templates.CommandGroups{{Message: Basic Commands (Beginner):,Commands: []*cobra.Command{create.NewCmdCreate(f, o.IOStreams),expose.NewCmdExposeService(f, o.IOStreams),run.NewCmdRun(f, o.IOStreams),set.NewCmdSet(f, o.IOStreams),},},{Message: Basic Commands (Intermediate):,Commands: []*cobra.Command{explain.NewCmdExplain(kubectl, f, o.IOStreams),getCmd,edit.NewCmdEdit(f, o.IOStreams),delete.NewCmdDelete(f, o.IOStreams),},},{Message: Deploy Commands:,Commands: []*cobra.Command{rollout.NewCmdRollout(f, o.IOStreams),scale.NewCmdScale(f, o.IOStreams),autoscale.NewCmdAutoscale(f, o.IOStreams),},},{Message: Cluster Management Commands:,Commands: []*cobra.Command{certificates.NewCmdCertificate(f, o.IOStreams),clusterinfo.NewCmdClusterInfo(f, o.IOStreams),top.NewCmdTop(f, o.IOStreams),drain.NewCmdCordon(f, o.IOStreams),drain.NewCmdUncordon(f, o.IOStreams),drain.NewCmdDrain(f, o.IOStreams),taint.NewCmdTaint(f, o.IOStreams),},},{Message: Troubleshooting and Debugging Commands:,Commands: []*cobra.Command{describe.NewCmdDescribe(kubectl, f, o.IOStreams),logs.NewCmdLogs(f, o.IOStreams),attach.NewCmdAttach(f, o.IOStreams),cmdexec.NewCmdExec(f, o.IOStreams),portforward.NewCmdPortForward(f, o.IOStreams),proxyCmd,cp.NewCmdCp(f, o.IOStreams),auth.NewCmdAuth(f, o.IOStreams),debug.NewCmdDebug(f, o.IOStreams),},},{Message: Advanced Commands:,Commands: []*cobra.Command{diff.NewCmdDiff(f, o.IOStreams),apply.NewCmdApply(kubectl, f, o.IOStreams),patch.NewCmdPatch(f, o.IOStreams),replace.NewCmdReplace(f, o.IOStreams),wait.NewCmdWait(f, o.IOStreams),kustomize.NewCmdKustomize(o.IOStreams),},},{Message: Settings Commands:,Commands: []*cobra.Command{label.NewCmdLabel(f, o.IOStreams),annotate.NewCmdAnnotate(kubectl, f, o.IOStreams),completion.NewCmdCompletion(o.IOStreams.Out, ),},}, }kubectl create // 进入口 create.NewCmdCreate(f, o.IOStreams)// 核心的cmd.Run函数 // 校验文件参数 if cmdutil.IsFilenameSliceEmpty(o.FilenameOptions.Filenames, o.FilenameOptions.Kustomize) {ioStreams.ErrOut.Write([]byte(Error: must specify one of -f and -k\n\n))defaultRunFunc : cmdutil.DefaultSubCommandRun(ioStreams.ErrOut)defaultRunFunc(cmd, args)return }// 完善并填充所需字段 cmdutil.CheckErr(o.Complete(f, cmd)) // 校验参数 cmdutil.CheckErr(o.ValidateArgs(cmd, args)) // 核心的RunCreate // 发送请求与 api server 通信 cmdutil.CheckErr(o.RunCreate(f, cmd))createCmd中的builder模式 createCmd中的builder建造者设计模式 // 快速定位代码 cmdutil.CheckErr(o.RunCreate(f, cmd)) -- r : f.NewBuilder().Unstructured().Schema(schema).ContinueOnError().NamespaceParam(cmdNamespace).DefaultNamespace().FilenameParam(enforceNamespace, o.FilenameOptions).LabelSelectorParam(o.Selector).Flatten().Do()createCmd中的visitor访问者模式 访问都模式(Visitor Pattern) 是一种将数据结构与数据操作分离的设计模式指封装一些作用于某种数据结构中的各元素的操作可以在不改变数据结构的前提下定义作用于这些元素的新的操作属于行为型设计模式 使用场景 数据结构稳定作用于数据结构的操作经常变化的场景需要数据结构与数据操作分享的场景需要对不同数据类型(元素)进行操作而不使用分支判断具体类型的场景 // 快速定位代码 cmdutil.CheckErr(o.RunCreate(f, cmd)) -- err r.Visit(func(info *resource.Info, err error) error {// 注意 Visit 是由 Builder 中 FilenameParam 构建的 r : f.NewBuilder()....// 构建 VisitFilenameParam(enforceNamespace, o.FilenameOptions)....// 创建 VisitDo() // 定位 FilenameParam -- b.Path(recursive, matches...) -- visitors, err : ExpandPathsToFileVisitors(b.mapper, p, recursive, FileExtensions, b.schema) --visitor : FileVisitor{Path: path,StreamVisitor: NewStreamVisitor(nil, mapper, path, schema),}FilenameParam -- b.Path(recursive, matches…) 位置 // NewStreamVisitor is a helper function that is useful when we want to change the fields of the struct but keep calls the same. func NewStreamVisitor(r io.Reader, mapper *mapper, source string, schema ContentValidator) *StreamVisitor {return StreamVisitor{Reader: r,mapper: mapper,Source: source,Schema: schema,} }// 解析 yaml 或者 json 配置 // Visit implements Visitor over a stream. StreamVisitor is able to distinct multiple resources in one stream. func (v *StreamVisitor) Visit(fn VisitorFunc) error {d : yaml.NewYAMLOrJSONDecoder(v.Reader, 4096)for {ext : runtime.RawExtension{}if err : d.Decode(ext); err ! nil {if err io.EOF {return nil}return fmt.Errorf(error parsing %s: %v, v.Source, err)}// TODO: This needs to be able to handle object in other encodings and schemas.ext.Raw bytes.TrimSpace(ext.Raw)if len(ext.Raw) 0 || bytes.Equal(ext.Raw, []byte(null)) {continue}if err : ValidateSchema(ext.Raw, v.Schema); err ! nil {return fmt.Errorf(error validating %q: %v, v.Source, err)}info, err : v.infoForData(ext.Raw, v.Source)if err ! nil {if fnErr : fn(info, err); fnErr ! nil {return fnErr}continue}if err : fn(info, nil); err ! nil {return err}} }// 上面方法中重点如下代码 info, err : v.infoForData(ext.Raw, v.Source)// obj 代表 k8s的对象 // gvk 代表 Group/Version/Kind 的缩写 obj, gvk, err : m.decoder.Decode(data, nil, nil)外层VisitorFunc分析 如查出错即返回错误DryRunStrategy 代表试运行策略 默认为 None 代表不试运行client 代表客户端试运行不发送请求至 serverserver 点服务端试运行发送请求但是如果会改变状态的话就不做 err r.Visit(func(info *resource.Info, err error) error { -- if o.DryRunStrategy ! cmdutil.DryRunClient { -- Create(info.Namespace, true, info.Object)(最终创建资源)结束 kubectl使用及进阶 至此结束。
http://www.hkea.cn/news/14406576/

相关文章:

  • 青岛网站设计皆挺青岛博采网络外贸公司电话
  • 俄语淘宝网站建设界面设计的基本原则
  • h5响应式网站是什么意思南昌有什么网站
  • 网站制作可以卖多少钱一般通过什么渠道了解防灾减灾知识
  • 蔚县网站建设韩国优秀设计网站
  • 网站开发技术文档 范本架设网站的目的
  • 网站建设启动大会黄冈网站建设报价表
  • wap网站建设哪家好重庆简易注销在什么网站做
  • 免费com网站域名注册怎么直接做免费网站吗
  • 个体工商户能做网站吗正能量软件网站免费入口
  • 广西钦州住房与城乡建设局网站网络营销渠道可分为哪些
  • 可以做防盗水印的网站宁波网站推广优化公司电话
  • 织梦欧美网站模板电脑什么网站可以做长图攻略
  • 江都建设局网站李局阿里巴巴网站推广方法
  • 泰州网站制作推广道滘镇网站建设公司
  • 可以在自己的电脑上做网站吗死链对网站链轮的影响
  • 招标信息网哪个比较好seo营销型网站
  • 中山建设信息网站兰州网站开发哪里可以做
  • 网站备案通过什么可以备案四川网站建设 lkcms
  • 河南省住房与城乡建设厅网站首页番禺建网站
  • 只用html5做网站沈阳市建设工程信息网招标公告
  • 湖南养老院中企动力网站建设厦门网站建设公司电话
  • 江西建设厅官方网站seo在线培训
  • 做装修的业务网站龙岩公司做网站
  • 东莞金融网站建设张掖高端网站建设公司
  • 网站建设费无形资产备案通过的网站
  • 自己服务器建设网站上海市建设安全协会 - 网站首页
  • 怎样建立自己的个人网站用户体验设计原则
  • 企业网站开发软件房产网站开发文档
  • 企业网站形象建设自己公司怎么做网站