kubectl源码分析之cluster-info

kubectl源码分析之cluster-info

发布一个k8s部署视频:https://edu.csdn.net/course/detail/26967

课程内容:各种k8s部署方式。包括minikube部署,kubeadm部署,kubeasz部署,rancher部署,k3s部署。包括开发测试环境部署k8s,和生产环境部署k8s。

腾讯课堂连接地址https://ke.qq.com/course/478827?taid=4373109931462251&tuin=ba64518

第二个视频发布  https://edu.csdn.net/course/detail/27109

腾讯课堂连接地址https://ke.qq.com/course/484107?tuin=ba64518

介绍主要的k8s资源的使用配置和命令。包括configmap,pod,service,replicaset,namespace,deployment,daemonset,ingress,pv,pvc,sc,role,rolebinding,clusterrole,clusterrolebinding,secret,serviceaccount,statefulset,job,cronjob,podDisruptionbudget,podSecurityPolicy,networkPolicy,resourceQuota,limitrange,endpoint,event,conponentstatus,node,apiservice,controllerRevision等。

第三个视频发布:https://edu.csdn.net/course/detail/27574

详细介绍helm命令,学习helm chart语法,编写helm chart。深入分析各项目源码,学习编写helm插件

第四个课程发布:https://edu.csdn.net/course/detail/28488

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

加qq群,请联系:

www.zeeklog.com  - kubectl源码分析之cluster-info


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

type ClusterInfoOptions struct {//cluster-info结构体
	genericclioptions.IOStreams

	Namespace string

	Builder *resource.Builder
	Client  *restclient.Config
}
//创建clusterinfo命令
func NewCmdClusterInfo(f cmdutil.Factory, ioStreams genericclioptions.IOStreams) *cobra.Command {
	o := &ClusterInfoOptions{//初始化结构体
		IOStreams: ioStreams,
	}

	cmd := &cobra.Command{//创建cobra命令
		Use:     "cluster-info",
		Short:   i18n.T("Display cluster info"),
		Long:    longDescr,
		Example: clusterinfoExample,
		Run: func(cmd *cobra.Command, args []string) {
			cmdutil.CheckErr(o.Complete(f, cmd))//准备
			cmdutil.CheckErr(o.Run())//运行
		},
	}
	cmd.AddCommand(NewCmdClusterInfoDump(f, ioStreams))//添加dump子命令
	return cmd
}
//准备运行
func (o *ClusterInfoOptions) Complete(f cmdutil.Factory, cmd *cobra.Command) error {
	var err error
	o.Client, err = f.ToRESTConfig()//获取restConfig
	if err != nil {
		return err
	}

	cmdNamespace := cmdutil.GetFlagString(cmd, "namespace")//获取namespace
	if cmdNamespace == "" {
		cmdNamespace = metav1.NamespaceSystem//如果namespace为空则用kube-system
	}
	o.Namespace = cmdNamespace//设置Namespace

	o.Builder = f.NewBuilder()//设置builder
	return nil
}
//运行
func (o *ClusterInfoOptions) Run() error {
	// TODO use generalized labels once they are implemented (#341)
	b := o.Builder.
		WithScheme(scheme.Scheme, scheme.Scheme.PrioritizedVersionsAllGroups()...).
		NamespaceParam(o.Namespace).DefaultNamespace().
		LabelSelectorParam("kubernetes.io/cluster-service=true").
		ResourceTypeOrNameArgs(false, []string{"services"}...).
		Latest()//构造result对象
	err := b.Do().Visit(func(r *resource.Info, err error) error {// visit result对象
		if err != nil {
			return err
		}
		printService(o.Out, "Kubernetes master", o.Client.Host)//打印kube master 服务

		services := r.Object.(*corev1.ServiceList).Items//把obj转service List
		for _, service := range services {//遍历service
			var link string
			if len(service.Status.LoadBalancer.Ingress) > 0 {//如果service有loadBlancer
				ingress := service.Status.LoadBalancer.Ingress[0]//获取loadblancer的ingress
				ip := ingress.IP//获取ip
				if ip == "" {
					ip = ingress.Hostname// 如果ip为空,则用hostname
				}
				for _, port := range service.Spec.Ports {//遍历service的ports
					link += "http://" + ip + ":" + strconv.Itoa(int(port.Port)) + " "
				}
			} else {
				name := service.ObjectMeta.Name//获取service的Name

				if len(service.Spec.Ports) > 0 {//如果service有ports
					port := service.Spec.Ports[0]//获取第一个port

					// guess if the scheme is https
					scheme := ""
					if port.Name == "https" || port.Port == 443 {//设置schema
						scheme = "https"
					}

					// format is <scheme>:<service-name>:<service-port-name>
					name = utilnet.JoinSchemeNamePort(scheme, service.ObjectMeta.Name, port.Name)//拼接名称
				}

				if len(o.Client.GroupVersion.Group) == 0 {//判断是否有group,拼接link
					link = o.Client.Host + "/api/" + o.Client.GroupVersion.Version + "/namespaces/" + service.ObjectMeta.Namespace + "/services/" + name + "/proxy"
				} else {
					link = o.Client.Host + "/api/" + o.Client.GroupVersion.Group + "/" + o.Client.GroupVersion.Version + "/namespaces/" + service.ObjectMeta.Namespace + "/services/" + name + "/proxy"

				}
			}
			name := service.ObjectMeta.Labels["kubernetes.io/name"]//从标签获取name
			if len(name) == 0 {//如果name为空,则用service的name
				name = service.ObjectMeta.Name
			}
			printService(o.Out, name, link)//打印服务
		}
		return nil
	})
	o.Out.Write([]byte("\nTo further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.\n"))//输出提示
	return err

	// TODO consider printing more information about cluster
}

