CKA 공부 42일차
in Devops on Kubernetes
Configure High Availability
k8s의 고가용성에 대해 알아보자.
마스터노드가 죽는다면 어떤 일이 일어날까? 애플리케이션은 여전히 구동할 것이다.
파드가 죽는다면 레플리카가 파드를 다시 살려주겠지만 마스터 노드는 그렇지 않다.
일단 마스터노드가 죽으면 kube-apiserver도 사용을 못하니 큰일이다.
이를 위해 2대의 마스터 노드를 운용하면 이런 이슈를 방지할 수 있다.
이렇게 마스터 노드를 여러대 운용한다는 것은 마스터 노드에 있는 모든 오브젝트들을 복제본으로 가진다는 뜻이다.
마스터노드 안에는 ETCD, kube-apiserver, controller manager, scheduler와 같은 오브젝트들이 존재한다.
마스터노드가 2대 운용되면 이러한 컴포넌트들이 2번 실행되게 되는 것일까?
마스터노드에 kube-apisverver 각각 존재할텐데, 각각의 노드 ipd와 6443 포트로 마스터노드의 kube-apiserver에 접근이 가능할 것이다.
이를 위해 일반적으로는 LB를 달아서 트래픽을 분리해주는게 일반적이다.
Controller Manager와 Scheduler의 경우는 어떨까?
Controller Manager는 레플리카를 주시하고 있다가 파드가 죽거나 생성되는 일에 관여하게 될 것이다.
만약 이러한 동작이 마스터노드에서 Parallel하게 동작한다면 실제로 필요한 것 보다 더 많은 중복 액션이 실행되게 될 것이다.
이를 위해 이러한 오브젝트들은 Active와 Standby라는 두 개의 상태로 동작하게 된다.
어떤 마스터 노드는 Active 상태를, 어떤 마스터 노드는 Standby 상태가 되는데 이러한
Leader Election Process
를 갖는 것이 상당히 흥미롭다.Controller Manager의 경우 기본적으로
Leader Election Process
가 True이다.이러한 동작 과정은 마스터 노드의 요청이 Fail나면 다른 마스터 노드가 권한을 얻어 리더가 되는 방식이다.
ETCD는 어떨까
ETCD는 우선 두 가지 전략으로 구성될 수 있는데, 첫 번째는 마스터 노드에 내장되어있는 방식이고 다른 하나는 마스터 노드와 별개의 서버로 동작하게 되는 방식이다.
마스터노드와 함께 동작하는 ETCD를
Stacked Topology
라 부르고, 따로 동작하는 ETCD를External ETCD Topology
라 부른다.kube-apiserver의 옵션에 ETCD 서버의 호스트를 입력해줄 수 있다.
ETCD는 분산 시스템이며 kube-apiserver과 다른 오브젝트들 모두 ETCD 서버에 접근할 수 있다.