kubectl源码分析之create role

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

 

————————————————----------------------------------------------------------------------------------------

var (
	roleLong = templates.LongDesc(i18n.T(`
		Create a role with single rule.`))

	roleExample = templates.Examples(i18n.T(`
		# Create a Role named "pod-reader" that allows user to perform "get", "watch" and "list" on pods
		kubectl create role pod-reader --verb=get --verb=list --verb=watch --resource=pods

		# Create a Role named "pod-reader" with ResourceName specified
		kubectl create role pod-reader --verb=get --resource=pods --resource-name=readablepod --resource-name=anotherpod

		# Create a Role named "foo" with API Group specified
		kubectl create role foo --verb=get,list,watch --resource=rs.extensions

		# Create a Role named "foo" with SubResource specified
		kubectl create role foo --verb=get,list,watch --resource=pods,pods/status`))

	// Valid resource verb list for validation.
    //有效动作
	validResourceVerbs = []string{"*", "get", "delete", "list", "create", "update", "patch", "watch", "proxy", "deletecollection", "use", "bind", "escalate", "impersonate"}

	// Specialized verbs and GroupResources
	specialVerbs = map[string][]schema.GroupResource{//特殊动作资源
		"use": {
			{
				Group:    "extensions",
				Resource: "podsecuritypolicies",
			},
		},
		"bind": {
			{
				Group:    "rbac.authorization.k8s.io",
				Resource: "roles",
			},
			{
				Group:    "rbac.authorization.k8s.io",
				Resource: "clusterroles",
			},
		},
		"escalate": {
			{
				Group:    "rbac.authorization.k8s.io",
				Resource: "roles",
			},
			{
				Group:    "rbac.authorization.k8s.io",
				Resource: "clusterroles",
			},
		},
		"impersonate": {
			{
				Group:    "",
				Resource: "users",
			},
			{
				Group:    "",
				Resource: "serviceaccounts",
			},
			{
				Group:    "",
				Resource: "groups",
			},
			{
				Group:    "authentication.k8s.io",
				Resource: "userextras",
			},
		},
	}
)
type ResourceOptions struct {//resource结构体
	Group       string
	Resource    string
	SubResource string
}

