Kubernetes DaemonSets 만들기
적용 대상: Azure Stack HCI 22H2의 AKS, Windows Server의 AKS
이 문서에서는 Azure Arc에서 사용하도록 설정된 AKS에서 Kubernetes DaemonSet을 만들고 사용하여 클러스터의 모든 작업자 노드에서 Pod의 복사본을 항상 사용할 수 있도록 하는 방법을 설명합니다. DaemonSet을 사용하여 앱이 모든 작업자 노드에서 실행되는지 확인하고 유지 관리를 수행하고 노드에 대한 지원 서비스를 제공하는 Pod를 배포하여 클러스터 성능을 향상시킬 수 있습니다.
DaemonSets 개요
DaemonSet은 구성에 정의된 Pod의 복사본을 클러스터의 모든 작업자 노드에서 항상 사용할 수 있도록 하는 Kubernetes 개체입니다. 클러스터에 새 노드가 추가되면 DaemonSet은 해당 노드에 Pod를 자동으로 할당합니다.
마찬가지로 노드가 삭제되면 노드에서 실행되는 Pod도 삭제되고 다른 노드에서 다시 예약되지 않습니다(예: ReplicaSets와 같이). 이렇게 하면 Kubernetes 일정 제한을 극복하고 특정 애플리케이션이 클러스터 내의 모든 노드에 배포되도록 할 수 있습니다.
DaemonSets는 전체 클러스터 성능을 향상시킬 수 있습니다. 예를 들어 Pod를 배포하여 유지 관리 작업을 수행하고 모든 노드에 서비스를 지원할 수 있습니다.
- 로그 컬렉션 디먼(예:
Fluentd
및Logstash
.)을 실행합니다. - 노드 모니터링 디먼(예:
Prometheus
.)을 실행합니다. - 클러스터 스토리지 디먼(예:
glusterd
또는ceph
.)을 실행합니다.
DaemonSets는 기본적으로 모든 노드에 Pod를 만들지만 YAML 파일에서 노드 선택기 필드를 미리 정의하여 허용되는 노드 수를 제한할 수 있습니다. DaemonSet 컨트롤러는 노드 선택기와 일치하는 노드에만 Pod를 만듭니다.
일반적으로 하나의 DaemonSet은 모든 노드에 하나의 디먼 형식을 배포하지만 여러 DaemonSets가 다른 레이블을 사용하여 하나의 디먼 형식을 제어하도록 할 수 있습니다. Kubernetes 레이블은 개별 노드의 특성에 따라 배포 규칙을 지정합니다.
DaemonSets를 사용하는 방법에 대한 자세한 내용은 Kubernetes DaemonSets를 참조 하세요.
DaemonSet 만들기
YAML 파일을 사용하여 DaemonSet을 설명한 다음, 또는 kubectl apply
명령(예kubectl create –f example-daemon.yaml
: )을 사용하여 kubectl create
만듭니다.
다음 예제에서는 nginx 이미지를 사용하는 DaemonSet 구성 파일의 기능을 설명합니다.
---
apiVersion: apps/v1
kind: DaemonSet
metadata:
labels:
app: nginx
name: example-daemon
spec:
template:
metadata: null
labels:
app: nginx
containers: null
name: nginx
image: nginx
DaemonSet의 현재 상태를 보려면 명령(예kubectl describe daemonset example-daemon
: )을 kubectl describe
사용합니다.
DaemonSet을 특정 노드로 제한
기본적으로 DaemonSets는 클러스터의 모든 노드에 Pod를 만들지만 노드 선택기를 사용하면 특정 노드에서만 Pod를 만들도록 구성할 수 있습니다. DaemonSet을 특정 노드로 제한하려면 이 명령을 사용합니다 kubectl label
.
DaemonSet 업데이트
명령을 사용하여 DaemonSet을 업데이트할 kubectl edit ds<NAME>
수 있습니다. 그러나 원래 구성 파일을 편집한 다음 처음 만들 때 명령을 사용하는 kubectl apply
것이 좋습니다. 업데이트를 적용한 후 명령을 사용하여 kubectl rollout status ds <daemonset-name>
업데이트 상태를 볼 수 있습니다.
DaemonSet 삭제
DaemonSet을 제거하려면 명령(예: kubectl delete –f example-daemon.yaml -n monitoring
)을 사용합니다kubectl delete
. DaemonSet을 삭제하면 배포된 모든 Pod가 정리되므로 DaemonSet 파일의 이름을 지정할 때는 주의해야 합니다.