I have a annotation added like this for rbac definition.
Annotations: expires-at: 2020-07-24T19:24:42ZI want to filter only the Kubernetes resources that is already expired based upon this annotation. I tried below..but it does not work.. "<" is considering the following as file name.
kubectl get rbacdefinition --field-selector metadata.annotations.expires-at<$(date -u '+%Y-%m-%dT%H:%M:%SZ')Please let me know how to solve this.
Posting this answer as community wiki for better visibility as good answers were posted in comments.
As was mentioned by @tarun khosla, when you are using selector operators, only =, == and != are supported. Thus operators like <, >, =< will not work. It's described in Kubernetes docs
Another good point was provided by @mchawre to use 3rd party software which is Kube Janitor.
As workaroud you could consider to use:
kubectl describe <resource> | grep expires-at: > expiration.txt
or
kubectl describe all -n <namespace> | grep expires-at: -A 5 > expiration.txt
However, depends on resource and number of annotations you could get many irrelevant information.
The answer from what I'm seeing is that no, <, >, REGEXP(), and IN(), basically what you'd expect in a database, is not there. And you're right to ask because the documentation I've found:
https://kubernetes.io/docs/concepts/overview/working-with-objects/field-selectors/Doesn't explicitly state this.
Takeaway rule: NEVER use kubernetes resources as you would use a database or you'll be dealing with issues like this. Besides = and !=, > and < are the most minimally intuitively expected comparators, and they're not there.