Kubernetes는 클라우드 환경에서 애플리케이션을 관리하고 배포하는 오픈 소스 컨테이너 오케스트레이션 플랫폼입니다. Kubernetes는 컨테이너화된 애플리케이션의 배포, 확장, 관리를 자동화하는 데 사용됩니다. 이 글에서는 Kubernetes 헬스 체크를 구성하는 방법, 프로브의 종류, 구현 방법 등에 대해 다룹니다.
Kubernetes 프로브란?
Kubernetes 프로브는 Kubernetes 클러스터에서 애플리케이션과 서비스의 상태를 모니터링하는 헬스 체크입니다. 프로브는 애플리케이션이나 서비스에서 발생할 수 있는 잠재적인 문제를 감지하고 자원을 병목시키는 요인을 식별하는 데 사용됩니다. 프로브는 정기적으로 실행되며, 애플리케이션이나 서비스에 문제가 감지되면 Kubernetes 컨트롤 플레인에 신호를 보냅니다.
Kubernetes 프로브는 일반적으로 Kubernetes API를 사용하여 애플리케이션이나 서비스에 대한 정보를 쿼리합니다. 이 정보를 통해 애플리케이션이나 서비스의 상태를 판단할 수 있습니다. 또한, Kubernetes 프로브는 애플리케이션이나 서비스의 상태 변화를 감지하고, Kubernetes 컨트롤 플레인에 알림을 보내 필요한 조치를 취할 수 있도록 합니다. Kubernetes 프로브는 애플리케이션과 서비스가 원활하게 실행되도록 보장하는 데 중요한 역할을 합니다. 프로브는 잠재적인 문제를 신속하게 감지하여 심각한 문제로 발전하기 전에 해결할 수 있도록 도와줍니다.
Kubernetes 프로브 종류
Kubernetes 프로브는 다음과 같은 세 가지 종류가 있습니다:
- 스타트업 프로브(Startup Probes): 컨테이너가 성공적으로 시작되었는지 확인합니다.
- 레디니스 프로브(Readiness Probes): 컨테이너가 트래픽을 받을 준비가 되었는지 확인합니다.
- 라이브니스 프로브(Liveness Probes): 컨테이너가 여전히 실행 중이고 정상적으로 작동하는지 확인합니다.
스타트업 프로브
스타트업 프로브는 컨테이너가 성공적으로 시작되었는지 여부를 확인하는 데 사용됩니다. 이 프로브는 주로 시작하는 데 시간이 오래 걸리는 애플리케이션이나 트래픽을 받기 전에 초기화 작업을 수행하는 컨테이너에 사용됩니다. 스타트업 프로브는 컨테이너가 생성된 후 한 번만 실행되며, 성공할 때까지 레디니스와 라이브니스 프로브의 실행을 지연시킵니다. 스타트업 프로브가 실패하면 컨테이너는 시작에 실패한 것으로 간주되며, Kubernetes는 컨테이너를 재시작하려고 시도합니다.
레디니스 프로브
레디니스 프로브는 컨테이너가 트래픽을 받을 준비가 되었는지 여부를 확인하는 데 사용됩니다. 이 프로브는 컨테이너가 완전히 실행되고 있으며, 서비스 로드 밸런서에 추가되기 전에 수신 연결을 수락할 수 있는지 확인합니다. 레디니스 프로브는 애플리케이션의 종속성 가용성을 확인하거나 컨테이너가 트래픽을 처리할 준비가 되었는지 여부를 확인하는 데 사용될 수 있습니다. 레디니스 프로브가 실패하면, 컨테이너는 서비스 로드 밸런서에서 제거되며 프로브가 성공할 때까지 다시 추가되지 않습니다.
라이브니스 프로브
라이브니스 프로브는 컨테이너가 여전히 실행 중이고 정상적으로 작동하는지 여부를 확인하는 데 사용됩니다. 이 프로브는 컨테이너 충돌이나 중단을 감지하고 복구하는 데 사용됩니다. 라이브니스 프로브는 애플리케이션의 응답성을 확인하거나 컨테이너가 여전히 살아있고 건강한지 확인하는 데 사용될 수 있습니다. 라이브니스 프로브가 실패하면, Kubernetes는 컨테이너를 재시작하여 기능을 복원하려고 시도합니다.
각 프로브 유형은 체크할 엔드포인트, 프로브 간격, 성공 및 실패 임계값과 같은 고유한 구성 옵션을 가지고 있습니다. 이러한 프로브를 사용하면 Kubernetes는 컨테이너가 실행 중인지 여부를 확인하고, 컨테이너가 응답하지 않으면 적절한 조치를 취할 수 있습니다.
Kubernetes 프로브 구현 방법
Kubernetes 프로브는 여러 가지 방법으로 구현할 수 있습니다:
- Kubernetes API 사용: 애플리케이션이나 서비스의 정보를 쿼리하는 데 Kubernetes API를 사용합니다.
- HTTP 프로토콜 사용: 애플리케이션이나 서비스에 요청을 보내 응답성을 확인합니다.
- 커스텀 프로브 사용: 특정 조건을 감지하기 위해 커스텀 프로브를 사용합니다. 예를 들어, 자원 사용량, 느린 응답, 애플리케이션이나 서비스의 상태 변화를 감지할 수 있습니다.
프로브 유형을 결정한 후, Kubernetes API를 사용하여 프로브를 구성할 수 있습니다. 프로브의 빈도, 유형, 매개변수를 지정할 수 있습니다. 프로브가 구성되면 Kubernetes 클러스터에 배포할 수 있습니다.
이제 HTTP 프로토콜을 사용하여 애플리케이션의 상태를 확인하고, 애플리케이션이 시작, 준비, 실행 중인지 확인하는 방법을 살펴보겠습니다.
사전 요구 사항
- 클라우드 제공업체의 Kubernetes 클러스터: Minikube 또는 Kind를 사용하여 싱글 노드 클러스터를 생성할 수도 있습니다.
- Docker Desktop: 애플리케이션을 컨테이너화하는 데 사용합니다.
- Docker Hub: 컨테이너 이미지를 Docker 레지스트리에 푸시합니다.
- Node.js: 샘플 Node.js 애플리케이션을 사용합니다.
튜토리얼
- 샘플 애플리케이션 포크: 여기서 포크합니다.
- 애플리케이션 폴더로 이동:
cd Kubernetes-Probes-Tutorial
- 종속성 설치:
npm install
- 애플리케이션 로컬 실행:
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를 사용하여 설정할 수 있습니다.
'SW > 클라우드 서비스 아키텍처' 카테고리의 다른 글
Kubernetes의 장점과 단점: 애플리케이션 배포 시 고려해야 할 요소 (0) | 2024.08.20 |
---|---|
NetSuite 데이터 통합: 효과적인 전략과 실무 가이드 (0) | 2024.08.18 |
클라우드에서 Docker 컨테이너 실행하기: 상위 5개의 CaaS 솔루션 (0) | 2024.07.24 |
클라우드에서 Docker 컨테이너 실행 방법: 상위 5개의 CaaS 솔루션 (0) | 2024.07.17 |
Apache Airflow와 Airbyte를 활용한 데이터 통합 및 자동화 동기화 가이드 (0) | 2024.05.31 |