kubectl源码分析之rollout status

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群,请联系:


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

type RolloutStatusOptions struct {//status结构体
	PrintFlags *genericclioptions.PrintFlags

	Namespace        string
	EnforceNamespace bool
	BuilderArgs      []string

	Watch    bool
	Revision int64
	Timeout  time.Duration

	StatusViewerFn func(*meta.RESTMapping) (polymorphichelpers.StatusViewer, error)
	Builder        func() *resource.Builder
	DynamicClient  dynamic.Interface

	FilenameOptions *resource.FilenameOptions
	genericclioptions.IOStreams
}
func NewRolloutStatusOptions(streams genericclioptions.IOStreams) *RolloutStatusOptions {
	return &RolloutStatusOptions{//初始化结构体
		PrintFlags:      genericclioptions.NewPrintFlags("").WithTypeSetter(scheme.Scheme),
		FilenameOptions: &resource.FilenameOptions{},
		IOStreams:       streams,
		Watch:           true,
		Timeout:         0,
	}
}
//创建status命令
func NewCmdRolloutStatus(f cmdutil.Factory, streams genericclioptions.IOStreams) *cobra.Command {
	o := NewRolloutStatusOptions(streams)//初始化结构体

	validArgs := []string{"deployment", "daemonset", "statefulset"}

	cmd := &cobra.Command{//创建cobra命令
		Use:                   "status (TYPE NAME | TYPE/NAME) [flags]",
		DisableFlagsInUseLine: true,
		Short:                 i18n.T("Show the status of the rollout"),
		Long:                  statusLong,
		Example:               statusExample,
		Run: func(cmd *cobra.Command, args []string) {
			cmdutil.CheckErr(o.Complete(f, args))//准备
			cmdutil.CheckErr(o.Validate())//校验
			cmdutil.CheckErr(o.Run())//运行
		},
		ValidArgs: validArgs,//有效参数
	}

	usage := "identifying the resource to get from a server."
	cmdutil.AddFilenameOptionFlags(cmd, o.FilenameOptions, usage)//文件选项
	cmd.Flags().BoolVarP(&o.Watch, "watch", "w", o.Watch, "Watch the status of the rollout until it's done.")//watch选项
	cmd.Flags().Int64Var(&o.Revision, "revision", o.Revision, "Pin to a specific revision for showing its status. Defaults to 0 (last revision).")//revision选项
	cmd.Flags().DurationVar(&o.Timeout, "timeout", o.Timeout, "The length of time to wait before ending watch, zero means never. Any other values should contain a corresponding time unit (e.g. 1s, 2m, 3h).")//timeout选项

	return cmd
}
//准备函数
func (o *RolloutStatusOptions) Complete(f cmdutil.Factory, args []string) error {
	o.Builder = f.NewBuilder//设置Builder

	var err error
	o.Namespace, o.EnforceNamespace, err = f.ToRawKubeConfigLoader().Namespace()//设置Namespace和Enforcenamespace
	if err != nil {
		return err
	}

	o.BuilderArgs = args//设置资源
	o.StatusViewerFn = polymorphichelpers.StatusViewerFn//设置获取viewer函数

	clientConfig, err := f.ToRESTConfig()//获取config
	if err != nil {
		return err
	}

	o.DynamicClient, err = dynamic.NewForConfig(clientConfig)//设置client
	if err != nil {
		return err
	}

	return nil
}

