CKAD

[CKAD] Application Observability and Maintenance

테런 2023. 5. 27. 22:55
  • 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​