DevOps/k8s

[K8s]LivenessProbe 실습할 때 생길 수 있는 트러블 슈팅

Sophie소피 2023. 7. 27. 19:13

간단한 Flask 어플리케이션을 Docker 이미지로 만들고,
이를 Kubernetes에서 실행하면서 LivenessProbe를 설정하는 예제입니다.

  1. Flask 어플리케이션 코드 (app.py):
pythonCopy code
from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello():
    return "Hello, Kubernetes!"

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=8080)

  1. Docker 이미지 빌드 (Dockerfile):
DockerfileCopy code
FROM python:3.9-slim

WORKDIR /app

COPY requirements.txt /app/
RUN pip install --no-cache-dir -r requirements.txt

COPY app.py /app/

EXPOSE 8080

CMD [ "python", "app.py" ]

  1. Kubernetes Deployment YAML 파일 (deployment.yaml):
yamlCopy code
apiVersion: apps/v1
kind: Deployment
metadata:
  name: flask-app
spec:
  replicas: 1
  selector:
    matchLabels:
      app: flask-app
  template:
    metadata:
      labels:
        app: flask-app
    spec:
      containers:
      - name: flask-app
        image: YOUR_DOCKER_IMAGE_TAG
        ports:
        - containerPort: 8080
        livenessProbe:
          httpGet:
            path: /
            port: 8080
          initialDelaySeconds: 5
          periodSeconds: 10

트러블 슈팅 예제:

  1. 어플리케이션 오류: 만약 어플리케이션이 올바르게 동작하지 않는다면, LivenessProbe가 계속 실패할 수 있습니다. 이때는 어플리케이션의 로그를 확인하여 오류를 해결해야 합니다.
  2. 포트 설정 오류: Flask 어플리케이션의 포트와 LivenessProbe의 포트가 일치하지 않는 경우 LivenessProbe가 실패할 수 있습니다. 이 경우 deployment.yaml 파일의 **livenessProbe**의 port 값을 Flask 어플리케이션의 포트와 동일하게 설정해야 합니다.
  3. 리소스 부족: 어플리케이션이 동작하는데 충분한 리소스(CPU, 메모리)가 할당되지 않은 경우 LivenessProbe가 실패할 수 있습니다. 이 경우 deployment.yaml 파일의 **resources**를 적절하게 조정하여 리소스를 할당해야 합니다.

실행 방법:

  1. Flask 어플리케이션 코드와 Dockerfile을 위와 같이 작성하고 Docker 이미지를 빌드합니다.
  2. Docker 이미지를 적절한 Docker 레지스트리에 푸시합니다.
  3. deployment.yaml 파일의 image 필드를 빌드한 Docker 이미지의 태그로 수정합니다.
  4. kubectl apply -f deployment.yaml 명령으로 Kubernetes에 Deployment를 생성합니다.
  5. kubectl get pods 명령으로 POD가 실행되는지 확인합니다.
  6. LivenessProbe를 설정한 시간 동안 어플리케이션이 잘 동작하는지 확인하고, 만약 실패하는 경우 위의 트러블 슈팅 방법을 활용하여 문제를 해결합니다.

이 예제를 통해 LivenessProbe를 실습하면서 발생할 수 있는 문제들과 해결 방법을 파악할 수 있습니다.