kubectl源码分析之config get-contexts

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 GetContextsOptions struct {//get-contexts结构体
	configAccess clientcmd.ConfigAccess
	nameOnly     bool
	showHeaders  bool
	contextNames []string

	genericclioptions.IOStreams
}
//创建get-contexts命令
func NewCmdConfigGetContexts(streams genericclioptions.IOStreams, configAccess clientcmd.ConfigAccess) *cobra.Command {
	options := &GetContextsOptions{//初始化结构体
		configAccess: configAccess,

		IOStreams: streams,
	}

	cmd := &cobra.Command{//创建cobra命令
		Use:                   "get-contexts [(-o|--output=)name)]",
		DisableFlagsInUseLine: true,
		Short:                 i18n.T("Describe one or many contexts"),
		Long:                  getContextsLong,
		Example:               getContextsExample,
		Run: func(cmd *cobra.Command, args []string) {
			validOutputTypes := sets.NewString("", "json", "yaml", "wide", "name", "custom-columns", "custom-columns-file", "go-template", "go-template-file", "jsonpath", "jsonpath-file")//有效的输出格式
			supportedOutputTypes := sets.NewString("", "name")//支持的输出格式
			outputFormat := cmdutil.GetFlagString(cmd, "output")//获取输出格式
			if !validOutputTypes.Has(outputFormat) {//判断输出是否有效
				cmdutil.CheckErr(fmt.Errorf("output must be one of '' or 'name': %v", outputFormat))
			}
			if !supportedOutputTypes.Has(outputFormat) {.//判断输出是否支持
				fmt.Fprintf(options.Out, "--output %v is not available in kubectl config get-contexts; resetting to default output format\n", outputFormat)
				cmd.Flags().Set("output", "")
			}
			cmdutil.CheckErr(options.Complete(cmd, args))//准备
			cmdutil.CheckErr(options.RunGetContexts())//运行
		},
	}

	cmd.Flags().Bool("no-headers", false, "When using the default or custom-column output format, don't print headers (default print headers).")//no-headers选项
	cmd.Flags().StringP("output", "o", "", "Output format. One of: name")//output选项
	return cmd
}
//准备
func (o *GetContextsOptions) Complete(cmd *cobra.Command, args []string) error {
	o.contextNames = args//设置contextNames
	o.nameOnly = false//设置nameOnly
	if cmdutil.GetFlagString(cmd, "output") == "name" {//如果输出格式是name,设置nameOnly为true
		o.nameOnly = true
	}
	o.showHeaders = true//设置showHeaders
	if cmdutil.GetFlagBool(cmd, "no-headers") || o.nameOnly {//如果no-headers或nameOnly为true,设置shouHeaders为false
		o.showHeaders = false
	}

	return nil
}
//运行
func (o GetContextsOptions) RunGetContexts() error {
	config, err := o.configAccess.GetStartingConfig()//加载config
	if err != nil {
		return err
	}

	out, found := o.Out.(*tabwriter.Writer)//把out转为tabwriter
	if !found {//转换失败
		out = printers.GetNewTabWriter(o.Out)//包装tabwriter
		defer out.Flush()
	}

	// Build a list of context names to print, and warn if any requested contexts are not found.
	// Do this before printing the headers so it doesn't look ugly.
	allErrs := []error{}
	toPrint := []string{}
	if len(o.contextNames) == 0 {//如果contextName为空
		for name := range config.Contexts {//append所有contexts name到toPrint
			toPrint = append(toPrint, name)
		}
	} else {
		for _, name := range o.contextNames {//遍历contextNames
			_, ok := config.Contexts[name]//判断context是否存在
			if ok {//如果存在append到toPrint
				toPrint = append(toPrint, name)
			} else {//不存在append错误
				allErrs = append(allErrs, fmt.Errorf("context %v not found", name))
			}
		}
	}
	if o.showHeaders {//如果showHeaders为true
		err = printContextHeaders(out, o.nameOnly)// 打印头
		if err != nil {
			allErrs = append(allErrs, err)
		}
	}

	sort.Strings(toPrint)//对context进行排序
	for _, name := range toPrint {//遍历toPrint
		err = printContext(name, config.Contexts[name], out, o.nameOnly, config.CurrentContext == name)//打印context
		if err != nil {
			allErrs = append(allErrs, err)
		}
	}

	return utilerrors.NewAggregate(allErrs)
}
//打印头
func printContextHeaders(out io.Writer, nameOnly bool) error {
	columnNames := []string{"CURRENT", "NAME", "CLUSTER", "AUTHINFO", "NAMESPACE"}
	if nameOnly {//如果nameOnly取第一个
		columnNames = columnNames[:1]
	}
	_, err := fmt.Fprintf(out, "%s\n", strings.Join(columnNames, "\t"))//打印头
	return err
}

