kubectl源码分析之cp

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

 欢迎关注我的公众号:

 目前刚开始写一个月,一共写了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 CopyOptions struct {//cp结构体
	Container  string
	Namespace  string
	NoPreserve bool

	ClientConfig      *restclient.Config
	Clientset         kubernetes.Interface
	ExecParentCmdName string

	genericclioptions.IOStreams
}
func NewCopyOptions(ioStreams genericclioptions.IOStreams) *CopyOptions {
	return &CopyOptions{//初始化结构体
		IOStreams: ioStreams,
	}
}
//创建cp命令
func NewCmdCp(f cmdutil.Factory, ioStreams genericclioptions.IOStreams) *cobra.Command {
	o := NewCopyOptions(ioStreams)//初始化结构体

	cmd := &cobra.Command{//创建cobra命令
		Use:                   "cp <file-spec-src> <file-spec-dest>",
		DisableFlagsInUseLine: true,
		Short:                 i18n.T("Copy files and directories to and from containers."),
		Long:                  "Copy files and directories to and from containers.",
		Example:               cpExample,
		Run: func(cmd *cobra.Command, args []string) {
			cmdutil.CheckErr(o.Complete(f, cmd))//准备
			cmdutil.CheckErr(o.Run(args))//运行
		},
	}
	cmd.Flags().StringVarP(&o.Container, "container", "c", o.Container, "Container name. If omitted, the first container in the pod will be chosen")//容器选项
	cmd.Flags().BoolVarP(&o.NoPreserve, "no-preserve", "", false, "The copied file/directory's ownership and permissions will not be preserved in the container")//no-preserve选项

	return cmd
}
type fileSpec struct {//文件结构体
	PodNamespace string
	PodName      string
	File         string
}
//准备函数
func (o *CopyOptions) Complete(f cmdutil.Factory, cmd *cobra.Command) error {
	if cmd.Parent() != nil {//设置父命令名称
		o.ExecParentCmdName = cmd.Parent().CommandPath()
	}

	var err error
	o.Namespace, _, err = f.ToRawKubeConfigLoader().Namespace()//设置名称空间
	if err != nil {
		return err
	}

	o.Clientset, err = f.KubernetesClientSet()//设置Clientset
	if err != nil {
		return err
	}

	o.ClientConfig, err = f.ToRESTConfig()//设置restconfig
	if err != nil {
		return err
	}
	return nil
}

// Validate makes sure provided values for CopyOptions are valid
//校验
func (o *CopyOptions) Validate(cmd *cobra.Command, args []string) error {
	if len(args) != 2 {//参数必须是两个
		return cmdutil.UsageErrorf(cmd, cpUsageStr)
	}
	return nil
}
//运行
func (o *CopyOptions) Run(args []string) error {
	if len(args) < 2 {//参数小于2个报错
		return fmt.Errorf("source and destination are required")
	}
	srcSpec, err := extractFileSpec(args[0])//从参数抽取源文件规范
	if err != nil {
		return err
	}
	destSpec, err := extractFileSpec(args[1])//从arg抽取目标文件规范
	if err != nil {
		return err
	}

	if len(srcSpec.PodName) != 0 && len(destSpec.PodName) != 0 {//源pod和目标pod都不为空
		if _, err := os.Stat(args[0]); err == nil {//参数0,文件存在
			return o.copyToPod(fileSpec{File: args[0]}, destSpec, &exec.ExecOptions{})//拷贝到pod
		}
		return fmt.Errorf("src doesn't exist in local filesystem")//报错
	}

	if len(srcSpec.PodName) != 0 {//源pod不额外空
		return o.copyFromPod(srcSpec, destSpec)//从pod拷贝到本地
	}
	if len(destSpec.PodName) != 0 {//目标pod不为空
		return o.copyToPod(srcSpec, destSpec, &exec.ExecOptions{})//从本地拷贝到目标
	}
	return fmt.Errorf("one of src or dest must be a remote file specification")//报错
}
func extractFileSpec(arg string) (fileSpec, error) {//抽取文件规范
	if i := strings.Index(arg, ":"); i == -1 {//没有冒号
		return fileSpec{File: arg}, nil
	} else if i > 0 {
		file := arg[i+1:]
		pod := arg[:i]
		pieces := strings.Split(pod, "/")//用/分割,
		if len(pieces) == 1 {//分割后为1个,指定pod名称
			return fileSpec{
				PodName: pieces[0],
				File:    file,
			}, nil
		}
		if len(pieces) == 2 {//分割后参数为2个,指定名称空间和pod名称
			return fileSpec{
				PodNamespace: pieces[0],
				PodName:      pieces[1],
				File:         file,
			}, nil
		}
	}

	return fileSpec{}, errFileSpecDoesntMatchFormat
}

