1. liveness probe 소개
- 라이브니스 프로브는 pod에 의해 컨테이너를 동작시키고, 동작하고 있는 컨테이너가 잘 동작하는지 주기적으로 모니터링한다.
- 만약 모니터링 도중 파드의 오류가 발생하면 해당 컨테이너를 재시작한다.
- 재시작을 했는데도 안된다 -> pod fail
- .spec.containers에서 지정.
- 컨테이너마다 지정
- 라이브니스 프로브는 세 가지 메커니즘을 가지고 컨테이너의 상태를 모니터링한다.
- HTTP GET probe
- 특정 경로에 HTTP GET 요청
- HTTP 응답 코드가 2XX 또는 3XX인지 확인함
- TCP socket probe
- 특정 TCP 포트 연결을 시도함
- Exec probe
- 컨테이너 내부의 바이너리(명령)를 실행하고 종료 코드 확인
- HTTP GET probe
2. liveness probe 생성
...
spec:
containers:
- livenessProbe:
httpGet:
...
tcpSocket:
...
exec:
...
...
- .spec.containers.livenessProbe : 라이브니스 프로브 정의
- .spec.containers.livenessProbe.httpGet : HTTP GET 프로브 정의
- .spec.containers.livenessProbe.tcpSocket : TCP 소켓 프로브 정의
- .spec.containers.livenessProbe.exec : Exec 프로브 정의
1) livnessProbe 생성 - 정상
- livenessProbe를 정의한 파드 오브젝트
# mynapp-pod-ln.yaml
apiVersion: v1
kind: Pod
metadata:
name: mynapp-pod-ln
spec:
containers:
- image: httpd
name: mynapp
ports:
- containerPort: 80
protocol: TCP
livenessProbe:
httpGet:
path: /
port: 80
- HTTP GET probe를 사용
- 경로는 /
- 포트는 80
- pod object 생성
kubectl create -f mynapp-pod-ln.yaml
- pod 상태를 주기적으로 확인
kubectl get pods --watch
2) livenessProbe 생성 - 비정상
# mynapp-pod-ln-404.yaml
apiVersion: v1
kind: Pod
metadata:
name: mynapp-pod-ln-404
spec:
containers:
- image: httpd
name: mynapp
ports:
- containerPort: 81
protocol: TCP
livenessProbe:
httpGet:
path: /
port: 82
- 의도적으로 오류가 나도록 구성
- 실제 컨테이너는 80 포트를 사용하고 있고, 쿠버네티스 시스템에서는 접속을 81로 하도록 정의함
- 라이브니스 포트는 81 포트를 확인하도록 했다.
- pod object 생성
kubectl create -f mynapp-pod-ln-404.yaml
3) liveness 상태 확인
- RESTART(재시작) : 라이브니스 프로브에 의해 건강한 상태가 아님을 감지하고 재시작을 시도.
- CrashLoopBackOff : 컨테이너가 다시 시작 후 반복적으로 비정상 종료됨.
- 초기 지연 시간을 설정
...
livenessProbe:
httpGet:
path: /
port: 80
initialDelaySeconds: 30
...
- 파드의 상태 확인
kubectl describe pod mynapp-pod-ln-404
- Events 필드로 파드(컨테이너)의 상태를 시간대 별로 확인할 수 있다.
- 불필요한 파드 삭제
kubectl delete pods --all
- --all 옵션은 모든 리소스를 대상으로 한다.
※ 라이브니스 프로브는 현재 동작중인 파드의 크래시나 애플리케이션 장애를 감지해 재시작해준다. 그러나 여러 이유에 의해 파드가 삭제되거나 노드에 장애가 발생한 경우 파드를 재시작해주지는 않는다.
※ 파드의 삭제나 노드의 장애에 대비해 가용성을 높이기 위해서는 레플리케이션 컨트롤러, 레플리카셋, 데몬 셋 등 컨트롤러를 사용해야 한다.
'Containers > Kubernetes' 카테고리의 다른 글
4.3. ReplicaSet (0) | 2020.07.28 |
---|---|
4.2. Replication Controller (0) | 2020.07.24 |
3.4. namespace (0) | 2020.07.24 |
3.2. Label 및 Selector (0) | 2020.07.23 |
Pod (0) | 2020.07.23 |
댓글