kubectl源码分析之label

Elasticsearch 报错 error At least one unigram is required but all tokens were ngrams 【代码】Elasticsearch 报错 error At least one unigram is required but all tokens were ngrams。 阅读详情

 欢迎关注我的公众号:

 目前刚开始写一个月,一共写了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完全手册

 

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

type LabelOptions struct {//label结构体
	// Filename options
	resource.FilenameOptions
	RecordFlags *genericclioptions.RecordFlags

	PrintFlags *genericclioptions.PrintFlags
	ToPrinter  func(string) (printers.ResourcePrinter, error)

	// Common user flags
	overwrite       bool
	list            bool
	local           bool
	dryrun          bool
	all             bool
	resourceVersion string
	selector        string
	fieldSelector   string
	outputFormat    string

	// results of arg parsing
	resources    []string
	newLabels    map[string]string
	removeLabels []string

	Recorder genericclioptions.Recorder

	namespace                    string
	enforceNamespace             bool
	builder                      *resource.Builder
	unstructuredClientForMapping func(mapping *meta.RESTMapping) (resource.RESTClient, error)

	// Common shared fields
	genericclioptions.IOStreams
}
func NewLabelOptions(ioStreams genericclioptions.IOStreams) *LabelOptions {
	return &LabelOptions{//初始化结构体
		RecordFlags: genericclioptions.NewRecordFlags(),
		Recorder:    genericclioptions.NoopRecorder{},

		PrintFlags: genericclioptions.NewPrintFlags("labeled").WithTypeSetter(scheme.Scheme),

		IOStreams: ioStreams,
	}
}
//创建label命令
func NewCmdLabel(f cmdutil.Factory, ioStreams genericclioptions.IOStreams) *cobra.Command {
	o := NewLabelOptions(ioStreams)//初始化结构体

	cmd := &cobra.Command{//创建cobra命令
		Use:                   "label [--overwrite] (-f FILENAME | TYPE NAME) KEY_1=VAL_1 ... KEY_N=VAL_N [--resource-version=version]",
		DisableFlagsInUseLine: true,
		Short:                 i18n.T("Update the labels on a resource"),
		Long:                  fmt.Sprintf(labelLong, validation.LabelValueMaxLength),
		Example:               labelExample,
		Run: func(cmd *cobra.Command, args []string) {
			cmdutil.CheckErr(o.Complete(f, cmd, args))//准备
			cmdutil.CheckErr(o.Validate())//校验
			cmdutil.CheckErr(o.RunLabel())//运行
		},
	}

	o.RecordFlags.AddFlags(cmd)//record选项
	o.PrintFlags.AddFlags(cmd)//打印选项

	cmd.Flags().BoolVar(&o.overwrite, "overwrite", o.overwrite, "If true, allow labels to be overwritten, otherwise reject label updates that overwrite existing labels.")//overwrite选项
	cmd.Flags().BoolVar(&o.list, "list", o.list, "If true, display the labels for a given resource.")//list选项
	cmd.Flags().BoolVar(&o.local, "local", o.local, "If true, label will NOT contact api-server but run locally.")//local选项
	cmd.Flags().StringVarP(&o.selector, "selector", "l", o.selector, "Selector (label query) to filter on, not including uninitialized ones, supports '=', '==', and '!='.(e.g. -l key1=value1,key2=value2).")//selector选项
	cmd.Flags().StringVar(&o.fieldSelector, "field-selector", o.fieldSelector, "Selector (field query) to filter on, supports '=', '==', and '!='.(e.g. --field-selector key1=value1,key2=value2). The server only supports a limited number of field queries per type.")//fieldSelector选项
	cmd.Flags().BoolVar(&o.all, "all", o.all, "Select all resources, including uninitialized ones, in the namespace of the specified resource types")//all选项
	cmd.Flags().StringVar(&o.resourceVersion, "resource-version", o.resourceVersion, i18n.T("If non-empty, the labels update will only succeed if this is the current resource-version for the object. Only valid when specifying a single resource."))//resource-version选项
	usage := "identifying the resource to update the labels"
	cmdutil.AddFilenameOptionFlags(cmd, &o.FilenameOptions, usage)//文件选项
	cmdutil.AddDryRunFlag(cmd)//干跑选项
	cmdutil.AddIncludeUninitializedFlag(cmd)

	return cmd
}
//准备
func (o *LabelOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, args []string) error {
	var err error

	o.RecordFlags.Complete(cmd)//record complete
	o.Recorder, err = o.RecordFlags.ToRecorder()//record flag转recorder
	if err != nil {
		return err
	}

	o.outputFormat = cmdutil.GetFlagString(cmd, "output")//输出格式
	o.dryrun = cmdutil.GetDryRunFlag(cmd)//设置干跑

	o.ToPrinter = func(operation string) (printers.ResourcePrinter, error) {//printflag转printer函数
		o.PrintFlags.NamePrintFlags.Operation = operation
		if o.dryrun {
			o.PrintFlags.Complete("%s (dry run)")
		}

		return o.PrintFlags.ToPrinter()
	}

	resources, labelArgs, err := cmdutil.GetResourcesAndPairs(args, "label")//抽取resrouce和label参数
	if err != nil {
		return err
	}
	o.resources = resources
	o.newLabels, o.removeLabels, err = parseLabels(labelArgs)//解析lable参数

	if o.list && len(o.outputFormat) > 0 {//不能同时指定list和output
		return fmt.Errorf("--list and --output may not be specified together")
	}

	o.namespace, o.enforceNamespace, err = f.ToRawKubeConfigLoader().Namespace()//设置namespace和EnforceNamespace
	if err != nil {
		return err
	}
	o.builder = f.NewBuilder()//设置builder
	o.unstructuredClientForMapping = f.UnstructuredClientForMapping//设置unstructuredClientForMapping 

	return nil
}

