我想找到所有仍然是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"
]