Kubernetes 모니터링이란 무엇인가요?

Kubernetes 모니터링 정의

Kubernetes 모니터링은 DevOps 및 IT 팀이 문제를 식별하고 복잡한 Kubernetes 클러스터를 사전 예방적으로 관리할 수 있도록 지원하는 보고 시스템입니다. 효과적인 Kubernetes 모니터링을 통해 컨테이너화된 인프라 전체를 실시간으로 관리할 수 있습니다. 메모리, CPU 및 저장 공간과 같은 클러스터 리소스 활용률과 가동 시간을 추적합니다. 또한 클러스터 구성 요소 상호 작용을 추적합니다.

Kubernetes 모니터링을 사용하면 클러스터 운영자가 기능을 모니터링할 수 있습니다. 필요한 포드 수가 실행되고 있지 않은 경우, 리소스 활용률이 심각한 한계에 도달한 경우, 장애 또는 구성 오류로 인해 포드 또는 노드가 클러스터에 조인할 수 없는 경우를 보고합니다.

Kubernetes 모니터링은 클러스터의 내부 상태, 리소스 수 및 성능 메트릭에 대한 인사이트를 제공합니다. 또한 사전 예방적인 경보 및 머신 러닝 기반 이상 징후 탐지를 통해 문제를 신속하게 발견하고 해결할 수 있도록 해줍니다. 적절한 Kubernetes 모니터링 도구가 Kubernetes 클러스터에서 생성되는 로그, 메트릭 및 추적을 통합 렌즈를 통해 봄으로써 Kubernetes 클러스터 및 클러스터에서 실행되는 애플리케이션의 상태를 이해하는 데 어떻게 도움이 될 수 있는지 자세히 알아보세요.

Kubernetes란 무엇인가요?

Kubernetes(K8s)는 소프트웨어 배포를 자동화하고, 확장하며, 컨테이너화된 애플리케이션을 관리하는 오픈 소스 컨테이너 오케스트레이션 시스템입니다. 원래 2014년에 Google에서 개발한 이 프로젝트는 현재 클라우드 네이티브 컴퓨팅 재단(CNCF)에서 유지관리하고 있습니다. Kubernetes는 컨테이너화된 애플리케이션 관리와 관련된 많은 수동 프로세스를 제거합니다. 컨테이너 오케스트레이션은 개별 컨테이너를 응집력 있고 조정된 전체로 결합합니다.

Kubernetes는 자체 관리형 시스템뿐만 아니라 다양한 클라우드 플랫폼에 배포하여 IT 및 DevOps 팀의 효율성을 높일 수 있습니다. AWS, Google 및 Azure와 같은 많은 클라우드 서비스 제공자는 사용자에게 일부 형태의 관리형 Kubernetes 서비스를 추가로 제공합니다. Kubernetes는 여러 호스트에 걸쳐 컨테이너를 오케스트레이션하여 다음과 같은 작업을 할 수 있도록 해줍니다.

  • 앱 실행에 필요한 리소스 극대화
  • 애플리케이션 배포 및 업데이트 자동화
  • 컨테이너형 애플리케이션의 신속한 확장
  • 의도한 대로 애플리케이션이 실행되도록 서비스 관리

Kubernetes 모니터링이 중요한 이유는 무엇인가요?

Kubernetes 모니터링에는 호스트, 컨테이너, 컨테이너화된 앱 및 Kubernetes 플랫폼 자체를 포함한 많은 더 작은 구성 요소가 포함됩니다. 문제가 발생하면, 원인을 정확히 파악하기 어려울 수 있습니다. 적절한 Kubernetes 모니터링을 통해 문제가 발생하고 있거나 발생하려는 위치를 확인하고 조치를 취할 수 있습니다.

Kubernetes 모니터링 솔루션은 클러스터, 배포, 포드, 노드 및 컨테이너에 대한 실행 가능한 보고 및 인사이트를 제공할 수도 있습니다. 또한 팀이 보안 또는 성능 이벤트에 신속하게 대응할 수 있도록 경보를 구성할 수 있습니다. 수집된 데이터를 통해 클러스터의 상태, 성능 및 보안 구성을 최적화할 수 있습니다. 이는 리소스 활용률과 비용 절감으로 이어집니다.

Kubernetes 모니터링을 통해 다음을 수행할 수 있습니다.

  • 팀 또는 애플리케이션이 리소스를 최적으로 사용하도록 보장
  • 새 노드가 클러스터에 조인할 때 자동으로 새 리소스 활용
  • 호스트가 다운될 때 워크로드를 사용 가능한 노드로 다시 배포
  • 업데이트 및 롤백 프로비저닝 효율성 향상