//拷贝到pod
func (o *CopyOptions) copyToPod(src, dest fileSpec, options *exec.ExecOptions) error {
	if len(src.File) == 0 || len(dest.File) == 0 {// 文件名为空报错
		return errFileCannotBeEmpty
	}
	reader, writer := io.Pipe()//创建管道

	// strip trailing slash (if any)
	if dest.File != "/" && strings.HasSuffix(string(dest.File[len(dest.File)-1]), "/") {//目标文件不为/,并且目标文件有/结尾
		dest.File = dest.File[:len(dest.File)-1]//去掉目标文件末尾/
	}

	if err := o.checkDestinationIsDir(dest); err == nil {//如果目标是目录
		// If no error, dest.File was found to be a directory.
		// Copy specified src into it
		dest.File = dest.File + "/" + path.Base(src.File)//目标文件为目标加源文件
	}

	go func() {
		defer writer.Close()
		err := makeTar(src.File, dest.File, writer)//创建tar文件
		cmdutil.CheckErr(err)
	}()
	var cmdArr []string

	// TODO: Improve error messages by first testing if 'tar' is present in the container?
	if o.NoPreserve {//如果指定no-preserve
		cmdArr = []string{"tar", "--no-same-permissions", "--no-same-owner", "-xmf", "-"}//构造命令行
	} else {
		cmdArr = []string{"tar", "-xmf", "-"}
	}
	destDir := path.Dir(dest.File)//获取目标文件目录
	if len(destDir) > 0 {//如果目标文件目录有值
		cmdArr = append(cmdArr, "-C", destDir)//追加命令
	}

	options.StreamOptions = exec.StreamOptions{//构造流选项
		IOStreams: genericclioptions.IOStreams{
			In:     reader,
			Out:    o.Out,
			ErrOut: o.ErrOut,
		},
		Stdin: true,

		Namespace: dest.PodNamespace,
		PodName:   dest.PodName,
	}

	options.Command = cmdArr
	options.Executor = &exec.DefaultRemoteExecutor{}
	return o.execute(options)//执行拷贝
}
// 执行拷贝
func (o *CopyOptions) execute(options *exec.ExecOptions) error {
	if len(options.Namespace) == 0 {//如果名称空间为空,用o的名称空间
		options.Namespace = o.Namespace
	}

	if len(o.Container) > 0 {//如果container不为空,设置container
		options.ContainerName = o.Container
	}

	options.Config = o.ClientConfig//设置restconfig
	options.PodClient = o.Clientset.CoreV1()//设置podclient

	if err := options.Validate(); err != nil {//执行校验
		return err
	}

	if err := options.Run(); err != nil {//运行拷贝
		return err
	}
	return nil
}
//创建tar文件
func makeTar(srcPath, destPath string, writer io.Writer) error {
	// TODO: use compression here?
	tarWriter := tar.NewWriter(writer)//包装writer
	defer tarWriter.Close()

	srcPath = path.Clean(srcPath)//源路径
	destPath = path.Clean(destPath)//目标路径
	return recursiveTar(path.Dir(srcPath), path.Base(srcPath), path.Dir(destPath), path.Base(destPath), tarWriter)//递归创建tar
}
//从pod拷贝到本地
func (o *CopyOptions) copyFromPod(src, dest fileSpec) error {
	if len(src.File) == 0 || len(dest.File) == 0 {//源文件和目标文件不能为空
		return errFileCannotBeEmpty
	}

	reader, outStream := io.Pipe()//创建pipe
	options := &exec.ExecOptions{//构造exec选项
		StreamOptions: exec.StreamOptions{
			IOStreams: genericclioptions.IOStreams{
				In:     nil,
				Out:    outStream,
				ErrOut: o.Out,
			},

			Namespace: src.PodNamespace,
			PodName:   src.PodName,
		},

		// TODO: Improve error messages by first testing if 'tar' is present in the container?
		Command:  []string{"tar", "cf", "-", src.File},
		Executor: &exec.DefaultRemoteExecutor{},
	}

	go func() {
		defer outStream.Close()
		err := o.execute(options)//执行拷贝
		cmdutil.CheckErr(err)
	}()
	prefix := getPrefix(src.File)//获取prefix
	prefix = path.Clean(prefix)
	// remove extraneous path shortcuts - these could occur if a path contained extra "../"
	// and attempted to navigate beyond "/" in a remote filesystem
	prefix = stripPathShortcuts(prefix)//修剪prefix
	return o.untarAll(src, reader, dest.File, prefix)//执行解压缩
}

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。 阅读详情