//校验函数
// Validate makes sure all the provided values for command-line options are valid
func (o *RolloutStatusOptions) Validate() error {
	if len(o.BuilderArgs) == 0 && cmdutil.IsFilenameSliceEmpty(o.FilenameOptions.Filenames, o.FilenameOptions.Kustomize) {//资源和文件必须有一个
		return fmt.Errorf("required resource not specified")
	}

	if o.Revision < 0 {//版本不能小于0
		return fmt.Errorf("revision must be a positive integer: %v", o.Revision)
	}

	return nil
}
//运行
func (o *RolloutStatusOptions) Run() error {
	r := o.Builder().
		WithScheme(scheme.Scheme, scheme.Scheme.PrioritizedVersionsAllGroups()...).
		NamespaceParam(o.Namespace).DefaultNamespace().
		FilenameParam(o.EnforceNamespace, o.FilenameOptions).
		ResourceTypeOrNameArgs(true, o.BuilderArgs...).
		SingleResourceType().
		Latest().
		Do()//构造result对象
	err := r.Err()
	if err != nil {
		return err
	}

	infos, err := r.Infos()//获取info对象
	if err != nil {
		return err
	}
	if len(infos) != 1 {//info不等于1个,报错
		return fmt.Errorf("rollout status is only supported on individual resources and resource collections - %d resources were found", len(infos))
	}
	info := infos[0]
	mapping := info.ResourceMapping()

	statusViewer, err := o.StatusViewerFn(mapping)//获取viewer
	if err != nil {
		return err
	}

	fieldSelector := fields.OneTermEqualSelector("metadata.name", info.Name).String()//设置字段选择器
	lw := &cache.ListWatch{//设置watch func
		ListFunc: func(options metav1.ListOptions) (runtime.Object, error) {
			options.FieldSelector = fieldSelector
			return o.DynamicClient.Resource(info.Mapping.Resource).Namespace(info.Namespace).List(options)
		},
		WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) {
			options.FieldSelector = fieldSelector
			return o.DynamicClient.Resource(info.Mapping.Resource).Namespace(info.Namespace).Watch(options)
		},
	}

	preconditionFunc := func(store cache.Store) (bool, error) {//设置条件函数
		_, exists, err := store.Get(&metav1.ObjectMeta{Namespace: info.Namespace, Name: info.Name})
		if err != nil {
			return true, err
		}
		if !exists {
			// We need to make sure we see the object in the cache before we start waiting for events
			// or we would be waiting for the timeout if such object didn't exist.
			return true, apierrors.NewNotFound(mapping.Resource.GroupResource(), info.Name)
		}

		return false, nil
	}

	// if the rollout isn't done yet, keep watching deployment status
	ctx, cancel := watchtools.ContextWithOptionalTimeout(context.Background(), o.Timeout)
	intr := interrupt.New(nil, cancel)//构造interrupt
	return intr.Run(func() error {//运行interrupt
		_, err = watchtools.UntilWithSync(ctx, lw, &unstructured.Unstructured{}, preconditionFunc, func(e watch.Event) (bool, error) {//监控
			switch t := e.Type; t {//判断事件
			case watch.Added, watch.Modified://如果是Added,Modified事件
				status, done, err := statusViewer.Status(e.Object.(runtime.Unstructured), o.Revision)//通过viewer获取状态信息
				if err != nil {
					return false, err
				}
				fmt.Fprintf(o.Out, "%s", status)//打印状态信息
				// Quit waiting if the rollout is done
				if done {//如果done为true,结束监控
					return true, nil
				}

				shouldWatch := o.Watch
				if !shouldWatch {//如果--watch为false,结束监控
					return true, nil
				}

				return false, nil//否则return false,继续监控

			case watch.Deleted://如果事件为Deleted
				// We need to abort to avoid cases of recreation and not to silently watch the wrong (new) object
				return true, fmt.Errorf("object has been deleted")//结束监控,返回错误

			default:
				return true, fmt.Errorf("internal error: unexpected event %#v", e)
			}
		})
		return err
	})
}

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

相关推荐

K8S系列:Pod的扩缩容方法

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

NIO4444 647

k8s实战之kubectl

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

LauterBach使用教程

(也就是服务器上编译时候的路径一模一样的路径,选中到工程目录就可以)4.选择自己板子对应的cpu(可以直接界面选择也可以命令行的方式)(cpu里的system setting),我们板子需要sys复位,所以选择sys。注:一般情况下运行状态不可以修改外设寄存器的值,但是可以通过修改配置来修改为运行时可修改(cpu寄存器则不可以)(修改这个配置,运行时也可以查看代码)注意:lauterbach可以使用命令来操作,但是由于本人刚刚使用,目前基本上使用的都是界面的按钮,以后会陆续学习命令行指令和脚本的方式。

wacebb的博客 1万+

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

论文笔记:Group Equivariant Convolutional Networks

Group Equivariant Convolutional Networks 1、四个问题 要解决什么问题? 对卷积神经网络进行扩展,并提出一个在特定的变换(旋转、平移等,也可表示为一个特殊的群)下具有等变性的网络。 用了什么方法解决? 提出了一种新的卷积神经网络结构——群等变卷积神经网络(Group equivariant Convolutional Neural Network)...

hongbin_xu的博客 1万+

瑞萨 RL78 开发环境实战:从 CS+ for CC 到 e² studio 高效开发

本文详细介绍了瑞萨RL78单片机开发环境的选择与配置,对比分析了CS+ for CC和e² studio的特点及适用场景。内容涵盖环境安装、工程创建、调试技巧、外设驱动开发和低功耗设计等实战经验,为开发者提供全面的RL78入门指南,帮助快速上手并高效开发。

4k5l6j7h8的博客 248

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

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

gitblog_00817的博客 436

NDVI空间分布变化Slope趋势分析与F检验(自用)

1.NDVI数据预处理2.一元线性回归分析3.Slope趋势分析与F检验

什么都学亿点点的博客 9020

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

45个经典Linux面试题(非常详细)零基础入门到精通,收藏这一篇就够了