Kubernetes 모니터링 방법

Kubernetes를 모니터링하려면 다음이 필요합니다.

  • 클러스터에서 실행 중인 메트릭 서버
  • 켜져 있는 Kube-state-metrics
  • 배포된 수집 메커니즘
  • Kubernetes 메트릭 및 로그를 처리할 수 있는 Kubernetes 모니터링 도구
    전체 환경을 완벽하게 파악하기 위해, 종합적인 Observability 도구를 사용하여 Kubernetes 데이터는 물론 애플리케이션 추적, 메트릭 및 로그를 모니터링할 수 있습니다.
  • 메트릭 및 로그 수집을 위해 배포된 에이전트
    많은 Kubernetes 모니터링 솔루션은 프로비저닝이 비교적 쉽기 때문에 DaemonSet 접근 방식을 사용합니다. DaemonSet는 워크로드의 복사본이 클러스터 내의 모든 노드에서 실행되도록 보장하는 특수 포드입니다. 개발자는 성능 메트릭을 수집하기 위해 클러스터의 각 노드에서 모니터링 에이전트를 실행하는 DaemonSet를 생성할 수 있습니다.

Kubernetes 모니터링 사용 사례의 주요 메트릭은 무엇인가요?

Kubernetes 모니터링의 주요 메트릭은 컨트롤 플레인, 노드, 포드 및 컨테이너입니다.

  • Kubernetes 컨트롤 플레인 메트릭은 클러스터의 성능을 전체적으로 이해하는 데 도움이 됩니다. 그 핵심에는 다음과 같은 요소들을 관찰할 수 있도록 해주는 kube-apiserver가 있습니다.
    • Etcd: 모든 클러스터 데이터를 위한 Kubernetes의 백업 저장소로 사용되는 일관되고 가용성이 높은 키 값 저장소입니다.
    • Kube-scheduler: 새 포드를 적절한 노드에 바인딩하기 전에 사용 가능한 각 노드를 평가하기 위해 대기열에 추가하여 새 포드를 배치할 위치를 결정하는 스케줄링 프로세스입니다.
    • Kube-controller-manager: 모든 컨트롤러를 단일 프로세스로 결합하고 이를 함께 실행하여 복잡성을 줄이는 구성 요소입니다.
    • Cloud-controller-manager: 클라우드 서비스 제공자 리소스와 상호 작용하고 클러스터를 클라우드 서비스 제공자의 API에 연결할 수 있는 컨트롤러입니다.
  • Kubernetes 노드 메트릭은 전체 Kubernetes 클러스터의 성능을 모니터링합니다. 여기에는 사용된 리소스 수, 각 노드에서 실행 중인 애플리케이션 수 및 노드가 제대로 작동하고 있는지 여부가 포함됩니다. 디스크 및 메모리 활용률, CPU, 네트워크 대역폭과 같은 노드 리소스 사용 메트릭을 찾아보세요. 각 노드에는 다음 요소가 포함됩니다.
    • Kubelet: 클러스터의 각 노드에서 실행되는 에이전트입니다. 컨테이너가 포드에서 실행되고 있는지 확인합니다.
    • Kube-proxy: 클러스터의 각 노드에서 실행되는 네트워크 프록시로, Kubernetes Service 개념의 일부를 구현합니다.
    • 컨테이너 런타임: 컨테이너를 실행하는 소프트웨어로, 컨테이너 엔진이라고도 합니다.
  • Kubernetes 컨테이너 메트릭을 사용하면 컨테이너 CPU 사용량, 컨테이너 메모리 사용률 및 네트워크 사용량에 대한 메트릭을 포함하여 구성한 리소스 제한과 비교되는 위치를 평가할 수 있습니다.
  • Kubernetes 포드 메트릭을 통해 배포의 모든 포드가 제대로 실행되고 있는지 알 수 있습니다. 애플리케이션 메트릭은 가동 시간 및 응답 시간, 응답성 및 대기 시간과 같은 요소를 포함하여 Kubernetes 포드 내에서 실행되는 애플리케이션의 성능 및 가용성에 대해 알려줍니다.

Kubernetes cluster visualization including a control plane, nodes, pods, and containers

Kubernetes 모니터링의 어려움

기존 애플리케이션을 Kubernetes로 마이그레이션하는 데 시간이 많이 걸릴 수 있습니다. Kubernetes는 컨테이너에서 그리고 클라우드 간의 애플리케이션 배포를 단순화할 수 있지만, 그 복잡성으로 인해 고유한 어려움이 발생합니다.

