레이블 그리고 셀렉터
k8s는 여러 리소스를 다룬다. 해당 리소스들을 레이블링 하는 것이 필요하다. 레이블을 사용해 특정 그룹을 만들거나 특정 그룹을 선택 할 수 있다.
k8s 에서 레이블을 key: value map으로 되어 있고 오브젝트에 부착해둔다.
아이디어
어플리케이션을 각각의 뷰에 따라 특정 그룹으로 분리 할 수 있다. 이럴때 레이블을 사용해서 할 수 있다.
- release: stable, canary
- environment: dev, qa, production
- tier: frontend, backend, cache
- partition: customerA, customerB
- track: daily, weekly
문법
- key: [domain/][a-z0-9A-Z -_.] max length 63
- value: [a-z0-9A-Z -_.][]
레이블 셀렉터
레이블은 유니크 하지 않기 때문에 집합이 리턴될수 있다. - equality-based 셀렉터 - set-base 셀렉터
equality-based 필터
=(==), != 두가지 종류로 필터링
env = production
tier != frontend
- env 의 경우 prdouction 값을 가진 리소스만 선택
- tier 의 경우 값이 다르거나 키가 없는 경우도 선택됨
set-based 필터
값 집합을 기준으로 선택가능. in, notin exists
env in (production, qa)
tier notin (frontend, backend)
partition
!pratition
- env 의 경우 prdouction, qa 값을 가진 리소스만 선택
- tier 의 경우 값이 다르거나 키가 없는 경우도 선택됨
- partition 키가 있는 경우만 선택
- partition 키가 없는 경우만 선택
- 여러 조건은 and
사용 예제
kubectl get pods -l environment=production,tier=frontend
kubectl get pods -l 'environment in (production),tier in (frontend)'
kubectl get pods -l 'environment in (production, qa)'
kubectl get pods -l 'environment,environment notin (frontend)'
- services, replicationcontrollers 들도 내부적으로 레이블을 사용해 다른 리소스와 구분함
리소스 선택 예제
셀렉터를 사용해서 특정 리소스를 할당 할 수 있다.
selector:
matchLabels:
components: redis
matchExpressions
- {key: tier, operator: In, values: [cache]}
- {key: env, operator: notIn, values: [dev]}
- matchLabels 은 equality-base.
- matchExpression 은 set-base.