gpt4 book ai didi

go - 如何使用 client-go 列出所有具有特定标签的 kubernetes 对象

转载 作者:IT王子 更新时间:2023-10-29 02:00:57 24 4
gpt4 key购买 nike

我想执行相当于

kubectl get all -l app=myapp -n mynamespace

kubectl label all -l version=1.2.0,app=myapp track=stable --overwrite

使用客户端

我看了dynamic包,但它似乎需要 GroupVersionResource,这对于 Service 对象和 Deployment 对象来说是不同的。此外,当我通过 schema.GroupVersionResource{Group: "apps", Version: "v1"} 时,它没有找到任何东西,当我通过 schema.GroupVersionResource{Version: "v1"} 它只查找命名空间对象,也不查找标签,尽管我提供了标签选项:

resource := schema.GroupVersionResource{Version: "v1"}
listOptions := metav1.ListOptions{LabelSelector: fmt.Sprintf("app=%s", AppName), FieldSelector: ""}
res, listErr := dynamicClient.Resource(resource).Namespace("myapps").List(listOptions)

我也查看了运行时包,但没有发现任何有用的东西。我看了一下kubectl是怎么实现的,有点还没搞明白,抽象层次太多了。

最佳答案

您无法通过一次调用列出“所有对象”。

不幸的是,Kubernetes API 的架构方式是通过 API 组,其下有多个 API。

所以你需要:

  1. 查询所有API组(apiGroup)
  2. 访问每个 API 组以查看它公开了哪些 API(种类)。
  3. 实际查询该 kind 以获取所有对象(此处您实际上可以使用标签过滤列表查询)。

幸运的是,kubectl api-versionskubectl api-resources 命令可以执行这些操作。

要了解 kubectl 如何找到所有“种类”的 API 资源,请运行:

kubectl api-resources -v=6

你会看到 kubectl 发出这样的调用:

  • 获取 https://IP/api
  • 获取 https://IP/apis
  • 然后它访问每个 api 组:
    • 获取 https://IP/apis/metrics.k8s.io/v1beta1
    • 获取 https://IP/apis/storage.k8s.io/v1
    • ...

因此,如果您尝试使用 client-go 克隆此行为,您应该使用相同的 API 调用,或者更好的做法是只编写一个脚本,将 shell 输出到 kubectl api-resources -o=json 并围绕它编写脚本。

关于go - 如何使用 client-go 列出所有具有特定标签的 kubernetes 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54675382/

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