Post

Section 3-1. Labels, Selectors

udemy의 Certified Kubernetes Administrator (CKA) with Practice Tests 강의 및 쿠버네티스 인 액션 (마르코 룩샤)를 참고하여 정리한 글입니다.

Section03. Scheduling

Labels

  • 시스템에 수많은 파드가 생길 경우 그것들을 조직화하는 메커니즘이 필요하다. 파드에서 개별적으로 작업하는 것이 아닌 조직화(라벨링)를 통해 특정 그룹에 속한 모든 파드를 단일 작업으로 실행할 수 있다.
  • 라벨은 파드와 같은 리소스에 첨부하는 키/값 쌍이다. 라벨은 리소스의 특성을 식별하는데 사용될 수 있다

Labels를 정의하는 방법

  • 라벨은 metadata.labels 밑에 들어간다
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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

ReplicaSet을 통해 Labels를 정의하는 방법

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: 
    simple-webapp
  labels:                   # ReplicaSet 자체에 정의된 라벨
    app: App1               
    function: Front-end     
spec:
  replicas: 3
  selector:
    matchLabels:             # ReplicaSet이 파드를 찾을 때 매칭하는 라벨
      app: App1
  template:
    metadata:
      labels:
        app: App1            # 파드에 정의된 라벨
        function: Front-end
    spec:
    - name: simple-webapp
      image: simple-webapp

Label 사용하여 파드 조회하는 방법

  • kubectl get po 명령에 –show-labels 옵션 사용하여 파드와 그 파드에 해당하는 라벨을 확인할 수 있다.
1
kubectl get po --show-labels
  • 모든 라벨을 나열하지 않고 특정 라벨에 대해서만 보고싶을 경우 -L 스위치를 사용해 라벨을 지정하고 각 라벨을 지정한 열에 표시할 수 있다.
1
kubectl get po -L <특정 라벨 1>,<특정 라벨 2>

기존 파드에 라벨 생성 및 수정하는 방법

  • 라벨을 기존 파드에 추가 및 수정할 수도 있다.
  • 기존 라벨을 변경할 때는 –overwrite 옵션을 사용한다.
1
2
3
4
5
# 추가
kubectl label po <파드> <라벨>

# 수정
kubectl label po <파드> <변경할 라벨> --overwrite

Selectors

  • 리소스에 부여된 라벨을 기반으로 검색할 수 있는 개념이다. 사용자는 라벨 셀렉터를 이용하여 리소스를 식별할 수 있다.
  • 라벨 셀렉터를 이용하여 검색하는 방법은 두가지가 있다.
    • 특정 키의 유무로 라벨 검색
    • 특정 키와 값의 유무로 라벨 검색

Selector 사용하여 파드 조회하는 방법

1
kubectl get pods --selector app=App1
  • Label이 app=App1에 해당하는 파드가 조회된다.

Annotation

  • 리소스에 메타데이터를 할당할 수 있는 주석과 비슷한 개념이다.
  • 정보 수집 목적으로 이름, 버전, 빌드 정보같은 다른 세부 사항을 기록하는데 사용된다.
1
2
3
4
5
6
7
8
9
10
11
12
apiVersion: v1
kind: Pod
metadata:
name: annotations-nasa
annotations:
    imageregistry: "https://hub.docker.com/"
spec:
containers:
- name: nginx
    image: nginx:latest
    ports:
    - containerPort: 80
This post is licensed under CC BY 4.0 by the author.