// CreateRoleOptions holds the options for 'create role' sub command
type CreateRoleOptions struct {//create role 结构体
	PrintFlags *genericclioptions.PrintFlags

	Name          string
	Verbs         []string
	Resources     []ResourceOptions
	ResourceNames []string

	DryRun       bool
	OutputFormat string
	Namespace    string
	Client       clientgorbacv1.RbacV1Interface
	Mapper       meta.RESTMapper
	PrintObj     func(obj runtime.Object) error

	genericclioptions.IOStreams
}
func NewCreateRoleOptions(ioStreams genericclioptions.IOStreams) *CreateRoleOptions {
	return &CreateRoleOptions{创建create role结构体
		PrintFlags: genericclioptions.NewPrintFlags("created").WithTypeSetter(scheme.Scheme),

		IOStreams: ioStreams,
	}
}
//创建create role 命令
func NewCmdCreateRole(f cmdutil.Factory, ioStreams genericclioptions.IOStreams) *cobra.Command {
	o := NewCreateRoleOptions(ioStreams)//初始化结构体

	cmd := &cobra.Command{//创建cobra命令
		Use:                   "role NAME --verb=verb --resource=resource.group/subresource [--resource-name=resourcename] [--dry-run]",
		DisableFlagsInUseLine: true,
		Short:                 roleLong,
		Long:                  roleLong,
		Example:               roleExample,
		Run: func(cmd *cobra.Command, args []string) {
			cmdutil.CheckErr(o.Complete(f, cmd, args))//准备运行
			cmdutil.CheckErr(o.Validate())//校验参数
			cmdutil.CheckErr(o.RunCreateRole())//运行
		},
	}

	o.PrintFlags.AddFlags(cmd)//设置print选项

	cmdutil.AddApplyAnnotationFlags(cmd)//创建save-config选项
	cmdutil.AddValidateFlags(cmd)//创建validate选项
	cmdutil.AddDryRunFlag(cmd)//创建dry-run选项
	cmd.Flags().StringSliceVar(&o.Verbs, "verb", o.Verbs, "Verb that applies to the resources contained in the rule")//创建verb选项
	cmd.Flags().StringSlice("resource", []string{}, "Resource that the rule applies to")//创建resource选项
	cmd.Flags().StringArrayVar(&o.ResourceNames, "resource-name", o.ResourceNames, "Resource in the white list that the rule applies to, repeat this flag for multiple items")//创建resource-name选项

	return cmd
}
//准备函数
func (o *CreateRoleOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, args []string) error {
	name, err := NameFromCommandArgs(cmd, args)//获取名称
	if err != nil {
		return err
	}
	o.Name = name//设置名称

	// Remove duplicate verbs.
	verbs := []string{}
	for _, v := range o.Verbs {//遍历verb
		// VerbAll respresents all kinds of verbs.
		if v == "*" {
			verbs = []string{"*"}//*跳出循环
			break
		}
		if !arrayContains(verbs, v) {//verb去重
			verbs = append(verbs, v)
		}
	}
	o.Verbs = verbs//设置verb

	// Support resource.group pattern. If no API Group specified, use "" as core API Group.
	// e.g. --resource=pods,deployments.extensions
	resources := cmdutil.GetFlagStringSlice(cmd, "resource")//获取资源
	for _, r := range resources {//遍历资源
		sections := strings.SplitN(r, "/", 2)//用/分割

		resource := &ResourceOptions{}
		if len(sections) == 2 {//设置子资源
			resource.SubResource = sections[1]
		}

		parts := strings.SplitN(sections[0], ".", 2)//用.分割
		if len(parts) == 2 {//设置group
			resource.Group = parts[1]
		}
		resource.Resource = parts[0]//设置resource

		if resource.Resource == "*" && len(parts) == 1 && len(sections) == 1 {
			o.Resources = []ResourceOptions{*resource}//如果是*,跳出循环
			break
		}

		o.Resources = append(o.Resources, *resource)//追加资源
	}

	// Remove duplicate resource names.
	resourceNames := []string{}
	for _, n := range o.ResourceNames {//遍历resource-name
		if !arrayContains(resourceNames, n) {//resource-name去重
			resourceNames = append(resourceNames, n)
		}
	}
	o.ResourceNames = resourceNames//设置resource-name

	// Complete other options for Run.
	o.Mapper, err = f.ToRESTMapper()//设置mapper
	if err != nil {
		return err
	}

	o.DryRun = cmdutil.GetDryRunFlag(cmd)//设置dry-run
	o.OutputFormat = cmdutil.GetFlagString(cmd, "output")//设置output

	if o.DryRun {
		o.PrintFlags.Complete("%s (dry run)")//dry-run准备函数
	}
	printer, err := o.PrintFlags.ToPrinter()//printflag转printer
	if err != nil {
		return err
	}
	o.PrintObj = func(obj runtime.Object) error {//设置printObj函数
		return printer.PrintObj(obj, o.Out)
	}

	o.Namespace, _, err = f.ToRawKubeConfigLoader().Namespace()获取namespace
	if err != nil {
		return err
	}

	clientset, err := f.KubernetesClientSet()//获取clientset
	if err != nil {
		return err
	}
	o.Client = clientset.RbacV1()//设置client

	return nil
}
//校验参数
func (o *CreateRoleOptions) Validate() error {
	if o.Name == "" {//名称为空报错
		return fmt.Errorf("name must be specified")
	}

	// validate verbs.
	if len(o.Verbs) == 0 {//动作为空报错
		return fmt.Errorf("at least one verb must be specified")
	}

	for _, v := range o.Verbs {//遍历动作
		if !arrayContains(validResourceVerbs, v) {//判断动作是否有效
			return fmt.Errorf("invalid verb: '%s'", v)
		}
	}

	// validate resources.
	if len(o.Resources) == 0 {//资源为空报错
		return fmt.Errorf("at least one resource must be specified")
	}

	return o.validateResource()//校验资源
}
//校验资源
func (o *CreateRoleOptions) validateResource() error {
	for _, r := range o.Resources {//遍历资源
		if len(r.Resource) == 0 {// 资源名称为空报错
			return fmt.Errorf("resource must be specified if apiGroup/subresource specified")
		}
		if r.Resource == "*" {//资源为*直接返回
			return nil
		}

		resource := schema.GroupVersionResource{Resource: r.Resource, Group: r.Group}
		groupVersionResource, err := o.Mapper.ResourceFor(schema.GroupVersionResource{Resource: r.Resource, Group: r.Group})//获取groupversionresource
		if err == nil {
			resource = groupVersionResource
		}

		for _, v := range o.Verbs {//遍历动作
			if groupResources, ok := specialVerbs[v]; ok {//判断是否特殊动作
				match := false
				for _, extra := range groupResources {//如果是特殊动作,遍历特殊动作的资源
					if resource.Resource == extra.Resource && resource.Group == extra.Group {
						match = true//如果特殊动作资源包含需校验的资源则match为true
						err = nil
						break
					}
				}
				if !match {//不match报错
					return fmt.Errorf("can not perform '%s' on '%s' in group '%s'", v, resource.Resource, resource.Group)
				}
			}
		}

		if err != nil {
			return err
		}
	}
	return nil
}
//运行命令
func (o *CreateRoleOptions) RunCreateRole() error {
	role := &rbacv1.Role{//构造role对象
		// this is ok because we know exactly how we want to be serialized
		TypeMeta: metav1.TypeMeta{APIVersion: rbacv1.SchemeGroupVersion.String(), Kind: "Role"},
	}
	role.Name = o.Name//设置名称
	rules, err := generateResourcePolicyRules(o.Mapper, o.Verbs, o.Resources, o.ResourceNames, []string{})//生成policyroles
	if err != nil {
		return err
	}
	role.Rules = rules//设置PolicyRules

	// Create role.
	if !o.DryRun {//非干跑
		role, err = o.Client.Roles(o.Namespace).Create(role)//创建role对象
		if err != nil {
			return err
		}
	}

	return o.PrintObj(role)//打印结果
}
//创建PolicyRoles
func generateResourcePolicyRules(mapper meta.RESTMapper, verbs []string, resources []ResourceOptions, resourceNames []string, nonResourceURLs []string) ([]rbacv1.PolicyRule, error) {
	// groupResourceMapping is a apigroup-resource map. The key of this map is api group, while the value
	// is a string array of resources under this api group.
	// E.g.  groupResourceMapping = {"extensions": ["replicasets", "deployments"], "batch":["jobs"]}
	groupResourceMapping := map[string][]string{}//构造map

	// This loop does the following work:
	// 1. Constructs groupResourceMapping based on input resources.
	// 2. Prevents pointing to non-existent resources.
	// 3. Transfers resource short name to long name. E.g. rs.extensions is transferred to replicasets.extensions
	for _, r := range resources {//遍历resource
		resource := schema.GroupVersionResource{Resource: r.Resource, Group: r.Group}
		groupVersionResource, err := mapper.ResourceFor(schema.GroupVersionResource{Resource: r.Resource, Group: r.Group})//获取groupversionresource
		if err == nil {
			resource = groupVersionResource
		}

		if len(r.SubResource) > 0 {//如果有子资源,则资源加子资源
			resource.Resource = resource.Resource + "/" + r.SubResource
		}
		if !arrayContains(groupResourceMapping[resource.Group], resource.Resource) {
			groupResourceMapping[resource.Group] = append(groupResourceMapping[resource.Group], resource.Resource)//如果map的group不包含资源,则添加
		}
	}

	// Create separate rule for each of the api group.
	rules := []rbacv1.PolicyRule{}//创建PolicyRule slice
	for _, g := range sets.StringKeySet(groupResourceMapping).List() {//遍历map的key
		rule := rbacv1.PolicyRule{}//创建PolicyRule
		rule.Verbs = verbs//设置动作
		rule.Resources = groupResourceMapping[g]//设置资源
		rule.APIGroups = []string{g}//设置apigroup
		rule.ResourceNames = resourceNames//设置资源名称
		rules = append(rules, rule)//追加
	}

	if len(nonResourceURLs) > 0 {//如果non-resource-url有值
		rule := rbacv1.PolicyRule{}//创建PolicyRule
		rule.Verbs = verbs// 设置动作
		rule.NonResourceURLs = nonResourceURLs//设置non-resource-url
		rules = append(rules, rule)
	}

	return rules, nil//返回rules
}

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

