Kse*_*ova 5 go kubernetes kubectl client-go
我想执行相当于
kubectl get all -l app=myapp -n mynamespace
或者
kubectl label all -l version=1.2.0,app=myapp track=stable --overwrite
使用客户端去
我查看了动态包,但它似乎需要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)
Run Code Online (Sandbox Code Playgroud)
我还查看了运行时包,但没有发现任何有用的东西。看了一下是怎么kubectl实现的,有点想不通,抽象层次太多了。
您无法通过一次调用列出“所有对象”。
不幸的是,Kubernetes API 的架构方式是通过 API 组,它们下有多个 API。
所以你需要:
apiGroup)kind它公开了哪些 API ( )。kind以获取所有对象(在这里您实际上可以使用标签过滤列表查询)。幸运的是,kubectl api-versions并kubectl api-resources命令做这些。
因此,要了解 kubectl 如何找到所有“种类”的 API 资源,请运行:
kubectl api-resources -v=6
Run Code Online (Sandbox Code Playgroud)
你会看到 kubectl 发出如下调用:
GET https://IP/apiGET https://IP/apisGET https://IP/apis/metrics.k8s.io/v1beta1GET https://IP/apis/storage.k8s.io/v1因此,如果您尝试使用 client-go 来克隆此行为,则应使用相同的 API 调用,或者最好只编写一个脚本,kubectl api-resources -o=json并围绕它编写脚本。