# pod와 연결된 서비스를 모니터링하기
- pod와 연결된 서비스를 모니터링하는 방법은 2가지가 있다.
- Readiness Probe와 Liveness Probe 이다.
1. Readiness Probe : 애플리케이션의 정상여부 확인, 정상이라고 판단되면 서비스를 통해 트래픽을 수신
ex) 예를들어 애플리케이션이 동작할때 헬스체크 응답용 페이지를 생성해두고 HTTP로 그 페이지에 접속해 상태 코드가 200으로 돌아오면 서비스를 통해 접속하는 등의 방법을 사용할 수 있다.
- 예제 파일을 통해 확인 (전체 리소스 파일 - Readiness Probe와 Liveness Probe의 내용을 중점적으로 보자.)
apiVersion: apps/v1
kind: Deployment
metadata:
name: backend-app
labels:
app: backend-app
spec:
replicas: 2
selector:
matchLabels:
app: backend-app
template:
metadata:
labels:
app: backend-app
spec:
containers:
- name: backend-app
image: ${ECR_HOST}/k8sbook/backend-app:1.0.0
imagePullPolicy: Always
ports:
- containerPort: 8080
env:
- name: DB_URL
valueFrom:
secretKeyRef:
key: db-url
name: db-config
- name: DB_USERNAME
valueFrom:
secretKeyRef:
key: db-username
name: db-config
- name: DB_PASSWORD
valueFrom:
secretKeyRef:
key: db-password
name: db-config
readinessProbe:
httpGet:
port: 8080
path: /health
initialDelaySeconds: 15
periodSeconds: 30
livenessProbe:
httpGet:
port: 8080
path: /health
initialDelaySeconds: 30
periodSeconds: 30
resources:
requests:
cpu: 100m
memory: 512Mi
limits:
cpu: 250m
memory: 768Mi
lifecycle:
preStop:
exec:
command: ["/bin/sh", "-c", "sleep 2"]
- Readiness 부분만 확인
- /health 라는 경로에 대해 30초 간격으로 8080번 포트에 접속하여 정상 응답이 있을때만 요청을 받는 부분이다.
readinessProbe:
httpGet:
port: 8080
path: /health
initialDelaySeconds: 15
periodSeconds: 30
- Readiness Probe가 실패하면 파드 상태가 비정상으로 판단되어 Ready 상태가 되지 않고, 서비스에서 트래픽을 보내지 않는다. 정상 상태가 되면 그때 서비스에서 트래픽을 보내게 된다.
2. Liveness Probe : pod의 상태 모니터링, 실행중인 파드가 정상적으로 동작하는지 모니터링 한다.
- 실제 예제를 통한 확인
livenessProbe:
httpGet:
port: 8080
path: /health
initialDelaySeconds: 30
periodSeconds: 30
- Liveness Probe가 실패하면 파드는 재시작을 시도한다. 또한 파드 이벤트에 그 내용이 출력되고 재시작 횟수를 센다.
3. pod 초기화에 걸리는 시간을 고려하여 Readiness Probe와 Liveness Probe를 설정하자.
- pod 는 일반적인 VM과 달리 상당히 빠르게 서비스가 실행되므로 실행 되기 전에 Readiness Probe와 Liveness Probe가 동작하여 상태체크 실패를 전달 할 수도 있다. 그런 문제를 방지하기 위해 초기화 지연 이라는 설정을 할 수 있다.
- 초기화 지연은 pod가 실행되는 시간을 초기에 늦추는 역할을 한다.
- initialDelaySeconds 부분을 보면 설정된 값들이 있다. 이 값들은 pod가 실행되고 해당 값만큼 시간을 늦추어 Readiness Probe와 Liveness Probe가 동작하도록 설정하는 부분이다.
readinessProbe:
httpGet:
port: 8080
path: /health
initialDelaySeconds: 15
periodSeconds: 30
livenessProbe:
httpGet:
port: 8080
path: /health
initialDelaySeconds: 30
periodSeconds: 30
4. pod를 안정하게 종료하기 위한 설정사항
- pod는 그 특성상 동작과 종료를 반복하고, 비동기 적으로 동작이 이루어 지므로 pod를 종료하는 도중에 서비스 요청을 수신하는 경우도 있다. 게다가 pod가 크면 클수록 동작과 종료가 늦어지므로, 해당 문제는 더욱 크게 발생한다.
- 서비스에서 분리하는 처리가 끝난이후 파드를 종료하는 작업이 이루어져야 문제가 없으므로 lifecycle 설정을 통해 문제를 방지 할 수 있다.
lifecycle:
preStop:
exec:
command: ["/bin/sh", "-c", "sleep 2"]
- 파드의 라이프사이클을 이애하면 안전한 서비스를 계속 제공할 수있다.
- 끝 -
'⭐ Kubernetes & EKS > EKS' 카테고리의 다른 글
Horizontal Pod Autoscaler를 이용한 파드 오토스케일링 (0) | 2022.01.03 |
---|---|
EKS 리소스 관리 (requests와 limits) (0) | 2022.01.03 |
컨테이너를 외부로 공개하기 위한 리소스 (0) | 2022.01.03 |
실수로 keypair 파일을 삭제 했을 경우 (0) | 2021.10.10 |
EKS 리소스 삭제(Delete) (0) | 2021.10.09 |