티스토리 뷰

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) 클러스터 없이 단일 노드에서 어플리케이션을 실행할 때 유용.

 

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
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 31
글 보관함