개발강의정리/DevOps

[데브옵스를 위한 쿠버네티스 마스터] 쿠버네티스 핵심 개념-레이블을 이용한 포드 구성

nineDeveloper 2020. 11. 27.
728x90

레이블을 이용한 포드 구성

레이블이란?

  • 모든 리소스를 구성하는 매우 간단하면서도 강력한 쿠버네티스 기능
  • 리소스에 첨부하는 임의의 키/값 쌍(예 app: test)
  • 레이블 셀렉터를 사용하면 각종 리소스를 필터링하여 선택할 수 있음
  • 리소스는 한 개 이상의 레이블을 가질 수 있음
  • 리소스를 만드는 시점에 레이블을 첨부
  • 기존 리소스에도 레이블의 값을 수정 및 추가 가능
  • 모든 사람이 쉽게 이해할 수 있는 체계적인 시스템을 구축 가능
    • app: 애플리케이션 구성요소, 마이크로서비스 유형 지정
    • rel: 애플리케이션의 버전 지정

포드 생성 시 레이블을 지정하는 방법

$ kubectl create -f http-go-pod-v2.yaml
pod/http-go-v2 created http-go-pod-v2.yaml
apiVersion: v1
kind: Pod
metadata:
  name: http-go-v2
  labels:
    creation_method: manual
    env: prod
spec:
  containers:
  - image: gasbugs/http-go
    name: http-go
    ports:
    - containerPort: 8080
      protocol: TCP

레이블을 추가 및 수정하는 방법

  • 새로운 레이블을 추가할 때는 label 명령어를 사용
$ kubectl label pod http-go-v2 test=foo
pod/http-go-v2 labeled
  • 기존의 레이블을 수정할 때는 --overwrite 옵션을 주어서 실행
$ kubectl label pod http-go-v2 rel=beta
error: 'rel' already has a value (canary), and --overwrite is false

$ kubectl label pod http-go-v2 rel=beta --overwrite
pod/http-go-v2 labeled
  • 레이블 삭제
$ kubectl label pod http-go-v2 rel-

레이블 확인하기

  • 레이블 보여주기
$ kubectl get pod --show-labels
NAME         READY   STATUS    RESTARTS   AGE   LABELS
http-go-v2   1/1     Running   0          16s   creation_method=manual,env=prod
  • 특정 레이블 컬럼으로 확인
$ kubectl get pod -L app,rel
NAME         READY   STATUS    RESTARTS   AGE     APP       REL
http-go      1/1     Running   0          8m26s
http-go-v3   1/1     Running   0          12m     http-go   beta

$ kubectl get pod -L env
NAME         READY   STATUS    RESTARTS   AGE     ENV
http-go      1/1     Running   0          63s     prod
http-go-v3   1/1     Running   0          5m26s

$ kubectl get pod -L creation_method
NAME         READY   STATUS    RESTARTS   AGE     CREATION_METHOD
http-go-v2   1/1     Running   0          3m59s   manual
http-go-v3   1/1     Running   0          2m33s   manual-v3

레이블로 필터링하여 검색

$ kubectl get pod --show-labels -l 'env'
NAME READY STATUS RESTARTS AGE LABELS
http-go-v2 1/1 Running 0 3m10s creation_method=manual,env=prod,rel=beta,test=foo

$ kubectl get pod --show-labels -l '!env'
NAME READY STATUS RESTARTS AGE LABELS http-go 1/1 Running 0 2m <none>

$ kubectl get pod --show-labels -l 'env!=test'
NAME         READY   STATUS    RESTARTS   AGE     LABELS
http-go      1/1     Running   0          9m10s   creation_method=manual,env=prod
http-go-v3   1/1     Running   0          13m     app=http-go,creation_method=manual-v3,rel=beta

$ kubectl get pod --show-labels -l 'env!=test,rel=beta'
NAME READY STATUS RESTARTS AGE LABELS
http-go-v2 1/1 Running 0 5m58s creation_method=manual,env=prod,rel=beta,test=foo

레이블 배치 전략

레이블 키 설명 레이블 값
Application-ID/Application-name 응용 프로그램 이름 또는 ID my-awesome-app/app-nr-2345
Version-nr 버전 번호 ver-0.9
Owner 개체가 속한 팀 또는 개인 Team-kube/Josh
Stage/Phase 개발 단계 또는 위치 Dev, staging, QA, Canary, Production
Release-nr 릴리즈 번호 release-nr-2.0.1
Tier 앱이 속한 계층 front-end/back-end
Customer-facing 고객에게 직접 서비스 하는 앱 여부 Yes/No
App-role 앱의 역할 Cache/Web/Database/Auth
Project-ID 연관된 프로젝트 ID my-project-276
Customer-ID 자원을 할당한 고객 ID customer-id-29

연습문제

  • YAML 파일을 사용하여 app=nginx 레이블을 가진 포드를 생성하라
    • nginx-pod.yaml
      apiVersion: v1
      kind: Pod
      metadata:
      name: nginx
      labels:
        app: nginx
      spec:
      containers:
      - image: nginx
        name: nginx
        ports:
        - containerPort: 80
          protocol: TCP
    • kubectl create -f nginx-pod.yaml
  • app=nginx를 가진 포드를 get하라
    • kubectl get pod -l app=nginx
  • get된 포드의 레이블의 app을 확인하라
    • kubectl get pod -L app
  • app=nginx 레이블을 가진 포드에 team=dev1 레이블을 추가하라
    • kubectl label pod nginx team=dev1
$ kubectl get pod --show-labels
NAME    READY   STATUS    RESTARTS   AGE    LABELS
nginx   1/1     Running   0          3m4s   app=nginx,team=dev1
728x90

댓글

💲 추천 글