
1. 쿠버네티스의 문제 상황
1) 파드에 문제가 생기는 경우
파드를 실수로 지웠을 경우
- pod만 배포된 경우
-> 지워져서... 어쩔 수 없다. - deployment 형태로 배포된 pod
-> 파드가 지워지게 된다면 다시 파드를 만든다. - 쿠버네티스가 파드를 대하는 자세
-> 소중하게 다뤄야하거나 문제가 생기면 안되는 것으로 보지 않는다.(애완동물)
-> 삭제되어도 된다 (가축)
-> 노드에 문제가 있어 파드를 이동 시, 해당 파드를 삭제하고 다시 만든다.

- 단일 pod 삭제 시, 해당 pod는 삭제 되어서 확인할 수 없다.

- 해당 deployment는 pod의 수를 유지하기 위하여 pod 삭제 시 다시 pod를 생성한다.

- deployment를 전체 삭제해준다.
2) 워커 노드의 구성요소에 문제가 생기는 경우
대부분의 구성요소에 문제가 생기는 경우에는 자동적으로 복구가 빨리 일어나지만 API의 선언된 값을 가져가지 않는 Kubelet에 문제가 생기는 경우에는 바로 복구되지 않는다.
Kubelet 중단

- 워커노드 kubelet 중단 명령어 : systemctl stop kubelet
- 워커노드 kubelet을 중단시키고 마스터 노드에서 deployment를 만들어 보면서 문제 상황을 알아보자.

- 강의에서는 노드가 계속 생성이 안되고 계속 pendding상태로 유지되고 있었는데, 내 환경에서는 균등분배가 일어나지 않고, 다른 워커노드에 pod이 하나 더 생성이 되었다. 나 말고도 다른 수강생도 겪은 문제여서 답변을 통하여 확인할 수 있었다.
-> 랩탑의 VM간 통신이나, 리소스 사용 등 다른 요인에 의해서 균등 배분이 되지 않을 수 있다는 것이다
-> 스케줄러가 다양한 요소(리소스 등)를 판단하여 배포하기 때문에 균등 배분이 일어나지 않을 수 있다.
참고 : https://www.inflearn.com/questions/335452
컨테이너 런타임 중단
- 현재 컨테이너 런타임은 v1.25에 맞는 (ContainerD)를 사용

- 워커 노드의 구성요소인 컨테이너 런타임(ContainerD)을 중단

- 해당 워커노드에 pod이 생성되지 않는다.
- 강의에서는 ContainerD를 중단하기 전에 워커노드1에 pod가 올려져있다.
컨테이너 런타임을 종료한 이후로 5분 정도 시간이 지나게 되면 컨테이너 런타임이 작동하지 않는다는 것을 판단하여 축출(evict)하여 다른 워커노드에 옮기게 된다.
스케줄러의 역할 확인
최대한 각 워커노드들에 균등 분배를 해주려고 한다

- 워커노드1의 ContainerD를 활성화 시켜준다

- replicas를 9로 증가 시켜 균등분배가 일어나는지 확인한다.
- 워커노드2에서 3개, 워커노드 3에서 3개가 있었고 3개를 증가시킨 후 모든 pod이 워커노드1에 생성이 되는 것을 볼 수 있다.
3) 마스터 노드의 구성요소에 문제가 생기는 경우
스케줄러가 삭제된다면?

- kube-system 네임스페이스에 있는 scheduler를 삭제 시, 단일 pod라 해도 다시 만들어진다.
- 마스터 노드에 존재하는 구성요소는 특별하게 관리된다.
마스터 노드의 kubelet 중단

- kubelet이 중단된 상태라 scheduler가 계속 Terminating 상태로 유지된다.
-> 그렇다면 scheduler가 제대로 작동하지 않는 것이 아닐까?

- scheduler는 정상적으로 작동되는 것을 확인할 수 있다.
-> 그렇다면 pod에 문제가 있는 것이 아닐까?

- pod도 이상 없이 정상적으로 작동한다.
마스터 노드에 있는 kubelet이 중단이 되어도 아무 문제가 없는 것을 확인할 수 있다.
마스터 노드의 컨테이너 런타임(ContainerD) 중단
기존 v1.20에서 docker를 런타임으로 사용할 때는 명령어가 API 서버에 도달하지 못하는 상태로 나왔다.
API서버에 도달 못하는 것 뿐만 아니라 어떠한 액션도 할 수 없었다.
ContainerD로 변경이 되고 나서는 조금 더 시스템이 안정적으로 동작할 수 있게 되었다.


- v1.20에서는 사용할 수 없었던 명령어들이 작동되는 것을 확인할 수 있다.
2. 쿠버네티스 오브젝트
1) 오브젝트란?
모두 상태를 가지고 있는 오브젝트
->추구하는 상태, 현재 상태
오브젝트가 추구하는 상태를 기술해 두는 것


2) 쿠버네티스의 기본 오브젝트
- pod
pod를 기본 골자로 해서 만들어진 것 - Service
NodePort, LoadBalancer(MetalLB) - NameSpace
default - 굉장히 많은 오브젝트들을 배포할 수 있다.
kube-system - 쿠버네티스를 이루는 것들 - volume
영속적인 데이터를 보존하기 위한 오브젝트
pod를 만들 때 volume을 붙이는 구조가 필요
-> 데이터를 올리거나 추가할 때, 파드가 이동한다면 저장이 안되기 때문에
Volume의 영속성

- 워커노드 세 곳에 모두 같은 곳을 바라보아야할 공간이 필요 (nfs)
- 모두가 같이 쓸 수 있는 Volume 생성

- 해당 pod에 접속을 하면 /audit 경로에 접속정보를 저장을 한다.
- 이제 deployment를 삭제 후 다시 생성하여 기록이 남아있는지 확인한다.

- 해당 정보를 가지고 있는 영속성을 가지는 Volume을 확인할 수 있다.
'Kubernetes, Docker' 카테고리의 다른 글
[Docker] 도커란 무엇인가? / 초보를 위한 도커 안내서 - 1일차 (0) | 2022.11.14 |
---|---|
[Kubernetes] 쿠버네티스 Tips 및 수강 후기/ 쉽게 시작하는 쿠버네티스(v1.25) - 5일차 (0) | 2022.11.10 |
[Kubernetes] 쿠버네티스 배포 및 구성요소 / 쉽게 시작하는 쿠버네티스(v1.25) - 3일차 (0) | 2022.11.08 |
[Kubernetes] 쿠버네티스 환경 구성/쉽게 시작하는 쿠버네티스(v1.25) - 1,2일차 (0) | 2022.11.07 |
[Kubernetes] vagrant up 후 E_FAIL(0x80004005) 발생 시 (0) | 2022.11.06 |
댓글