使用 SetAnnotations Kubernetes API 为 pod 设置注释

Setting annotations to a pod using SetAnnotations Kubernetes API

我正在尝试使用以下示例代码向 运行ning Pod 的现有注释集添加新的键值对:

import (
        "fmt"
        "context"
        metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
        "k8s.io/client-go/tools/clientcmd"
        "k8s.io/client-go/kubernetes"
        "k8s.io/klog"
)

const ( 
        configPath = "/home/test/.kube/config"
)
func main() {
        client, _ := connect()
        pod, _ := client.CoreV1().Pods("default").Get(context.TODO(), "nginx-pod",metav1.GetOptions{})
        fmt.Println(pod.Name)
        annotations := map[string]string{
                "foo":"bar",
        }
        pod.SetAnnotations(annotations)
        for name, value := range pod.GetAnnotations() {
                fmt.Println("name := ", name, "value =", value)
        }

}

func connect() (*kubernetes.Clientset, error) {
        restconfig, err := clientcmd.BuildConfigFromFlags("", configPath)
        if err != nil {
                klog.Exit(err.Error())
        }
        clientset, err := kubernetes.NewForConfig(restconfig)
        if err != nil {
                klog.Exit(err.Error())
        }
       return clientset, nil
}

当我运行上面的代码并使用“oc describe pods/nginx-pod时,我没有在注释下看到注释“foo:bar”。 向现有广告连播添加新注释的正确方法是什么。

你会想要一些东西:

...
pod.SetAnnotations(annotations)
client.
  CoreV1().
  Pods("default").
  Update(context.TODO(), pod, metav1.UpdateOptions{})

参见:PodInterface