kubectl 源码之create namespace

kubectl滚动更新资源 rollout Manage the rollout of a resource. Valid resource types include: * deployments * daemonsets * statefulsets Examples: # Rollback to the previous deployment kubectl rollout undo deployment/abc # Check the rollout status of a da 阅读详情

 欢迎关注我的公众号:

 目前刚开始写一个月,一共写了18篇原创文章,文章目录如下:

istio多集群探秘,部署了50次多集群后我得出的结论

istio多集群链路追踪,附实操视频

istio防故障利器,你知道几个,istio新手不要读,太难!

istio业务权限控制,原来可以这么玩

istio实现非侵入压缩,微服务之间如何实现压缩

不懂envoyfilter也敢说精通istio系列-http-rbac-不要只会用AuthorizationPolicy配置权限

不懂envoyfilter也敢说精通istio系列-02-http-corsFilter-不要只会vs

不懂envoyfilter也敢说精通istio系列-03-http-csrf filter-再也不用再代码里写csrf逻辑了

不懂envoyfilter也敢说精通istio系列http-jwt_authn-不要只会RequestAuthorization

不懂envoyfilter也敢说精通istio系列-05-fault-filter-故障注入不止是vs

不懂envoyfilter也敢说精通istio系列-06-http-match-配置路由不只是vs

不懂envoyfilter也敢说精通istio系列-07-负载均衡配置不止是dr

不懂envoyfilter也敢说精通istio系列-08-连接池和断路器

不懂envoyfilter也敢说精通istio系列-09-http-route filter

不懂envoyfilter也敢说精通istio系列-network filter-redis proxy

不懂envoyfilter也敢说精通istio系列-network filter-HttpConnectionManager

不懂envoyfilter也敢说精通istio系列-ratelimit-istio ratelimit完全手册

 

————————————————

func NewCmdCreateNamespace(f cmdutil.Factory, ioStreams genericclioptions.IOStreams) *cobra.Command {
	options := &NamespaceOpts{
		CreateSubcommandOptions: NewCreateSubcommandOptions(ioStreams),
	}

	cmd := &cobra.Command{
		Use:                   "namespace NAME [--dry-run]",
		DisableFlagsInUseLine: true,
		Aliases:               []string{"ns"},
		Short:                 i18n.T("Create a namespace with the specified name"),
		Long:                  namespaceLong,
		Example:               namespaceExample,
		Run: func(cmd *cobra.Command, args []string) {
			cmdutil.CheckErr(options.Complete(f, cmd, args))
			cmdutil.CheckErr(options.Run())
		},
	}

	options.CreateSubcommandOptions.PrintFlags.AddFlags(cmd)

	cmdutil.AddApplyAnnotationFlags(cmd)
	cmdutil.AddValidateFlags(cmd)
	cmdutil.AddGeneratorFlags(cmd, generateversioned.NamespaceV1GeneratorName)

	return cmd
}

创建create ns 命令,option有save-config,validate,generator,output

type NamespaceOpts struct {
	CreateSubcommandOptions *CreateSubcommandOptions
}

create选项,内嵌一个CreateSubcommandOptions选项

func (o *NamespaceOpts) Complete(f cmdutil.Factory, cmd *cobra.Command, args []string) error {
	name, err := NameFromCommandArgs(cmd, args)
	if err != nil {
		return err
	}

	var generator generate.StructuredGenerator
	switch generatorName := cmdutil.GetFlagString(cmd, "generator"); generatorName {
	case generateversioned.NamespaceV1GeneratorName:
		generator = &generateversioned.NamespaceGeneratorV1{Name: name}
	default:
		return errUnsupportedGenerator(cmd, generatorName)
	}

	return o.CreateSubcommandOptions.Complete(f, cmd, args, generator)
}

namespceoption complete方法,抽取namespace name,判断generator,然后运行createSubCommandOption的complete

