Bottlerocket vs Talos, 워커노드 OS는 뭘 쓸까

워커노드 OS 얘기를 팀에서 다시 꺼낸 게 두 달쯤 됐다. 그동안은 EKS 기본인 AL2023을 별 생각 없이 썼는데, 멀티클라우드로 한 발 걸치는 작업이 시작되면서 "노드 OS를 통일하면 좋겠다"는 얘기가 나왔다. 후보는 두 개. Bottlerocket, 그리고 Talos. 이번 글은 정답을 내는 글은 아니고, 우리 팀이 한 달 정도 굴려보면서 정리한 비교 노트다.
지난 가을 InfoQ에 Talos가 다시 한 번 크게 다뤄지면서 사내 분위기도 살짝 기울었는데, 막상 PoC를 돌려보니 그렇게 단순하진 않았다.
두 OS의 출발점이 다르다
Bottlerocket은 AWS에서 만든 "컨테이너 워크로드 전용 OS"다. EKS, ECS 둘 다 지원하고, 바이너리는 250개 정도. control container와 admin container라는 두 개의 사이드 컨테이너로 디버깅 통로를 열어둔다. 기본은 둘 다 비활성. SSH가 필요하면 admin container를 켜는 식이다.
Talos는 결이 다르다. Sidero Labs가 "Kubernetes만 돌리는 OS"라는 컨셉으로 만들었다. 바이너리가 약 12개. SSH는 아예 없다. 모든 관리가 gRPC 기반 API(talosctl)로 이뤄진다. 셸이 없으니 들어가서 ps를 칠 수도 없다. 처음 만져보면 약간 당황스럽다.
방향이 이렇게 다른 만큼, 두 OS의 강점도 다른 지점에서 나온다.
운영 측면 — 진짜 차이는 여기서 갈린다
우선 가장 체감되는 차이는 디버깅 경험이다. Bottlerocket은 노드에 문제가 생기면 SSM Session Manager로 admin container 띄우고 들어가서 journalctl 뒤지는 게 가능하다. 우리 팀 SRE들이 익숙한 흐름이다. 반면 Talos는 그게 안 된다. talosctl logs, talosctl dmesg, talosctl read 같은 명령으로 필요한 정보를 빼내야 한다. 처음엔 답답한데, 익숙해지면 오히려 "조회 가능한 항목이 명확해서" 트러블슈팅 흐름이 깔끔하다는 의견도 나왔다.
업데이트 모델도 다르다. Bottlerocket은 A/B 파티션 업데이트라서 apiclient update apply 한 번이면 끝나고, 실패하면 자동 롤백된다. AMI 단위로 K8s 버전과 OS가 묶여 있어서 EKS 버전 업그레이드할 때 OS 스큐를 신경 쓸 필요가 거의 없다. Talos도 비슷한 모델이지만, K8s 버전 업그레이드를 talosctl upgrade-k8s로 하는 게 살짝 특이하다. K8s 클러스터 자체가 Talos의 1급 객체이기 때문에 가능한 방식이다.
보안 관점에서 보면 Talos가 좀 더 공격적이다. 셸 없음, SSH 없음, 재현 가능 빌드, 서명된 커널 모듈, SBOM 기본 제공. PCI DSS나 에어갭 환경에서 감사받아본 사람들은 이 차이가 크다는 걸 안다. Bottlerocket도 보안 측면에서 약하진 않은데, "사람이 들어갈 통로가 있다"는 점 때문에 감사할 때 설명할 게 한 줄 더 늘어난다.
AWS만 쓸 거면 답은 비교적 명확하다
우리 팀이 PoC 끝나고 내린 첫 번째 결론은 이거다. EKS 단독, 그리고 큰 폭의 보안 요구가 없다면 Bottlerocket이 압도적으로 편하다. Karpenter NodePool에 AMI family만 바꿔주면 끝이고, IAM 통합, CloudWatch 로그 수집, SSM 접근, 다 그냥 된다. 운영 인력이 적은 팀일수록 이쪽이 합리적이다.
문제는 멀티클라우드. 우리는 AWS와 사내 베어메탈을 동시에 굴려야 하는데, Bottlerocket을 베어메탈에 올리는 건 가능은 해도 권장 경로는 아니다. Talos는 처음부터 플랫폼 무관하게 설계됐다. AWS, GCP, vSphere, 베어메탈, 라즈베리파이까지 같은 manifest로 굴릴 수 있다. 환경을 통일하고 싶다면 이게 강력한 카드다.
우리는 어떻게 갈라놨나
길게 고민했는데, 결국 환경별로 OS를 다르게 쓰기로 했다. EKS 워크로드는 Bottlerocket을 유지하고, 사내 베어메탈 K8s만 Talos로 옮기는 그림이다. "OS를 통일하자"는 원래 목표와는 어긋나지만, 각 환경에 가장 잘 맞는 OS를 쓰는 게 운영 비용이 더 낮다는 결론에 다다랐다. 통일된 OS 한 개를 위해 각 환경에서 어색한 조합을 굴리는 것보단 낫다고 봤다.
물론 이게 정답은 아니다. 회사 보안 요구사항이 더 빡빡해지거나, 컴플라이언스 감사가 추가되면 EKS 쪽도 Talos로 옮기는 게 맞을 수도 있다. 그때 가서 다시 생각해보려고 한다.
혹시 베어메탈에 Bottlerocket 굴리는 팀, 또는 EKS에서 Talos 쓰는 팀 있으면 운영 경험 좀 듣고 싶다. 댓글이나 메일 환영.