티스토리 뷰
1. DaemonSet
1) 개념
- 클러스터의 모든 노드에서 특정 파드를 실행하도록 보장하는 리소스
- ReplicaSet과 유사하지만, ReplicaSet이 지정된 수의 파들르 여러 노드에 분산 배치하는 반면, DaemonSet은 각 노드마다 하나의 파드를 실행하도록 설계
2) 주요 특징
(1) 노드별 파드 실행:
- DaemonSet은 모든 노드에서 하나의 파드를 실행
- 새로운 노드가 클러스터에 추가되면, DaemonSet은 자동으로 해당 노드에 파드를 생성
- 노드가 제거되도 해당 노드의 파드는 자동으로 삭제
(2) 자동 관리
- DaemonSet은 클러스터 상태를 지속적으로 모니터링하며, 노드 추가/삭제 시 이를 자동으로 처리
(3) 주요 사용 사례
- 모니터링 및 로깅 에이전트: 각 노드에서 로그르 수집하거나 모니터링 데이터를 수집하는 에이전트를 배포
- 네트워크 구성요소: 네트워크 플러그인(Weave-Net) 이나 kube-proxy와 같은 네트워크 에이전트를 배포
- 보안 및 관리 도구: 클러스터 관리 및 보안을 위한 에이전트 배포
3) DaemonSet 생성 방법
(1) 우선 관련 yaml 정의파일 필요
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: monitoring-daemon
spec:
selector:
matchLabels:
app: monitoring-agent # 파드를 선택할 라벨
template:
metadata:
labels:
app: monitoring-agent # 생성되는 파드에 적용될 라벨
spec:
containers:
- name: monitoring-agent
image: monitoring-agent:latest # 컨테이너 이미지
(2) DaemonSet 생성 및 확인
## daemonset 생성
kubectl create -f daemon-set-definition.yaml
## daemonset 확인
kubectl get daemonsets
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE AGE
monitoring-daemon 3 3 3 3 3 5m
2. Static Pods
1) 개념: 특별한 유형의 Pod로, 클러스터의 컨트롤 플레인 없이도 독립적으로 동작할 수 있는 Pod. kubelet이 해당 pod를 직접 관리하며, 클러스터의 다른 구성요소(kube-apiserver,kube-scheduler,ETCD) 의 개입없이 생성 및 유지.
- kubelet이 독립적으로 생성하고 관리하는 Pod
- 클러스터가 없이도 동작할 수 있으며, kube-apiserver나 kube-scheduler와 같은 컨트롤 플레인 구성요소가 필요하지 않음
- 일반 Pod와 달리 Pod 정의파일을 기반으로 생성
2) Static Pods의 작동방식
(1) Pod 정의 파일 제공
- Static Pod를 생성하려면 Pod 정의 파일을 특정 디렉토리에 배치해야 함
- 해당 디렉토리는 pod-manifest-path라는 옵션으로 kubelet에 설정되며, /etc/kubernetes/manifests 디렉토리가 일반적으로 사용됨.
ExecStart=/usr/local/bin/kubelet \
--container-runtime=remote \
--container-runtime-endpoint=unix:///var/run/containerd/containerd.sock \
--pod-manifest-path=/etc/kubernetes/manifests \ ##해당 디렉토리에 Static pods를 관리할 디렉토리를 지정
--kubeconfig=/var/lib/kubelet/kubeconfig \
--network-plugin=cni \
--register-node=true \
--v=2
- 해당 디렉토리(--pod-manifest-path=/etc/kubernetes/manifests)에 아래와 같은 정의파일을 배치해야 함
## static-web.yaml
apiVersion: v1
kind: Pod
metadata:
name: static-web
labels:
app: web
spec:
containers:
- name: web-container
image: nginx
ports:
- containerPort: 80
(2) kubelet의 역할:
- kubelet은 주기적으로 해당 디렉토리를 확인하여 정의파일을 읽고 Pod를 생성
- 정의 파일이 변경되면 kubelet은 Pod를 재생성하며, 정의 파일이 삭제되면 해당 Pod도 삭제
(3) Pod 유지관리
- Static Pods는 어플리케이션이 충돌하거나 중단될 경우 kubelet이 이를 자동으로 재시작
3) Static Pods와 클러스터 통합
- Static Pods가 클러스터에 속하는 경우, kubelet은 해당 Static Pod 에 대한 Mirror Object를 kube-apiserver에 생성
- Mirror object는 읽기 전용으로, kubectl 명령어로 조회할 수 있지만, 수정하거나 삭제할 수 없음. 수정은 오직 디렉토리에 있는 정의 파일을 통해 가능
4) 주요 사용 사례
(1) 컨트롤 플레인 구성요소 배포
- 쿠버네티스 컨트롤 플레인 구성요소(API 서버, ETCD) 를 배포하는데 사용
- kubeadm 도구로 설정된 클러스터에서 일반적으로 사용. 이는 kube-system 네임스페이스에서 컨트롤 플레인 구성요소가 Pod가 실행되는 것으로 확인 가능
(2) 클러스터 없이 단일 노드에서 어플리케이션을 실행할 때 유용.
'쿠버네티스' 카테고리의 다른 글
[쿠버네티스] 5. Application Management 1) Rolling Updates and Rollbacks (0) | 2024.12.11 |
---|---|
[쿠버네티스] 4. 모니터링 (0) | 2024.12.11 |
[쿠버네티스] 3. 스케줄링 1) Scheduling (0) | 2024.12.10 |
[쿠버네티스] 2. 쿠버네티스 오브젝트 Pod, ReplicaSets, Deployments, Services, Namespaces (2) | 2024.12.09 |
[쿠버네티스] 1. 쿠버네티스 아키텍쳐 (1) | 2024.12.08 |