//校验
func (o *LabelOptions) Validate() error {
	if o.all && len(o.selector) > 0 {//all和selector不能同时指定
		return fmt.Errorf("cannot set --all and --selector at the same time")
	}
	if o.all && len(o.fieldSelector) > 0 {//all和field-selector不能同时指定
		return fmt.Errorf("cannot set --all and --field-selector at the same time")
	}
	if len(o.resources) < 1 && cmdutil.IsFilenameSliceEmpty(o.FilenameOptions.Filenames, o.FilenameOptions.Kustomize) {//资源和文件不能同时为空
		return fmt.Errorf("one or more resources must be specified as <resource> <name> or <resource>/<name>")
	}
	if len(o.newLabels) < 1 && len(o.removeLabels) < 1 && !o.list {//list和创建,删除label不能同时为空
		return fmt.Errorf("at least one label update is required")
	}
	return nil
}
func (o *LabelOptions) RunLabel() error {
	b := o.builder.
		Unstructured().
		LocalParam(o.local).
		ContinueOnError().
		NamespaceParam(o.namespace).DefaultNamespace().
		FilenameParam(o.enforceNamespace, &o.FilenameOptions).
		Flatten()//用build构造result对象

	if !o.local {
		b = b.LabelSelectorParam(o.selector).
			FieldSelectorParam(o.fieldSelector).
			ResourceTypeOrNameArgs(o.all, o.resources...).
			Latest()
	}

	one := false
	r := b.Do().IntoSingleItemImplied(&one)
	if err := r.Err(); err != nil {
		return err
	}

	// only apply resource version locking on a single resource
	if !one && len(o.resourceVersion) > 0 {//如果info不止一个,并指定了resource-version报错
		return fmt.Errorf("--resource-version may only be used with a single resource")
	}

	// TODO: support bulk generic output a la Get
	return r.Visit(func(info *resource.Info, err error) error {// visit result
		if err != nil {
			return err
		}

		var outputObj runtime.Object
		var dataChangeMsg string
		obj := info.Object//获取info object
		oldData, err := json.Marshal(obj)//把obj转成json
		if err != nil {
			return err
		}
		if o.dryrun || o.local || o.list {// 如果是干跑,local,或list
			err = labelFunc(obj, o.overwrite, o.resourceVersion, o.newLabels, o.removeLabels)//给对象打标签
			if err != nil {
				return err
			}
			newObj, err := json.Marshal(obj)//把打过标签的对象转成json
			if err != nil {
				return err
			}
			dataChangeMsg = updateDataChangeMsg(oldData, newObj)//判断是否有更改
			outputObj = info.Object//设置outputObj
		} else {
			name, namespace := info.Name, info.Namespace//获取名称和名称空间
			if err != nil {
				return err
			}
			accessor, err := meta.Accessor(obj)//访问对象
			if err != nil {
				return err
			}
			for _, label := range o.removeLabels {// 遍历要删除的labels
				if _, ok := accessor.GetLabels()[label]; !ok {//如果要删除的label不存在则打印提示
					fmt.Fprintf(o.Out, "label %q not found.\n", label)
				}
			}

			if err := labelFunc(obj, o.overwrite, o.resourceVersion, o.newLabels, o.removeLabels); err != nil {// 给对象打标签
				return err
			}
			if err := o.Recorder.Record(obj); err != nil {//判断是否创建change-cause注解
				klog.V(4).Infof("error recording current command: %v", err)
			}
			newObj, err := json.Marshal(obj)//吧对象转json
			if err != nil {
				return err
			}
			dataChangeMsg = updateDataChangeMsg(oldData, newObj)// 判断是否有更改
			patchBytes, err := jsonpatch.CreateMergePatch(oldData, newObj)//创建patch
			createdPatch := err == nil
			if err != nil {
				klog.V(2).Infof("couldn't compute patch: %v", err)
			}

			mapping := info.ResourceMapping()// 获取mapping
			client, err := o.unstructuredClientForMapping(mapping)// 获取client
			if err != nil {
				return err
			}
			helper := resource.NewHelper(client, mapping)//构造helper

			if createdPatch {//应用patch到服务端
				outputObj, err = helper.Patch(namespace, name, types.MergePatchType, patchBytes, nil)
			} else {// replace obj到服务端
				outputObj, err = helper.Replace(namespace, name, false, obj)
			}
			if err != nil {
				return err
			}
		}

		if o.list {//如果指定了list
			accessor, err := meta.Accessor(outputObj)//访问要输出的对象
			if err != nil {
				return err
			}

			indent := ""
			if !one {//如果是多个对象
				indent = " "
				gvks, _, err := unstructuredscheme.NewUnstructuredObjectTyper().ObjectKinds(info.Object)//获取gvk
				if err != nil {
					return err
				}
				fmt.Fprintf(o.ErrOut, "Listing labels for %s.%s/%s:\n", gvks[0].Kind, gvks[0].Group, info.Name)//打印提示
			}
			for k, v := range accessor.GetLabels() {//遍历labels,输出
				fmt.Fprintf(o.Out, "%s%s=%s\n", indent, k, v)
			}

			return nil
		}

		printer, err := o.ToPrinter(dataChangeMsg)//printflag转printer
		if err != nil {
			return err
		}
		return printer.PrintObj(info.Object, o.Out)//打印对象
	})
}
//给对象打标签
func labelFunc(obj runtime.Object, overwrite bool, resourceVersion string, labels map[string]string, remove []string) error {
	accessor, err := meta.Accessor(obj)//访问对象
	if err != nil {
		return err
	}
	if !overwrite {// 如果没有指定overwrite
		if err := validateNoOverwrites(accessor, labels); err != nil {//判断标签是否冲突
			return err
		}
	}

	objLabels := accessor.GetLabels()//获取对象labels
	if objLabels == nil {
		objLabels = make(map[string]string)
	}

	for key, value := range labels {//遍历要添加的标签,依次添加
		objLabels[key] = value
	}
	for _, label := range remove {//遍历要删除的labels,依次删除
		delete(objLabels, label)
	}
	accessor.SetLabels(objLabels)//设置对象的labels

	if len(resourceVersion) != 0 {// 如果resource-version不为空,设置resource-version
		accessor.SetResourceVersion(resourceVersion)
	}
	return nil
}
func updateDataChangeMsg(oldObj []byte, newObj []byte) string {//判断是否有更新,返回提示字符串
	msg := "not labeled"
	if !reflect.DeepEqual(oldObj, newObj) {
		msg = "labeled"
	}
	return msg
}