Kubernetes 컨테이너 오케스트레이션은 동적 자동화 기능을 제공합니다. 따라서, 개별 구성 요소를 검사하고 경보를 활성화하기 위해 동일한 동적 모니터링 시스템이 필요합니다. 컨테이너화된 동적 환경에서 실행 중인 애플리케이션이 야기하는 고유한 모니터링 어려움 중 하나는 그 복잡성입니다. 수천 개의 컨테이너에서 임시 일회용 포드로 실행되는 수백 개의 마이크로서비스로 문제를 어떻게 진단하고 해결하시나요?

Kubernetes 모니터링 모범 사례

Kubernetes 모니터링 모범 사례는 노드가 동일한 위치에 배포되었는지, 클라우드 전반에 배포되었는지, 하이브리드 클라우드에 배포되었는지에 관계없이 일관됩니다. 메트릭 수집은 전체 클러스터에서 동일한 방식으로 수행되어야 합니다. 다음은 Kubernetes 모니터링에서 고려해야 할 몇 가지 유용한 모범 사례입니다.

  • 네임스페이스를 사용하여 클러스터를 구성하고, 컨테이너 관리를 단순화하며, 위험을 최소화합니다.
  • 새로운 기능, 버그 수정 및 보안 패치를 위해 Kubernetes의 최신 버전으로 업그레이드합니다.
  • 자동 모니터링을 설정하여 Kubernetes 경보를 이해합니다.
  • 역할 기반 액세스 제어(RBAC)를 설정하여 사용자 및 서비스 계정에 대한 권한 및 액세스를 관리합니다.
  • 클러스터 관리자에게 보내는 푸시 알림을 설정하고 특정 문제 해결을 담당하는 팀을 정의합니다.
  • 레이블을 사용하여 클러스터를 구성하고 개체를 정의 및 관리합니다.
  • 간소화된 Git 기반 워크플로우를 설정하여 오류를 줄입니다.

가장 성공적인 Kubernetes 모니터링 솔루션은 다음 요건을 충족합니다.

  • 기술 스택의 모든 계층을 모니터링합니다. 모든 호스트 시스템(클러스터 내의 Kubernetes 핵심 구성 요소, 노드, 포드 및 컨테이너)과 모든 애플리케이션 및 서비스를 추적해야 합니다.
  • 동적으로 나타나는 서비스를 자동으로 탐지 및 모니터링합니다.
  • 관련 메트릭, 로그, 추적 및 기타 Observability 데이터를 그룹화하고 탐색할 수 있도록 데이터를 수집하고 상관 관계를 분석하는 방법을 제공합니다.
  • Prometheus 및 OpenTelemetry와 같은 개방형 표준과 통합하여 추가 메트릭을 수집합니다.

다음은 Elasticsearch와 OpenTelemetry를 사용하여 Kubernetes에서 애플리케이션 및 서비스 워크플로우를 관찰하고 보안을 유지하기 위한 몇 가지 모범 사례입니다.

Kubernetes와 Docker 비교

Kubernetes는 컨테이너화된 애플리케이션을 규모에 맞게 운영하기 때문에 Docker와 다릅니다. Docker는 개별 컨테이너를 빌드, 공유 및 실행할 수 있는 소프트웨어 개발 도구 세트입니다.

Docker는 단일 API를 통한 간단한 명령 및 자동화 기능을 갖춘 클라이언트-서버 아키텍처를 사용합니다. 컨테이너화된 애플리케이션을 쉽게 패키지화하고 배포할 수 있는 방법을 제공합니다.

Docker로 빌드된 컨테이너 이미지는 Kubernetes 또는 Docker Swarm과 같은 컨테이너를 지원하는 플랫폼에서 실행될 수 있습니다. Kubernetes는 Docker보다 여러 서버 및 클러스터에서 방대한 양의 컨테이너를 실행, 관리, 스케줄링 및 오케스트레이션하는 데 더 적합합니다. Kubernetes는 대부분의 대기업에서 상태를 모니터링하고 로드 밸런싱을 효율적으로 수행하기 위해 선호됩니다.

결정적으로, Kubernetes는 운영을 자동화할 수 있는 API와 명령줄 도구를 제공합니다. Kubectl은 컨테이너 관리를 크게 단순화합니다. Kubernetes는 Docker 컨테이너 런타임을 포함하여 많은 컨테이너 런타임에서 컨테이너를 실행하고 관리하기 위한 플랫폼입니다. 다양한 요소를 자동으로 관리할 수 있는 기능은 Kubernetes를 특히 유연하게 만듭니다. 안정성을 통해 IT 팀의 시간을 절약하고 전체 워크플로우를 간소화할 수 있습니다.

Kubernetes 모니터링 대시보드

웹 기반 Kubernetes에는 리소스와 노드에 대한 개요를 개별적으로 그리고 클러스터 차원에서 제공하는 복잡하지 않은 대시보드가 있습니다. 컨테이너화된 애플리케이션을 배포하고, 리소스를 관리하고, 문제를 해결하는 간단한 방법입니다.

아래에 나와 있는 Elastic의 기본 제공 대시보드에는 클러스터의 모든 네임스페이스와 정의된 저장 공간 클래스가 포함되어 있습니다. 모든 노드, 네임스페이스 및 영구 저장 공간 볼륨을 나열하는 개요도 여기에 포함됩니다. 이 대시보드는 상세하고 집계된 노드 메트릭으로 완성됩니다.

클러스터된 각 애플리케이션에 대한 영구 볼륨 클레임과 클러스터에서 실행 중인 모든 Kubernetes 리소스의 전체 보기를 볼 수 있습니다. 또한 선택한 네임스페이스에서 실행 중인 모든 애플리케이션, 현재 포드 메모리 사용량, 배포 또는 ReplicaSet를 위한 준비된 포드 수도 표시됩니다.

Kubernetes monitoring dashboard

Elastic을 이용한 Kubernetes 모니터링

Elastic Observability를 사용하면, Kubernetes 클러스터의 로그, 메트릭 및 추적과 이 클러스터에서 실행되는 워크로드를 하나의 통합 플랫폼으로 가져올 수 있습니다. 이를 통해 애플리케이션 서비스의 문제를 효과적으로 식별할 수 있습니다. Kubernetes 클러스터의 메트릭 및 로그를 Elastic의 머신 러닝 기반 이상 징후 탐지와 함께 사용하여 데이터 분석 시간을 줄일 수 있습니다.

Elastic의 Kubernetes 모니터링 솔루션은 타의 추종을 불허하는 일련의 기능으로 Kubernetes 에코시스템에 대한 실시간 가시성을 제공합니다. Elastic Stack을 기반으로 구축된 Observability 솔루션을 사용하면 Kubernetes 아키텍처를 원활하게 배포하고 운영할 수 있습니다. 로그, 메트릭 및 APM 추적을 단일 보기에서 규모에 맞게 통합함으로써, 고도로 분산된 클라우드 네이티브 애플리케이션의 복잡성을 효과적으로 제어할 수 있습니다. 또한 클라우드 네이티브 기술 스택 및 클라우드 모니터링에 대한 실행 가능한 Observability 기능을 제공합니다. 이를 통해 광범위한 하이브리드 및 멀티 클라우드 에코시스템의 문제를 사전에 감지하고 해결할 수 있습니다.

Kubernetes 모니터링 솔루션 살펴보기

Kubernetes 모니터링 용어집

다음은 참고하실 몇 가지 핵심 Kubernetes 용어입니다.

클러스터
노드라고 하는 컨테이너화된 애플리케이션을 실행하는 워커 머신들의 집합입니다. 모든 클러스터에는 하나 이상의 워커 노드가 있습니다.

노드
노드는 Kubernetes에 있는 워커 머신입니다.

  • 마스터(노드)
    컨트롤 플레인을 호스팅하는 노드와 동의어로 사용되는 레거시 용어입니다.
  • 워커(노드)
    워커 노드는 애플리케이션 워크로드의 구성 요소인 포드를 호스팅합니다.

포드
가장 작고 간단한 Kubernetes 개체입니다. 포드는 클러스터에서 실행 중인 컨테이너 집합을 나타냅니다.

컨테이너
소프트웨어와 모든 종속성이 포함된 경량의 이식 가능 실행 파일 이미지입니다.

컨트롤러
Kubernetes에서, 컨트롤러는 클러스터의 상태를 모니터링한 다음 필요한 경우 변경을 하거나 요청하는 제어 루프입니다. 각 컨트롤러는 현재 클러스터 상태를 원하는 상태에 더 가깝게 옮기려고 시도합니다.

Kubelet
클러스터의 각 노드에서 실행되는 에이전트입니다. 컨테이너가 포드에서 실행되고 있는지 확인합니다.

Kube-proxy
클러스터의 각 노드에서 실행되는 네트워크 프록시로, Kubernetes Service 개념의 일부를 구현합니다.

Etcd
모든 클러스터 데이터를 위한 Kubernetes의 백업 저장소로 사용되는 일관되고 가용성이 높은 키 값 저장소입니다.

인그레스
클러스터(일반적으로 HTTP)의 서비스에 대한 외부 액세스를 관리하는 API 개체입니다. 인그레스(Ingress)는 로드 밸런싱, SSL 종료 및 이름 기반 가상 호스팅을 제공할 수 있습니다.