1. LivenessProbe로 Self-healing Pod 만들기
Self-healing : 문제 없는 컨테이너로만 어플리케이션 서비스 할 수 있도록 보장해주는 기능
Kubernetes
Run K8s Anywhere Kubernetes is open source giving you the freedom to take advantage of on-premises, hybrid, or public cloud infrastructure, letting you effortlessly move workloads to where it matters to you.
kubernetes.io
Liveness Probe
- Pod가 지속 실행할 수 있음을 보장(건강검진)
- Pod의 spec에 정의
#Pod-definition(일반적인 파드)
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
spec:
containers:
- name: nginx-container
image: nginx:1.14
#livenessProbe definition
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
spec:
containers:
- name: nginx-container
image: nginx:1.14
livenessProbe: #livenessProbe pod 설정 : http 프로토콜을 통해 80포트로 /의 페이지로 주기적으로 접속
httpGet: #응답이 없을 경우 컨테이너에 문제가 생긴 것으로 판단
path: /
port: 80
livenessProbe 매커니즘
httpGet probe
- 지정한 IP주소, port, path에 HTTP GET 요청을 보내 해당 컨테이너가 응답하는 지 확인
- 반환코드가 200이 아닌 값이 나오면 오류라고 판단하고 컨테이너를 다시 시작한다.
- 어떤 형식으로든 Web service를 제공하고 있다면 테스트 가능
livenessProbe:
httpGet
path: /
port: 80
- Running 중인 파드의 컨테이너(ex. nginx)에게 80포트를 통해 루트(/) 페이지에서 주기적으로 HTTP GET 테스트
- 200이 아닌 다른 값(ex. 500)이 연속 세 번 반복되면 문제가 생긴 것으로 판단
- 해당 컨테이너를 kill
- 도커 허브에서 새로운 컨테이너를 가져와 실행(restart)
tcpSocket probe
- 지정한 포트에 TCP 연결을 시도
- 연결되지 않으면 컨테이너를 다시 시작한다.
livenessProbe:
tcpSocket:
port: 22
- Running 중인 파드의 컨테이너(ex. sshd)에게 22포트(TCP)를 통해 주기적으로 연결 테스트
- 연결 불가가 연속 세 번 반복되면 문제가 생긴 것으로 판단
- 해당 컨테이너를 kill
- 도커 허브에서 새로운 컨테이너를 가져와 실행(restart)
exec probe
- exec 명령을 전달하고 명령의 종료코드가 0이 아니면 컨테이너를 다시 시작
livenessProbe:
exec:
command:
- ls
- /data/file
- Running 중인 파드의 컨테이너가 백엔드의 특정 DB에서 데이터를 가져와 서비스할 때 데이터가 유효한지 테스트
- 내용 확인 불가가 연속 세 번 반복되면 문제가 생긴 것으로 판단
- 해당 컨테이너를 kill
- 도커 허브에서 새로운 컨테이너를 가져와 실행(restart)
* 파드가 아닌 컨테이너를 kill & restart 하는 것이므로 Pod IP는 바뀌지 않음!
livenessProbe 매개 변수
- periodSeconds : health check 반복 실행 시간(초)
- initialDelaySeconds : Pod 실행 후 delay할 시간(초)
- timeoutSeconds : health check 후 응답을 기다리는 시간(초)
#Pod-definition
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
spec:
containers:
- name: nginx-container
image: nginx:1.14
#livenessProbe definition
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
spec:
containers:
- name: nginx-container
image: nginx:1.14
livenessProbe:
httpGet:
path: /
port: 80
initialDelaySeconds: 15 #값 입력하지 않을 경우 default값
periodSeconds: 20
timeoutSeconds: 1
successThreshold: 1
failureThreshold: 3
livenessProbe default 설정 값을 보면 다음과 같음을 알 수 있다.
livenessProbe example
liveness Probe는 Pod의 spec에 정의한다.
아래 example에서 사용한 smlinux/unhealthy 컨테이너는 HTTP connection이 있을 때마다 내부 서버오류로 HTTP 500 ERROR가 발생한다.
cat pod-liveness.yaml
```
apiVersion: v1
kind: Pod
metadata:
name: liveness-pod
spec:
containers:
- image: smlinux/unhealthy
name: unhealthy-container
ports:
- containerPort: 8080
protocol: TCP
livenessProbe:
httpGet:
path: /
port: 8080
```
kubectl create -f pod-nginx-liveness.yaml
kubectl describe pod nginx-pod-liveness
Exercise
[문제]
아래의 liveness-exam.yaml 파일에 self.healing 기능을 추가하시오
- 동작되는 Pod 내의 컨테이너에 /tmp/healthy 파일이 있는지 5초마다 확인한다.
- Pod 실행 후 10초 후부터 검사한다.
- 성공횟수는 1번, 실패횟수는 연속 2회로 구성한다.
[정답]
'Cloud Native > Kubernetes' 카테고리의 다른 글
쿠버네티스(Kubernetes) - 유튜브 'TTABAE-LEARN' 따라하기 5(쿠버네티스 Pod) (0) | 2022.04.05 |
---|---|
쿠버네티스(Kubernetes) - 유튜브 'TTABAE-LEARN' 따라하기 4(쿠버네티스 아키텍쳐) (0) | 2022.03.14 |
쿠버네티스(Kubernetes) - 유튜브 'TTABAE-LEARN' 따라하기 3(kubectl 실습환경 구성 및 실습) (0) | 2022.03.10 |
쿠버네티스(Kubernetes) - 유튜브 'TTABAE-LEARN' 따라하기 2(쿠버네티스 설치) (0) | 2022.03.03 |
쿠버네티스(Kubernetes) - 유튜브 'TTABAE-LEARN' 따라하기 1(쿠버네티스 시작) (0) | 2022.03.03 |