SW/클라우드 서비스 아키텍처

Kubernetes 헬스 체크 설정 가이드

얇은생각 2024. 8. 5. 07:30
반응형

Kubernetes는 클라우드 환경에서 애플리케이션을 관리하고 배포하는 오픈 소스 컨테이너 오케스트레이션 플랫폼입니다. Kubernetes는 컨테이너화된 애플리케이션의 배포, 확장, 관리를 자동화하는 데 사용됩니다. 이 글에서는 Kubernetes 헬스 체크를 구성하는 방법, 프로브의 종류, 구현 방법 등에 대해 다룹니다.

 

 

Kubernetes 헬스 체크 설정 가이드

 

 

Kubernetes 프로브란?

Kubernetes 프로브는 Kubernetes 클러스터에서 애플리케이션과 서비스의 상태를 모니터링하는 헬스 체크입니다. 프로브는 애플리케이션이나 서비스에서 발생할 수 있는 잠재적인 문제를 감지하고 자원을 병목시키는 요인을 식별하는 데 사용됩니다. 프로브는 정기적으로 실행되며, 애플리케이션이나 서비스에 문제가 감지되면 Kubernetes 컨트롤 플레인에 신호를 보냅니다.

Kubernetes 프로브는 일반적으로 Kubernetes API를 사용하여 애플리케이션이나 서비스에 대한 정보를 쿼리합니다. 이 정보를 통해 애플리케이션이나 서비스의 상태를 판단할 수 있습니다. 또한, Kubernetes 프로브는 애플리케이션이나 서비스의 상태 변화를 감지하고, Kubernetes 컨트롤 플레인에 알림을 보내 필요한 조치를 취할 수 있도록 합니다. Kubernetes 프로브는 애플리케이션과 서비스가 원활하게 실행되도록 보장하는 데 중요한 역할을 합니다. 프로브는 잠재적인 문제를 신속하게 감지하여 심각한 문제로 발전하기 전에 해결할 수 있도록 도와줍니다.

 

 

Kubernetes 프로브 종류

Kubernetes 프로브는 다음과 같은 세 가지 종류가 있습니다:

  1. 스타트업 프로브(Startup Probes): 컨테이너가 성공적으로 시작되었는지 확인합니다.
  2. 레디니스 프로브(Readiness Probes): 컨테이너가 트래픽을 받을 준비가 되었는지 확인합니다.
  3. 라이브니스 프로브(Liveness Probes): 컨테이너가 여전히 실행 중이고 정상적으로 작동하는지 확인합니다.

 

 

스타트업 프로브

스타트업 프로브는 컨테이너가 성공적으로 시작되었는지 여부를 확인하는 데 사용됩니다. 이 프로브는 주로 시작하는 데 시간이 오래 걸리는 애플리케이션이나 트래픽을 받기 전에 초기화 작업을 수행하는 컨테이너에 사용됩니다. 스타트업 프로브는 컨테이너가 생성된 후 한 번만 실행되며, 성공할 때까지 레디니스와 라이브니스 프로브의 실행을 지연시킵니다. 스타트업 프로브가 실패하면 컨테이너는 시작에 실패한 것으로 간주되며, Kubernetes는 컨테이너를 재시작하려고 시도합니다.

 

 

레디니스 프로브

레디니스 프로브는 컨테이너가 트래픽을 받을 준비가 되었는지 여부를 확인하는 데 사용됩니다. 이 프로브는 컨테이너가 완전히 실행되고 있으며, 서비스 로드 밸런서에 추가되기 전에 수신 연결을 수락할 수 있는지 확인합니다. 레디니스 프로브는 애플리케이션의 종속성 가용성을 확인하거나 컨테이너가 트래픽을 처리할 준비가 되었는지 여부를 확인하는 데 사용될 수 있습니다. 레디니스 프로브가 실패하면, 컨테이너는 서비스 로드 밸런서에서 제거되며 프로브가 성공할 때까지 다시 추가되지 않습니다.

 

라이브니스 프로브

라이브니스 프로브는 컨테이너가 여전히 실행 중이고 정상적으로 작동하는지 여부를 확인하는 데 사용됩니다. 이 프로브는 컨테이너 충돌이나 중단을 감지하고 복구하는 데 사용됩니다. 라이브니스 프로브는 애플리케이션의 응답성을 확인하거나 컨테이너가 여전히 살아있고 건강한지 확인하는 데 사용될 수 있습니다. 라이브니스 프로브가 실패하면, Kubernetes는 컨테이너를 재시작하여 기능을 복원하려고 시도합니다.

각 프로브 유형은 체크할 엔드포인트, 프로브 간격, 성공 및 실패 임계값과 같은 고유한 구성 옵션을 가지고 있습니다. 이러한 프로브를 사용하면 Kubernetes는 컨테이너가 실행 중인지 여부를 확인하고, 컨테이너가 응답하지 않으면 적절한 조치를 취할 수 있습니다.

 

Kubernetes 프로브 구현 방법

