필드 셀렉터
필드 셀렉터 (Field Selectors)
필드 셀렉터는 하나 이상의 리소스 필드 값을 기준으로 쿠버네티스 객체를 선택하게 해줘요. 필드 셀렉터 쿼리의 예시는 다음과 같아요:
metadata.name=my-servicemetadata.namespace!=defaultstatus.phase=Pending
다음 kubectl 명령은 status.phase 필드 값이 Running 인 모든 파드를 선택해요:
kubectl get pods --field-selector status.phase=Running
참고:
출처: 문서
본문
지원되는 필드 (Supported fields)
지원되는 필드 셀렉터는 쿠버네티스 리소스 유형에 따라 달라져요. 모든 리소스 유형은 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 |
사용자 정의 리소스 필드 (Custom resources fields)
모든 사용자 정의 리소스 유형은 metadata.name 과 metadata.namespace 필드를 지원해요.
추가로, CustomResourceDefinition의 spec.versions[*].selectableFields 필드는 사용자 정의 리소스의 다른 필드 중 어떤 것이 필드 셀렉터에 사용될 수 있는지 선언해요. CustomResourceDefinition과 필드 셀렉터를 함께 사용하는 방법은 사용자 정의 리소스의 선택 가능한 필드를 참고해요.
지원되는 연산자 (Supported operators)
필드 셀렉터에는 =, ==, != 연산자를 사용할 수 있어요(= 와 == 는 같은 뜻이에요). 예를 들어 이 kubectl 명령은 default 네임스페이스에 없는 모든 쿠버네티스 Service를 선택해요:
kubectl get services --all-namespaces --field-selector metadata.namespace!=default
참고:
연결된 셀렉터 (Chained selectors)
라벨 및 다른 셀렉터와 마찬가지로 필드 셀렉터는 쉼표로 구분된 목록으로 연결할 수 있어요. 이 kubectl 명령은 status.phase 가 Running 이 아니고 spec.restartPolicy 필드가 Always 인 모든 파드를 선택해요:
kubectl get pods --field-selector=status.phase!=Running,spec.restartPolicy=Always
여러 리소스 유형 (Multiple resource types)
여러 리소스 유형에 걸쳐 필드 셀렉터를 사용할 수 있어요. 이 kubectl 명령은 default 네임스페이스에 없는 모든 StatefulSet과 Service를 선택해요:
kubectl get statefulsets,services --all-namespaces --field-selector metadata.namespace!=default