결국 근본은 리눅스 커널과 네트워크 기초다
요즘 부쩍 와닿는 말이 있다. 인프라의 최종 끝판왕은 항상 리눅스 커널과 네트워크 기초로 귀결된다는 것.
지난 한 달 동안 OpenStack 클러스터를 직접 굴리면서 부딪힌 문제들의 겉모습은 전부 상위 레이어였다. 배포 도구, 스토리지 오케스트레이션, 인증 연동, 네트워크 가상화. 그런데 실제로 파고 들어가면 매번 같은 곳에 도착했다.
스토리지 클래스 설계는 결국 블록 디바이스와 디스크 I/O가 커널을 어떻게 통과하는지의 문제였다. 네트워크 설계 결정은 아무리 추상화 레이어가 감싸고 있어도 밑바닥은 netfilter와 리눅스 브리지, veth pair 위에서 벌어지는 일이었다. OS 업그레이드는 커널과 유저랜드의 관계를 이해해야 안전하게 할 수 있는 작업이었고, 인증 시스템의 순환 의존 문제는 분산 시스템 이론 이전에 부팅 순서와 네트워크 도달성이라는 아주 기초적인 문제였다.
OpenStack이든 Kubernetes든 결국 리눅스 커널 기능 — namespace, cgroup, netfilter, kvm — 을 오케스트레이션하는 껍데기다. 껍데기가 고장 났을 때 진짜 디버깅은 항상 ip netns exec, tcpdump, dmesg 레벨로 내려간다. 추상화는 편의를 주지만, 장애는 추상화를 뚫고 올라온다.
도구를 먼저 배우고 나서 근본으로 내려가는 사람과, 근본을 알고 도구를 쓰는 사람은 장애 상황에서 완전히 다르게 움직인다. 강의실에서 듣는 네트워크 기초와, 새벽에 컨트롤러가 안 붙어서 패킷 덤프를 뜨면서 배우는 네트워크 기초는 같은 지식이라도 무게가 다르다. 결국 근본은 리눅스 커널이고, 네트워크 기초다.
댓글
아직 댓글이 없습니다. 첫 댓글을 남겨보세요.