- CKAD 시험 비중 (15%)
- Liveness Probe
1. self-healing 기능
* 건강한 컨테이너를 이용해 서비스 지원
2. liveness probe
* 동작되는 컨테이너에 주기적으로 건강검진 명령을 주어 결과에 따라 건강한지 아닌지를 판단
* 건강하지 않은 컨테이너는 kill 시키고, 다시 동일 버전의 컨테이너를 다운로드 받아 실행
* 항상 건강한 컨테이너를 가지고 서비스 지원함을 보장
* Pod가 계속 실행할 수 있음을 보장
1. httpGet probe: 지정한 IP 주소, port, path에 HTTP GET 요청을 보내서 해당 컨테이너가 응답하는지를 확인한다.
반환 코드가 200이 아닌 값이 나오면 오류로 인식하고 컨테이너를 다시 시작한다.
2. tcpSocket probe: 지정된 포트에 TCP 연결을 시도. 연결되지 않으면 컨테이너를 다시 시작한다.
3. exec probe: exec 명령을 전달하고 명령의 종료코드가 0이 아니면 컨테이너를 다시 시작한다.
* liveness probe 매개 변수
1. periodSeconds: health check 반복 실행 시간(초)
2. initialDelaySeconds: Pod 실행 후 delay할 시간(초)
3. timeoutSeconds: health check 후 응답을 기다리는 시간(초)
- 실습1
apiVersion: v1
kind: Pod
metadata:
labels:
test: liveness
name: liveness-exec
spec:
containers:
- name: liveness
image: registry.k8s.io/busybox
args:
- /bin/sh
- -c
- touch /tmp/healthy; sleep 30; rm -f /tmp/healthy; sleep 600
livenessProbe:
exec:
command:
- cat
- /tmp/healthy
initialDelaySeconds: 5
periodSeconds: 5
* exec probe를 이용해 "cat /tmp/healthy" 명령을 5초마다 한번씩 동작함으로써 health check
* health check는 Pod가 처음 실행되고 5초 후부터 시작되어야 한다.
* health check 실행결과 오류가 없는 횟수가 1회이면 오류 없음으로 결정한다.
* health check 실행결과 실패 횟수가 3회 연속되면 Container를 restart한다.
- Readiness Probe
* Pod가 read될 때 Endpoint를 전달해서 건강하지 않은 Pod에 트래픽이 전달되지 않게 운영
* 동작방식
1. liveness와 비슷하다.
2. Pod가 준비가 되었을 때 신호(Endpoint)를 보냄
* Readiness Probe 동작 방식
1. httpGet
2. tcpSocket
3. exec
실습1
apiVersion: v1
kind: Pod
metadata:
name: goproxy
labels:
app: goproxy
spec:
containers:
- name: goproxy
image: registry.k8s.io/goproxy:0.1
ports:
- containerPort: 8080
readinessProbe:
tcpSocket:
port: 8080
initialDelaySeconds: 5
periodSeconds: 10
livenessProbe:
tcpSocket:
port: 8080
initialDelaySeconds: 15
periodSeconds: 20
- 실습2
다음과 같은 조건의 self-healing 기능을 Deployment에 적용하세요.
* readinessProbe 구성
1. httpGet probe를 이용해 smlinux/appjs 컨테이너에서 8080 포트로 200 상태 코드가 나오지 않으면 외부 트래픽이 들어오지 못하도록 구성한다.
2. 컨테이너 시작 후 5초 후부터 readinessProbe가 동작되어야 하고, 실패 횟수는 1회로 구성하세요.
* livenessProbe 구성
1. httpGet probe를 이용해서 smlinux/appjs 컨테이너가 웹 통신에 실패하면 컨테이너를 다시 실행하세요.
2. 템플릿은 /data/ckad/liveness-busybox.yaml을 사용하세요.
- 애플리케이션 리스소 사용량 모니터링
* Application monitoring
1. 신뢰성 있는 서비스 제공을 위해 동작중인 애플리케이션 성능을 검사해야 한다.
2. 쿠버네티스는 각 레벨에서 애플리케이션의 리소스 사용량에 대한 상세 정보를 제공한다.
3. 이 정보를 기반으로 애플리케이션의 성능을 평가하고 병목 현상을 제거하여 전체 성능을 향상할 수 있다.
* metrics-server
1. 클러스터 전체의 리소스 사용 데이터 수집
2. 각 노드에 설치된 kubelet을 통해서 노드나 컨테이너의 CPU나 메모리 사용량같은 메트릭을 수집
3. 쿠버네티스에서 HPA(Horizontal Pod Autoscaler)나 kubectl top 명령어를 사용하기 위해서는 반드시 metrics-server가 동작 중이어야 한다.
* 리소스 사용량 확인
1. 노드 CPU 사용률(%), 노드 메모리 사용률(%): kubectl top nodes
2. pod CPU 사용률(%), 노드 메모리 사용률(%): kubectl top pods
- 실습1
클러스터에서 Application들이 소비하는 리소스를 주기적으로 모니터링해야 한다.
1. 네임스페이스 devops에서 실행 중인 Pod들 중 CPU를 가장 많이 사용하는 Pod의 이름을 찾아 /opt/REPORT/2023/pod.txt 파일에 기록하세요.
$ kubectl top pod -n devops
'CKAD' 카테고리의 다른 글
[CKAD] 자격증 취득 후기 (2023.06.24) (4) | 2023.06.27 |
---|---|
[CKAD] 자격증이란? (0) | 2023.05.28 |
[CKAD] Application Environment, Configuration and Security (0) | 2023.05.28 |
[CKAD] Application Deployment (0) | 2023.05.27 |
[CKAD] Application Design and Build (0) | 2023.05.27 |