Kubernetes
Kubernetes is an open-source system for automating deployment, scaling, and management of containerized applications.
— 쿠버네티스 공식 도큐먼트 초입
인프라 엔지니어를 코딩 대신 공백 문자 2칸 정렬 노가다를 하는 'YAML 장인'으로 전락시킨 마법의 오케스트레이션. 서버 하나 더 띄우려다가 가상 사설망(VPC) 라우팅 테이블이 통째로 꼬여서 주말 출근 확정됨
1. 개요
현대 데브옵스와 클라우드 인프라 생태계의 사실상 표준(de facto standard)인 컨테이너 오케스트레이션(Container Orchestration) 플랫폼이다. 구글이 오랜 기간 사내에서 굴리던 클러스터 관리 도구인 '보그(Borg)'의 유산을 바탕으로 오픈소스화했으며, 현재는 CNCF 하에 수많은 대기업들의 사랑과 증오를 한 몸에 받으며 성장하고 있다. 수백, 수천 개의 도커 컨테이너를 알아서 배포하고, 죽으면 살려내고(Self-healing), 알아서 크기를 조절하는(Auto-scaling) 인프라계의 절대 신이다.
2. 조타 키의 무게와 압도적 복잡성
Kubernetes라는 이름은 그리스어로 '키잡이(Helmsman)'나 '파일럿'을 의미하며, 로고 역시 7개의 살을 가진 조타 핸들 형태이다. 이 키를 쥐는 대가로 엔지니어는 인프라의 마이크로 서비스 아키텍처를 온전히 수용해야 하는 고통을 안는다. Pod, Service, Ingress, ConfigMap, Secrets, PVC 등 온갖 기괴한 추상 객체들의 동작 원리를 모두 암기해야 제대로 부릴 수 있으며,(...) 설정 파일 하나를 잘못 고쳐 배포하는 날에는 서비스가 소리 없이 전면 마비되는 공포를 맛보게 된다.1
3. YAML 엔지니어의 비애: 띄어쓰기가 부른 대참사
쿠버네티스를 다루는 사람들은 스스로를 프로그래머가 아닌 YAML 엔지니어라 부른다. 온갖 배포 및 환경 설정이 무수한 YAML 양식으로 채워지기 때문이다. 인덴트(들여쓰기) 공백 2칸을 3칸으로 잘못 치는 단순 실수만으로 빌드 파이프라인 전체가 에러를 뿜어대며 주저앉는다. 이 미세한 줄 맞추기를 하다가 안구 건조증과 탈모를 호소하는 시니어 엔지니어가 수두룩하다.
4. 관련 밈 및 드립
4.1. YAML 프로그래머 (YAML Developer)
파이썬이나 C++ 같은 거창한 코드를 치는 것이 아니라, 하루 종일 YAML 파일 5천 줄짜리 명세서를 들여다보며 공백 짝을 맞추는 데 목숨을 거는 현대 클라우드 아키텍트들의 슬픈 현실을 풍자하는 자조적인 밈이다. '당신이 가장 즐겨 쓰는 언어는 무엇입니까?'라는 질문에 울며 겨자 먹기로 'YAML'이라 답하는 장면이 대표적이다.
4.2. CrashLoopBackOff의 루프물
쿠버네티스 컨테이너 상태 중 가장 악명 높은 것으로, 파드를 실행했더니 알 수 없는 오류로 죽고, 쿠버네티스의 '자가 치유(Self-healing)' 철학에 의거해 알아서 다시 살렸으나 또 즉사하고, 이를 지켜보던 시스템이 재생성 주기를 점차 늘려가며(BackOff) 무한 부활-자살을 반복하는 현상이다. 엔지니어가 로그를 뜯기 전까진 영원히 이 시시포스의 형벌에서 벗어나지 못한다.
5. 여담
- K8s라는 약어의 유래: 'K'와 's' 사이에 8글자('ubernete')가 생략되어 만들어진 업계 표준 약어다. 비슷하게 국제화는 i18n, 현지화는 l10n 등으로 불린다.
- 스타트렉의 이스터 에그: 구글 내부 프로젝트 개발 당시 암호명은 스타트렉에 등장하는 사악한 기계 종족인 '보그(Borg)'였으며, 쿠버네티스 로고가 칠각형인 이유 역시 보그 함선 디자인과 우호적인 성향을 띠던 '세븐 오브 나인(Seven of Nine)' 캐릭터에서 영감을 받았기 때문이다.
- 로컬 테스트의 지옥: 내 컴퓨터에서 쿠버네티스를 가볍게 테스트하겠다고 미니큐브(Minikube)나 킨드(Kind)를 띄우는 순간, 비행기 제트 엔진 소리와 함께 노트북 키보드 상단에서 불판 삼겹살을 구울 수 있을 정도의 고열이 방출된다.