func (o *CreateSubcommandOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, args []string, generator generate.StructuredGenerator) error {
	name, err := NameFromCommandArgs(cmd, args)
	if err != nil {
		return err
	}

	o.Name = name
	o.StructuredGenerator = generator
	o.DryRun = cmdutil.GetDryRunFlag(cmd)
	o.CreateAnnotation = cmdutil.GetFlagBool(cmd, cmdutil.ApplyAnnotationsFlag)

	if o.DryRun {
		o.PrintFlags.Complete("%s (dry run)")
	}
	printer, err := o.PrintFlags.ToPrinter()
	if err != nil {
		return err
	}

	o.PrintObj = func(obj kruntime.Object, out io.Writer) error {
		return printer.PrintObj(obj, out)
	}

	o.Namespace, o.EnforceNamespace, err = f.ToRawKubeConfigLoader().Namespace()
	if err != nil {
		return err
	}

	o.DynamicClient, err = f.DynamicClient()
	if err != nil {
		return err
	}

	o.Mapper, err = f.ToRESTMapper()
	if err != nil {
		return err
	}

	return nil
}

create子命令completion方法,获取namespace name,设置namespacename,设置generator,设置save-config flag,判断dry-run,printflag转换为printer,设置printObj方法,获取namespace和enforcenamespace,设置dynamicClient,设置mapper。

  • RESTClient:RESTClient是最基础的,相当于的底层基础结构,可以直接通过 是RESTClient提供的RESTful方法如Get(),Put(),Post(),Delete()进行交互
    • 同时支持Json 和 protobuf
    • 支持所有原生资源和CRDs
    • 但是,一般而言,为了更为优雅的处理,需要进一步封装,通过Clientset封装RESTClient,然后再对外提供接口和服务
  • Clientset:Clientset是调用Kubernetes资源对象最常用的client,可以操作所有的资源对象,包含RESTClient。需要指定Group、指定Version,然后根据Resource获取

    • 优雅的姿势是利用一个controller对象,再加上Informer
  • DynamicClient:Dynamic client 是一种动态的 client,它能处理 kubernetes 所有的资源。不同于 clientset,dynamic client 返回的对象是一个 map[string]interface{},如果一个 controller 中需要控制所有的 API,可以使用dynamic client,目前它在 garbage collector 和 namespace controller中被使用。

func (o *NamespaceOpts) Run() error {
	return o.CreateSubcommandOptions.Run()
}

实际运行逻辑,是CreatesubCommandOption的run

func (o *CreateSubcommandOptions) Run() error {
	obj, err := o.StructuredGenerator.StructuredGenerate()
	if err != nil {
		return err
	}
	if !o.DryRun {
		// create subcommands have compiled knowledge of things they create, so type them directly
		gvks, _, err := scheme.Scheme.ObjectKinds(obj)
		if err != nil {
			return err
		}
		gvk := gvks[0]
		mapping, err := o.Mapper.RESTMapping(schema.GroupKind{Group: gvk.Group, Kind: gvk.Kind}, gvk.Version)
		if err != nil {
			return err
		}

		if err := util.CreateOrUpdateAnnotation(o.CreateAnnotation, obj, scheme.DefaultJSONEncoder()); err != nil {
			return err
		}

		asUnstructured := &unstructured.Unstructured{}

		if err := scheme.Scheme.Convert(obj, asUnstructured, nil); err != nil {
			return err
		}
		if mapping.Scope.Name() == meta.RESTScopeNameRoot {
			o.Namespace = ""
		}
		actualObject, err := o.DynamicClient.Resource(mapping.Resource).Namespace(o.Namespace).Create(asUnstructured, metav1.CreateOptions{})
		if err != nil {
			return err
		}

		// ensure we pass a versioned object to the printer
		obj = actualObject
	} else {
		if meta, err := meta.Accessor(obj); err == nil && o.EnforceNamespace {
			meta.SetNamespace(o.Namespace)
		}
	}

	return o.PrintObj(obj, o.Out)
}

根据generator后去obj对象,如果是非干跑,获取groupversionkind,获取restmapping,根据save-config选项更新注解

把obj转换为Unstructured,根据mapping的scope设置namespace,用DynamicClient创建资源。打印obj。

yolov8训练模型的一些心得-总结篇 先放在这,等过几天我都弄完了详细给大家说说(哈哈其实是给我自己说说,记录一下怕忘记) 阅读详情

相关推荐

Kubectl命令实战指南:从基础查询到高级调试的完整工作流

在云原生和容器化技术领域,Kubernetes已成为容器编排的事实标准,而kubectl则是开发者与运维人员管理K8s集群的核心命令行工具。理解其工作原理,对于高效进行容器部署、服务编排和集群运维至关重要。kubectl遵循以资源为核心的“增删改查”设计哲学,通过组合动作、资源类型和选项,实现对Pod、Deployment、Service等资源的声明式管理。其技术价值在于提供了统一、强大的接口,将复杂的集群操作抽象为简洁命令,极大地提升了容器化应用的部署效率和运维可控性。在实际应用场景中,无论是日常的资源查

