YOGAE

TODO: FIXME:

Kubernetes 라벨 & 주석

19 Apr 2019

라벨은 포드뿐만 아니라 쿠버네티스의 모든 리소스를 구성하는 쿠버네티스 기능입니다.

리소스에 첨부하는 Key / value 쌍입니다.

리소스는 해당 라벨의 키가 해당 자원 내에서 고유한 경우 하나 이상의 라벨을 가질 수 있습니다.

라벨 지정하여 포드 만들기

apiVersion: v1
kind: Pod
metadata:
 name: kubia-manual-v2
 labels: # label
  create_method: manual
  env: prod
spec:
 containers:
 - image: luksa/kubia
   name: kubia
   ports:
   - containerPort: 8080
	 protocol: TCP
kubectl create -f kubia-manual-with-labels.yaml # pod 생성

kubectl get --show-labels # 라벨 확인

kubectl get pods -L creation_method, env # 특정 label만 열에 표시

kubectl label pods kubia-manual create_method=manual # label 추가

kubectl label pods kubia-manual-v2 env=debug --overwrite # 기존 label 변경

kubectl label node ip-172-22-22-22.ec2.internal gpu=false # node에 label

라벨 셀렉터

특정 라벨로 태그가 지정된 포드의 하위 집합을 선택하고 해당 포드에서 작업을 수행할 수 있습니다.

kubectl get pods -l creation_method=manual # 특정 label 선택

kubectl get pods -l env # label의 value와 상관없이 env label을 포함하는 pod 선택

kubectl get pods -l '!env' # env label을 포함하지 않는 pod 선택

kubectl get pods -l env=prod,creation_method=manual # 다중 선택

kubectl get nodes -l gpu=false

노드 지정을 위한 포드 스케줄링

apiVersion: v1
kind: Pod
metadata:
 name: kubia-gpu
spec:
 nodeSelector: 
  gpu: "false" # gpu=false 라벨을 포함하는 노드에만 포드를 배포하도록 지시합니다.
 containers:
 - image: luksa/kubia
   name: kubia

주석

라벨과 유사하지만 식별 정보를 보유하지 않습니다.

주석을 잘 사용하면 각 포드나 API 객체 설명이 추가 되므로 클러스터를 사용하는 모든 사람이 각 객체의 정보를 빠르게 찾을 수 있습니다.

주석은 비교적 짧은 것이 좋지만 주석에는 비교적 큰 데이터 블롭(256KB)이 포함될 수 있습니다.

주석 추가

apiVersion: v1
kind: Pod
metadata:
 annotatoions:
  kubernets.io/create-by: |
   {"kind": "SerializedReference", ......}
kubectl annotate pod kubia-manual mycompany.com/comeannotation="foo bae"

고유한 접두사를 사용하지 않으면 의도치 않게 주석을 덮어 쓸 수가 있습니다.

주석 확인

kubectl describe pod kubia-manual

라벨 셀렉터 포드 삭제

kubectl delete pods kubia-gpu # 이름으로 pod 삭제

kubectl delete pods -l create_method=menual # 라벨로 pod 삭제

kubectl delete pods --all # 모든 pod 삭제

레플리케이션컨트롤러에 의해 생성된 포드를 삭제하면 즉시 새 포드가 생성됩니다. 포드를 삭제하려면 레플리케이션컨트롤러도 삭제해야 합니다.