相关推荐

手把手拆解K8s:从零部署集群到YAML与排错全攻略

容器编排是现代云原生架构的基石,而Kubernetes(简称K8s)作为事实标准,解决了大规模容器管理、服务发现、弹性伸缩和故障恢复等核心问题。其声明式API让用户通过描述期望状态来驱动系统持续收敛,这一原理贯穿于集群部署、资源对象定义和日常运维之中。理解控制平面与数据平面的角色分工、核心组件(如kubelet、etcd)的协作机制,是掌握K8s的关键。kubeadm作为官方部署工具,能帮助用户从裸机快速搭建高可用集群,同时掌握Deployment、Service等YAML清单编写技巧,以及基于kubect

weixin_31155097的博客 251

k8s实战之kubectl

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

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

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

weixin_33875564的博客 370

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

Kubernetes Kubectl top 命令

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

专注基础架构领域 2551

【信息科学与工程学】计算机科学与自动化——第一百九十八篇 高并发高可用的知识点01

以上补充约 110 行,涵盖分布式协调、服务网格细节、数据库高级特性、性能分析工具、混沌工程、安全渗透、合规审计、研发效能、新兴技术、架构模式、实用工具及经典论文。涵盖数据库索引与锁、NoSQL、前端性能、安全攻防、压测工具深入、监控深入、云原生存储、服务治理扩展、代码质量、DevOps 文化、行业标准、软技能及未来趋势。好的,继续补充更多高并发、高可用、高可靠的知识与技术,涵盖更深层的数据库内部机制、分布式事务、服务治理、运维自动化、安全与前沿技术等领域。

weixin_49199313的博客 737

【原创】k8s源码分析-----kubectl(3)主要框架

1、整体流程 我们先整体的流程走一遍,不用太过于关心看不看的懂,先有个整体的流程概念,后续再一步一步分析 1.1 main 先从main开始 代码在k8s.io\kubernetes\cmd\kubectl\kubectl.go 其中的Factory我们已经分析过了,可以看(【原创】k8s源码分析-----kubectl(2)Factory)  

kwame211的博客 545

博科的SAN交换机基本操作

2、添加用户testuser赋予user权限可以访问1-128VF默认VF为128账号描述"Test user"密码为password123。1、创建zone别名(100是指当前设备Domain ID,1和2是指对应的index号)2,删除新接入设备的ZONE或保持ZONE配置一致。3、将zone添加到当前生效的CFG中。2、将zone添加到当前生效的CFG中。3、将zone添加到当前生效的CFG中。3,将添加的级联端口持续关闭。4、将当前zone生效。4、将当前zone生效。1、查看当前所有用户。

chenjunokok的博客 1839

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

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

gitblog_00817的博客 436

(论文速读)PTV3: 更简单、更快速、更强大的3D点云处理新突破

