k8s의 etcd 토폴로지

Jaca·2022년 8월 19일
0
post-thumbnail

etcd는 Kubernetes의 기반 스토리지(backing storage)로 모든 데이터가 etcd에 보관된다.
클러스터에 어떤 노드가 몇 개나 있고 어떤 파드가 어떤 노드에서 동작하고 있는지가 etcd에 기록된다.
만약 동작 중인 클러스터의 etcd 데이터베이스가 유실된다면 컨테이너뿐만 아니라 클러스터가 사용하는 모든 리소스를 잃어버린다.

etcd는 key:value 형태의 데이터를 저장하는 스토리지이며, etcd가 죽으면 Kubernetes 클러스터는 제대로 동작하지 못하게 되므로 높은 신뢰성을 제공해야 한다.

etcd는 Raft 알고리즘을 사용해 리더 선출, 로그 복제, 런타임 재구성등의 기능을 한다.

K8S etcd 토폴로지

Kubernetes에서는 HA 구성을 위해 두가지 etcd 토폴로지를 제공한다.

중첩된 etcd 토폴로지

중첩된 HA 클러스터는 etcd에서 제공하는 분산 데이터 저장소 클러스터를 형성된 클러스터 상단에 중첩하는 토플로지이다.

Kubernetes가 사용하는 etcd가 같은 마스터 노드에 배포되며, 이 etcd 노드들은 같은 노드에 위치한 kube-apiserver의 요청만 허용한다.

이 방식은 설치가 간단하고 control plane 노드의 복제 노드를 관리하기 쉽다.
그러나 대규모 클러스터에서는 control plane 서비스와 etcd가 같은 노드의 리소스를 공유하기 때문에 리소스가 부족하여 장애가 발생할 수 있다.

또, 중첩된 etcd 토폴로지는 한 노드가 다운되면 etcd 멤버와 컨트롤 플레인을 모두 잃어버리고, 중복성도 손상된다.

그러므로 HA 클러스터를 위해 최소 3개인 중첩된 컨트롤 플레인 노드를 운영해야 한다.

외부 etcd 토폴로지

외부 etcd를 이용하는 HA 클러스터는 etcd로 제공한 분산된 데이터 스토리지 클러스터가 컨트롤 플레인 구성 요소를 운영하는 노드로 형성하는 클러스터의 외부에 있는 토플로지이다.

중첩된 etcd 토플로지와 유사하게,
외부 etcd 토플로지에 각 control plane 노드는 kube-apiserver, kube-scheduler, kube-controller-manager를 운영한다.
그리고 kube-apiserver는 로드 밸런서를 이용하여 워커노드에 노출한다.
그러나 etcd 멤버는 분리된 호스트에서 운영되고, 각 etcd 호스트는 각 컨트롤 플레인 노드의 kube-apiserver와 통신하고, 컨트롤 플레인과 etcd 멤버를 분리한다.

그러므로 control plane 인스턴스나 etcd 멤버를 잃는 충격이 덜하고, 클러스터 중복성에 있어 중첩된 HA 토플로지만큼 영향을 미치지 않는다.

그러나, 이 토폴로지는 중첩된 토플로지에 비해 호스트 개수가 두배로 필요하다.
이 토폴로지로 HA 클러스터를 구성하기 위해서는 최소한 3개의 control plane과 3개의 etcd 노드가 필요하다.

profile
I am me

0개의 댓글