kubectl源码分析之top node

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

 

加qq群,请联系:


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

//创建top命令
func NewCmdTop(f cmdutil.Factory, streams genericclioptions.IOStreams) *cobra.Command {
	cmd := &cobra.Command{//创建cobra命令
		Use:   "top",
		Short: i18n.T("Display Resource (CPU/Memory/Storage) usage."),
		Long:  topLong,
		Run:   cmdutil.DefaultSubCommandRun(streams.ErrOut),
	}

	// create subcommands
	cmd.AddCommand(NewCmdTopNode(f, nil, streams))//添加node子命令
	cmd.AddCommand(NewCmdTopPod(f, nil, streams))//添加pod子命令

	return cmd
}
type TopNodeOptions struct {//top node结构体
	ResourceName    string
	Selector        string
	SortBy          string
	NoHeaders       bool
	NodeClient      corev1client.CoreV1Interface
	HeapsterOptions HeapsterTopOptions
	Client          *metricsutil.HeapsterMetricsClient
	Printer         *metricsutil.TopCmdPrinter
	DiscoveryClient discovery.DiscoveryInterface
	MetricsClient   metricsclientset.Interface

	genericclioptions.IOStreams
}

type HeapsterTopOptions struct {//Heapster结构体
	Namespace string
	Service   string
	Scheme    string
	Port      string
}
func (o *HeapsterTopOptions) Bind(flags *pflag.FlagSet) {//设置heapster选项
	if len(o.Namespace) == 0 {
		o.Namespace = metricsutil.DefaultHeapsterNamespace
	}
	if len(o.Service) == 0 {
		o.Service = metricsutil.DefaultHeapsterService
	}
	if len(o.Scheme) == 0 {
		o.Scheme = metricsutil.DefaultHeapsterScheme
	}
	if len(o.Port) == 0 {
		o.Port = metricsutil.DefaultHeapsterPort
	}

	flags.StringVar(&o.Namespace, "heapster-namespace", o.Namespace, "Namespace Heapster service is located in")
	flags.StringVar(&o.Service, "heapster-service", o.Service, "Name of Heapster service")
	flags.StringVar(&o.Scheme, "heapster-scheme", o.Scheme, "Scheme (http or https) to connect to Heapster as")
	flags.StringVar(&o.Port, "heapster-port", o.Port, "Port name in service to use")
}
//创建top node命令
func NewCmdTopNode(f cmdutil.Factory, o *TopNodeOptions, streams genericclioptions.IOStreams) *cobra.Command {
	if o == nil {
		o = &TopNodeOptions{//初始化结构体
			IOStreams: streams,
		}
	}

	cmd := &cobra.Command{//创建cobra命令
		Use:                   "node [NAME | -l label]",
		DisableFlagsInUseLine: true,
		Short:                 i18n.T("Display Resource (CPU/Memory/Storage) usage of nodes"),
		Long:                  topNodeLong,
		Example:               topNodeExample,
		Run: func(cmd *cobra.Command, args []string) {
			cmdutil.CheckErr(o.Complete(f, cmd, args))//准备
			cmdutil.CheckErr(o.Validate())//校验
			cmdutil.CheckErr(o.RunTopNode())//运行
		},
		Aliases: []string{"nodes", "no"},// 别名
	}
	cmd.Flags().StringVarP(&o.Selector, "selector", "l", o.Selector, "Selector (label query) to filter on, supports '=', '==', and '!='.(e.g. -l key1=value1,key2=value2)")//selector选项
	cmd.Flags().StringVar(&o.SortBy, "sort-by", o.Selector, "If non-empty, sort nodes list using specified field. The field can be either 'cpu' or 'memory'.")//sort-by选项
	cmd.Flags().BoolVar(&o.NoHeaders, "no-headers", o.NoHeaders, "If present, print output without headers")//no-headers选项

	o.HeapsterOptions.Bind(cmd.Flags())//heapster选项
	return cmd
}
//准备
func (o *TopNodeOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, args []string) error {
	if len(args) == 1 {
		o.ResourceName = args[0]//设置resource
	} else if len(args) > 1 {
		return cmdutil.UsageErrorf(cmd, "%s", cmd.Use)
	}

	clientset, err := f.KubernetesClientSet()//获取clientset
	if err != nil {
		return err
	}

	o.DiscoveryClient = clientset.DiscoveryClient//设置discoveryclient

	config, err := f.ToRESTConfig()//获取rest config
	if err != nil {
		return err
	}
	o.MetricsClient, err = metricsclientset.NewForConfig(config)//设置MetricsClient
	if err != nil {
		return err
	}

	o.NodeClient = clientset.CoreV1()//设置NodeClient 
	o.Client = metricsutil.NewHeapsterMetricsClient(clientset.CoreV1(), o.HeapsterOptions.Namespace, o.HeapsterOptions.Scheme, o.HeapsterOptions.Service, o.HeapsterOptions.Port)//设置Heapster client

	o.Printer = metricsutil.NewTopCmdPrinter(o.Out)//设置printer
	return nil
}

