안녕하세요! 오늘은 쿠버네티스의 Liveness Probe(라이브니스 프로브)에 대해 알아보고, 실습 자료까지 함께 진행해보겠습니다.
먼저, 라이브니스 프로브(Liveness Probe)란 무엇일까요?
라이브니스 프로브는 쿠버네티스에서 컨테이너가 제대로 작동하고 있는지를 감시하는 기능입니다. 즉, 컨테이너가 살아 있는지(health check)를 주기적으로 확인하는 역할을 합니다. 만약 컨테이너가 응답하지 않거나 비정상적인 상태가 되면, 쿠버네티스가 자동으로 그 컨테이너를 리스타트합니다.
라이브니스 프로브는 쿠버네티스의 셀프힐링 기능을 이루는 중요한 요소 중 하나입니다. 쿠버네티스는 라이브니스 프로브를 통해, 항상 건강한 컨테이너만이 서비스를 제공하도록 합니다.
서버 환경에서 애플리케이션이 죽거나 응답하지 않는 상태가 되면, 사용자는 해당 서비스에 접속할 수 없게 됩니다. 라이브니스 프로브는 이런 상황을 방지합니다. 만약 컨테이너가 죽어도 쿠버네티스가 이를 자동으로 인식하고, 컨테이너를 다시 시작하여 정상적인 상태로 돌려놓습니다.
Liveness Probe는 세 가지 방식으로 컨테이너의 상태를 확인할 수 있습니다:
예를 들어, 웹서버가 제대로 작동하고 있는지 확인하려면 HTTP GET 요청을 주기적으로 보내서 200 OK 응답을 받는지 확인할 수 있습니다. 만약 200 OK가 오지 않으면 컨테이너는 비정상 상태로 간주되어 재시작됩니다.
이제 직접 실습을 통해 Liveness Probe를 설정해보겠습니다. 엔진엑스(nginx) 웹 서버에 라이브니스 프로브를 설정해서, 이 웹서버가 정상적으로 동작하는지 확인하는 방법을 배워볼게요.
먼저, 엔진엑스(nginx) 파드에 라이브니스 프로브를 설정하는 YAML 파일을 작성해보겠습니다.
apiVersion: v1
kind: Pod
metadata:
name: nginx-liveness
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
livenessProbe:
httpGet:
path: /
port: 80
initialDelaySeconds: 10
periodSeconds: 5
위 YAML 파일을 사용해 파드를 생성합니다. 명령어는 다음과 같습니다.
kubectl apply -f nginx-liveness.yaml
이 명령을 실행하면, nginx-liveness라는 이름의 파드가 생성됩니다.
파드가 생성되었으면, 이제 라이브니스 프로브가 정상적으로 작동하는지 확인해볼 수 있습니다. kubectl describe pod 명령어로 상태를 확인할 수 있습니다.
kubectl describe pod nginx-liveness
파드가 정상적인 상태에서 실행 중인지, 혹은 문제가 있어서 재시작되었는지를 확인할 수 있습니다.
이제 의도적으로 엔진엑스 웹서버가 응답하지 않도록 해서 라이브니스 프로브가 제대로 작동하는지 확인해보겠습니다. 만약 웹서버가 응답하지 않으면, 쿠버네티스가 이를 감지하고 자동으로 파드를 리스타트할 것입니다.
먼저, nginx 웹서버를 멈추기 위해 다음 명령어를 사용해 보겠습니다.
kubectl exec -it nginx-liveness -- /bin/bash
그 후, 컨테이너 내부에서 nginx 프로세스를 종료합니다:
nginx -s stop
이제 라이브니스 프로브가 정상적으로 재시작을 트리거하는지 kubectl get pod 명령어로 파드 상태를 모니터링해보세요.
Liveness Probe는 컨테이너의 건강 상태를 모니터링하여, 컨테이너가 비정상적인 상태에 빠지면 이를 자동으로 복구하는 중요한 기능입니다. 주기적인 HTTP 요청이나 TCP 소켓 연결, 또는 명령어 실행을 통해 컨테이너의 상태를 확인할 수 있습니다.
이를 통해 항상 건강한 컨테이너만이 애플리케이션 서비스를 제공하게 되어, 시스템의 안정성과 가용성을 높일 수 있습니다.
이 강의를 통해 Liveness Probe를 이해하고, 직접 설정해보셨기를 바랍니다!