487

k8s实战之kubectl

本课程将详细介绍k8s所有命令,以及命令的go源码分析,学习知其然,知其所以然

K8S(Kubernetes)简介和官方安装部署保姆级详细教程

Kubernetes简称为K8s,是用于自动部署、扩缩和管理容器化应用程序的开源系统,起源于Google 集群管理工具Borg。

BlogPan的专栏 4万+

kubectl源码分析之apply

发布一个k8s部署视频:https://edu.youkuaiyun.com/course/detail/26967 课程内容:各种k8s部署方式。包括minikube部署,kubeadm部署,kubeasz部署,rancher部署,k3s部署。包括开发测试环境部署k8s,和生产环境部署k8s。 腾讯课堂连接地址https://ke.qq.com/course/478827?taid=4373109931462251&tuin=ba64518 第二个视频发布https://edu.youkuaiyun.com/c..

mark's technic world 1809

Kubernetes深度排障实战:从kubectl到内核的三层穿透式观察

Kubernetes不是黑盒,而是一套可测量、可调试、可验证的分布式系统。理解其工作原理需超越kubectl命令表层,深入API调用链、组件决策逻辑与内核网络栈三层结构。掌握kube-apiserver的watch机制、scheduler的Predicate评估日志语义、cgroup v2与containerd的适配细节,是实现稳定运维的核心能力。这些技术价值直接支撑企业级高可用集群部署、Ingress 502根因定位、etcd脑裂熔断恢复等关键场景。本文聚焦‘ubuntu 22.04 安装kubernet

weixin_33860553的博客 322

Dify部署全方案对比:Docker、Kubernetes与源码部署实战指南

Dify作为企业级AI智能体开发平台,其部署本质是构建带状态的AI服务集群,涉及PostgreSQL元数据管理、Redis缓存队列、向量数据库(如Qdrant)及异步任务调度等核心组件。理解其多服务协同原理,是规避连接超时、权限认证失败、OOM崩溃等高频故障的前提。技术价值在于统一抽象Prompt工程、RAG知识库与工作流编排,支撑AI能力API化与生产就绪。典型应用场景包括AI中台建设、内部智能助手平台及合规敏感型Agent定制开发。本文聚焦Dify部署的三大路径——轻量验证用Docker、高可用生产选K

weixin_34067102的博客 351

深入kubectl create源码:从YAML到Pod的完整链路拆解

Builder模式的优势: 通过链式调用配置复杂选项 延迟执行(直到最后调用Do()才真正处理) 可复用(所有kubectl命令都使用相同的Builder) 3. 执行Visitor模式 Builder的最后一步是调用Do(),它会创建一个Visitor对象: // 执行实际处理 result = r.Do() // 这里会返回Visitor接口 if err := result.Err(); err != nil { return err } infos, err := result.Infos() //

java_cj的专栏 656

DOKS入门指南:Kubernetes新手快速上手云原生实战

Kubernetes作为云原生的核心编排引擎,其学习门槛常被复杂的集群搭建和运维细节所抬高。托管Kubernetes服务(如DOKS)通过剥离控制平面运维负担,让开发者聚焦于YAML定义、服务暴露与可观测性等真实交付环节。它基于标准Kubernetes API,完全兼容kubectl、Helm与CI/CD工具链,同时提供开箱即用的LoadBalancer、Cilium网络、Block Storage及自动TLS等工程友好特性。对于后端工程师、创业CTO和DevOps新人而言,DOKS不是简化版Kuberne

csdn785029689的博客 519

kubectl源码分析之create clusterrole

发布一个k8s部署视频:https://edu.youkuaiyun.com/course/detail/26967 课程内容:各种k8s部署方式。包括minikube部署,kubeadm部署,kubeasz部署,rancher部署,k3s部署。包括开发测试环境部署k8s,和生产环境部署k8s。 腾讯课堂连接地址https://ke.qq.com/course/478827?taid=4373109931462251&tuin=ba64518 第二个视频发布https://edu.youkuaiyun.com/c..

mark's technic world 531

K8S系列:Pod的扩缩容方法