//校验函数
func (o *TopNodeOptions) Validate() error {
	if len(o.SortBy) > 0 {//排序
		if o.SortBy != sortByCPU && o.SortBy != sortByMemory {//只能是cpu或momery
			return errors.New("--sort-by accepts only cpu or memory")
		}
	}
	if len(o.ResourceName) > 0 && len(o.Selector) > 0 {//资源名称和selector不能同时指定
		return errors.New("only one of NAME or --selector can be provided")
	}
	return nil
}
//运行
func (o TopNodeOptions) RunTopNode() error {
	var err error
	selector := labels.Everything()//设置selector
	if len(o.Selector) > 0 {//如果--selector有值
		selector, err = labels.Parse(o.Selector)//设置selector
		if err != nil {
			return err
		}
	}

	apiGroups, err := o.DiscoveryClient.ServerGroups()//获取apigroup
	if err != nil {
		return err
	}

	metricsAPIAvailable := SupportedMetricsAPIVersionAvailable(apiGroups)//判断Metrics是否支持这个apiGroup

	metrics := &metricsapi.NodeMetricsList{}
	if metricsAPIAvailable {//如果Metrics支持这个apiGroup
		metrics, err = getNodeMetricsFromMetricsAPI(o.MetricsClient, o.ResourceName, selector)//获取metrics
		if err != nil {
			return err
		}
	} else {//如果不支持
		metrics, err = o.Client.GetNodeMetrics(o.ResourceName, selector.String())//通过client获取metrics
		if err != nil {
			return err
		}
	}

	if len(metrics.Items) == 0 {//如果没有metrics
		return errors.New("metrics not available yet")
	}

	var nodes []v1.Node
	if len(o.ResourceName) > 0 {//如果资源有值
		node, err := o.NodeClient.Nodes().Get(o.ResourceName, metav1.GetOptions{})//获取资源名称对应节点
		if err != nil {
			return err
		}
		nodes = append(nodes, *node)//append节点
	} else {//如果selector有值
		nodeList, err := o.NodeClient.Nodes().List(metav1.ListOptions{//获取selector对应节点
			LabelSelector: selector.String(),
		})
		if err != nil {
			return err
		}
		nodes = append(nodes, nodeList.Items...)//append节点
	}

	allocatable := make(map[string]v1.ResourceList)//可分配资源map

	for _, n := range nodes {//遍历节点,设置可分配资源
		allocatable[n.Name] = n.Status.Allocatable
	}

	return o.Printer.PrintNodeMetrics(metrics.Items, allocatable, o.NoHeaders, o.SortBy)//打印结果
}

