- LivenessProbe : 서비스 장애를 판단하여 containerd 의 restart 여부를 판단
- 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 |