Kubernetes 프로브는 여러 가지 방법으로 구현할 수 있습니다:

  1. Kubernetes API 사용: 애플리케이션이나 서비스의 정보를 쿼리하는 데 Kubernetes API를 사용합니다.
  2. HTTP 프로토콜 사용: 애플리케이션이나 서비스에 요청을 보내 응답성을 확인합니다.
  3. 커스텀 프로브 사용: 특정 조건을 감지하기 위해 커스텀 프로브를 사용합니다. 예를 들어, 자원 사용량, 느린 응답, 애플리케이션이나 서비스의 상태 변화를 감지할 수 있습니다.

 

프로브 유형을 결정한 후, Kubernetes API를 사용하여 프로브를 구성할 수 있습니다. 프로브의 빈도, 유형, 매개변수를 지정할 수 있습니다. 프로브가 구성되면 Kubernetes 클러스터에 배포할 수 있습니다.

이제 HTTP 프로토콜을 사용하여 애플리케이션의 상태를 확인하고, 애플리케이션이 시작, 준비, 실행 중인지 확인하는 방법을 살펴보겠습니다.

 

사전 요구 사항

  • 클라우드 제공업체의 Kubernetes 클러스터: Minikube 또는 Kind를 사용하여 싱글 노드 클러스터를 생성할 수도 있습니다.
  • Docker Desktop: 애플리케이션을 컨테이너화하는 데 사용합니다.
  • Docker Hub: 컨테이너 이미지를 Docker 레지스트리에 푸시합니다.
  • Node.js: 샘플 Node.js 애플리케이션을 사용합니다.

 

튜토리얼

  1. 샘플 애플리케이션 포크: 여기서 포크합니다.
  2. 애플리케이션 폴더로 이동:
cd Kubernetes-Probes-Tutorial

 

  1. 종속성 설치:
npm install

 

  1. 애플리케이션 로컬 실행:
node app.js

 

애플리케이션이 포트 3000에서 실행 중인 것을 확인할 수 있습니다.

 

 

애플리케이션 폴더에는 다음과 같은 Dockerfile이 있습니다:

# 기존 Node 이미지 사용
FROM node:14-alpine

# 컨테이너 작업 디렉터리 설정
WORKDIR /app

# package.json 및 package-lock.json 복사
COPY package*.json ./

# 필요한 패키지 설치
RUN npm install

# 모든 파일을 컨테이너로 복사
COPY . .

# 포트 3000 노출
EXPOSE 3000

# 애플리케이션 시작
CMD [ "npm", "start" ]

 

 

Dockerfile은 애플리케이션의 컨테이너 이미지를 생성하고 Docker Hub에 푸시합니다.

 

이미지를 빌드하고 Docker Hub에 푸시:

docker buildx build --platform=linux/arm64 --platform=linux/amd64  -t docker.io/사용자이름/이미지이름:태그 --push  -f ./Dockerfile .

 

 

Docker Hub 계정의 레지스트리에서 푸시된 이미지를 확인할 수 있습니다.

다음으로, 매니페스트 파일을 배포합니다. 애플리케이션 폴더에는 readiness liveness 프로브가 포함된 deployment.yaml 파일이 있습니다. YAML 파일에는 푸시된 이미지 이름이 포함되어 있습니다:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: notes-app-deployment
  labels:
    app: note-sample-app
spec:
  replicas: 2
  selector:
    matchLabels:
      app: note-sample-app
  template:
    metadata:
      labels:
        app: note-sample-app
    spec:
      containers:
      - name: note-sample-app-container
        image: pavansa/note-sample-app
        resources:
          requests:
            cpu: "100m"
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 3000
        readinessProbe:
          httpGet:
            path: /
            port: 3000
        livenessProbe:
          httpGet:
            path: /
            port: 3000
          initialDelaySeconds: 30
          periodSeconds: 10
          timeoutSeconds: 5

 

 

YAML 파일에 사용된 이미지와 구성된 헬스 체크를 확인할 수 있습니다.

 

 

헬스 체크 배포

클러스터가 실행 중이라면, 위의 매니페스트 파일을 다음 명령어로 배포할 수 있습니다:

kubectl apply -f deployment.yaml

 

 

"deployment.apps/notes-app-deployment created" 메시지가 출력되면 성공적으로 배포된 것입니다.

 

Pod 상태 확인

Pod가 실행 중인지 확인하려면 다음 명령어를 사용합니다:

kubectl get pods

 

 

Pod 설명:

kubectl describe pod notes-app-deployment-7fb6f5d74b-hw5fn

 

 

Pod를 설명할 때 "Liveness and Readiness" 상태를 확인할 수 있습니다.

 

 

이벤트 섹션 확인

이벤트 섹션을 확인하면 "scheduled," "pulled," "created," "started"와 같은 다양한 이벤트를 볼 수 있습니다. 모든 Pod 이벤트가 성공적으로 완료되었습니다.

 

결론

Kubernetes 프로브는 애플리케이션과 서비스가 원활하게 실행되도록 보장하는 중요한 요소입니다. 프로브를 사용하여 잠재적인 문제를 사전에 감지하고 신속하게 해결할 수 있습니다. Kubernetes 프로브에는 두 가지 주요 유형인 라이브니스 프로브와 레디니스 프로브가 있으며, 특정 조건을 감지하기 위한 커스텀 프로브도 사용할 수 있습니다. Kubernetes 프로브를 구현하는 과정은 간단하며, Kubernetes API를 사용하여 설정할 수 있습니다.

반응형