如何在k8s中获取StatefulSet的最新更新时间
来源:stackoverflow
时间:2024-02-10 22:45:23 446浏览 收藏
小伙伴们有没有觉得学习Golang很有意思?有意思就对了!今天就给大家带来《如何在k8s中获取StatefulSet的最新更新时间》,以下内容将会涉及到,若是在学习中对其中部分知识点有疑问,或许看了本文就能帮到你!
例如,我知道您可以使用kubectl获取部署的lastupdatetime:
kubectl get deploy-o jsonpath={.status.conditions[1].lastupdatetime}
或者通过client-go:
func deploymentCheck(namespace string, clientset *kubernetes.Clientset) bool { // get the deployments in the namespace deployments, err := clientset.AppsV1().Deployments(namespace).List(context.TODO(), metav1.ListOptions{}) if errors.IsNotFound(err) { log.Fatal("\nNo deployments in the namespace", err) } else if err != nil { log.Fatal("\nFailed to fetch deployments in the namespace", err) } var dptNames []string for _, dpt := range deployments.Items { dptNames = append(dptNames, dpt.Name) } // check the last update time of the deployments for _, dpt := range deployments.Items { lastUpdateTime := dpt.Status.Conditions[1].LastUpdateTime dptAge := time.Since(lastUpdateTime.Time) fmt.Printf("\nDeployment %v age: %v", dpt.Name, dptAge) } }
statefulset 的 lastupdatetime := dpt.status.conditions[1].lastupdatetime
的等效项似乎不存在。
那么,如何获取statefulset的lastupdatetime呢?
正确答案
我注意到,在某人编辑给定资源后,唯一发生变化的是该资源的lastappliedconfiguration、generation 和observedgeneration。因此,我将它们存储在列表中:
for _, deployment := range deployments.items { deploymentnames = append(deploymentnames, deployment.name) lastappliedconfig := deployment.getannotations()["kubectl.kubernetes.io/last-applied-configuration"] lastappliedconfigs = append(lastappliedconfigs, lastappliedconfig) generations = append(generations, deployment.generation) observedgenerations = append(observedgenerations, deployment.status.observedgeneration) }
完整功能如下:
func deploymentcheck(namespace string, clientset *kubernetes.clientset) ([]string, []string, []int64, []int64) { var deploymentnames []string var lastappliedconfigs []string var generations []int64 var observedgenerations []int64 deployments, err := clientset.appsv1().deployments(namespace).list(context.todo(), metav1.listoptions{}) if errors.isnotfound(err) { log.print("no deployments in the namespace", err) } else if err != nil { log.print("failed to fetch deployments in the namespace", err) } for _, deployment := range deployments.items { deploymentnames = append(deploymentnames, deployment.name) lastappliedconfig := deployment.getannotations()["kubectl.kubernetes.io/last-applied-configuration"] lastappliedconfigs = append(lastappliedconfigs, lastappliedconfig) generations = append(generations, deployment.generation) observedgenerations = append(observedgenerations, deployment.status.observedgeneration) } return deploymentnames, lastappliedconfigs, generations, observedgenerations }
我使用所有这些信息来实例化一个名为 namespace 的结构,其中包含 k8s 命名空间可以拥有的所有主要资源。
然后,在给定时间后,我再次检查相同的命名空间并检查其资源是否有任何更改:
if !reflect.DeepEqual(namespace.stsLastAppliedConfig, namespaceCopy.stsLastAppliedConfig) { ... } else if !reflect.DeepEqual(namespace.stsGeneration, namespaceCopy.stsGeneration) { ... } else if !reflect.DeepEqual(namespace.stsObservedGeneration, namespaceCopy.stsObservedGeneration) { ... }
因此,我发现的唯一解决方法是在给定时间后比较资源的配置,包括 statefulsets'。显然,对于某些资源,您无法获取有关其上次更新时间的任何信息。
我还发现lastupdatetime实际上并不可靠,因为它会将较小的集群更改理解为资源的更改。例如,如果集群轮换并杀死所有 pod,则 deployment 的 lastupdatetime 将更新其时间。那不是我想要的。我想检测用户对资源的更改,例如当有人应用编辑的 yaml 文件或运行 kubectl edit
时。
@hypperster,希望有帮助。
今天关于《如何在k8s中获取StatefulSet的最新更新时间》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!
-
502 收藏
-
502 收藏
-
501 收藏
-
501 收藏
-
501 收藏
-
139 收藏
-
204 收藏
-
325 收藏
-
477 收藏
-
486 收藏
-
439 收藏
-
357 收藏
-
352 收藏
-
101 收藏
-
440 收藏
-
212 收藏
-
143 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 立即学习 542次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 立即学习 508次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 立即学习 497次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 立即学习 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 立即学习 484次学习