该论文提出PointTransformerV3(PTv3),通过简化设计实现3D点云处理的效率突破。该研究摒弃复杂注意力机制,转而采用点云序列化和补丁注意力等高效方法,将感受野从16点扩展到1024点,在保持高精度的同时实现3倍速度提升和10倍内存优化。PTv3在超过20个室内外场景任务中取得SOTA结果,ScanNet语义分割达79.4%mIoU,Waymo检测提升3.3%APH。核心创新包括四种空间填充曲线序列化模式和xCPE位置编码,为3D感知的工业应用提供了高效解决方案。

LJ1147517021的博客 1380

CentOS7 编译升级GCC至9.3.0

1)下载GCC9.2.0源码并解压 从GCC官方FTP下载地址可以看到GCC最新版本为9.3.0。由于官网下载速度慢,实际上用清华大学的镜像站进行下载,代码如下: wget -c /opt/tmp/ https://mirrors.tuna.tsinghua.edu.cn/gnu/gcc/gcc-9.3.0/gcc-9.3.0.tar.gz #考虑到安装失败的可能性,创建一个临时文件夹来安装GCC...

haha123486的博客 1万+

Seed-VC 免训练声音克隆实战:零样本语音转换、实时换声与歌声翻唱全解

Seed-VC 是一个零样本语音转换的开源项目:只给 1~30 秒参考音频就能克隆目标音色,全程免训练,既能支撑会议直播里的实时声音替换,也能做歌曲翻唱。本文按「先看效果数据 → 再选模型 → 安装跑通 → 实时与歌声两条工作流 → 故障排查」的顺序展开,文中所有数字都能在仓库里复现验证。 它的工作方式一句话讲清:把「说什么」和「谁在说」拆开处理——内容编码器(Whisper 或 XLSR)从源

gitblog_00303的博客 1017

java实现自动发送微信QQ消息(可发图片)

自动发送微信/QQ/微博等消息 一:功能:实现发送QQ/微信/微博消息,程序控制。 效果演示(实现自动发生QQ微信消息给女友,发微博信息也可以就不演示了) 二:原理讲解:将剪贴板的内容给发送到QQ微信中去,复制粘贴发送。 模拟真实操作进行发送信息。 三:前期准备,软件安装,及初步测试。...

XURUNFA950827的博客 1万+

Cinnabar Web 客户端探索:用 WebTransport 在浏览器里连接基岩版服务器

