如何通过golang在pod中获得k8s注释?



当我在Kubernetes中运行Golang应用程序时,我想获得它运行的pod的注释。

有图书馆可以帮我做吗?

假设您知道要检索其注释的pod的名称,使用下面的示例podnginx-6799fc88d8-mzmcj:

package main
import (
"context"
"fmt"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/client-go/kubernetes"
"k8s.io/client-go/rest"
)
func main() {
config, _ := rest.InClusterConfig()
clientset, _ := kubernetes.NewForConfig(config)
pod, _ := clientset.CoreV1().Pods("default").Get(context.TODO(), "nginx-6799fc88d8-mzmcj", metav1.GetOptions{})
for annotation_name, annotation_value := range pod.GetAnnotations(){
fmt.Println(annotation_name, annotation_value)
}
}

和结果:

$ kubectl logs incluster-app-6dc44ddcf5-dxj8p
cni.projectcalico.org/containerID 7a63f9befd1174d68384adc05735fbcb1482dfe0d312839736531e90fa9fe790
cni.projectcalico.org/podIP 10.0.124.193/32
cni.projectcalico.org/podIPs 10.0.124.193/32

您正在寻找库

https://github.com/kubernetes/apimachinery。它有如下的方法,这些方法对你的用例很有用。

func (meta *ObjectMeta) SetAnnotations(annotations map[string]string)
func HasAnnotation(obj ObjectMeta, ann string) bool

裁判:

  1. https://pkg.go.dev/k8s.io/apimachinery@v0.17.0包裹/api/元/v1 # HasAnnotation
  2. https://pkg.go.dev/k8s.io/apimachinery@v0.17.0包裹/api/元/v1 # ObjectMeta.SetAnnotations

最新更新