相关推荐

Kimi API协议层解构:从SDK源码读懂大模型服务调用原理

大模型API调用不是简单发请求,而是理解其底层通信协议的技术实践。本文围绕认证签名、上下文管理、流式响应(SSE)、错误码体系与Token计数等核心机制展开,揭示Kimi等主流大模型服务在真实生产环境中的工程实现逻辑——包括动态HMAC签名构造、128K上下文的智能裁剪策略、双重JSON编码的SSE解析规则,以及429熔断的三级限流本质。这些内容直击开发者在集成AI能力时高频遭遇的‘答案截断’‘响应卡顿’‘401签名失败’等顽疾,适用于需将大模型稳定接入客服、教育、知识库等业务系统的工程师与技术负责人。关键

weixin_34289454的博客 388

k8s实战之kubectl

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

基于MCP和A2A协议的多智能体协作框架实战:餐厅预订系统开发

AI Agent作为人工智能技术的重要分支,通过模拟人类智能行为来解决复杂问题。其核心原理在于将大语言模型与工具调用能力相结合,实现自主决策和任务执行。在工程实践中,多智能体协作技术能够显著提升系统处理复杂业务场景的能力,通过分工协作实现更高效的业务流程处理。MCP(Model Context Protocol)协议作为标准化工具交互框架,统一了智能体与外部工具、数据源之间的通信标准,解决了传统API调用的碎片化问题。A2A(Agent-to-Agent)协议则专注于智能体间的通信架构设计,通过智能体卡片、

