登录
首页 >  Golang >  Go问答

从 Kubernetes 事件处理器中提取对象的注解

来源:stackoverflow

时间:2024-02-26 09:09:26 146浏览 收藏

积累知识,胜过积蓄金银!毕竟在Golang开发的过程中,会遇到各种各样的问题,往往都是一些细节知识点还没有掌握好而导致的,因此基础知识点的积累是很重要的。下面本文《从 Kubernetes 事件处理器中提取对象的注解》,就带大家讲解一下知识点,若是你对本文感兴趣,或者是想搞懂其中某个知识点,就请你继续往下看吧~

问题内容

我正在基于示例控制器构建一个小型 k8s 控制器。

我正在使用以下事件处理程序侦听 serviceaccount 事件:

...
serviceaccountinformer.informer().addeventhandler(cache.resourceeventhandlerfuncs{
    addfunc:    controller.enqueueserviceaccount,
    deletefunc: controller.enqueueserviceaccount,
})
...

func (c *controller) enqueueserviceaccount(obj interface{}) {
    var key string
    var err error

    if key, err = cache.metanamespacekeyfunc(obj); err != nil {
        utilruntime.handleerror(err)
        return
    }
    c.workqueue.add(key)
}

这工作正常;我的事件即将到来,并且 enqueueserviceaccount() 函数正在被调用。

这是我第一次涉足 golang,我不知道如何从 obj 获取对象的 kubernetes 注释。

我使用 go-spew 转储该对象,并可以确认它有一个 objectmeta。我只是不确定如何将其转换为可以访问 objectmeta 的某个对象 - 从那里应该很容易获得注释(在这种情况下,该对象没有任何注释,它是 值之一。

(*v1.ServiceAccount)(0xc0002c1010)(&ServiceAccount{ObjectMeta:{kube-proxy  kube-system /api/v1/namespaces/kube-system/serviceaccounts/kube-proxy d2013421-92c8-44ae-b6d8-202231ea557c 234 0 2021-04-29 18:40:20 +0100 BST   map[eks.amazonaws.com/component:kube-proxy k8s-app:kube-proxy] map[kubectl.kubernetes.io/last-applied-configuration:{"apiVersion":"v1","kind":"ServiceAccount","metadata":{"annotations":{},"labels":{"eks.amazonaws.com/component":"kube-proxy","k8s-app":"kube-proxy"},"name":"kube-proxy","namespace":"kube-system"}}

如何访问该对象的注释?


正确答案


您可以使用 MetaAccessor

import (
   metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
   "k8s.io/apimachinery/pkg/runtime"
)

var metaAccessor = metav1.NewAccessor()

func (c *Controller) enqueueServiceAccount(obj interface{}) {
    if typed, ok := obj.(runtime.Object); ok {
        annotations, err := metaAccessor.Annotations(typed)
    }
}

但人们通常倾向于使用控制器运行时。

samplecontroller 并不是最容易处理的代码。他们有关于如何反对已知资源类型的示例 cast。他们还提供了有关如何使用 lookup the resource from a lister 的示例。

除非您有特定需求,否则我建议您也考虑使用 kubebuilder 并遵循 the kubebuilder book,其中对制作控制器有直观的解释。

本篇关于《从 Kubernetes 事件处理器中提取对象的注解》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于Golang的相关知识,请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>