func getNodeMetricsFromMetricsAPI(metricsClient metricsclientset.Interface, resourceName string, selector labels.Selector) (*metricsapi.NodeMetricsList, error) {//获取metrics
	var err error
	versionedMetrics := &metricsV1beta1api.NodeMetricsList{}//构造metricsList对象
	mc := metricsClient.MetricsV1beta1()//获取client
	nm := mc.NodeMetricses()//获取node metrics client
	if resourceName != "" {//如果资源名称不为空
		m, err := nm.Get(resourceName, metav1.GetOptions{})//获取metrics
		if err != nil {
			return nil, err
		}
		versionedMetrics.Items = []metricsV1beta1api.NodeMetrics{*m}//包装metricsList
	} else {//如果selector有值
		versionedMetrics, err = nm.List(metav1.ListOptions{LabelSelector: selector.String()})//通过selector获取metrics
		if err != nil {
			return nil, err
		}
	}
	metrics := &metricsapi.NodeMetricsList{}
	err = metricsV1beta1api.Convert_v1beta1_NodeMetricsList_To_metrics_NodeMetricsList(versionedMetrics, metrics, nil)//把metrics转成NodeMetricsList
	if err != nil {
		return nil, err
	}
	return metrics, nil//返回NodeMetricsList
}
//打印node metrics
func (printer *TopCmdPrinter) PrintNodeMetrics(metrics []metricsapi.NodeMetrics, availableResources map[string]v1.ResourceList, noHeaders bool, sortBy string) error {
	if len(metrics) == 0 {//metrics为空返回
		return nil
	}
	w := printers.GetNewTabWriter(printer.out)//包装tab Writer
	defer w.Flush()//defer刷新

	n, err := NewNodeMetricsSorter(metrics, sortBy)//metrics排序
	if err != nil {
		return err
	}
	sort.Sort(n)//执行排序

	if !noHeaders {//如果不是noHeaders,打印headers
		printColumnNames(w, NodeColumns)
	}
	var usage v1.ResourceList
	for _, m := range metrics {//遍历metrics
		err := scheme.Scheme.Convert(&m.Usage, &usage, nil)//转换usage
		if err != nil {
			return err
		}
		printMetricsLine(w, &ResourceMetricsInfo{//打印一行metrics info
			Name:      m.Name,
			Metrics:   usage,
			Available: availableResources[m.Name],
		})
		delete(availableResources, m.Name)//删除availableResources 中已经打印的
	}

	// print lines for nodes of which the metrics is unreachable.
	for nodeName := range availableResources {//遍历availableResources,打印没有metrics的node
		printMissingMetricsNodeLine(w, nodeName)
	}
	return nil
}
//判断metrics是否支持apiGroup
func SupportedMetricsAPIVersionAvailable(discoveredAPIGroups *metav1.APIGroupList) bool {
	for _, discoveredAPIGroup := range discoveredAPIGroups.Groups {
		if discoveredAPIGroup.Name != metricsapi.GroupName {//如果groupname不同则跳过
			continue
		}
		for _, version := range discoveredAPIGroup.Versions {
			for _, supportedVersion := range supportedMetricsAPIVersions {
				if version.Version == supportedVersion {//如果version为supportedVersion 则返回true
					return true
				}
			}
		}
	}
	return false//返回false
}

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

相关推荐

Qwen3-Coder:MoE架构与256K上下文驱动的编程智能体

编程大模型正从代码补全迈向系统级任务执行,其核心在于对长上下文的理解能力与工具调用的工程化支持。MoE(Mixture of Experts)架构通过稀疏激活显著降低推理显存占用和延迟,使4800亿参数模型可在单张A100上稳定运行;256K上下文并非堆砌文本容量,而是支撑跨文件、跨配置、跨工具的项目级建模,为智能体编程、浏览器自动化和Tool Calling提供基础语义空间。Qwen3-Coder以Instruct范式强化指令遵循能力,将自然语言需求精准映射为可执行代码或结构化工具调用请求,适用于DevO

weixin_34060741的博客 370

k8s实战之kubectl

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

Gemini 3.5 Flash长程Agentic能力深度实测与工程化落地指南

Agentic AI并非简单多步调用,而是指大模型在复杂任务中持续维护状态、自主规划工具链、闭环验证结果的系统性能力。其核心挑战在于上下文一致性、运行时语义理解及MCP等外部工具协同——这直接决定AI能否替代工程师完成端到端工程任务。当前主流模型如Gemini 3.5 Flash已在17步以上长程推理中展现稳定性,但仍在自我调试、符号与运行时语义对齐、跨协议状态感知等关键维度存在瓶颈。本文基于VS Code实战场景,解析Agentic工作流构建方法、GEMINI.md上下文建模技巧、MCP服务器选型策略及真

