kubectl源码分析之logs

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完全手册

 

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

type LogsOptions struct {//log选项
	Namespace     string
	ResourceArg   string
	AllContainers bool
	Options       runtime.Object
	Resources     []string

	ConsumeRequestFn func(rest.ResponseWrapper, io.Writer) error

	// PodLogOptions
	SinceTime       string
	SinceSeconds    time.Duration
	Follow          bool
	Previous        bool
	Timestamps      bool
	IgnoreLogErrors bool
	LimitBytes      int64
	Tail            int64
	Container       string

	// whether or not a container name was given via --container
	ContainerNameSpecified bool
	Selector               string
	MaxFollowConcurrency   int

	Object           runtime.Object
	GetPodTimeout    time.Duration
	RESTClientGetter genericclioptions.RESTClientGetter
	LogsForObject    polymorphichelpers.LogsForObjectFunc

	genericclioptions.IOStreams

	TailSpecified bool
}
func NewLogsOptions(streams genericclioptions.IOStreams, allContainers bool) *LogsOptions {
	return &LogsOptions{//初始化log结构体
		IOStreams:            streams,
		AllContainers:        allContainers,
		Tail:                 -1,
		MaxFollowConcurrency: 5,
	}
}
//创建log命令
func NewCmdLogs(f cmdutil.Factory, streams genericclioptions.IOStreams) *cobra.Command {
	o := NewLogsOptions(streams, false)//初始化log结构体

	cmd := &cobra.Command{//创建cobra命令
		Use:                   logsUsageStr,
		DisableFlagsInUseLine: true,
		Short:                 i18n.T("Print the logs for a container in a pod"),
		Long:                  "Print the logs for a container in a pod or specified resource. If the pod has only one container, the container name is optional.",
		Example:               logsExample,
		Run: func(cmd *cobra.Command, args []string) {
			cmdutil.CheckErr(o.Complete(f, cmd, args))//准备
			cmdutil.CheckErr(o.Validate())//校验
			cmdutil.CheckErr(o.RunLogs())//运行
		},
	}
	cmd.Flags().BoolVar(&o.AllContainers, "all-containers", o.AllContainers, "Get all containers' logs in the pod(s).")//all-container选项
	cmd.Flags().BoolVarP(&o.Follow, "follow", "f", o.Follow, "Specify if the logs should be streamed.")//follow选项
	cmd.Flags().BoolVar(&o.Timestamps, "timestamps", o.Timestamps, "Include timestamps on each line in the log output")//timestamps选项
	cmd.Flags().Int64Var(&o.LimitBytes, "limit-bytes", o.LimitBytes, "Maximum bytes of logs to return. Defaults to no limit.")//limit-bytes选项
	cmd.Flags().BoolVarP(&o.Previous, "previous", "p", o.Previous, "If true, print the logs for the previous instance of the container in a pod if it exists.")//previous选项
	cmd.Flags().Int64Var(&o.Tail, "tail", o.Tail, "Lines of recent log file to display. Defaults to -1 with no selector, showing all log lines otherwise 10, if a selector is provided.")//tail选项
	cmd.Flags().BoolVar(&o.IgnoreLogErrors, "ignore-errors", o.IgnoreLogErrors, "If watching / following pod logs, allow for any errors that occur to be non-fatal")//ignore-errors选项
	cmd.Flags().StringVar(&o.SinceTime, "since-time", o.SinceTime, i18n.T("Only return logs after a specific date (RFC3339). Defaults to all logs. Only one of since-time / since may be used."))//since-time选项
	cmd.Flags().DurationVar(&o.SinceSeconds, "since", o.SinceSeconds, "Only return logs newer than a relative duration like 5s, 2m, or 3h. Defaults to all logs. Only one of since-time / since may be used.")//since选项
	cmd.Flags().StringVarP(&o.Container, "container", "c", o.Container, "Print the logs of this container")//container选项
	cmdutil.AddPodRunningTimeoutFlag(cmd, defaultPodLogsTimeout)//pod-running-timeout选项
	cmd.Flags().StringVarP(&o.Selector, "selector", "l", o.Selector, "Selector (label query) to filter on.")//selector选项
	cmd.Flags().IntVar(&o.MaxFollowConcurrency, "max-log-requests", o.MaxFollowConcurrency, "Specify maximum number of concurrent logs to follow when using by a selector. Defaults to 5.")//max-log-requests选项
	return cmd
}
//准备函数
func (o *LogsOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, args []string) error {
	o.ContainerNameSpecified = cmd.Flag("container").Changed//判断是否指定容器
	o.TailSpecified = cmd.Flag("tail").Changed//判断是否指定tail
	o.Resources = args//设置参数

	switch len(args) {
	case 0:
		if len(o.Selector) == 0 {//如果参数为0个,selector为空报错
			return cmdutil.UsageErrorf(cmd, "%s", logsUsageErrStr)
		}
	case 1:
		o.ResourceArg = args[0]
		if len(o.Selector) != 0 {//如果参数为1个,指定了selector报错
			return cmdutil.UsageErrorf(cmd, "only a selector (-l) or a POD name is allowed")
		}
	case 2:
		o.ResourceArg = args[0]
		o.Container = args[1]
	default:
		return cmdutil.UsageErrorf(cmd, "%s", logsUsageErrStr)
	}
	var err error
	o.Namespace, _, err = f.ToRawKubeConfigLoader().Namespace()//设置namespace
	if err != nil {
		return err
	}

	o.ConsumeRequestFn = DefaultConsumeRequest//设置ConsumeRequestFn 函数

	o.GetPodTimeout, err = cmdutil.GetPodRunningTimeoutFlag(cmd)//设置podTimeout

	if err != nil {
		return err
	}

	o.Options, err = o.ToLogOptions()//构造log option
	if err != nil {
		return err
	}

	o.RESTClientGetter = f//设置RESTClientGetter
	o.LogsForObject = polymorphichelpers.LogsForObjectFn//获取log request

	if o.Object == nil {//如果Object为空
		builder := f.NewBuilder().
			WithScheme(scheme.Scheme, scheme.Scheme.PrioritizedVersionsAllGroups()...).
			NamespaceParam(o.Namespace).DefaultNamespace().
			SingleResourceType()//构造result对象
		if o.ResourceArg != "" {
			builder.ResourceNames("pods", o.ResourceArg)
		}
		if o.Selector != "" {
			builder.ResourceTypes("pods").LabelSelectorParam(o.Selector)
		}
		infos, err := builder.Do().Infos()//获取info对象
		if err != nil {
			return err
		}
		if o.Selector == "" && len(infos) != 1 {
			return errors.New("expected a resource")
		}
		o.Object = infos[0].Object//设置Object对象
	}

	return nil
}
//构造log option
func (o *LogsOptions) ToLogOptions() (*corev1.PodLogOptions, error) {
	logOptions := &corev1.PodLogOptions{//设置参数
		Container:  o.Container,
		Follow:     o.Follow,
		Previous:   o.Previous,
		Timestamps: o.Timestamps,
	}

	if len(o.SinceTime) > 0 {//设置sinceTime
		t, err := util.ParseRFC3339(o.SinceTime, metav1.Now)
		if err != nil {
			return nil, err
		}

		logOptions.SinceTime = &t
	}

	if o.LimitBytes != 0 {//设置limitBytes
		logOptions.LimitBytes = &o.LimitBytes
	}

	if o.SinceSeconds != 0 {//设置sinceSeconds
		// round up to the nearest second
		sec := int64(o.SinceSeconds.Round(time.Second).Seconds())
		logOptions.SinceSeconds = &sec
	}

	if len(o.Selector) > 0 && o.Tail == -1 && !o.TailSpecified {//设置tailLines
		logOptions.TailLines = &selectorTail
	} else if o.Tail != -1 {
		logOptions.TailLines = &o.Tail
	}

	return logOptions, nil
}
//校验
func (o LogsOptions) Validate() error {
	if len(o.SinceTime) > 0 && o.SinceSeconds != 0 {//sinceTime和sinceSeconds不能同时指定
		return fmt.Errorf("at most one of `sinceTime` or `sinceSeconds` may be specified")
	}

	logsOptions, ok := o.Options.(*corev1.PodLogOptions)//把option转为POdLogOptions
	if !ok {
		return errors.New("unexpected logs options object")
	}
	if o.AllContainers && len(logsOptions.Container) > 0 {//allContainers和container不能同时指定
		return fmt.Errorf("--all-containers=true should not be specified with container name %s", logsOptions.Container)
	}

	if o.ContainerNameSpecified && len(o.Resources) == 2 {//只能指定一个container
		return fmt.Errorf("only one of -c or an inline [CONTAINER] arg is allowed")
	}

	if o.LimitBytes < 0 {//limitBytes不能小于0
		return fmt.Errorf("--limit-bytes must be greater than 0")
	}

	if logsOptions.SinceSeconds != nil && *logsOptions.SinceSeconds < int64(0) {//sinceSeconds不能小于0
		return fmt.Errorf("--since must be greater than 0")
	}

	if logsOptions.TailLines != nil && *logsOptions.TailLines < -1 {//tailLines不能小于-1
		return fmt.Errorf("--tail must be greater than or equal to -1")
	}

	return nil
}
//运行
func (o LogsOptions) RunLogs() error {
	requests, err := o.LogsForObject(o.RESTClientGetter, o.Object, o.Options, o.GetPodTimeout, o.AllContainers)//获取log requests
	if err != nil {
		return err
	}

	if o.Follow && len(requests) > 1 {//如果是floow并且log请求大于1个
		if len(requests) > o.MaxFollowConcurrency {//log请求大于最大并发数量,报错
			return fmt.Errorf(
				"you are attempting to follow %d log streams, but maximum allowed concurrency is %d, use --max-log-requests to increase the limit",
				len(requests), o.MaxFollowConcurrency,
			)
		}

		return o.parallelConsumeRequest(requests)//并发消费log request
	}

	return o.sequentialConsumeRequest(requests)//串行消费log request
}
//并行消费log requests
func (o LogsOptions) parallelConsumeRequest(requests []rest.ResponseWrapper) error {
	reader, writer := io.Pipe()//构造pipe
	wg := &sync.WaitGroup{}//创建waitgroup
	wg.Add(len(requests))
	for _, request := range requests {//遍历log requests
		go func(request rest.ResponseWrapper) {//启动go routine打印log request
			defer wg.Done()
			if err := o.ConsumeRequestFn(request, writer); err != nil {
				if !o.IgnoreLogErrors {
					writer.CloseWithError(err)

					// It's important to return here to propagate the error via the pipe
					return
				}

				fmt.Fprintf(writer, "error: %v\n", err)
			}

		}(request)
	}

	go func() {
		wg.Wait()
		writer.Close()
	}()

	_, err := io.Copy(o.Out, reader)//从pipe另一头输出log到out
	return err
}

