[k8s] k3s: etcd로 마이그레이션하기
k3s를 기본값으로 깔았다면, 데이터 관리에 sqlite를 사용한다.
이건 단일마스터의 가벼운 클러스터 관리에는 충분하지만, 성능 한계도 있고 HA 구성이 불가능해서 본질적인 한계가 있다.
그래서 어느 시점에서는 etcd로 옮기는 과정이 필요하다.
그리고 다행히도, k3s는 etcd로 설치하는 기능과 옮기는 기능 모두를 자체적으로 제공한다.
백업
혹시 모르니 백업부터 해놓자.
k3s 에이전트를 멈춰놓고 하는게 좋다.
sudo cp -a /var/lib/rancher/k3s/server /var/lib/rancher/k3s/server.sqlite.bak
sudo systemctl stop k3s
sudo tar czf /root/k3s-backup-$(date +%F).tgz /var/lib/rancher/k3s/server /etc/rancher/k3s
sudo systemctl start k3setcd 교체
config 파일을 열어서 cluster-init이라는 값을 true로 설정해준다.
그리고 k3s 에이전트를 재실행한다.
sudo vim /etc/rancher/k3s/config.yaml
sudo systemctl restart k3s

이것만 해도 자동으로 etcd로 구성을 옮기고 데이터도 옮겨준다.
복잡한 후작업이 있거나 하진 않다.
잘 됐다면 etcd가 호스트 영역에 만들어져있을 것이고
kubectl get --raw /livez/etcd
쿠버를 통해서도 생존을 확인할 수 있다.
스냅샷 관리 기능
k3s는 etcd를 래핑해서 자체적인 스냅샷 관리 기능을 좀 제공한다.
sudo k3s etcd-snapshot

save하면 현재 시점을 저장하고, ls를 하면 목록을 확인할 수 있다.

특정 스냅샷으로 복원하려면 이렇게 하면 된다.
# 중단
sudo systemctl stop k3s
# 기존 etcd 디렉토리 백업 (실패 시 롤백용)
sudo mv /var/lib/rancher/k3s/server/db/etcd /var/lib/rancher/k3s/server/db/etcd.old-$(date +%F)
# 복원 — 스냅샷 경로 지정
sudo k3s server --cluster-reset --cluster-reset-restore-path=/var/lib/rancher/k3s/server/db/snapshots/<스냅샷파일명>
# k3s 재시작
sudo systemctl start k3s