- Pod 개념(복습) 및 사용
- livenessProbe를 사용한 self-healing Pod ← 오늘 볼 내용
- init container
- infra container(pause) 이해
- static pod 만들기
- Pod에 resource 할당
- 환경변수를 이용해 컨테이너에 데이터 전달
- pod 구성 패턴의 종류
2. livenessProbe를 사용한 self-healing Pod
컨테이너가 제대로 동작하지 않을 때 컨테이너를 restart시킴으로 건강한 컨테이너들로만 애플리케이션 서비스를 보장해주겠다는 기능이다.
Pod - definition | livenessProbe - definition |
apiVersion: v1 kind: Pod metadata: labels: run: webserver name: webserver spec: containers: - image: nginx:1.25 name: webserver ports: - containerPort: 80 |
apiVersion: v1 kind: Pod metadata: labels: run: webserver name: webserver spec: containers: - image: nginx:1.25 name: webserver ports: - containerPort: 80 protocol: TCP livenessProbe: httpGet: path: / port: 80 |
위 표는 webserver가 동작함에 있어서 HTTP GET 요청을 80번 포트로 보냄으로 컨테이너의 생사를 확인하도록 livenessProbe 라인을 추가한 것이다.
livenessProbe는 Pod의 spec부분에 입력한다.
livenessProbe 메커니즘
httpGet probe : 지정한 IP주소, port에 HTTP GET 요청을 보내, 해당 컨테이너가 응답하는지를 확인한다.
반환코드가 200이 아닌 값이 나오면 오류, 컨테이너를 다시 시작한다.
livenessProbe:
httpGet:
path: /
port: 80
tcpSocket probe : 지정된 포트에 TCP 연결을 시도. 연결되지 않으면 컨테이너를 다시 시작한다.
livenessProbe:
tcpSocket:
port: 22
exec probe : exec 명령을 전달하고 명형의 종료코드가 0이 아니면 컨테이너를 다시 시작한다.
livenessProbe:
exec:
command:
- ls
- /data/file
쿠버네티스는 서비스 실행 보장을 위해 3연속 실패를 하면 컨테이너가 건강하지 않다고 판단하고 해당 파드를 죽이고 컨테이너 이미지를 가져와서 다시 실행한다.
중요한 것은 파드를 restart시키는 것이 아니라 container를 restart시키기 때문에 파드에 적용된 IP는 변경되지 않는다.
livenessProbe 매개변수
매개변수는 쓰지 않으면 기본값으로 적용이 되어 실행되지만 직접 커스터마이징할 수도 있다.
Pod - definition | livenessProbe - definition |
apiVersion: v1 kind: Pod metadata: labels: run: webserver name: webserver spec: containers: - image: nginx:1.25 name: webserver ports: - containerPort: 80 |
apiVersion: v1 kind: Pod metadata: labels: run: webserver name: webserver spec: containers: - image: nginx:1.25 name: webserver ports: - containerPort: 80 protocol: TCP livenessProbe: httpGet: path: / port: 80 initialDelaySeconds: 15 periodSeconds: 20 timeoutSeconds: 1 successThreshold: 1 failureTreshold: 1 |
매개변수
- initialDelaySeconds : Pod 실행 후 delay할 시간(초)
- periodSeconds : healthy check 반복 실행 시간(초)
- timeoutSeconds : healthy check 후 응답을 기다리는 시간(초)
- successThreshold : 응답이 일정 횟수 성공해야 정상으로 간주(횟수)
- failureThreshold : 응답이 일정 횟수 실패하면 컨테이너 재시작(횟수)
예제
실제로 livenessProbe가 컨테이너를 restart하는지 확인하기 위한 실험이다.
이미지는 smlinux/unhealthy를 사용했으며 해당 이미지는 http get 요청을 5번까지는 200을 반환하지만 6번째 부터는 500을 반환하여 오류를 발생시킨다.
apiVersion: v1
kind: Pod
metadata:
labels:
run: webserver
name: liveness
spec:
containers:
- image: smlinux/unhealthy
name: liveness
ports:
- containerPort: 8080
protocol: TCP
livenessProbe:
httpGet:
path: /
port: 8080
livenessProbe는 기본값으로 10초에 한번씩 상태 검사를 하므로 컨테이너가 실행된 순간부터 60초가 지나면 실패가 나온다.
그렇게 3번의 실패를 거듭하면 쿠버네티스는 컨테이너가 불능 상태로 간주하고 없앤 후 다시 만든다.
약간의 오차가 있지만 livenessProbe가 정상적으로 잘 작동하고 있다.
실습
아래의 liveness-exam.yaml 파일에 self-healing 기능을 추가하시오.
- 동작되는 Pod내의 컨테이너에 /tmp/healthy 파일이 있는지 5초마다 확인한다.
- Pod 실행 후 10초 후부터 검사한다.
- 성공횟수는 1번 실패횟수는 연속 2회로 구성한다.
# 문제
apiVersion: v1
kind: Pod
metadata:
name: liveness-exam
spec:
containers:
- name: busybox-container
image: busybox
args:
- /bin/sh
- -c
- touch /tmp/healthy; sleep 30; rm -rf /tmp/healthy; sleep 600
# 답안
apiVersion: v1
kind: Pod
metadata:
name: liveness-exam
spec:
containers:
- name: busybox-container
image: busybox
args:
- /bin/sh
- -c
- touch /tmp/healthy; sleep 30; rm -rf /tmp/healthy; sleep 600
livenessProbe:
exec:
command:
- ls
- /tmp/healthy
initialDelaySeconds: 10
successThreshold: 1
failureThreshold: 2
periodSeconds: 5
아래 영상을 참고했습니다.
https://youtube.com/playlist?list=PLApuRlvrZKohaBHvXAOhUD-RxD0uQ3z0c&si=hbPclcPuc-6lTNdE
'Kubernetes' 카테고리의 다른 글
Kubernetes 기초 - Pod(5) (0) | 2023.12.07 |
---|---|
Kubernetes 기초 - Pod(4) (0) | 2023.12.07 |
Kubernetes 기초 - Pod(2) (0) | 2023.12.06 |
Kubernetes 기초 - Pod(1) (0) | 2023.12.06 |
Kubernetes 기초 - 동작 원리 (0) | 2023.12.06 |