Kubernetes는 컨테이너화된 애플리케이션의 배포, 확장 및 관리를 자동화하는 오픈 소스 플랫폼입니다. 이 시스템의 핵심 구성 요소 중 하나가 바로 kubelet입니다. kubelet은 Kubernetes 클러스터 내에서 각 노드에서 실행되며, 컨테이너의 라이프사이클을 관리하고 Pod의 상태를 유지하는 역할을 합니다. 이번 글에서는 kubelet의 기능, 작동 원리, 그리고 주요 설정 키에 대해 자세히 살펴봅니다.
kubelet이란 무엇인가?
kubelet은 각 노드에서 실행되는 에이전트로, Kubernetes 마스터로부터 Pod 사양을 수신하고 이를 실행하는 역할을 합니다. kubelet은 컨테이너 런타임과 상호 작용하여 컨테이너를 생성하고 관리하며, Pod와 컨테이너의 상태를 지속적으로 모니터링합니다. 또한, kubelet은 API 서버에 노드와 Pod의 상태를 보고하여 클러스터의 상태를 유지합니다.
kubelet의 주요 기능
- Pod 관리:
- kubelet은 특정 노드에서 실행되어야 할 Pod의 상태를 지속적으로 모니터링합니다.
- Pod의 상태가 사양과 일치하는지 확인하고, 필요한 경우 Pod를 시작하거나 재시작합니다.
- 컨테이너 런타임 통합:
- kubelet은 Docker, containerd 등과 같은 다양한 컨테이너 런타임과 통합되어 작동합니다.
- CRI (Container Runtime Interface)를 사용하여 다양한 컨테이너 런타임과 호환됩니다.
- 헬스 체크:
- kubelet은 Liveness Probe와 Readiness Probe를 통해 컨테이너의 상태를 주기적으로 확인합니다.
- 문제가 발생하면 컨테이너를 재시작하거나 다른 조치를 취합니다.
- 로그와 모니터링:
- kubelet은 각 Pod의 로그를 수집하고, 모니터링 도구와 통합하여 시스템의 상태를 보고합니다.
- 노드 상태 관리:
- kubelet은 노드의 리소스 사용량(CPU, 메모리 등)을 모니터링하고, 이를 API 서버에 보고합니다.
- 이를 통해 클러스터의 자원 관리가 원활하게 이루어집니다.
kubelet-config에 설정되는 주요 key 및 default 값
kubelet의 설정은 보통 /etc/kubernetes/kubelet-config.yaml 파일에 저장되며, 이 파일에는 다양한 설정 키가 포함됩니다. 여기서는 Kubernetes 공식 문서에 기재된 주요 설정 키와 그 기본값을 요약하여 소개합니다.
(*특히 노드 설정과 관련된 키를 중심으로 설명합니다.)
- address:
- 기본값: 0.0.0.0
- 설명: kubelet이 수신할 IP 주소를 지정합니다. 기본적으로 모든 인터페이스에서 요청을 수신합니다.
- authentication.anonymous.enabled:
- 기본값: true
- 설명: 익명 요청을 허용할지 여부를 설정합니다. 보안을 위해 false로 설정하는 것이 좋습니다.
- authentication.webhook.enabled:
- 기본값: false
- 설명: 웹훅을 사용하여 kubelet의 인증 요청을 검증할지 여부를 결정합니다.
- authentication.x509.clientCAFile:
- 기본값: ""
- 설명: 클라이언트 인증서 확인을 위한 CA 파일 경로를 지정합니다.
- authorization.mode:
- 기본값: AlwaysAllow
- 설명: kubelet의 권한 부여 모드를 설정합니다. Webhook 또는 AlwaysAllow로 설정할 수 있습니다.
- cgroupDriver:
- 기본값: "cgroupfs"
- 설명: 컨테이너 런타임에 사용할 cgroup 드라이버를 지정합니다. 일반적으로 cgroupfs 또는 systemd로 설정됩니다.
- clusterDNS:
- 기본값: []
- 설명: 클러스터 내 DNS 서버의 IP 주소를 지정합니다. Pod 내에서 DNS 해석을 위해 사용됩니다.
- clusterDomain:
- 기본값: ""
- 설명: 클러스터 도메인을 지정합니다. 클러스터 내에서 DNS 이름 해석을 위해 사용됩니다.
- rotateCertificates:
- 기본값: false
- 설명: kubelet이 자체 인증서를 자동으로 회전할지 여부를 설정합니다.
- serverTLSBootstrap:
- 기본값: false
- 설명: kubelet 서버의 TLS 인증서를 부트스트랩할지 여부를 설정합니다.
- failSwapOn:
- 기본값: true
- 설명: 스왑이 활성화된 경우 kubelet이 실패할지 여부를 설정합니다. Kubernetes는 스왑을 비활성화하는 것을 권장합니다.
- imageGCHighThresholdPercent:
- 기본값: 85
- 설명: 디스크 사용량이 이 퍼센트를 초과하면 이미지 GC(Image Garbage Collection)가 시작됩니다.
- imageGCLowThresholdPercent:
- 기본값: 80
- 설명: 이미지 GC가 완료된 후 디스크 사용량이 이 퍼센트 아래로 떨어집니다.
- maxPods:
- 기본값: 110
- 설명: 각 노드에서 실행될 수 있는 최대 Pod 수를 설정합니다.
- evictionHard:
- 기본값: { "memory.available": "100Mi" }
- 설명: 리소스가 부족할 때 Pod를 퇴출(evict)하는 기준을 설정합니다.
결론
kubelet은 Kubernetes 클러스터 내에서 중요한 역할을 하는 구성 요소로, 각 노드에서 Pod와 컨테이너를 관리하고 상태를 유지하는 데 필수적입니다. kubelet의 다양한 설정 옵션을 이해하고 적절하게 구성하는 것은 클러스터의 안정성과 성능을 보장하는 데 중요한 요소입니다.
이 글에서는 kubelet의 주요 기능과 설정 파일의 주요 키 및 기본값에 대해 알아 보았습니다.
kubelet 설정을 최적화하여 Kubernetes 클러스터를 효과적으로 운영하는 것이 쿠버네티스 운영에 중요합니다.
'IT > Kubernetes_k8s' 카테고리의 다른 글
Nginx Ingress Controller의 개념 (0) | 2024.08.14 |
---|---|
Ingress NGINX에서 간헐적인 502 오류 해결하기 (0) | 2024.08.02 |
Kubernetes Ingress 컨트롤러 502 에러 대응안 (2) | 2024.07.24 |
k9s: Kubernetes CLI 대시보드 설정 및 사용법 (5) | 2024.07.23 |
docker_nginx 기동 (0) | 2023.03.06 |