首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用apimachinery/client-go检索不包含标签的kubernetes节点

使用apimachinery/client-go检索不包含标签的kubernetes节点
EN

Stack Overflow用户
提问于 2021-12-22 18:51:02
回答 1查看 428关注 0票数 2

我想获取kubernetes节点的列表(如果有的话),包含一个标签。

我用client-go做了相反的事情

代码语言:javascript
复制
    labelSelector := metav1.LabelSelector{
        MatchLabels: map[string]string{
            "somelabel": "somevalue",
        },
    }
    labelMap, err := metav1.LabelSelectorAsMap(&labelSelector)
    if err != nil {
        return false, errors.Wrap(err, "error converting node label selector to map")
    }
    nodeListOptions := metav1.ListOptions{
        LabelSelector: labels.SelectorFromSet(labelMap).String(),
    }
    nodes, err := clientset.CoreV1().Nodes().List(nodeListOptions)
    if err != nil {
        return false, errors.Wrap(err, "error getting node list")
    }

我想要实现的是转换以下kubectl调用

代码语言:javascript
复制
kubectl get ns --selector='!label_name'

转换成client-go代码。

这可行吗?

EN

回答 1

Stack Overflow用户

发布于 2021-12-22 19:40:04

我认为,我们必须使用Requirement 类型 of apimachinerylabels包,并在此基础上创建Selector 构式

代码语言:javascript
复制
nodeReq, err := labels.NewRequirement("label_name", selection.DoesNotExist, []string{})
    if err != nil {
        return false, errors.Wrap(err, "error creating selector requirement")
    }
    selector := labels.NewSelector()
    selector = selector.Add(*nodeReq)
    if err != nil {
        return false, errors.Wrap(err, "error converting node label selector to map")
    }
    nodeListOptions := metav1.ListOptions{
        LabelSelector: selector.String(),
    }
    nodes, err := clientset.CoreV1().Nodes().List(nodeListOptions)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70453832

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档