1. LivenessProbe : 서비스 장애를 판단하여 containerd 의 restart 여부를 판단
  2. ReainessProbe : 서비스 준비 여부를 체크하여 endpoint 를 관리

 

-서비스가 가능한 상태인지 알려준다.

1) pod안에 컨테이너안에 서비스 프로세스가 있는데, 준비 시간이 필요해 서비스가 안되는 경우.
2) Service의 endpoint가 만들어진다.
3) 외부서비스는 SVC로 요청 -> 포워딩 -> pod 는 아직 서비스가 준비 안된 상태 -> 에러를 리턴
4) 즉, 준비가 되었는지 확인이 필요하다. 준비된 상태에서 Client 요청이 들어와야 좋다.
5) pod 안에 라이브니스, 리드니스를 정의해 생성이 완료되야 endpoint가 발행되는 방식

 

ReadinessProbe

svc-readiness.yaml에 Selector로 readiness를 명시

root@master1:~# cat svc-readiness.yaml 
apiVersion: v1
kind: Service
metadata:
  name: svc-1
spec:
  selector:
    app: readiness
  ports:
  - port: 8080
    targetPort: 80

pod-readiness.yaml에는

  • label이 readiness 이고
  • volumes.hostPath의 /app/index.html이 존재하지 않아 에러가 발생
  • readinessProbe의 command 옵션으로 만족하지 못한 경우 Service의 endPoint 생성을 못하게 한다.
root@master1:~# cat pod-readiness.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: pod-r-exec
  labels:
    app: readiness
spec:
  containers:
  - name: test-readiness
    image: rosehs00/web:volume
    ports:
    - containerPort: 80
    readinessProbe:
      exec:
        command: ["cat", "/usr/share/nginx/html/index.html"]
      initialDelaySeconds: 3
      periodSeconds: 5
      successThreshold: 3
    volumeMounts:
    - name: hostpath
      mountPath: /usr/share/nginx/html
  volumes:
  - name : hostpath
    hostPath:
      path: /app

LivenessProbe

svc-live.yaml 명세서 작성

apiVersion: v1
kind: Service
metadata:
  name: svc-liveness
spec:
  selector:
    app: liveness
  ports:
  - port: 8080
    targetPort: 80

pod-live.yaml 명세서 작성

apiVersion: v1
kind: Pod
metadata:
  name: pod-live-2
  labels:
    app: liveness
spec:
  containers:
  - name: test-liveness
    image: rosehs00/web:volume
    ports:
    - containerPort: 80
    livenessProbe:
      exec:
        command: ["ls", "/usr/share/nginx/html/health"]
      initialDelaySeconds: 5
      periodSeconds: 3
      failureThreshold: 3
    volumeMounts:
    - name: hostpath
      mountPath: /usr/share/nginx/html
  volumes:
  - name : hostpath
    hostPath:
      path: /app

livenessProbe 필드 :

  • exec 메소드를 활용하여 health 폴더가 존재하면 문제가 없음
  • 없으면 문제 발생 프로세스가 정상적으로 돌고 있지 않은지를 command에 넣어주면 된다.

path 필드:

  • 결국 host의 /app에 /health가 존재해야 정상동작 한다는 의미
  • /app이 삭제되면 아래와 같이 에러가 발생 시도 횟수도 보임
root@ip-172-31-4-27:/app# kubectl get svc,ep,po -o wide
NAME                   TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE   SELECTOR
service/kubernetes     ClusterIP   10.96.0.1       <none>        443/TCP    24h   <none>
service/svc-liveness   ClusterIP   10.107.103.25   <none>        8080/TCP   32m   app=liveness

NAME                     ENDPOINTS          AGE
endpoints/kubernetes     172.31.4.27:6443   24h
endpoints/svc-liveness                      32m

NAME                         READY   STATUS             RESTARTS   AGE   IP               NODE               NOMINATED NODE   READINESS GATES
pod/nginx-6799fc88d8-v9m2z   1/1     Running            0          22h   192.168.82.18    ip-172-31-13-180   <none>           <none>
pod/pod-live-2               0/1     CrashLoopBackOff   11         32m   192.168.51.205   ip-172-31-4-27     <none>           <none>

'클라우드 컴퓨팅 & NoSQL > k8s' 카테고리의 다른 글

Rolling Update 예제  (0) 2020.12.02
Deployment와 RollingUpdate 설명  (0) 2020.12.02
Lable과 Selector  (0) 2020.12.01
Static Pod  (0) 2020.12.01
Namespace  (0) 2020.12.01

+ Recent posts