我可以在 kubectl 中按 apiVersion 过滤吗?
Can I filter by apiVersion in 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"
有没有办法在 kubectl 中通过 apiVersion
很好地过滤?
我目前的解决方法是将所有入口请求为 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"
]
您可以使用 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}}'
我想找到所有仍然 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"
有没有办法在 kubectl 中通过 apiVersion
很好地过滤?
我目前的解决方法是将所有入口请求为 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"
]
您可以使用 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}}'