weixin_34355559的博客 358

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

K8S系列:Pod的扩缩容方法

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

NIO4444 647

AD18 PCB模块的Copy

在PCB布局时,时常会将元器件先分模块进行排布,最后才会进行总体的布局,在局部布局的时候,想要移动一个模块的器件总是很麻烦,需要选中全部才能进行移动,有些时候还有选漏的情况,所以会将局部布局的模块把它看做一个整体进行移动,效果如下,元件,布线,铜皮,过孔以及元件编号的位置摆放都和源模块一模一样。4、再选中需要复用的模块内的元件,按照第3步的顺序排序,粘贴刚刚复制的Channel Offset参数。在PCB布局时,有多个模块原理图是一模一样的情况,我们可以只画一个模块,之后灵活应用模块,进行copy。

qq_53859658的博客 3240

kubectl源码分析之create clusterrole

发布一个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 531

从机械臂示教到厨房做饭:ACT模仿学习如何让机器人更“人性化”?

本文探讨了ACT(Action Chunking with Transformers)模仿学习技术如何让机器人更“人性化”,特别是在厨房等复杂场景中的应用。通过动作分块(Action Chunking)和时态融合(Temporal Ensemble)技术,机器人能够像人类一样记忆和执行复杂任务,如烹饪。文章还分析了ACT在家庭场景中的落地挑战及其在康复医疗、柔性制造等领域的跨领域应用潜力。

weixin_30613343的博客 255

kubectl源码分析之create configmap

发布一个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 460

Kettle Web版部署指南

看到以上的日志则表示启动成功。

2401_89221867的博客 1719

光模块的封装工艺有哪些?