手动扩缩容机制 scale 自动扩缩容机制 scaleTargetRef 也可以自定义一些指标 当到达指标设置阈值时,进行扩容

NIO4444 647

实战|验证码突破思路

漏洞成因:由于逻辑设计缺陷,可绕过验证,比如直接删除COOKIE或验证码参数可绕过、当验证不通过清空session时,验证码参数值为空时绕过等。测试方法:抓包,删除验证码字段,查看是否可以成功发送抓包,正常流程下,记录验证码后的数据包,替换目标包中内容,直接发送,查看是否可以直接绕过验证码案例:Step1.输入正确账户信息和错误验证码,登录时抓包Step2.删除COOKIEStep3.客户端登陆成功。

weixin_46239998的博客 8106

kubectl-dba:KubeDB数据库管理的终极kubectl插件完全指南

想要在Kubernetes中轻松管理数据库集群吗?😊 kubectl-dba是KubeDB数据库管理平台的官方kubectl插件,为数据库管理员提供了一站式的解决方案。这个强大的工具让你能够像操作原生Kubernetes资源一样管理各种数据库引擎,包括MySQL、PostgreSQL、MongoDB、Redis、Elasticsearch等20多种主流数据库。 ## 为什么需要kubectl-

gitblog_00356的博客 662

图解Self Attention:从输入到输出,一步步拆解QKV计算过程

本文通过图解方式,一步步拆解Self Attention机制中Q、K、V矩阵的计算过程。从输入向量开始,详细阐述了线性变换生成QKV、点积计算注意力分数、Softmax归一化权重以及加权聚合生成新表示的核心步骤,帮助读者直观理解Transformer架构的核心机制。

flink9streamer的博客 728

k8s1.11命令行——实现源码导读之kubectl create创建资源对象

上一讲我们学习了k8s命令行接口kubectl在k8s源码的一级入口,这一讲我们根据具体的kubectl create创建资源对象命令来进一步学习这个接口的内在逻辑。 一.通过cobra程序构建cmd命令 Cobra既是一个用来创建强大的现代CLI命令行的golang库,也是一个生成程序应用和命令行文件的程序。支持简单的子命令行模式,如 app server, app fetch等,支持嵌套子...

喝一杯咖啡的博客 926

多孔材料吸附性质模拟程序RASPA的离线和在线安装方法

RASPA-2.0是今年美国西北大学教授Randall Q. Snurr等人开发的针对于MC,MD,分子力学优化等用途的程序,相比于之前开发的MUSIC软件,RASPA的功能更加齐全,操作更加简便,可以在MC的吸附过程中考虑骨架的柔性,也可以想MUSIC一样先制作积分格点(music中的map)。 A、离线安装(centos为例): (1)、安装之前要检查一下是否装了automake,

youyno的博客 1万+

arcgis密度分析

密度分析 密度分析是指根据输入的要素数据集计算整个区域的数据集状况,从而产生一个连续的密度表面。通过计算密度,将每个采样点的值散布到整个研究区域,并获得输出栅格中每个像元的密度值。在 ArcGIS 中,分布密度的计算方法有点密度分析、线密度分析和核密度分析三种。 1.点密度分析 导入实验数据居民点图层和道路图层 在自定义里勾选空间分析模块Spatial Analyst 点击空间分析工具中密度分析内的点密度分析, 参数设置如下,其中输出像元大小表示输出栅格数据集的像元大小。值越小.

Jasenjane的博客 2万+

LeaderWorkerSet 安装完全指南:kubectl 与 Helm 两种方式一次搞定

LeaderWorkerSet(LWS)是一个面向 Kubernetes 的开源 API,它把一组 Pod 当作一个"复制单元"来统一部署和管理,特别适合大模型多机推理这类 AI/ML 工作负载。不少刚接触它的开发者都会卡在第一步:怎么装?这篇 LeaderWorkerSet 安装教程将带你用 kubectl 和 Helm 两种方式完成安装,并做好安装验证、示例部署与卸载,一次搞定,不用再四处翻文

gitblog_00775的博客 737

visionpro官方示例分析(一) 模板匹配工具 缺陷检测工具

使用CogPMAlignTool工具,该工具是模板匹配工具,见名知意,所谓模板匹配工具就是说先使用该工具对一张图像建立模板,然后用这个模板在其他图像上进行匹配,匹配上了就说明找到了,匹配不上就说明没有找到。

sc_1313的博客 1925

