我可以过滤apiVersion在kubectl?



我想找到所有仍然是apiVersion: networking.k8s.io/v1beta1的kubernetes入口,因为我将kubernetes集群(EKS)从1.21升级到1.22,我们应该使用networking.k8s.io/v1代替。

我试着

kubectl  get ingress --all-namespaces --field-selector apiVersion="networking.k8s.io/v1beta1 "
Error from server (BadRequest): Unable to find "networking.k8s.io/v1, Resource=ingresses" that match label selector "", field selector "apiVersion=networking.k8s.io/v1beta1": "apiVersion" is not a known field selector: only "metadata.name", "metadata.namespace"

是否有一种方法可以很好地过滤apiVersion在kubectl?

您可以使用go-template来避免管道到其他工具,如jq:

kubectl get ingress  -A -o go-template='{{range .items}}{{if (eq .apiVersion "networking.k8s.io/v1")}}{{ .metadata.name }}{{"n"}}{{end}}{{end}}'

以更易于阅读的格式:

kubectl get ingress  -A -o go-template='{{range .items}}
{{- if (eq .apiVersion "networking.k8s.io/v1") -}}
{{ .metadata.name }}{{"n"}}
{{- end -}}
{{end}}'

我目前的解决方法是请求所有入口为JSON并使用jq本地过滤

kubectl  get ingress --all-namespaces -o json > result.json
cat result.json |  jq '.items[]|select(.apiVersion=="networking.k8s.io/v1beta1")|[.apiVersion,.metadata.name, .metadata.namespace]'

将产生

[
"networking.k8s.io/v1beta1",
"rubelagu-helloworld",
"hello-world"
], 
[
"networking.k8s.io/v1beta1",
"rubelagu-helloworld",
"hello-world2"
]

相关内容

  • 没有找到相关文章

最新更新