간단한 Flask 어플리케이션을 Docker 이미지로 만들고,
이를 Kubernetes에서 실행하면서 LivenessProbe를 설정하는 예제입니다.
- 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)
- 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" ]
- 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
트러블 슈팅 예제:
- 어플리케이션 오류: 만약 어플리케이션이 올바르게 동작하지 않는다면, LivenessProbe가 계속 실패할 수 있습니다. 이때는 어플리케이션의 로그를 확인하여 오류를 해결해야 합니다.
- 포트 설정 오류: Flask 어플리케이션의 포트와 LivenessProbe의 포트가 일치하지 않는 경우 LivenessProbe가 실패할 수 있습니다. 이 경우 deployment.yaml 파일의 **livenessProbe**의 port 값을 Flask 어플리케이션의 포트와 동일하게 설정해야 합니다.
- 리소스 부족: 어플리케이션이 동작하는데 충분한 리소스(CPU, 메모리)가 할당되지 않은 경우 LivenessProbe가 실패할 수 있습니다. 이 경우 deployment.yaml 파일의 **resources**를 적절하게 조정하여 리소스를 할당해야 합니다.
실행 방법:
- Flask 어플리케이션 코드와 Dockerfile을 위와 같이 작성하고 Docker 이미지를 빌드합니다.
- Docker 이미지를 적절한 Docker 레지스트리에 푸시합니다.
- deployment.yaml 파일의 image 필드를 빌드한 Docker 이미지의 태그로 수정합니다.
- kubectl apply -f deployment.yaml 명령으로 Kubernetes에 Deployment를 생성합니다.
- kubectl get pods 명령으로 POD가 실행되는지 확인합니다.
- LivenessProbe를 설정한 시간 동안 어플리케이션이 잘 동작하는지 확인하고, 만약 실패하는 경우 위의 트러블 슈팅 방법을 활용하여 문제를 해결합니다.
이 예제를 통해 LivenessProbe를 실습하면서 발생할 수 있는 문제들과 해결 방법을 파악할 수 있습니다.
'DevOps > k8s' 카테고리의 다른 글
[K8s] JSONPATH 활용하여 원하는 데이터 확인하기 (0) | 2023.11.16 |
---|---|
[CKA] Namespace 내에 Service Account 생성 → Role 생성→ RoleBinding (0) | 2023.11.16 |
[CKA] ETCD 백업 및 복구 테스트 (0) | 2023.11.08 |
[K8s] Kubernetes LivenessProbe와 ReadinessProbe와 어플리케이션 안정성 강화하기 (0) | 2023.07.27 |
[K8s] Kubernetes(K8s)의 기본 개념과 용어: POD, 서비스, kubelet (2) | 2023.07.27 |