weixin_33725239的博客 410

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

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

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

love android 440

.NET技术博客的深度实践:从Span<T>到程序员成长路径

Span<T>是.NET中实现零分配内存操作的核心类型,其本质是栈上管理的内存视图,依赖JIT内联与内存布局优化实现高性能;理解其原理需深入CLR行为、IL指令及GC交互机制。这类底层技术价值不仅在于性能提升,更支撑高并发、低延迟场景下的系统稳定性,如实时物流调度、金融交易中间件等。而真正掌握Span<T>,离不开对真实故障归因、跨版本兼容性验证和团队协作认知的同步演进——这正是面向一线.NET从业者的深度技术博客所承载的技术成长路径。

diedangxiang4092的博客 431

网易2023运维校招笔试复盘:从Linux到K8s的考点与答题思路

运维工程师的笔试考察早已超越简单命令记忆,而是聚焦生产环境思维与技术原理。从Linux文本处理三剑客到网络协议排查,从Shell脚本自动化到Kubernetes容器编排,每一个考点都对应着实际运维场景中的核心能力。本文以网易2023校招运维工程师笔试为样本,拆解Linux基础、网络与脚本、容器K8s、数据库监控及场景设计题的高频考点,梳理故障排查与综合答题思路,帮助求职者建立从原理到实践的完整复习路径。

weixin_34335458的博客 302

K8S系列:Pod的扩缩容方法

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

NIO4444 647

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

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

weixin_34199335的博客 405

迪文串口屏开发环境搭建全流程:从DGUS Tool到串口联调

串口屏作为嵌入式人机交互的核心组件,通过串口通信实现主控MCU与显示终端的指令交互。其工作原理基于变量地址映射,主控读写VP地址即可驱动屏上控件,兼具低功耗与高稳定性。在工业控制、医疗设备及智能家居面板等场景中,串口屏能显著降低开发门槛与硬件成本。迪文屏凭借DGUS Tool上位机与自定义串口协议,成为主流选择。掌握DGUS Tool版本匹配、串口驱动安装及VP地址规划,是快速搭建开发环境的关键。

weixin_33937499的博客 616

在工作台 LS-DYNA 中检索和变换反作用力分量

在结构仿真中,通常需要由施加的位移或速度边界条件产生的反作用力。此外,通常需要根据用户定义的坐标系解析反作用力分量。在本文中,详细介绍了在Workbench (WB) LS-DYNA 中,相对于用户定义的坐标系检索和变换反作用力分量的过程。

jkh920184196的博客 887

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

了解随机振动疲劳分析中 Ansys nCode DesignLife 的平均应力校正

通过选择静态环境,我们可以将其结果视为疲劳计算的平均应力,如图 3 所示,因此从静态偏移载荷工况中提取的平均应力用于转移预测雨流计数中所有循环的平均值。您可以通过观看下面的教学视频获得宝贵的见解,该视频将指导您完成利用 Ansys nCode DesignLife 分析平均应力对随机振动载荷下结构的影响的过程。它基于 R 比率或平均应力水平。另一方面,平均应力校正可以帮助消除平均应力的负面影响,提高结果的保真度。Ansys nCode 提供先进的平均应力校正技术,使工程师能够考虑平均应力对疲劳寿命的影响。

jkh920184196的博客 1520

k8s存储卷(empyDir;hostPath;nfs)

xxxxx

qq_44135433的博客 2133

Rocky Linux 9.2:利用LVM动态调整/home与/根分区空间分配

本文详细介绍了在Rocky Linux 9.2系统中,如何利用LVM(逻辑卷管理器)动态调整/home与根分区(/)的空间分配。针对根分区空间不足而/home分区闲置的常见问题,文章提供了从检查磁盘布局、备份数据、卸载分区、调整逻辑卷大小到重建文件系统的完整操作步骤,并重点说明了XFS与EXT4文件系统在缩容时的不同处理方法,帮助系统管理员安全、在线地实现存储空间的灵活调配。

weixin_29271263的博客 180

用Python实现一个简单的远程桌面服务端和客户端