func validateNoOverwrites(accessor metav1.Object, labels map[string]string) error {
	allErrs := []error{}
	for key := range labels {//遍历要添加的labels
		if value, found := accessor.GetLabels()[key]; found {//如果label存在,则报错
			allErrs = append(allErrs, fmt.Errorf("'%s' already has a value (%s), and --overwrite is false", key, value))
		}
	}
	return utilerrors.NewAggregate(allErrs)
}

//解析labels
func parseLabels(spec []string) (map[string]string, []string, error) {
	labels := map[string]string{}
	var remove []string
	for _, labelSpec := range spec {//遍历
		if strings.Contains(labelSpec, "=") {//如果参数有=号
			parts := strings.Split(labelSpec, "=")//用等号分割
			if len(parts) != 2 {// 如果分割后不是两个,报错
				return nil, nil, fmt.Errorf("invalid label spec: %v", labelSpec)
			}
			if errs := validation.IsValidLabelValue(parts[1]); len(errs) != 0 {//判断label是否有效字符串
				return nil, nil, fmt.Errorf("invalid label value: %q: %s", labelSpec, strings.Join(errs, ";"))
			}
			labels[parts[0]] = parts[1]//把label放到map
		} else if strings.HasSuffix(labelSpec, "-") {//如果label末尾有-
			remove = append(remove, labelSpec[:len(labelSpec)-1])//添加label到remove slice
		} else {//否则返回错误
			return nil, nil, fmt.Errorf("unknown label spec: %v", labelSpec)
		}
	}
	for _, removeLabel := range remove {//遍历remove slice
		if _, found := labels[removeLabel]; found {//如果label map里有removelabel则报错
			return nil, nil, fmt.Errorf("can not both modify and remove a label in the same command")
		}
	}
	return labels, remove, nil
}

