쿠버네티스 배포판 — 직접 세운다 · k0s 로 세우고 복구하기 · 이론
기본값이 할 수 있는 일을 가른다
한 줄 요약
경량 배포판의 차이는 기능이 아니라 기본값에 있고, 그 기본값이 운영에서 할 수 있는 일을 가릅니다.
왜 기본값을 알고 골라야 하나
k3s 와 k0s 는 둘 다 단일 바이너리로 배포되는 경량 쿠버네티스입니다. 겉보기에는 비슷하지만 기본값이 다르고, 그 기본값이 운영에서 할 수 있는 일을 가릅니다.
저장소
k3s 의 기본 저장소는 sqlite 입니다. kine 이라는 층이 etcd 의 API 를 흉내 내면서 뒤에 sqlite 를 둡니다. 가볍고 한 대짜리에는 충분하지만 etcdctl 도 멤버 관리도 쓸 수 없습니다.
k0s 를 --enable-worker 로 세우면 진짜 etcd 입니다. 스냅숏·멤버 관리·복구를 실제로 다룰 수 있습니다. CKA 의 etcd 문제와 실무의 컨트롤 플레인 운영이 여기에 해당합니다.
주의할 것은 k0s 의 --single 모드입니다. 간편해 보이지만 그쪽은 kine(sqlite) 이라 k0s etcd member-list 가 이렇게 거절합니다.
Error: wrong storage type: kine기본 구성요소
k3s 는 traefik 인그레스와 local-path 프로비저너가 기본으로 들어옵니다. 개발 환경에서는 편합니다. k0s 는 아무것도 넣지 않고 필요한 것을 직접 고르게 합니다. 운영에서는 이쪽이 낫습니다 — 기본으로 들어온 것을 나중에 걷어내는 일이 더 번거롭기 때문입니다.
대역
k0s 의 기본 대역(파드 10.244.0.0/16 · 서비스 10.96.0.0/12)은 표준 쿠버네티스와 같습니다. 그래서 다른 클러스터 안에 중첩해 세우면 겹칩니다. k3s 의 10.42/10.43 은 비표준이라 우연히 충돌을 피합니다.
어느 쪽이 옳다기보다 자기 환경의 대역을 알고 고르는 것이 맞습니다. 그리고 우연히 비켜 가는 상태에 기대면, 배포판을 바꾸는 순간 함정이 되살아납니다.
실무에서 진짜 중요한 것
etcd 를 다뤄야 하면 저장소부터 확인합니다. kine(sqlite) 위에서는 etcdctl 도 멤버 관리도 스냅숏 복구도 쓸 수 없습니다. k0s 라도 --single 모드는 kine 이라서, 명령이 wrong storage type: kine 으로 거절합니다.
중첩해 세울 때는 대역이 겹치는지 먼저 셉니다. k0s 의 기본 대역은 표준 쿠버네티스와 같아서, 다른 클러스터 안에 세우면 충돌합니다. k3s 가 잘 되던 이유는 설계가 아니라 비표준 대역이 우연히 비켜 간 것이라, 배포판을 바꾸는 순간 함정이 되살아납니다.
기본으로 들어온 구성요소는 나중에 걷어내기가 더 번거롭습니다. 개발 환경에서는 traefik 과 local-path 가 들어 있는 편이 편하지만, 운영에서는 필요한 것만 직접 고르는 쪽이 낫습니다.
다음 실습에서 k0s 를 세우고 백업·복구를 한 바퀴 돌립니다.