本文介绍了一个基于Python的轻量级远程桌面解决方案,针对商业软件在嵌入式系统上的兼容性问题、性能问题和成本问题。系统采用客户端-服务端架构,包含两个通信通道:5000端口传输压缩视频流,5001端口传输控制事件。通过多线程设计、图像压缩(JPEG+zlib)和网络优化(禁用Nagle算法)等技术手段提高性能。服务端实现了高效的屏幕捕获(使用mss库)、图像处理流水线和事件处理逻辑。客户端采用PyQt5构建UI界面,包含视频接收线程以减少主线程负担。该方案具有跨平台、开源免费、轻量级(核心代码不到500行

Hi20240217的博客 1666

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

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

SteveRocket's-Blog 7273

用python自动复制粘贴excel表里某一列的数据到另一个表中

昨天接到人事小姐姐求助减轻复制粘贴的重复工作量,分享一下代码 半路新手上路 耶 把 2.xlsx 表里的第二列 的数据复制粘贴到 test.xlsx的第一列 python3.6.2 from openpyxl import Workbook from openpyxl import load_workbook from openpyxl.writer.excel import Exc...

weixin_33854644的博客 2万+

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

【feature_column处理】- indicator_column(指示列)和embedding_column(嵌入列)

1. 开胃菜 我们先来了解一下tf.feature_column.input_layer def input_layer(features, feature_columns, weight_collections=None, trainable=True, cols_to_vars=None, cols_to_output_tensors=None)

DataAlgo 1488

知识图谱_知识图谱 | 知识图谱做用户画像

导读:最近一直在思考怎么用知识图谱做推荐,但是目前能知道的内容都是基于路径的推荐和基于图特征的推荐,所以能不能换一个角度,探究一下用知识图谱怎么做用户画像,因为画像也是推荐系统重要的一部分。现在的知识图谱+推荐怎么做的传统的用户画像怎么做现在的知识图谱+推荐怎么做的?基于路径:可以理解成基于图谱的多路径召回,或者多路径推荐,然后根据路径的转移概率进行排序从而达到推荐的效果,基于路径比较适合简单的推...

weixin_28801659的博客 1461

k8s学习--kubernetes服务自动伸缩之垂直伸缩(资源伸缩)VPA详细解释与安装

有任何疑问或不懂的地方均可评论或私信,欢迎交流官方链接。## 简单理解 与HPA类似,区别在于HPA自动控制的pod副本数量 而VPA则自动控制的是CPU 和 内存 的requests,从而允许在节点上进行适当的调度,以便为每个 Pod 提供适当的资源。 注: 不能与HPA(Horizontal Pod Autoscaler )一起使用 这个是博主写的有关HPA的博客,有兴趣的可以看看 链接: [HPA详细解释与应用](https://blog.youkuaiyun.com/lwxvgdv/article/deta

lwxvgdv的博客 3573

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

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

arm架构安装Rancher并导入k8s集群解决Error: no objects passed to apply

Rancher介绍 Rancher 2.0-2.4版本 是一个开源的企业级容器管理平台。通过Rancher,企业再也不必自己使用一系列的开源软件去从头搭建容器服务平台。Rancher提供了在生产环境中使用的管理Docker和Kubernetes的全栈化容器部署与管理平台。 Rancher 2.5版本 是为使用容器的公司打造的容器管理平台。Rancher 简化了使用 Kubernetes 的流程,开发者可以随处运行 Kubernetes(Run Kubernetes Everywhere),满足 IT 需求规

yinjl123456的博客 4161

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

VC中sqlite的使用

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

【Kubernetes】kubectl rollout 回滚操作

kubectl rollout 怎么用搞不清?一遍文章搞定~

http://DBAtao.cn/ 1万+

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

kubectl rollout restart重启pod

学亮编程手记 5163

Kubernetes 1.5 实践 如何给pod中的容器设置环境变量

Kubernetes 1.5 给POD设置变量When you create a Pod, you can set environment variables for the containers that run in the Pod. To set environment variables, include the env field in the configuration file. 在

wenwst的专栏 1万+
上一篇: kubectl源码分析之cluster-info dump
下一篇: kubectl源码分析之top pod
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、付费专栏及课程。

余额充值