func (o LogsOptions) sequentialConsumeRequest(requests []rest.ResponseWrapper) error {
	for _, request := range requests {
		if err := o.ConsumeRequestFn(request, o.Out); err != nil {
			return err
		}
	}

	return nil
}

//消费log函数
func DefaultConsumeRequest(request rest.ResponseWrapper, out io.Writer) error {
	readCloser, err := request.Stream()//获取流
	if err != nil {
		return err
	}
	defer readCloser.Close()//defer 关闭流

	r := bufio.NewReader(readCloser)//创建reader
	for {
		bytes, err := r.ReadBytes('\n')//读取数据
		if _, err := out.Write(bytes); err != nil {//输出数据
			return err
		}

		if err != nil {
			if err != io.EOF {
				return err
			}
			return nil//eof返回
		}
	}
}

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

相关推荐

MCP协议实战:构建企业级AI模型控制中枢

Model Control Protocol(MCP)是一种面向大模型服务治理的标准化控制协议,核心解决多模型、多工具、多业务方场景下的统一调度、策略管控与语义路由问题。其原理基于能力契约(Capability Contract)与约束解析引擎,通过工具注册中心实现模型服务的主动报备与生命周期管理,并依托gRPC强类型IDL保障跨语言、低延迟、高可靠的服务交互。技术价值在于将AI服务从‘硬编码适配’升级为‘协议驱动治理’,显著提升可审计性、灰度发布效率与SLO保障能力。典型应用于金融风控、电商智能客服、医疗