k8s use-context是什么 kubectl的命令用于在 Kubernetes 集群中切换上下文(context),从而方便地在多个集群或命名空间之间进行操作。一个上下文定义了kubectl使用的和的组合。 阅读详情

相关推荐

Kubernetes任务调用Job与CronJob及源码分析

这份面试题几乎包含了他在一年内遇到的所有面试题以及答案,甚至包括面试中的细节对话以及语录,可谓是细节到极致,甚至简历优化和怎么投简历更容易得到面试机会也包括在内!也包括教你怎么去获得一些大厂,比如阿里,腾讯的内推名额!某位名人说过成功是靠99%的汗水和1%的机遇得到的,而你想获得那1%的机遇你首先就得付出99%的汗水!你只有朝着你的目标一步一步坚持不懈的走下去你才能有机会获得成功!成功只会留给那些有准备的人!这个方法的逻辑十分的清晰,我们下面撸一撸~

2401_85376163的博客 1280

k8s实战之kubectl

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

Kubernetes Kubectl top 命令

kubectl top命令可显⽰节点和Pod对象的资源使⽤信息,它依赖于集群中的资源指标API来收集各项指标数据。它包含有node和pod两个⼦命令,可分别⽤于显⽰Node对象和Pod对象的相关资源占⽤率。,例如下⾯显⽰所有节点的资源占⽤状况的结果中显⽰了各节点累计CPU资源占⽤时长及百分⽐,以及内容空间占⽤量及占⽤⽐例。⽽名称空间级别的Pod对象资源占⽤率的使⽤⽅式会略有不同,使⽤时,⼀般应该限定名称空间及使⽤标签选择器过滤出⽬标Pod对象。列出Node资源占⽤率命令的语法格式为。

专注基础架构领域 2551

helm源码分析之pull

发布一个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 1370

【低轨】Starlink星链-Ku波段下行信号信号结构解析

