我有一个golang演示程序,可以列出没有特定标签的Pod。我想修改它,这样它也可以为每个Pod添加标签。
(我正在使用AWS托管的Kubernetes服务EKS,因此有一些特定于EKS的样板代码)
package main
import (
"fmt"
eksauth "github.com/chankh/eksutil/pkg/auth"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)
func main() {
cfg := &eksauth.ClusterConfig{ClusterName: "my_cluster_name"}
clientset, _ := eksauth.NewAuthClient(cfg)
api := clientset.CoreV1()
// Get all pods from all namespaces without the "sent_alert_emailed" label.
pods, _ := api.Pods("").List(metav1.ListOptions{LabelSelector: "!sent_alert_emailed"})
for i, pod := range pods.Items {
fmt.Println(fmt.Sprintf("[%2d] %s, Phase: %s, Created: %s, HostIP: %s", i, pod.GetName(), string(pod.Status.Phase), pod.GetCreationTimestamp(), string(pod.Status.HostIP)))
// Here I want to add a label to this pod
// e.g. something like:
// pod.addLabel("sent_alert_emailed=true")
}
}
字符串
我知道kubectl可以用来添加标签,例如。
kubectl label pod my-pod new-label=awesome # Add a Label
kubectl label pod my-pod new-label=awesomer --overwrite # Change a existing label
型
我希望通过go客户端有一个等效的方法?
2条答案
按热度按时间vc9ivgsu1#
我希望有一个更优雅的方法,但直到我了解它,我设法添加一个标签到一个Pod使用
Patch
。这是我的演示代码(再次它有一些EKS样板的东西,你可能可以忽略):字符串
x3naxklr2#
我尝试使用client-go向一个节点添加一个新的标签,基于OP's code snippet,我使用的最短路径如下。
字符串
注意:
add
到/metadata/labels
将覆盖所有现有标签,因此我选择/metadata/labels/${LABEL_KEY}
的路径以仅添加新标签