Kubernetes/Udemy - CKAD with Tests

Labels, Selectors and Annotation

비번변경 2021. 8. 6. 19:28

Labels & Selectors

Labels
각 항목에 붙은 속성

Selectors
항목을 필터링하는 데 사용한다.

 

레이블과 셀렉터는 항목을 그룹화하는 표준 방법이다.

유튜브 동영상이나 블로그 포스트에 붙인 태그처럼 클래스, 유형, 그룹 등의 기준으로 레이블을 붙이면 기준에 따라 필터링할 수 있다.

 

쿠버네티스에는 수많은 개체가 있을 수 있기 때문에 유형, 애플리케이션, 기능 등의 다양한 범주를 기준으로 필터링하여 볼 수 있는 방법이 필요하다.

 

 

레이블 지정 방법

일반적으로 정의 파일에 지정할 수 있다.

apiVersion: v1
kind: Pod
metadata:
  name: simple-webapp
  labels:
    app: App1
    function: Front-end
spec:
  containers:
  - name: simple-webapp
    image: simple-webapp
    ports:
    - containerPort: 8080

metadata 아래에 labels 항목을 추가하여 키-값 형식으로 레이블을 지정한다. 레이블은 원하는 만큼 자유롭게, 개수 제한 없이 추가할 수 있다.

 

 

셀렉터를 이용한 개체 확인

--selector 옵션으로 필터링할 레이블의 키와 값을 지정하여 검색할 수 있다

kubectl get pods --selector <KEY>=<VALUE>

# 예시
kubectl get pods --selector app=App1

 

 

개체 연결

포드에 레이블을 지정하고, replicaset의 셀렉터를 포드의 레이블과 일치하도록 구성하면 포드를 그룹화할 수 있다.

레이블은 하나만 일치하면 되지만, 레이블이 같으나 기능이 다른 포드가 있는 경우, 좀 더 명확하게 그룹화할 수 있도록 다수의 레이블을 매칭 시킬 수도 있다.

kind: ReplicaSet
metadata:
  name: simple-webapp
  labels: # replicaset labels
    app: App1
    function: Front-end
spec:
  replicas: 3
  selector:
    matchLabels:
      app: App1
  template:
    metadata:
      labels: # pod labels
        app: App1
        function: Front-end
    spec:
      containers:
      - name: simple-webapp
        image: simple-webapp

레이블이 정상적으로 설정되면 replicaset이 정상적으로 생성된다.

replicaset의 레이블은 다른 개체가 이 replicaset을 선택하도록 구성하는데 사용한다.

 

다른 개체인 서비스도 비슷한 방식으로 포드를 연결할 수 있다.

apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  selector:
    app: App1
  ports:
    - protocol: TCP
      port: 80
      targetPort: 9376

 

 

Annotations

정보 제공 목적으로 세부 정보를 기록하는데 사용한다.

예시 ) 이름, 버전, 빌드 정보, 연락처, 전화번호, 이메일, ID 등

apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: simple-webapp
  labels:
    app: App1
    function: Front-end
  annotations:
    buildversion: 1.34
spec:
  replicas: 3
  selector:
    matchLabels:
      app: App1
  template:
    metadata:
      labels:
        app: App1
        function: Front-end
    spec:
      containers:
      - name: simple-webapp
        image: simple-webapp