//打印服务
func printService(out io.Writer, name, link string) {
	ct.ChangeColor(ct.Green, false, ct.None, false)//设置颜色
	fmt.Fprint(out, name)//打印服务名称
	ct.ResetColor()//c重置颜色
	fmt.Fprint(out, " is running at ")//打印
	ct.ChangeColor(ct.Yellow, false, ct.None, false)//设置颜色
	fmt.Fprint(out, link)//打印连接
	ct.ResetColor()//重置颜色
	fmt.Fprintln(out, "")
}

Read more

xxxwww在电商爬虫中的实际应用案例

快速体验 1. 打开 InsCode(快马)平台 https://www.inscode.net 2. 点击'项目生成'按钮,等待项目生成完整后预览效果 输入框内输入如下内容: 构建一个基于xxxwww的电商爬虫系统,能够自动抓取指定电商平台的商品信息(名称、价格、评价等),并将数据清洗后存储到MySQL数据库。要求实现定时任务和反爬虫策略,输出可视化报表。 电商数据爬虫的需求背景 在电商运营和市场竞争分析中,及时获取竞品价格、用户评价等数据至关重要。传统人工收集效率低下,而爬虫技术可以自动化这一过程。最近我用xxxwww技术实现了一个电商爬虫系统,能够定时抓取多个平台商品数据并生成可视化报表,大幅提升了团队的数据获取效率。 系统核心功能设计 整个系统主要分为四个模块,每个模块都针对电商数据特点做了优化: 1. 爬虫调度模块:负责管理爬取任务队列,协调多个平台的爬取节奏 2. 数据抓取模块:使用xxxwww技术实现商品详情页的精准定位和数据提取 3. 数据处理模块:对原始数据进行清洗、去重和格式标准化 4.

By Ne0inhk
MySQL 性能优化:索引优化与查询优化

MySQL 性能优化:索引优化与查询优化

MySQL 性能优化:索引优化与查询优化 在实际生产环境中,数据库性能对业务响应速度和系统稳定性至关重要。MySQL 提供了多种手段来提升查询性能,而索引优化与查询优化是其中最常见也是最有效的方法。本文将详细探讨如何通过合理设计索引和优化查询语句来改善 MySQL 的性能。 1. 索引优化 1.1 索引的作用 索引类似于书籍的目录,能够大幅减少查询时的数据扫描量,加快数据定位。通过为查询条件和排序字段建立索引,可以提高 SELECT、JOIN 和 WHERE 子句的执行效率。 1.2 常见索引类型 * B-Tree 索引:MySQL 默认的索引类型,适用于大部分场景(如范围查询、精确匹配)。 * 哈希索引:主要应用于 MEMORY 存储引擎,对于等值查询有较高性能,但不支持范围查询。 * 全文索引:专为文本搜索设计,适用于 MyISAM 和 InnoDB(从 5.

By Ne0inhk
【SpringAI】第五弹:基于 Spring AI ToolCallback Function 实现文件操作、联网搜索、网页抓取、终端操作、资源下载、PDF生成等工具的开发与调用、核心特性解析

【SpringAI】第五弹:基于 Spring AI ToolCallback Function 实现文件操作、联网搜索、网页抓取、终端操作、资源下载、PDF生成等工具的开发与调用、核心特性解析

本节重点 以 Sprin‏g AI 框架为例,学习 A‏I 应用开发的核心特性 ——‏ 工具调用,大幅增强 AI ‏的能力,并实战主流工具的开发‌,熟悉工具的原理和高级特性。 具体内容包括: * 工具调用介绍 * Spring AI 工具开发 * 主流工具开发 * 文件操作 * 联网搜索 * 网页抓取 * 终端操作 * 资源下载 * PDF 生成 * 工具进阶知识(原理和高级特性) 重点理解 1. 使用 @Tool和 @ToolParam注解标记类方法 Spring AI 实现工具调用的流程; Tool Calling 的工作原理 一、需求分析 之前我们通过 RAG 技术让 AI 应用具备了根据外部知识库来获取信息并回答的能力,但是直到目前为止,

By Ne0inhk
YARN架构解析:深入理解Hadoop资源管理核心

YARN架构解析:深入理解Hadoop资源管理核心

YARN架构解析:深入理解Hadoop资源管理核心 🌟 你好,我是 励志成为糕手 ! 🌌 在代码的宇宙中,我是那个追逐优雅与性能的星际旅人。 ✨ 每一行代码都是我种下的星光,在逻辑的土壤里生长成璀璨的银河; 🛠️ 每一个算法都是我绘制的星图,指引着数据流动的最短路径; 🔍 每一次调试都是星际对话,用耐心和智慧解开宇宙的谜题。 🚀 准备好开始我们的星际编码之旅了吗? 目录 * YARN架构解析:深入理解Hadoop资源管理核心 * 摘要 * 1. YARN架构概述 * 1.1 设计理念与核心价值 * 1.2 核心组件架构 * 2. 核心组件深度解析 * 2.1 ResourceManager:集群资源的统一调度者 * 2.2 NodeManager:节点资源的守护者 * 2.3 ApplicationMaster:应用程序的智能管家 * 3. YARN调度策略深度分析 * 3.1 调度器对比分析 * 3.2 Capacity Scheduler配置实战 * 3.

By Ne0inhk