love android 440

k8s实战之kubectl

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

2026年Java后端面试高频真题解析:JVM、并发、Spring、数据库与分布式

Java作为企业级应用开发的核心语言,其技术体系涵盖JVM内存管理、多线程并发、Spring框架原理等基础概念。理解JVM垃圾回收机制和内存模型,能有效指导性能调优;掌握并发编程中的锁机制和线程池原理,可提升系统高并发处理能力。这些技术原理在分布式架构、微服务治理等场景中具有重要工程价值,尤其在互联网高可用系统中不可或缺。本文基于2026年一线大厂最新面试趋势,聚焦JVM性能调优和Spring框架底层机制等热词,通过真题解析帮助开发者系统性突破技术瓶颈。

weixin_33875564的博客 370

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

技术人如何用博客构建个人知识图谱:从记录到复用

技术博客本质上是一种面向工程实践的知识管理方式,其核心在于将临时性工作记忆固化为可检索、可关联、可演进的长期知识资产。基于认知科学中的遗忘曲线原理,持续记录真实问题场景、环境快照与决策链条,能有效对抗技术细节的快速衰减;通过结构化标签与时间戳锚定,形成带上下文的个人知识图谱,显著提升问题复现与跨项目迁移效率。这种以‘Record’为驱动的技术写作范式,已广泛应用于Kubernetes排障、MySQL死锁分析、Nginx配置调试等高频实战场景,成为中高级开发者构建第二大脑的关键基础设施。