Cinnabar 是一个用 Rust 从零重写的 Minecraft: Bedrock Edition(基岩版)桌面客户端,追求快速且原汁原味的体验。而它的 **Web 客户端**更让人眼前一亮:把整个基岩版客户端编译成 WebAssembly,通过 Go 语言编写的中继服务,用 **WebTransport** 在浏览器里直连基岩版服务器——无需安装,打开网页就能玩。 [![Cinnabar

gitblog_00016的博客 71

静态时序分析(Static Timing Analysis, STA):简介及内容导航

静态时序分析(简称STA)是用来验证数字设计时序的技术之一,另外一种验证时序的方法是时序仿真,时序仿真可以同时验证功能和时序。“时序分析”这个术语就是用来指代“静态时序分析“或”时序仿真“这两种方法之一,简单来说,时序分析的目的就是为了解决设计中的各种时序问题。STA被称为静态的原因是其对于设计的分析是静态地执行的,并不依赖于施加在输入端口上的激励。相比之下,时序仿真则可以被视作动态地执行对设计的分析,具体过程描述如下:施加一组激励,观察在这组激励下电路行为是否符合要求,然后换一组激。

Starry__的博客 1997

045、镜头模组公差链分析:从 Lens 到 Sensor 的装配公差累积与良率优化

本文深入分析了镜头模组从镜片到传感器各环节的公差累积问题及优化策略。文章首先剖析了四级公差链(镜片单体、镜筒装配、VCM定位、传感器贴装)的误差传递机制,指出各环节典型公差值及其影响(如5微米镜片偏差可导致0.02度光线偏折)。其次对比了最坏情况法与均方根法的差异,强调需考虑公差相关性(如镜片曲率与镜筒间隙的正相关性)。最后提出良率优化"三板斧":通过蒙特卡洛仿真优化公差分配、采用主动对准工艺在线补偿、建立数据反馈闭环系统,并结合"阴阳脸"案例说明如何定位根因(模具磨损+贴片机老化导致的误差叠加)。作者总结

sundong_81的博客 59

kOps A/B 升级测试场景(upgrade-ab)详解:本地运行指南与实现原理

`upgrade-ab` 是 Kubernetes Operations(kOps)仓库中用于验证 **kOps 与 Kubernetes 双版本 A→B 升级链路**的端到端(E2E)测试场景:先用旧版 kOps A 配合 Kubernetes A 版本创建集群,再用新版 kOps B 将集群升级到 Kubernetes B 版本,并最终断言所有节点 kubelet 均已滚动到目标版本。本文以

gitblog_01098的博客 799

倍福--手动加入第三方伺服的配置

客户在没有硬件情况下,希望手动配置硬件,添加第三方驱动器,本文介绍其操作流程 目 录 软硬件版本 3 1.1. 倍福Beckhoff 3 1.1.1. 控制器硬件 3 1.1.2. 控制软件 3 操作步骤 3 2.1. 添加电机XML文件 3 2.2. 创建EtherCAT 3 2.3. 添加新建项 3 2.4. 选择型号 4 2.5. 关联NC轴 5 软硬件版本 1.1. 倍福Beckhoff 1.1.1. 控制器硬件 TwinCAT控制制器,PC或者EPC,包括: 嵌入式控制器:CX5020-

weixin_41883890的博客 5329

Java中级开发面试核心:并发编程与JVM调优实战

并发编程是Java开发的核心技能,涉及线程安全、锁优化等关键技术。通过synchronized和ReentrantLock等机制实现线程同步,其底层原理涉及JVM monitor和AQS队列。JVM调优则关注内存管理、垃圾回收策略等,合理配置参数可显著提升系统性能。这些技术在电商秒杀、金融交易等高并发场景中尤为重要。本文结合面试真题,深入解析Java并发编程三大核心问题与JVM性能调优实战要点,帮助开发者掌握系统设计关键能力。

weixin_34199335的博客 405

24届数字IC验证——SV+UVM基础知识汇总(一)

汇总整理在面试过程中常见的问题,如果都能回答下来,那么面试肯定不成问题的分别构建不同抽象级的transaction,来实现复杂的激励。(以前是单一层次的sequence,对激励复用、上层复用不塌友好)不同层级之间的sequence没有继承关系,相互之间进行转换低层次的sequence从高层次的sequencer中获取高层次的sequence,并将其转换为低层次的sequence,再通过低层次的sequencer发送出去如何连接:低层次的sequencer包含高层次sequencer的句柄。

qq_42135020的博客 3154

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

OpenClaw:基于云原生与算子化设计的LLM应用开源框架深度解析

在大型语言模型(LLM)应用开发领域,如何将模型能力高效、稳定地转化为生产级应用是核心挑战。这涉及到模型服务化、API接口封装、上下文管理等一系列工程化问题。OpenClaw作为一个新兴的开源框架,其设计理念深刻回应了这些挑战。它采用云原生架构,将应用组件微服务化,并通过声明式配置实现基础设施即代码,提升了系统的弹性伸缩与可维护性。其最具创新性的核心抽象是“技能即算子”,借鉴数据流编程思想,将每个功能单元标准化为具有明确输入输出的算子,从而实现工作流的可视化编排与高效组合。这种设计为构建高并发、复杂的企业级

weixin_33743880的博客 442

数学建模模型总结

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

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

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

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

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

JVM CDS警告解析:类加载路径越界诊断与修复

Class Data Sharing(CDS)是JVM通过共享归档加速启动的核心机制,其原理基于类加载器分层契约——仅Bootstrap ClassLoader加载的系统类(如java.lang.*、java.util.*)可安全共享。该机制的技术价值在于显著降低多实例JVM的内存占用与启动延迟,广泛应用于Spring Boot微服务、容器化部署及高密度Java进程场景。当出现‘sharing is only supported for boot loader classes’警告,本质是应用类(如Spri

weixin_34405354的博客 429

3.本地单机架构minikube

搭建minikube

weixin_47252600的博客 1148

通过 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万+
上一篇: kubectl 源码分析之proxy
下一篇: kubectl源码分析之auth can-i
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、付费专栏及课程。

余额充值