[k8s] k3s: 고가용성 Control Plane 구성하기

[원본 링크]

k3s 기반 클러스터에서 고가용성 클러스터를 구성하는 방법을 다룬다.

일단 전제조건이 몇가지 있다.
우선 etcd를 써야한다. 기본값이 sqlite라서 제대로 된 스토리지 분산이 안된다. 바꾸는 것 자체도 어렵지 않다.
https://blog.naver.com/sssang97/224428481888

그리고, 각 control plane 노드를 묶어서 찌를 수 있게 해주는 LB 계층이나 가상 IP 계층이 필요하다.
LB에 노드를 물려서 쓸 수도 있긴 한데, 그러면 운영 코스트가 늘고 LB 자체가 장애지점이 되기 때문에 그닥 추천하진 않는다.
가장 심플한 방법은 ARP 기반으로 vip를 구성해서, 살아있는 놈이 능동적으로 엔드포인트 IP를 물고 API를 받을 수 있게 하는 것이다.
https://blog.naver.com/sssang97/224428580085

그래서 여기서 구성할 클러스터의 구조도는 대략 이렇게 나온다.

마스터 노드 하나마다 etcd(DB)를 내장하고, 3개(홀수개) 정족수로 쿼럼을 구성한다.
그리고 엔드포인트로는 vip를 써서 API 몸빵하던 노드가 죽더라도 계승할 수 있도록 하는 것이다.

VIP 대신 LB를 써서 묶어도 되긴 하는데, 그러면 운영포인트나 코스트가 증가한다.
etcd도 외부로 뺄 수 있지만, 그거도 일이고 비용이다. 내장하는걸로 한다. 그리고 이게 기본값이다.




HA 클러스터 구성하기

당연히 최소 2개의 추가 노드를 준비해야 한다.

먼저 기존 마스터 노드에 들어가서, 설정파일을 수정한다.
tls-san 목록에 신규 노드의 내부 IP를 추가해주면 된다.

sudo vim /etc/rancher/k3s/config.yaml
sudo systemctl restart k3s

재시작해준다.

그리고 추가할 노드의 장비에 들어가서

sudo mkdir -p /etc/rancher/k3s
sudo vim /etc/rancher/k3s/config.yaml

기존 노드와 비슷하게 config를 정의해준다.
iface는 알아서 잘 찾아서 넣고

토큰만 잘 가져와서 집어넣으면 된다. server 플래그를 넣고 날리면 알아서 control plane으로 조인할 것이다.

curl -sfL https://get.k3s.io | INSTALL_K3S_VERSION="v1.36.4+k3s1" \
  K3S_URL=https://VIP:6443 K3S_TOKEN="$K3S_TOKEN" \
  sh -s - server

2대 다 연결하고


이렇게 뜨면 잘 된 것이다.

이제 한대가 죽거나 네트워크 장애가 발생하더라도, 나머지 노드들로 최소한의 가용성을 유지할 수 있을 것이다.



참조
https://docs.k3s.io/blog/2025/03/10/simple-ha
https://docs.k3s.io/datastore/ha-embedded

Search