天下无双 395

2026年运维工程师学习指南:从零到一掌握云原生与可观测性

在当今的软件开发和系统运维领域,自动化与智能化已成为核心趋势。其背后的原理是通过工具链和平台工程,将重复性操作转化为可编程、可重复的流程,从而提升效率并降低人为错误。这一技术价值在于,它使得团队能够更专注于高价值的架构设计和稳定性保障工作,而非陷入繁琐的日常维护。典型的应用场景包括持续集成与持续部署(CI/CD)、基础设施即代码(IaC)以及全面的系统可观测性构建。随着企业数字化转型的深入,掌握以Kubernetes为代表的容器编排、以Prometheus和ELK为核心的监控日志体系,以及高效的自动化脚本开

weixin_34006965的博客 482

k8s-kubectl功能源码分析

kubernetes里的命令行接口叫做kubectl,用来控制kubernetes集群,我们要追踪的命令是kubectl create -f-会从指定文件创建k8s资源,我们要创建的资源是使用了nginx基础镜像的单副本pod。首先是kubectl命令的创建,在/cmd/kubectl/kubectl.go文件中,实现了kubectl命令的创建:func main() { rand.Seed(t...

hahachenchen789的博客 1928

K8S系列:Pod的扩缩容方法

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

NIO4444 647

突破AWX Operator部署困境:从日志分析到数据库修复的全栈排障指南

作为Kubernetes环境中Ansible自动化的核心组件,AWX Operator的部署故障常常让管理员陷入困境: - operator日志中充斥着模糊的错误信息 - PostgreSQL数据库初始化失败却找不到具体原因 - Pod状态显示Running但AWX界面始终无法访问 - 调试配置修改后问题依旧反复出现 本文将系统梳理AWX Operator故障排查方法论,通过12个实战场

gitblog_00817的博客 436

2023 年全国网络安全行业职业技能大赛-电子数据取证分析师-决赛WP_2023网络安全行业赛取证

数据库取证工具里面可以恢复删除掉的数据带红叉的就说删除过的,game库下面announcement_detail表里面update_time字段使用sql语句时间戳最大为1513243355转换时间为2017-12-14 17:22:35。

2401_89791684的博客 2094

C# CAD2016 多边形顶点按方向重新排序

这样,通过以上步骤,我们找到了一个多边形的一个候选起始顶点(可能位于西北方向),并且已经获取了该多边形的边界框信息,这些信息对于后续判断顶点排列顺序及处理其他相关问题具有重要意义。完整地处理八个方向(东北、东南、西南、西北、北、南、东、西),我们可以创建一个方法来获取多边形相对于给定点的最近顶点及其对应的方向。对象(或类似的多边形表示方式),其中包含了多边形的顶点。//附送AI 图片无版权 随意用 龙年大吉大利。

转眼之间 一路有你 1358

端边云架构研究

本文摘要:边缘计算与云边端协同架构专题,涵盖Docker、K8s、MQTT等技术栈的快速入门指南。重点推荐崔广章《深入理解边缘计算》的4周学习计划:第1周掌握Docker/K3s/MQTT基础;第2-4周系统学习云边端架构、KubeEdge核心组件及EdgeX实战。附物联网设备接入(GB/T32960标准)、时序数据库(TDengine)等工业场景关键技术,提供华为云/KubeEdge/EdgeX等官方文档链接,适合开发者构建从终端到云端的完整边缘计算知识体系。(149字)

qq_23204557的博客 384

全网最新首发纯干货:微信数据库表结构完整分析(一)

找不到微信DB表结构说明?找不到具体字段的解释?来这里,全网最完整版!!!

killghosts的博客 4930

Velero数据迁移实战:掌握CSI卷快照与块级备份的5大核心策略

Velero作为Kubernetes备份与迁移的业界标准工具,在复杂存储环境中的数据迁移场景中展现出强大的能力。本文深入探讨Velero在CSI卷快照和块级数据移动方面的核心技术,帮助中级技术用户掌握高效数据迁移的最佳实践。 ## 1. CSI卷快照数据移动架构解析 Velero的CSI卷快照数据移动功能通过统一的插件化架构,实现了卷数据的无缝迁移。这一架构的核心在于将快照创建、数据传输和存储

gitblog_00131的博客 316

Keil uVision5 STM32 startup_stm32f10x_md_vl.s error A3906U Malformed via file target not created..

🏆 本文收录于《全栈Bug调优(实战版)》专栏,致力于分享我在项目实战过程中遇到的各类Bug及其原因,并提供切实有效的解决方案。无论你是初学者还是经验丰富的开发者,本文将为你指引出一条更高效的Bug修复之路,助你早日登顶,迈向财富自由的梦想🚀!同时,欢迎大家关注、收藏、订阅本专栏,更多精彩内容正在持续更新中。让我们一起进步,Up!Up!Up!    备注: 部分问题/难题源自互联网,经过精心筛选和整理,结合数位十多年大厂实战经验资深大佬经验总结所得,数条可行方案供所需之人参考。

**My Coding Family** 2785

智能车图像处理14-进阶篇6--坡道的判定

这篇文章主要讲述智能车图像处理中 : 如何判断坡道

taiyuezyh的博客 9236

Linux 下 SIGSEGV 无 core 文件定位:3 种替代方案与 dmesg/objdump 实战

本文详细介绍了在Linux环境下无法生成core文件时,如何通过dmesg内核日志分析、objdump反汇编定位和catchsegv工具链三种方法有效诊断SIGSEGV(segmentation fault)错误。文章包含实战步骤和代码示例,帮助开发者在生产环境中快速定位内存访问问题,提升调试效率。

weixin_33785108的博客 493

【同等学力】01-逻辑符号表达

F(x): x是确诊者,G(x):x有症状F(x): x是老人,G(x):x是宠物,L(x,y): x喜欢y。

super_mochi1 1881

技术创作全脉络:从问题到解决方案的完整思考路径记录

在软件开发和知识管理领域,记录和呈现完整的思考过程与决策路径,正成为一种重要的工程实践方法。这种方法强调从问题定义、方案探索、试错纠偏到最终解决的全链条记录,其核心原理在于将知识从静态的结果展示转变为动态的、可追溯的成长过程。其技术价值在于构建坚韧、可复现的知识体系,极大提升问题排查效率、团队协作效能与个人学习深度。典型的应用场景包括复杂技术问题的排查记录、架构设计决策的文档化、开源项目的贡献历程以及团队内部的知识传承。本文以Spring Boot多环境配置和MyBatis-Plus逻辑删除等具体案例,结合

weixin_30628801的博客 303

31、双相不锈钢直齿轮加工与性能研究及人工神经网络在焊接中的应用

本文研究了双相不锈钢直齿轮在不同加工方法(WEDM与滚齿加工)下的磨损行为,分析了表面粗糙度、齿厚变化、磨损率及润滑性能随转速的变化规律,并对比了两种工艺的优劣。同时,探讨了人工神经网络(ANN)在AA7050铝合金搅拌摩擦焊中的应用,通过建立工艺参数与焊接质量之间的预测模型,实现了对焊缝硬度和峰值温度的准确预测。研究为高性能齿轮制造和铝合金焊接提供了理论支持和技术参考,并提出了未来在润滑优化、加工工艺改进及智能控制方面的研究方向。

ggg99的专栏 151

PX4实战(四):PX4 uorb模块详解

本节主要讲解PX4中的uorb消息,主要包括uorb的基本概念使用、PX4内重要的uorb消息、如何自定义uorb消息以及使用uorb消息的注意点等,其中讲解重要uorb消息是为了对PX4内重要数据结构有初步的了解,有助于后期算法理解。uORB(micro Object Request Broker)是PX4中用于模块间通信的轻量级发布-订阅(Publish/Subscribe)机制。模块之间可以通过uORB传递消息,无需直接调用对方函数;提高系统模块化与解耦性;

PX4-SLAM-PNC 1933

Docker ENTRYPOINT 底层原理与生产级实践指南

ENTRYPOINT 是 Docker 容器进程模型的核心机制,本质是为容器指定 PID 1 进程,直接决定信号传递、生命周期管理和 OCI 兼容性。其 shell 形式与 exec 形式触发不同内核调用路径:前者经 /bin/sh 中转,易导致信号丢失和 PID 层级错位;后者直调 execve 系统调用,保障服务即 PID 1,契合 Kubernetes 健康检查与自动恢复要求。技术价值在于统一镜像行为契约、解耦运行时参数、支撑 CLI 工具化封装。典型应用场景包括初始化脚本编排、多环境模式切换、K8s

weixin_33858485的博客 399

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

kubernetes基础命令

一、名称空间 资源隔离、但是网络不隔离 # 创建 kubectl create ns test #删除 kubectl delete ns test # yaml文件创建 [root@k8s-master ~]# vi test.yaml [root@k8s-master ~]# cat test.yaml apiVersion: v1 kind: Namespace metadata: name: test [root@k8s-master ~]# kubectl ap...

cbzhunian 8031

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

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

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

k8s存储卷(empyDir;hostPath;nfs)

xxxxx

qq_44135433的博客 2133

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

五、Kubernetes(K8S):Kubectl常用命令详解

Kubectl是Kubernetes命令行工具,用于管理Kubernetes集群资源和应用程序的部署、升级和扩展等。其作用包括但不限于: 1.创建、更新和删除应用程序、服务和负载均衡器等资源 2.管理集群节点的状态和部署 3.管理Kubernetes集群的配置和存储 4.监控集群和应用程序的状态 5.诊断和调试应用程序和集群故障 6.扩展和调整集群规模和资源使用 7.与Kubernetes API服务器通信 Kubectl是使用Kubernetes进行部署和管理的核心工具之一。

SteveRocket's-Blog 7273

k8s之vpa浅析(附带案例)

VPA 参考链接:https://www.kubecost.com/kubernetes-autoscaling/kubernetes-vpa/ 官网链接:https://github.com/kubernetes/autoscaler/tree/master/vertical-pod-autoscaler VPA简介 kubernetes(VPA Vertical Pod Autoscaler)垂直 Pod 自动扩缩容, VPA 会基于 Pod 的资源使用情况自动为集群设置资源占用的限制,从而让集群将

jiayu的博客 4974
上一篇: kubectl源码分析之describe
下一篇: kubectl 源码分析之attach
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、付费专栏及课程。

余额充值