레이블 그리고 셀렉터

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.

추천 사용 방식

레이블 예제