gpt4 book ai didi

go - 从 k8s 事件处理程序中的对象获取注释

转载 作者:行者123 更新时间:2023-12-05 09:32:44 27 4
gpt4 key购买 nike

我正在构建一个基于 sample-controller 的小型 k8s Controller .

我正在使用以下事件处理程序监听 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 的对象- 从那里应该很容易获得注释(在这种情况下,该对象没有任何注释,它是 <nil> 值之一。

(*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 <nil> <nil> 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)
}
}

但人们通常倾向于使用 Controller 运行时。

关于go - 从 k8s 事件处理程序中的对象获取注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67726840/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com