COB封装传统的单路10Gb/s或25Gb/s速率的光模块采用SFP封装将电芯片和TO封装的光收发组件焊接到PCB板上组成光模块。但对于40G及以上速率的高速光模块,受激光器速率限制(多为25G),主要通过多通道并行实现,如40G由4×10G实现,而100G则由4×25G实现。蝶形封装:壳体通常为长方体,结构及实现功能通常比较复杂,可以内置制冷器、热沉、陶瓷基块、芯片、热敏电阻、背光监控,并且可以支持所有以上部件的键合引线。BOX封装属于蝶形封装的一种,用于多通道并行封装。

WaytoICT- Explore ICT Technology, Build Your Tech Path 3813

kubectl源码分析之create serviceaccount

发布一个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 1135

Data+AI新玩法:Text2SQL让数据查询变得如此简单!

你是不是也遇到过这种情况?明明手头有海量数据,却因为SQL这道“门槛”,让分析和决策变得复杂和拖沓。你可能想着:“要是我能直接用自然语言和数据库对话,那该多好!你不是一个人在这样想,Text2SQL技术正是为了帮你摆脱这一困境而诞生的。

Ase5gqe的博客 869

kubectl源码分析之create命令

func NewCmdCreate(f cmdutil.Factory, ioStreams genericclioptions.IOStreams) *cobra.Command { o := NewCreateOptions(ioStreams) cmd := &cobra.Command{ Use: "create -f F...

mark's technic world 2239

Matplotlib图片尺寸调整全攻略:从figsize到savefig的实战技巧

在数据可视化与科学计算中,图形尺寸控制是影响图表可读性与专业度的基础环节。其核心原理在于协调逻辑尺寸(英寸)与物理输出(像素)的映射关系,这直接决定了信息呈现的清晰度与布局合理性。从技术价值看,精准的尺寸控制能提升图表在不同媒介(如学术论文、报告、网页)中的适配性,避免显示不全、模糊失真等常见问题。在应用场景上,无论是Jupyter Notebook中的交互探索、自动化报告的批量生成,还是满足严格出版要求的插图制作,都需要掌握对应的尺寸调整策略。本文聚焦于matplotlib中的figsize参数、rcPa

weixin_30899023的博客 331

引入高分辨率特征层保持的YOLOv10小目标增强:从思路到完整实现

大概两个月前,我在做一个无人机航拍图像检测的项目,目标是识别图片里的小型车辆和行人。用的数据集是VisDrone,相信做小目标检测的朋友对这个数据集都不陌生。一开始我直接跑了官方YOLOv10的代码,结果在tiny vehicle这一类上mAP50只有可怜的0.312。那些小目标基本就是几个像素点,YOLOv10在三次下采样之后,这些小目标的特征几乎就消失不见了。 后来我折腾了大概三周,尝试了各种方法:改anchor、调loss权重、做数据增强、甚至考虑过换检测头。最后发现最有效的还是引入一个高分辨率特征

YOLO 51

kubectl源码分析之create clusterrolebinding

发布一个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 736

大数据分析利器:Tableau实战教程从入门到精通

你有3家分店,每月收集1000条销售数据(日期、分店、口味、销售额、订单数);想用Excel分析“哪家分店最赚钱”,但要做透视表→改格式→画柱状图,耗时30分钟,还经常因为公式错误返工;想看看“草莓味奶茶的月度销量趋势”,得手动筛选数据、调整折线图轴范围,稍不注意就漏看关键节点;想把分析结果分享给合伙人,Excel表格太抽象,对方盯着数字问“你到底想告诉我什么?

AI架构师小马 1497

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

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

lwip-2.0.3

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

k8s存储卷(empyDir;hostPath;nfs)

xxxxx

qq_44135433的博客 2133

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

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

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

SteveRocket's-Blog 7273

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

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的博客 4973

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

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

【Kubernetes】kubectl rollout 回滚操作

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

http://DBAtao.cn/ 1万+

kubectl rollout restart重启pod

学亮编程手记 5163
上一篇: kubectl源码分析之create clusterrolebinding
下一篇: kubectl源码分析之create rolebinding
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、付费专栏及课程。

余额充值