备战CKA每日一题——第4天 | 熟练掌握kubectl命令进行创建资源对象操作,并从源码进行解析

备战CKA每日一题——第4天 | 熟练掌握kubectl命令进行创建资源对象操作,并从源码进行解析

技术宅,专注云原生、Go、Linux、Java等技术分享,原创文章、效率工具、实战解决方案!关注我,了解互联网动态,学 IT 不迷路 942

点云体积计算方法之一 附python代码

另外需要注意,这个只适合点云密集分布的场景来计算体积,比如树木扫描的体积;如果只是有表面积扫描的点云,该方法就不能计算整个物体的体积了。通过计算点云所占用的体素的数量来计算点云的近似体积。这是一个非常粗略的近似值,对于复杂的形状可能不准确。

三维点云技术探索 1888

【React】1、React入门与概览(JSX语法)

React入门 文章目录React入门一、React全家桶1. React是什么?2. 谁开发的?3. 为什么要学?4. React的特点5. 学习React之前要掌握的JavaScript基础知识二、React 概览组件JSXVirtual DOM关于虚拟DOM:Data Flow三、React基本使用相关js库四、React JSXJSX 语法规则五、模块与组件、模块化与组件化的理解5.1 模块5.2 组件5.4 模块化5.5 组件化 一、React全家桶 React基础 React-Router(R

Coding and studying 1382

k3v虚拟集群实战:从二进制安装到kubectl操作完整教程

k3v(Virtual Kubernetes)是一款轻量级虚拟集群工具,能够帮助开发者在现有Kubernetes环境中快速创建隔离的虚拟集群实例。本教程将带你完成从二进制安装到kubectl日常操作的全流程,让你轻松掌握虚拟集群的部署与管理技巧。 ## 📋 准备工作:环境与依赖检查 在开始安装k3v之前,请确保你的环境满足以下要求: - 已安装Kubernetes集群(v1.21+) - 具

gitblog_00571的博客 245

模组 RG500Q入网问题分析

- [ ] 不同于公网,在5G专网环境中, 通常使用很多非标准的网络配置,如PLMN/APN等。因此,5G模组在专网环境下通常要做一些专门的配置才能正常入网,本文分析一例在专网环境, 5G终端无法入网问题的定位过程。 - [ ] 具体涉及到以下模组操作: 恢复出厂、SA only、锁BAND、配置MBN等

十年通信老兵的技术修炼之路——从3G到5G,从地面基站到卫星通信。 935

Proxmox CSI Plugin 部署指南:kubectl、Helm、Talos 三种方式一次搞定

Proxmox CSI Plugin 部署是很多 Kubernetes 运维新手遇到的第一个坎:虚拟化平台上明明有现成的 LVM、ZFS 存储,却不知道怎么让集群里的数据库、中间件用上。Proxmox CSI Plugin 正是解决这个问题的开源方案,它让 Kubernetes 可以把 Proxmox VE 的存储(Directory、LVM、LVM-thin、ZFS、NFS、Ceph)当作持久化

gitblog_00716的博客 384

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

5步玩转Freelens:免费开源的Kubernetes集群管理工具入门实战

还在为记不住那一长串 `kubectl` 命令而头疼?还在对着终端里密密麻麻的 YAML 输出发愁?Freelens 是一款免费开源的 Kubernetes 集群管理工具,用可视化界面把集群、Pod、日志、终端全部装进一个桌面应用,让你像操作普通软件一样管理集群。无论你是刚接触容器编排的新人,还是天天和集群打交道的资深运维,这篇文章都能帮你快速上手。 ## 1. 新手之痛:面对集群时的"命令焦虑

gitblog_00152的博客 443

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

剖析kube-sidecar-injector核心架构:一个Kubernetes Mutating Webhook Server的完整源码解读

kube-sidecar-injector 是一个用 Go 编写的 Kubernetes Mutating Webhook Server,它通过准入控制(Admission Control)机制,在 Pod 写入 etcd 之前自动注入一个 nginx sidecar 容器。全文以源码为主线,带你快速读懂一个完整的 Webhook 准入服务是如何运转的——从证书自举、Webhook 注册,到 JS

gitblog_00235的博客 410

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

上一篇: kubectl源码分析之create命令
下一篇: kubectl源码分析之create quota
hxpjava1
博客等级 码龄19年 1365粉丝 511原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hxpjava1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值