Search

[스터디] Docker & Kubernetes Study #4

POD을 안정적으로 유지하기

k8s 장점: 컨테이너 목록을 제공하면 해당 컨테이너를 클러스터 어딘가에서 계속 실행할 가능함
컨테이너중 하나가 죽거나 crash 나면 어떻게 될까..?
pod이 노드에 스케줄링 되는 즉시 해당 노드의 kubelet 은 pod 의 컨테이너를 실행한다
k8s 는 컨테이너가 살아 있는지 계속 감시하는 lifeness probe 기능이 존재한다
HTTP GET, TCP 소켓, Exec 를 통한 명령 시행 등의 방법으로 살아있는지 확인한다
만약 살아 있지 않은 경우에는 해당 컨테이너를 재시작한다
마스터에서 실행중인 쿠버네티스 플레인 구성요소는 이 프로세스에 관여하지 않는다
단 노드 크래시로 중단된 모든 파드의 대체 파드를 생성하는 것은 control plane 의 역할

레플리케이션 컨트롤러 소개

replication controller 는 쿠버네티스 리소스로서 파드가 항상 실행되도록 보장한다
어떤 이유에서든 파드가 사라지면(클러스터에서 노드가 사라지거나, 노드에서 파드가 제거된 경우) replication controller 는 사라진 파드를 감지해 교채 파드를 생성한다
Replication Controller 는 특정 유형의 실제 파드 수가 의도하는 수와 일치하는지 항상 확인
만약에 설정된 replication 개수 보다 적거나 많으면, 설정한 개수로 복원 (추가 또는 삭제)
ReplicaSet 이라는 차세대 Replication Controller 가 등장함. 앞으로는 이거 쓸거임
파드 셀렉터에서 풍부한 표현식을 사용할 수 있음
Replication Controller 는 env=production / env=devel 이 두 레이블 동시에 셀렉 불가능
RelicaSet 에서는 가능 및 하나의 그룹으로 매칭시킬 수 있음

데몬셋을 사용해 노드에 정확히 한개의 파드 실행하기

클러스터의 모든 노드에, 노드당 하나의 파드만 실행되기 원하는 경우가 있을 수 있다
모든 클러스터 노드마다 파드를 하나만 실행할 수 있는 데몬셋 오브젝트를 생성하면 됨
ReplicaSet 이 클러스터에 원하는 수의 Pod 복재본이 존재한는지 확인하는 반면, 데몬셋에는 원하는 복제본 수라는 개념이 없다. 파드 셀렉터와 일치하는 파드 하나가 각 노드에서 실행 중인지 확인하는 것이 데몬셋이 수행해야 하는 역할

Questions

Q. Pod Selector 와 Template 에 동일한 label 값을 넣어 줘야지 동작하는데, 왜 동일한 값을 두개 넣도록 설계되었지? 두개가 다를 수 있는 상황이 존재하는가?
(답변) ReplicationController가 pod selector의 label을 기준으로 pod 개수를 세잖아요. 필요 숫자보다 적은 경우 template에 있는 친구를 추가 하였음에도 pod 개수가 적으니까 무한히 추가하는 루프에 빠지게 되요
Q. 한 노드에 리소스가 부족하면 자동으로 다른 노드에 replication 되는 것인지?
Q. 한 노드에만 실행되어야 하는 컨테이너의 예시를 정확하게 이해하고 싶음