티스토리 뷰
About DaemonSet
State: Completion
Outline
Replication Controller와 Replica Set은 일정한 수의 포드를 쿠버네티스 클러스터 내에서 생성 및 운영하는 것이 목적이다. 그렇기 때문에 특정한 포드가 쿠버네티스 내에서 사라져 서비스에 문제가 생기는 일은 사라지게 된다.
그렇다면 두 Object는 개별 노드 마다 리소스 모니터 Pods를 생성해야할 때도 유용하게 쓰일 수 있을까? 두 Object가 가지는 '클러스터 내에 일정한 수의 포드를 노드의 종류와 관계 없이 생성 및 운영 한다는' 특성 탓에 이러한 니즈에는 부적절하다고 볼 수 있다.
반면에 Daemon Set은 이러한 니즈에 부합하는 Object 이다. 개별 노드 마다 로그 수집기나 리소스 모니터 등의 기능을 하는 Pods를 생성해 관리 효율을 높여준다. 새로운 노드가 생성되도 알아서 해당 노드에 설정에 따라 리소스 모니터나 로그 수집기 Pods를 배포한다. Node Selector를 통해 특정 노드에만 배포하는 것도 가능하다.
이 처럼 효율적이고 매력적인 Daemon Set에 대해서 자세히 알아보겠다.
-
Definition
클러스터 내 특정 노드에 같은 Pod를 배포 및 운영해주는 Object.
-
YAML
apiVersion: apps/v1beta2
kind: DaemonSet #종류
metadata:
name: ssd-monitor # 해당 Object의 고유한 이름. 중복 불가.
spec:
selector:
matchLabels:
app: ssd-monitor
template:
metadata:
labels:
app: ssd-monitor # 템플릿으로 생성되는 Pod에 해당 레이블을 부여한다.
spec:
nodeSelector:
disk: ssd # Key가 disk, Value가 ssd인 노드에 배포된다.
containers: # 이미지 설정
- name: main
image: luksa/ssd-monitor
# vi 편집기로 위 yaml을 작성한 후 kubectl create -f <filename.fileExtention>
# 을 입력하면 DaemonSet이 생성된다.
-
Example
Using Daemon Set deploy pods to specific nodes
데몬 셋을 활용해 특정 노드에 포드를 배포해보는 실습을 해보겠다.
( 1 ) 전체 노드를 조회 한다.kubectl get node
NAME STATUS ROLES AGE VERSION
gke-jordi-default-pool-08313642-c93c Ready <none> 27d v1.13.10-gke.0
gke-jordi-default-pool-6a478366-mw0p Ready <none> 27d v1.13.10-gke.0
gke-jordi-default-pool-f0a197fa-stvp Ready <none> 27d v1.13.10-gke.0
( 2 ) 위 두개 노드에 레이블을 부여한다.
kubectl label node gke-jordi-default-pool-08313642-c93c disk=ssd
kubectl label node gke-jordi-default-pool-6a478366-mw0p disk=ssd
( 3 ) 위 YAML로 Daemon Set을 생성한다.
kubectl create -f <fileName.fileExtention>
( 4 ) Pod가 생성된 것을 확인할 수 있다.
NAME READY STATUS RESTARTS AGE
jordi-9r74l 1/1 Running 0 5d5h
jordi-hwp4r 1/1 Running 0 5d5h
ssd-monitor-lm6tm 1/1 Running 0 15s
ssd-monitor-n562r 1/1 Running 0 15s
Example of a response when changing a specific node label
위 예제에 이어서 레이블을 부여한 Node 중 gke-jordi-default-pool-6a478366-mw0p 의 레이블을 disk=ssd 에서 disk=hdd로 변경했을 때 데몬 셋 생성 Pod의 반응을 확인해보겠다.
( 1 ) 특정 노드에 레이블을 덮어쓰기
위에서 언급했듯이 disk=hdd로 레이블을 덮어쓰기 해보겠다.
참고로, 기존 레이블과 Key가 동일할 경우에는 --overwrite
는 필수적이다.
kubectl label node gke-jordi-default-pool-6a478366-mw0p disk=hdd --overwrite
( 2 ) Pod 상세 정보 목록 조회
기존에 포드명과 age외에 소속된 노드의 정보도 함께 조회하는 명령어를 실행했다.
kubectl get po -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
jordi-9r74l 1/1 Running 0 5d5h 10.48.0.21 gke-jordi-default-pool-08313642-c93c <none> <none>
jordi-hwp4r 1/1 Running 0 5d5h 10.48.1.14 gke-jordi-default-pool-f0a197fa-stvp <none> <none>
ssd-monitor-lm6tm 1/1 Terminating 0 98s 10.48.2.22 gke-jordi-default-pool-6a478366-mw0p <none> <none>
ssd-monitor-n562r 1/1 Running 0 98s 10.48.0.25 gke-jordi-default-pool-08313642-c93c <none> <none>
레이블을 변경한 gke-jordi-default-pool-6a478366-mw0p에 속해있던 Daemon Set 생성 Pod인 ssd-monitor-lm6tm가 Terminating 된 것을 확인할 수 있다.
이상으로 정말 간단하지만 유용한 Daemon Set에 대하여 알아보았다.
'Infra > Kubernetes' 카테고리의 다른 글
About Service(1), Basic Concept (0) | 2019.11.19 |
---|---|
검색어 필터링 후 컴포넌트 삭제 Deleting components which are filtered by search text (0) | 2019.11.15 |
About Replication Controller (0) | 2019.11.08 |
Differences Between Replica Set and Replica Controller (0) | 2019.11.01 |
About Pod (0) | 2019.10.27 |
- Total
- Today
- Yesterday
- POD
- 자바 메모리 구조
- kubernetes
- Replication Controller
- Java Memory Structure
- JVM
- Delete
- Effective Java
- k8s
- JMM
- Java
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |