📗 Docs

Desired State: 쿠버네티스는 클러스터를 어떻게 관리할까?

date
Jun 1, 2023
slug
kubernetes-cluster-management
author
status
Public
tags
Blog
DevOps
summary
Kubernetes(k8s) Desired State 알아보기
type
Post
thumbnail
k8s.png
category
📗 Docs
updatedAt
Jun 6, 2023 09:33 PM
 

 
이번 포스팅에서는 쿠버네티스의 Desired State에 대해서만 작성합니다 🙂
 

 

쿠버네티스(Kubernetes, k8s)

쿠버네티스(Kubernetes), 애칭 K8s,는 컨테이너화 된 애플리케이션을 대규모로 배포하고 관리하기 위한 오픈소스 플랫폼입니다. 오늘은 쿠버네티스에서 중요한 개념 중 하나인 'Desired State'에 대해 알아보겠습니다.

Desired State란?

쿠버네티스의 Desired State(원하는 상태)는 쿠버네티스 클러스터 내의 리소스(예: 파드, 디플로이먼트, 서비스 등)가 원하는 상태로 유지되도록 하는 개념입니다.
Desired State는 쿠버네티스의 핵심 원리 중 하나로, 클러스터 상태를 관리하고 유지하는 데 중요한 역할을 합니다.
Desired State는 사용자가 쿠버네티스에 선언하는 리소스의 구성이며, YAML이나 JSON 파일 형식으로 작성됩니다. 이 구성 파일에는 우리가 원하는 리소스의 수, 사용할 도커 이미지, 네트워크 정책, 볼륨 등 다양한 정보가 포함됩니다.

Desired State의 중요성

쿠버네티스의 핵심 기능 중 하나는 선언된 Desired State와 실제 시스템 상태를 일치시키는 것입니다.
이를 위해 쿠버네티스는 시스템의 현재 상태를 지속적으로 모니터링하고, 현재 상태가 Desired State와 일치하지 않으면 필요한 조치를 취해 두 상태를 일치시킵니다.
이런 과정을 '리콘실리에이션(Reconciliation)'이라고 부릅니다.
예를 들어, 쿠버네티스 디플로이먼트의 Desired State에서 파드의 개수를 5로 선언했다고 가정해봅시다. 그런데 어떤 문제로 인해 하나의 파드가 다운되면, 현재 상태는 4개의 파드로 바뀌게 됩니다. 이런 경우 쿠버네티스는 이 문제를 감지하고 새 파드를 생성하여 원래의 Desired State인 5개의 파드 상태로 복구합니다.
 

모니터링하는 리소스 항목

Pod

Pod는 쿠버네티스에서 가장 기본적인 배포 단위입니다. 하나 이상의 컨테이너가 포함되어 있으며, 이 컨테이너들은 항상 함께 배치되고 동일한 수명주기를 공유합니다. 쿠버네티스가 Pod의 Desired State를 모니터링 할 때, 주로 다음과 같은 항목들을 바라봅니다.
  1. Pod의 상태: Running, Pending, Succeeded, Failed 등 Pod의 현재 상태를 체크합니다.
  1. 컨테이너 이미지: Pod가 실행할 컨테이너 이미지가 올바른지 확인합니다.
  1. 리소스 요구사항: Pod가 요청한 CPU, 메모리 등의 리소스가 제대로 할당되었는지 확인합니다.

Deployment

Deployment는 쿠버네티스의 Pod를 관리하고, 업데이트를 자동화하는 리소스입니다. Deployment의 Desired State를 모니터링할 때, 쿠버네티스는 다음과 같은 항목들을 바라봅니다.
  1. 레플리카 수: 선언된 Desired State의 레플리카 수와 현재 실행 중인 Pod의 수가 일치하는지 확인합니다.
  1. Pod 템플릿: Deployment가 관리하는 Pod의 템플릿이 변경되었는지 확인하고, 필요한 경우 업데이트를 수행합니다.

Service