Starlink播发位于10.7~12.7GHz之间的下行信号,该信号的设计意图是用于宽带网络通信,但是,文章通过对该信号信号体制的详细分析,以及解调出所调制的完整码序列,为利用Starlink信号进行定位解算提供了必要条件。(注,码序列对应的是卫星版本0.9,1.0和1.5)

iseeinvisible的博客 6309

从Mule ESB到Apache Camel:手把手教你设计一个轻量级企业集成框架的‘心脏’

本文深入探讨了从Mule ESB到Apache Camel的轻量级企业集成框架设计实践,对比了两者在协议支持、消息处理能力和部署灵活性等方面的差异。通过实际代码示例和性能优化技巧,帮助开发者构建高效的核心模块,适用于现代微服务架构下的系统集成需求。

weixin_28738165的博客 375

k8s-kubectl进程源码分析

kubectl与之前的kubernetes进程不同,它不是一个后台运行的守护进程,而是kubernetes提供的一个命令行工具(CLI),它提供了一组命令来操作kubernetes集群。kubectl入口类源码位置如下:/cmd/kubectl/kubectl.gofunc main() { rand.Seed(time.Now().UTC().UnixNano...

weixin_34168700的博客 177

SuperMap iDesktop 9D三维倾斜摄影数据处理

OSGB格式的三维倾斜摄影数据进入时空大数据平台之前需要进行数据优化和格式转换

weixin_43204897的博客 1131

kubectl源码分析之cordon and uncordon

发布一个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 980

Java8对接三方流式接口,并实时输出(GPT)

【代码】Java8对接三方流式接口,并实时输出(GPT)

m0_58617940的博客 1728

如何编译RustDesk(Unbuntu 和Android版本)

备注:官方文档上,一边都是基于sciter,这个在后面已经不建议使用了,但是依然可以编译刚开始的时候看官方的文档,涉及的东西比较多,也搞的一头雾水,通过B站上一个视频,可以通过CI/CD来编译,以及act本地试试(最终放弃,大概需要下载大几十G的容器下来)。最终总算明确了方向,可以用自动化流水线来编译。直接看CI/CD的脚本文件文件在.github/workflows目录下,重点研究 bridge.yml 和flutter-build.yml 这两个文件。

lvronglee的专栏 2549

【kubernetes/k8s源码分析】kubemark 解读源码

Kubernetes 社区提供了SLI (服务等级指标) 和 SLO (服务等级目标) 系统性能测试、分析文档Kubernetes scalability and performance SLIs/SLOs。模拟出一个 K8s cluster(Kubemark cluster),不受资源限制。cluster 中 master 是真实的机器,所有的 nodes 是 Hollow nod...

zhonglinzhang 6292

CTR-GCN 论文解读

提出了一种信道拓扑优化图卷积,该卷积可以动态有效地对信道拓扑进行建模。共享拓扑是一个参数化的邻接矩阵,作为所有通道的拓扑先验,并提供顶点之间的一般相关性。通过使用特定于通道的相关性细化共享拓扑,CTR-GC 获得了通道拓扑。

一杯水果茶!足矣~ 3092

3.本地单机架构minikube

搭建minikube

weixin_47252600的博客 1148

【机器学习】随机森林(Random Forest,简称 RF):预测光伏电站功率 || 缺失数据处理 || 重复行处理...

【机器学习】随机森林(Random Forest,简称 RF):预测光伏电站功率。

追光者♂:记录、分享、总结、提升,现象级专栏《Python从入门到人工智能》作者,无惧黑暗,坚信曙光 1652

通信算法之334:无人机侦测-DJI 大疆云哨接收机系列

【代码】通信算法之334:DJI 大疆 云哨接收机算法流程。

leegang12的专栏 845

通过 kubectl 查看 K8s 内节点、Pod 资源使用情况

kubectl describe node -n ${namespace} 例如:我要查看生产环境下所有节点的资源分配情况(生产环境的 namespace 为 product) kubectl describe node -n product

cab5的博客 8万+

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

【Kubernetes】kubectl top pod 异常?

kubectl top pod 异常?本文手把手解决,跟着小涛一块试试吧~

http://DBAtao.cn/ 1万+

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

centos 安装swoole问题

centos安装swoole

weixin_43946021的博客 722

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

分享kubectl的奇技淫巧

Kubectl 是 Kubernetes 最重要的命令行工具。在 Flant,我们会在 Wiki 和 Slack 上相互分享 Kubectl 的妙用(其实我们还有个搜索引擎,不过那就是另外一回事了)。多年以来,我们在 kubectl 方面积累了很多技巧,现在想要将其中的部分分享给社区。我相信很多读者对这些命令都非常熟悉;然而我还是希望读者能够从本文中有所获益,进而提高生产力。本文没什么结论,但是可以提供一个小列表,其中包含本文相关的有用链接。原文来自微信公众号《CNCF》

Vic的博客 1336

配置kubeconfig_kubectl use-context配置多集群访问

kubectl use-context配置多集群访问 今天在rancher平台上进行日常维护。在多个集群切换时,鼠标一顿点点点还是有点不够顺畅。于是在"瑞斯拜"的chrome里面找到了k8s有关多集群访问配置的桥段,下面根据实践过程做简单描述使用 kubeconfig 文件组织集群访问 通过 kubectl 连接k8s集群时,默认情况下,kubectl 会在 $HOME/.kube 目录下查找名为...

weixin_34883093的博客 3522

kubernetes对象

定义kubernetes对象 创建 Kubernetes 对象时,必须提供对象的规约,用来描述该对象的期望状态, 以及关于对象的一些基本信息(例如名称)。 当使用 Kubernetes API 创建对象时(或者直接创建,或者基于kubectl), API 请求必须在请求体中包含 JSON 格式的信息。 大多数情况下,需要在 .yaml 文件中为 kubectl 提供这些信息。 kubectl 在发起 API 请求时,将这些信息转换成 JSON 格式。 这里有一个 .yaml 示例文件,展...

whz-emm的博客 1182

k8s学习: kubeconfig文件详解

kubeconfig的一个示例如下:该示例为2个集群 apiVersion 和 kind 标识客户端解析器的版本和模式,不应手动编辑。preferences 指定当前可选(和当前未使用)的 kubectl 首选项cluster中包含k8s集群的端点数据,包括集群的证书颁发机构以及完整的URL。可以使用Kubectl config set-cluster添加或修改cluster条目。 可以使用 kubectl config set-cluster 添加或修改 cluster 条目,多个集群的话直接在后

Jerry00713的博客 1万+

k8s的api-resources资源类型介绍

1.在k8s集群环境中查看资源集群状态 输入命令 =》#kubectl api-resources显示k8s集群中的所有api资源信息,参数说明: NAME :api资源名称; SHORTNAMES :api资源名称简写; APIGROUP :api分组管理; NAMESPACED :是否可使用命名空间隔离,true是,false否; KIND :api 资源类型; 查看k8s组件集群状态 =》# kubectl get cs =》出现【kubeadm安装k8s 组件cont...

ChaITSimpleLove的博客 4961

揭秘高效运维:如何用kubectl top命令实时监控K8s资源使用情况?

是Kubernetes内置自动缩放管道的可扩展、高效的容器资源指标来源。从Kubelets收集资源指标,并通过在中公开它们,以供和使用。也可以通过访问,从而更容易调试自动缩放管道。

didiplus 3418

config kubectl_kubectl config 命令使用说明

kubectl config 命令用来管理kubeconfig文件。一、查找要操作的kubeconfig 文件顺序1、如果使用--kubeconfig选项,则指定的文件为要操作的文件。此选项只能被设置一次,并且不会合并其他文件。2、如果设置了$KUBECONFIG环境变量,将同时使用此环境变量指定的所有文件列表(使用操作系统默认的顺序),所有文件将被合并。当修改一个值时,将修改设置了该值的文件。当...

weixin_33328213的博客 4594
上一篇: kubectl源码分析之kustomize
下一篇: kubectl源码分析之annotate
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、付费专栏及课程。

余额充值