proj.pe.kr|도커, 쿠버네티스 기본
✔️

Lable

Lable

Node를 포함하여 pod, deployment등 모든 리소스에 할당가능
Selector의 선택의 기준이며 Key-value 형태이다.
63 자 이하여야 하고 (공백일 수도 있음)
(공백이 아니라면) 시작과 끝은 알파벳과 숫자(
[a-z0-9A-Z])이며
알파벳과 숫자, 대시(
-), 밑줄(_), 점(.)을 중간에 포함할 수 있다
"metadata": {
  "labels": {
    "key1" : "value1",
    "key2" : "value2"
  }
}
Label Template
출처 : 유튜브 따배런 따배쿠 https://www.youtube.com/@ttabae-learn

Pod lable

CLI로 실행한 cmdpod
라벨없는 pod-demo
라벨포함 label-pod-demo
#Lable을 포함한 pod 조회
kubectl get pods --show-labels
cmdpod          1/1 Running 0  run=cmdpod
label-pod-demo  1/1 Running 0  name=mainui,rel=stable
pod-demo        1/1 Running 0  <none>

kubectl get pods -l name=mainui #<-- 동일구문 kubectl get pods --selector name=ui

#Label 넣어주기
kubectl label pod pod-demo name=test

#Label 수정하기
#기존 라벨이름과 중복된다면 overwrite 옵션 필수
kubectl label pod pod-demo name=login --overwrite 
#여러 라벨은 띄어쓰기로 나열
kubectl label pod cmdpod name=order rel=beta

#라벨제거 --> 라벨의 키 뒤에 -
kubectl label pod pod-demo name-
#Label
metadata:
  labels:
    rel: stable
    name: mainui

#Selector
selector:
  matchLabels:
    key: value
  matchExpressions:
    - {key: name, operator: In, values: [mainui]}
    - {key: rel, operator: NotIn, values: ["beta","canary"]}

Node Lable

Worker Node의 특성을 Label로 설정
예를들어 Node들의 하드웨어들이 각각 다르다고 가정했을때
특정노드는 gpu와 ssd를 가지고 있을때, 이를 Label로 설정해두고
해당 노드를 선택해서 파드를 배치할 수 있다.
#Label 정보를 포함해서 조회
kubectl get nodes --show-labels

#노드1에 label을 먹이고
kubectl label nodes node1.example.com gpu=true disk=ssd

#노드2에 label을 먹이고
kubectl label nodes node2.example.com disk=ssd

#조회 해보면, 각 node의 label에 추가된 것을 볼 수 있다.
kubectl get nodes --show-labels

#특정 Label만 조회
kubectl get nodes -L cpu,disk
#node selector 구성한 파드 실행
cat nodeselector.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: pod-nodeselector
spec:
  nodeSelector:
    gpu: "true"
    disk: ssd
  containers:
  - name: nginx
    image: nginx:1.14
    ports:
    - containerPort: 80

kubectl get pods -o wide   #<--- node1에서 실행 된 것을 알 수 있다.

#만약 node selector에 적합한 node가 1개도 없다면?
#   --> 문법적인 오류가 없기에 pod는 실행되나, STATUS가 Pending 상태로 대기 상태가 된다.

Annotation

Label과 동일하게 key-value
🌟Kubernetes에게 특정 정보를 전달할 용도로 사용
#롤링업데이트의 사유를 kubernetes에 전달
apiVersion: apps/v1
kind: Deployment
metadata:
  name: deploy-nginx
  annotations:
    kubernetes.io/change-cause: version 1.15
spec:
  replicas: 3
  selector:
    matchLabels:
      app: webui
  template:
    metadata:
      labels:
        app: webui
    spec:
      containers:
      - name: web
        image: nginx:1.15
        ports:
        - containerPort: 80
#관리를 위해 필요한 정보를 기록할 용도로 사용(릴리즈,로깅,모니터링에 필요한 정보)
apiVersion: v1
kind: Pod
metadata:
  name: pod-annotation
  annotations:
    builder: "bluedove (bluedove97@acornsoft.io)"
    buildDate: "20221205"
    imageRegistry: https://hub.docker.com/
spec:
  containers:
  - name: nginx
    image: nginx:1.14
    ports:
    - containerPort: 80