Service는 쿠버네티스에서 네트워크 트래픽을 관리하는 리소스입니다. 파드의 집합에 대한 단일 진입점을 제공하고, 서비스 디스커버리와 로드 밸런싱 기능을 제공합니다.
Service의 모니터링을 통해 네트워크 연결성, 로드 밸런싱, 서비스 디스커버리, 보안 및 안정성과 같은 측면에서 애플리케이션의 원활한 운영을 유지할 수 있습니다.
쿠버네티스가 Service의 Desired State를 모니터링할 때, 다음과 같은 항목들을 바라봅니다.
  1. 서비스 상태: Service의 상태를 모니터링하여 정상적으로 동작하는지 확인합니다. 서비스의 생성 및 삭제, IP 할당, 포트 바인딩 등의 상태를 확인합니다.
  1. 네트워크 연결성: Service에 대한 네트워크 연결성을 확인합니다. 서비스가 올바른 IP 주소와 포트로 요청을 수신하고, 파드로 트래픽을 전달하는지 확인합니다.
  1. 로드 밸런싱: 서비스가 트래픽을 파드로 고르게 분산하는지 확인합니다. 로드 밸런싱 알고리즘과 서비스 백엔드 파드의 상태를 모니터링하여 부하 분산과 장애 복구가 제대로 수행되는지 확인합니다.
  1. 서비스 디스커버리: 서비스 디스커버리 기능을 통해 다른 리소스가 서비스를 정상적으로 찾을 수 있는지 확인합니다. DNS 조회를 통해 서비스의 IP 주소와 포트를 확인하고, 서비스가 올바르게 연결되는지 확인합니다.
  1. 액세스 제어 및 보안: 서비스의 네트워크 액세스 제어 및 보안 설정을 모니터링합니다. 서비스에 대한 인바운드 및 아웃바운드 트래픽 제어, 인증 및 암호화 설정 등을 확인하여 보안 정책이 올바르게 적용되었는지 확인합니다.
  1. 엔드포인트: Service가 노출하는 Pod의 IP 주소와 포트를 관리하며, 이 엔드포인트가 최신 상태를 유지하는지 확인합니다. 서비스의 상태와 연결된 파드의 상태를 모니터링하여 엔드포인트가 올바르게 유지되고 트래픽이 파드로 제대로 전달되는지 확인합니다.
  1. 서비스 타입: 서비스는 클러스터 내부 또는 외부에서 액세스할 수 있도록 여러 가지 유형의 서비스 타입을 제공합니다. 서비스 타입은 서비스가 어떻게 노출되고 액세스되는지 결정합니다. 주요 서비스 타입으로는 ClusterIP, NodePort, LoadBalancer, ExternalName 등이 있습니다. 서비스 타입에 따라 포트 포워딩, 로드 밸런싱, 외부 IP 할당 등의 기능이 다르게 동작하므로, 해당 서비스 타입의 동작을 모니터링하여 올바른 네트워크 연결 및 서비스 유형이 유지되는지 확인합니다.

StatefulSet

StatefulSet은 쿠버네티스에서 상태를 가지는 애플리케이션을 관리하기 위한 리소스입니다. 여러 개의 파드를 생성하고 각각에 고유한 식별자와 네트워크 식별자를 부여하여 순차적으로 배치합니다. 필요한 경우 복제 및 복구 작업을 수행합니다.
StatefulSet을 모니터링할 때 다음과 같은 항목을 주로 바라봅니다.
  1. 파드 상태 및 순서: StatefulSet에 의해 생성된 파드의 상태를 확인하고, 순차적으로 배치되었는지 확인합니다. 각 파드의 준비 상태와 실행 여부를 모니터링하여 안정적인 상태인지 확인합니다.
  1. 스케일링 상태: StatefulSet의 스케일링 동작을 모니터링합니다. 새로운 파드가 생성되거나 기존 파드가 삭제되었는지 확인하여 원하는 파드 수와 일치하는지 확인합니다.
  1. 볼륨 상태: StatefulSet이 사용하는 볼륨의 상태를 확인합니다. 볼륨 마운트가 올바르게 수행되고, 데이터의 일관성과 지속성이 유지되는지 확인합니다.

CronJob

CronJob은 쿠버네티스에서 정기적인 또는 반복적인 작업을 실행하기 위한 리소스입니다. 지정된 일정에 따라 작업을 예약하고 실행합니다. 필요한 경우 작업을 재시작하거나 오류를 처리합니다.
CronJob을 모니터링할 때 주로 다음과 같은 항목을 주로 바라봅니다.
  1. 작업 예약 및 실행: CronJob이 지정된 일정에 따라 작업이 예약되고 실행되는지 확인합니다. 작업이 예상대로 예약되고, 성공적으로 실행되는지 확인합니다.
  1. 작업 상태 및 결과: 각 작업의 상태와 결과를 모니터링합니다. 작업이 성공적으로 완료되었는지, 실패한 경우 그 이유를 확인하고 대응합니다.
  1. 작업 로깅 및 알림: 작업의 로그를 모니터링하여 문제를 식별하고 디버깅에 도움을 줍니다. 또한 알림 시스템을 통해 작업의 성공 또는 실패와 같은 이벤트에 대한 알림을 받을 수 있습니다.
  1. 작업 이력 및 통계: CronJob의 이전 작업 이력과 실행 빈도 등을 모니터링하여 작업의 동작과 효율성을 평가합니다. 작업의 실행 시간, 소요 시간 등을 통계적으로 분석하고 최적화할 수 있습니다.
 
 
이처럼, Desired State는 쿠버네티스가 애플리케이션을 안정적으로 실행하고 관리하는 데 중요한 역할을 합니다. Desired State를 올바르게 설정하고 관리하면, 시스템의 안정성과 효율성을 크게 향상시킬 수 있습니다.
 
 

 

참고링크