//打印context
func printContext(name string, context *clientcmdapi.Context, w io.Writer, nameOnly, current bool) error {
	if nameOnly {//如果nameOnly打印name返回
		_, err := fmt.Fprintf(w, "%s\n", name)
		return err
	}
	prefix := " "
	if current {// 如果是当前context,打印*号
		prefix = "*"
	}
	_, err := fmt.Fprintf(w, "%s\t%s\t%s\t%s\t%s\n", prefix, name, context.Cluster, context.AuthInfo, context.Namespace)//打印context
	return err
}

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

相关推荐

Kubernetes Kubectl top 命令

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

专注基础架构领域 2551

k8s实战之kubectl

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

从命名玄学看单片机江湖:STC、STM32与ESP32的型号密码与设计哲学

本文解析了STC、STM32和ESP32三大主流单片机系列的型号命名规则,揭示了其背后的设计哲学与市场策略。通过详细解读STC89C52、STM32F103C8T6等具体型号,帮助开发者理解芯片核心特性、性能等级及适用场景,为嵌入式系统选型提供实用指南。

g5h6i的博客 764

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

在centos7部署k8s搭建kubernetes集群

Kubernetes是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes提供了应用部署,规划,更新,维护的一种机制。 Kubernetes一个核心的特点就是能够自主的管理容器来保证云平台中的容器按照用户的期望状态运行着(比如用户想让apache一直运行,用户不需要关心怎么去做,Kubernetes会自动去监控,然后去重启,新建,总之,让apache一直提供服务),管理员可以加载一个微型服务,让规划器来找

山东梅长苏 1万+

Cadence 17.4 PSpice仿真555定时器输出方波

这里利用555定时器组成多谐振荡器产生1Hz的方波并用PSpice仿真其输出的方波波形。555定时器是一种广泛应用的中规模集成电路。根据其内部组成的不同,可分为双极型(555B)和CMOS型(555C)两类。两种类型的定时器各有所长。双极型定时器具有较大的驱动能力,其输出电流可达200mA,可直接驱动发光二级管、扬声器、继电器等负载。而CMOS型定时器的输入阻抗高、功耗低。

tj_nonstoper的博客 1万+

juju reactive charm (by quqi99)

sudo snap install charm --classic mkdir -p /bak/work/charms/layers export JUJU_REPOSITORY=/bak/work/charms export LAYER_PATH=$JUJU_REPOSITORY/layers cd $LAYER_PATH charm create simple cd simple sudo ...

技术并艺术着 8742

STM32 BootLoader 入门教程:从原理到 APP 跳转实现

在 STM32 项目开发中,BootLoader 通常用于实现固件升级、程序引导和应用程序校验。本文从最基础的 BootLoader 原理开始,讲解 STM32 内部 Flash 分区设计、APP 地址偏移、向量表重定位、BootLoader 跳转 APP 的核心代码,以及实际开发中常见的问题。本文适合刚开始接触 STM32 BootLoader、IAP 在线升级、串口升级、OTA 升级的开发者阅读。

lidecong133的博客 1678

3.本地单机架构minikube

搭建minikube

weixin_47252600的博客 1148

损失函数大汇总(五十九)(TopoInteraction Loss附公式推导与代码)