(文件系统分配其中的一些磁盘块用来记录它自身的一些数据,如 i 节点,磁盘分布图,间接块,超级块等。$ chmod 751 file 给 file 的属主分配读、写、执行(7)的权限,给 file 的所在组分配读、执行(5)的权限,给其他用户分配执行(1)的权限。linux命令’hash’管理着一个内置的哈希表,记录了已执行过的命令的完整路径, 用该命令可以打印出你所使用过的命令以及执行的次数。创建文件:典型的如 touch,vi 也可以创建文件,其实只要向一个不存在的文件输出,都会创建文件。

小陈的博客 2073

37.华为路由器:loopback(本地回环)接口的作用

本地环回接口(或地址),亦称回送地址(loopback address)。 此类接口是应用最为广泛的一种虚接口,几乎在每台路由器上都会使用。常见于如下用途: 1 作为一台路由器的管理地址 系统管理员完成网络规划之后,为了方便管理,会为每一台路由器创建一个loopback 接口,并在该接口上单独指定一个IP 地址作为管理地址 ,管理员会使用该地址对路由器远程登录(telnet ),该地址实际上起到了类似设备名称一类的功能。 但是通常每台路由器上存在众多接口和地址,为何不从当中随便挑选一个呢 ? 原因如下:由于

迷逝 3万+

k8s存储卷(empyDir;hostPath;nfs)

xxxxx

qq_44135433的博客 2133

S速度曲线轨迹规划(普通变频位置闭环控制算法详细介绍+SCL代码)

位置控制用PD控制器,详细内容介绍请查看下面博客文章:PD控制器算法详细解读_RXXW_Dor的博客-优快云博客鉴于积分和微分在工程上的大量应用,这篇博文主要讲解工程上的如何求导f'(x),导数反映的是函数(信号)的变化率,牛顿也是在研究运动的时候提出了微积分的概念,我们知道反映位移变化的快慢程度是速度v(t),反映速度变化快慢程度的物理量是加速度(速度的变化率)。

RXXW_Dor的博客 3891

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

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

SteveRocket's-Blog 7273

EtherCAT主站SOEM -- 24 -- 基于STM32F767IGT6搭建自己的SOEM-EtherCAT主站

以上就是EtherCAT主站SOEM – 23 – 基于STM32F767IGT6搭建自己的SOEM-EtherCAT主站的内容。有不明白的地方欢迎留言;有建议欢迎留言,我后面编写文档好改进。创作不容,如果文档对您有帮助,记得给个赞。

常驻客栈的博客--嵌入式EtherCAT 3563

visio安装包

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

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

lwip-2.0.3

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

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

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

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...

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

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万+

【kubernetes/k8s概念】k8s 坑问题汇总

1.Pod始终处于Pending状态 如果Pod保持在Pending的状态,意味着无法被正常的调度到节点上。由于某种系统资源无法满足Pod运行的需求 系统没有足够的资源:已经用尽了集群中所有的CPU或内存资源。需要清理一些不在需要的Pod,调整它们所需的资源量,或者向集群中增加新的节点。 用户指定了hostPort:通过hostPort用户能够将服务暴露到指定的主机端口上,会限......

zhonglinzhang 3万+

kubectl 命令详解(三十四):rollout status

kubectl rollout status 命令详解。

youzhouliu的博客 1918

Kubernetes运维必掌握的12个Kubectl命令

Kubectl命令行工具是与Kubernetes交互的主要工具,你可以使用Kubectl在Kubernetes集群中创建、更新和管理资源,例如Pod,Service和Deployment等。接下来我们将了解Kubernetes运维必须掌握的12个Kubectl命令。

weixin_42257277的博客 1821

Kubernetes实战(十五)-Pod垂直自动伸缩VPA实战

VPA 全称 Vertical Pod Autoscaler,即垂直 Pod 自动扩缩容,它根据容器资源使用率自动设置 CPU 和 内存 的requests,从而允许在节点上进行适当的调度,以便为每个 Pod 提供适当的资源。它既可以缩小过度请求资源的容器,也可以根据其使用情况随时提升资源不足的容量。VPA不会改变Pod的资源limits值,只调整pod的request 值。VPA目前还没有生产就绪,在使用之前需要了解资源调节对应用的影响。

sre救赎之路 2998

must specify at least one container source

"必须指定至少一个容器来源" 的意思是,您需要指定一个容器(例如 Docker 容器)作为您的应用程序的来源。这意味着,您需要指定一个包含您的应用程序代码和依赖项的容器,以便在运行应用程序时使用。 ...

weixin_42581003的博客 3342
上一篇: kubectl源码分析之rollout undo
下一篇: kubectl源码分析之rollout restart
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、付费专栏及课程。

余额充值