필드 셀렉터
필드 셀렉터 (Field Selectors)
*필드 셀렉터(field selectors)*는 하나 이상의 리소스 필드 값에 따라 Kubernetes 객체를 선택하게 해 주는 도구예요. 필드 셀렉터 쿼리의 몇 가지 예시를 볼게요.
metadata.name=my-servicemetadata.namespace!=defaultstatus.phase=Pending
다음 kubectl 명령은 status.phase 필드 값이 Running인 모든 Pod를 선택해요.
kubectl get pods --field-selector status.phase=Running
참고:
필드 셀렉터는 본질적으로 리소스 필터예요. 기본적으로는 아무 셀렉터/필터도 적용되지 않아서, 지정한 유형의 모든 리소스가 선택돼요. 그래서 kubectl get pods와 kubectl get pods --field-selector ""는 같은 동작을 해요.
지원하는 필드
지원하는 필드 셀렉터는 Kubernetes 리소스 유형에 따라 달라져요. 모든 리소스 유형은 metadata.name과 metadata.namespace 필드를 지원해요. 지원하지 않는 필드 셀렉터를 쓰면 오류가 발생해요. 예를 들면요:
kubectl get ingress --field-selector foo.bar=baz
Error from server (BadRequest): Unable to find "ingresses" that match label selector "", field selector "foo.bar=baz": "foo.bar" is not a known field selector: only "metadata.name", "metadata.namespace"
지원하는 필드 목록
| Kind | Fields |
|---|---|
| Pod | spec.nodeName spec.restartPolicy spec.schedulerName spec.serviceAccountName spec.hostNetwork status.phase status.podIP status.podIPs status.nominatedNodeName |
| Event | involvedObject.kind involvedObject.namespace involvedObject.name involvedObject.uid involvedObject.apiVersion involvedObject.resourceVersion involvedObject.fieldPath reason reportingComponent source type |
| Secret | type |
| Service | spec.clusterIP spec.type |
| Namespace | status.phase |
| ReplicaSet | status.replicas |
| ReplicationController | status.replicas |
| Job | status.successful |
| Node | spec.unschedulable |
| CertificateSigningRequest | spec.signerName |
커스텀 리소스의 필드
모든 커스텀 리소스 유형은 metadata.name과 metadata.namespace 필드를 지원해요.
추가로, CustomResourceDefinition의 spec.versions[*].selectableFields 필드는 커스텀 리소스에서 필드 셀렉터로 사용할 수 있는 다른 필드들을 선언해요. CustomResourceDefinition에서 필드 셀렉터를 어떻게 쓰는지에 대한 자세한 내용은 커스텀 리소스의 셀렉터 가능 필드를 참고하세요.
지원하는 연산자
필드 셀렉터에는 =, ==, != 연산자를 쓸 수 있어요 (=와 ==는 같은 뜻이에요). 예를 들어 다음 명령은 default 네임스페이스에 없는 모든 Kubernetes Service를 선택해요.
kubectl get services --all-namespaces --field-selector metadata.namespace!=default
셀렉터 연결
레이블 셀렉터 등과 마찬가지로, 필드 셀렉터는 쉼표로 구분된 목록으로 연결할 수 있어요. 다음 명령은 status.phase가 Running이 아니면서 spec.restartPolicy 필드가 Always인 모든 Pod를 선택해요.
kubectl get pods --field-selector=status.phase!=Running,spec.restartPolicy=Always
여러 리소스 유형
필드 셀렉터는 여러 리소스 유형에 걸쳐 쓸 수 있어요. 다음 명령은 default 네임스페이스에 없는 모든 StatefulSet과 Service를 선택해요.
kubectl get statefulsets,services --all-namespaces --field-selector metadata.namespace!=default