本文介绍了TopoInteraction Loss,一种用于多类别分割任务的拓扑交互约束损失函数。不同于传统拓扑损失关注单类别的连通性和孔洞数量,该损失重点约束不同类别之间的空间关系,包括互斥(exclusion)和包含(containment)两种典型拓扑关系。通过将全局拓扑约束转化为局部邻接检测,该损失能准确定位破坏预设拓扑关系的像素,并针对性施加惩罚。关键创新点在于:1)将包含关系转化为互斥约束;2)使用卷积运算高效检测非法邻接;3)仅对违规像素施加损失。实验表明,该方法能有效纠正类别间的错误接触,特

悦学共鸣,温柔以待,汇聚光芒,共同成长 351

PyTorch深度学习项目实战100例数据集

最近很多订阅了的用户私信咨询有些数据集下载不了以及一些文章中没有给出数据集链接,为了解决这个问题,专门开设了本篇文章,提供数据集下载链接,打包100例的所有数据集。本专栏适用人群:深度学习初学者,专栏将具体讲解如何快速搭建深度学习模型用自己的数据集实现深度学习小项目。 本专栏整理了《PyTorch深度学习项目实战100例》,内包含了各种不同的深度学习项目,包含项目原理以及源码,每一个项目实例都附带有完整的代码+数据集。

优快云 精品推荐 2万+

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

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

cab5的博客 8万+

RAG面试内容整理-7. 多轮问答与上下文拼接策略

在对话式的RAG应用中,多轮问答需要处理上下文相关性问题:用户的提问往往依赖于之前的对话内容。为正确理解用户每一轮的问题,系统需要保留和传递对话历史信息。

不务正业的猿 379

【Kubernetes】kubectl top pod 异常?

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

http://DBAtao.cn/ 1万+

自动分割和测量混凝土钢筋的思路与原理

该文提出了一种基于PCL库的点云处理系统,用于自动测量混凝土结构中钢筋的几何参数。系统采用多阶段处理流程:首先通过RANSAC算法提取地面并旋转对齐;接着使用区域生长算法分割混凝土结构;然后采用RANSAC线检测识别钢筋,按方向分类;最后通过圆柱拟合和坐标差计算获得钢筋间距、直径和高度差等参数。文章详细介绍了各模块的核心算法,包括地面检测、坐标变换、钢筋识别和几何计算等关键步骤,并分析了主要参数的敏感性。系统通过分层处理和坐标变换确保测量精度,为混凝土结构的无损检测提供了自动化解决方案。

weixin_45196569的博客 682

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

centos 安装swoole问题

centos安装swoole

weixin_43946021的博客 722

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

分享kubectl的奇技淫巧

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

Vic的博客 1336

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

IDEA的使用指南

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

配置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

k8s系列之:kubectl子命令详解二

K8s命令行详解二1)Top2)cordon3)uncordon4)drain5)taint 1)Top 显示资源(CPU、内存、存储)的使用情况。top命令用于查看节点或Pod的资源消耗。此命令需要Heapster正确配置并在服务器上正常工作。 Node #显示所有节点 kubectl top node #显示指定节点 kubectl top node <NODE_NAME> pod 显示指定pod的信息 #显示默认命名空间中所有pod的资源使用状态 kubectl top pod #显示

zhengzaifeidelushang的博客 2701

Kubectl常用命令详解

Kubectl常用命令详解

mojolang 3579

云服务器部署k8s集群

在两台不同厂商的云服务器上部署k8s集群,遇到一些问题。在此进行下总结。首先要网络能够互通,我是通过添加虚拟网卡的方式lsmod | grep ip_vs #检查是否有开启#临时开启ip_vsdo echo $i;done#永久开启确认内核是否有tun模块如果找不到[nux-misc]enabled=0gpgcheck=1tap0 是虚拟网卡名字172.168.1.1 是ip地址查看然后建立虚拟IP,如果有节点不是公网内网分离则不需要。

zhangfh1990的博客 558
上一篇: kubectl源码分析之config use-context
下一篇: kubectl源码分析之config get-clusters
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、付费专栏及课程。

余额充值