270페이지 정도 되는 이 책은 아쉽게도 아직 번역서가 나오지 않았다. Kubernetes 관련 그룹 스터디로 하면서 보게 되었고 12월 23일부터 시작해서 4월 7일까지 했으니 3달 반 정도 매주 온라인으로 스터디를 한 셈이다.
클라우드 네이티브라는 용어는 요즘 많이 사용하지만, 개념상으로 얘기하는 게 아니라 이 책은 쿠버네티스에서 컨트롤러와 오퍼레이터가 커스텀 리소스와 커스텀 API 서버를 만들어서 Kubernetes 위에 올리는 방법을 설명한다. 그렇다 보니 Kubernetes 위에 배포할 서비스는 어떤 형태가 되어야 하는지 설명하는 게 아니라 Kubernetes가 내부적으로 어떻게 동작하고 어떤 이유로 그렇게 설계했는지를 설명하고 이를 확장하기 위해서 커스텀 API 서버와 커스텀 리소스를 작성해서 사용하는 방법을 설명한다.
책은 2019년 중순에 나왔는데 시기상으로 보면 Kubernetes가 1.14에서 1.15가 나오던 시기고 책의 내용도 여기에 맞춰져 있다. 이후에 Kubernetes가 엄청나게 달라지진 않았다고 하더라고 관련 생태계는 꽤 달라졌는지 설명 부분은 크게 문제 안 되는 것 같지만 예제 코드들은 지금과 다르거나 제대로 동작하지 않는 부분이 있어서 실제로 사용해 보려면 다른 자료도 꽤 공부해야 할 것 같다.
처음 이 책을 볼 때 이런 내용인지 잘 모르고 시작했지만 ((그룹 스터디가 아니었으면 사실 끝까지 보지 못하고 포기했을 것 같다. 그런 만큼 난이도가 상당하다.** Kubernetes의 내부 구조를 많이 설명하기에 실제로 어렵기도 하고 당장 궁금하던 부분이 아니기 때문에 더 그런 것 같다.
그런데도 클라우드 네이티브라던가 Kubernetes 네이티브같은 용어를 너무 간단한 개념만 설명하는 책이 아닌 실제로 Kubernetes를 제대로 활용하려면 어떤 방법이 있는가를 설명하고 있어서 책 내용은 아주 좋다. 사실 책을 다 보고 나서도(3개월 넘게 봐서 그런지 몰라도...) 뒷부분을 공부하면서 앞부분에 공부했던 건 계속 까먹게 되고 뒤로 갈수록 점점 어려워지면서 겨우 진도 따라가기에 급급했기에 다 이해하진 못했지만 Kubernetes를 쓰는 환경에 있을 때 이 책에서 설명하는 커스텀 리소스와 커스텀 API 서버의 가능성을 알고 있을 때의 차이는 아주 큰 것 같다. 어떤 기능을 구현한다고 할 때 외부에서 API만으로 상황을 확인하거나 기능을 구현하는 것 외에 아예 Kubernetes 안에 배포하고 관리 자체는 Kubernetes 에 의존하면서 필요한 기능을 구현할 수 있다는 점은 생각의 폭을 많이 넓혀준다.(내가 이해하지 못했다는 게 문제....)
직접 만들어서 배포하지 않는다고 하더라도 Kubernetes를 운영하다 보면 다른 곳에서 만든 커스텀 리소스(CRD)를 많이 쓰게 되는데 이러한 구조를 이해하는데도 상당히 도움이 된다. v1alpha
, v1beta
같은 버전이 어떻게 관리되는지 Kubernetes 내에서 성능 문제를 해결하기 위해 informer를 포함한 주요 컴포넌트들이 어떻게 동작하는지 이해하는 것 만들어도 Kubernetes를 많이 사용한다면 상당히 도움 될 정보라고 생각한다.
실제로 커스텀 리소스와 커스텀 API 서버를 배포하는 뒷부분에 가서는 실용적인 예제는 아니고 동작을 보여주기 위해 만들어진 예제임에도 불구하고 실제로 동작하게 하려면 많은 부분을 테스트해봐야 한다. GitHub 예제 저장소를 제공하고 있지만, 책의 설명에서는 생략된 부분도 많기 때문에 실제로 이해하려면 코드를 가지고 다양한 테스트를 해보는 수밖에 없는 것 같고 이쪽 생태계는 최근 2~3년 사이에도 꽤 달라진 것 같아서 실제로 코드를 작성해봐야 제대로 효과를 볼 수 있으리라 생각한다.
그룹 스터디
블로그에서 그룹 스터디 얘기도 몇 번 한 것 같은데 코로나 시대인 만큼 온라인으로 했다. 온라인 그룹 스터디는 처음 해봤는데 이동 시간이 없어서 나 같은 경우는 참여하기가 훨씬 좋았다.
개인적으로 내가 좋아하는 방식인 책의 진도에 따라서 다 같이 공유된 노트에 정리하고 해당 내용을 진행하는 사람은 스터디 당일에 무작위로 뽑아서 진행한다. 이 사람이 가르친다기보다는 진도를 진행하는 거에 더 가까우므로 내용만 잘 정리되면 진행하는 사람은 책을 안 읽었어도 괜찮은 경우도 많고 어떨 때는 오히려 더 도움 되는 경우도 많다.(모르는 부분을 논의하면서...) 이 방식을 많은 그룹 스터디를 하다가 개선된 방식 중 하나인데 이번 진도의 담당자를 미리 정하는 경우 다른 사람을 해당 주에 안심하는 분위기가 형성되는 것을 막기 위함이다. 그룹스터디는 결국 공부하고자 해서 모인 건데 "1장 담당 누구" 같은 식으로 진행하다 보면 난 2장이니까 천천히 봐야지 라던가 그 사람이 잘 설명해주겠지 하는 분위기가 형성되기 쉽다고 생각한다. 다 같이 정리하고 누구나 진행할 수 있다는 (약간의) 긴장감이 이 문제를 다 해결하진 않지만 다 같이 정리하고 공부해야 할 부분이라는 분위기는 잘 유지 된다고 생각한다.
원래는 노트에 해당 진도의 요약본을 정리하는 것이지만 그동안 경험에 따르면 이번 "Programming Kubernetes"처럼 원서로 공부하는 경우에는 책을 전부 번역하듯이 진행이 된다. 이건 내 성향상 내가 전체 번역을 하면서 그렇게 진행되는 건지는 잘 모르겠다. 영어 원서를 읽을 때에는 내용이해와 별도로 한글로 요약해서 적어야 하는데 이 부분이 상당히 어렵고 다른 사람들은 어떻게 해석할지도 궁금하다 보니 거의 전 문장을 번역하게 되는 것 같다.(이전 스터디도 그랬었다. 그래서 예전에는 이왕 다 번역한 김에 번역서를 내볼까? 하는 얘기도 진행되었지만, 또 우리가 보려고 막 쓴 거랑 번역서의 품질로 문장은 만드는 건 또 다른 얘기라 결국은 못 했었다. )
Kubernets도 잘 모르고 공부는 해야 하는 상황에서 스터디 멤버는 아주 좋았기 때문에 나름 내가 할 수 있는 일이라도 하자는 생각에 번역이라도 열심히 했다.(번역했다고 다 이해한 건 아니지만, 다시 읽어보기엔 전보다는 노력이 덜 들 거라고 생각한다.) 코로나 덕(?)에 약속도 거의 없으니 열심히 공부하고 번역해서 (아마도) 개근하면서 스터디를 열심히 참여했다. 이렇게 열심히 했는데도 내용을 잘 이해 못 한다는 거에 회의감이 들지만..... ㅠ
1시간은 책의 진도를 나가는 데 쓰고 다른 1시간은 CNCF 프로젝트를 살펴보는 데 사용했다. 이는 2019년에 그룹 스터디를 했던 방식이었는데 그때 경험이 나쁘지 않아서 이번에도 비슷하게 도입했다. 그사이에 CNCF의 프로젝트들도 엄청나게 늘어나기도 했다. 시작은 CNCF 프로젝트였지만 진행하면서 인프라 관련 프로젝트는 관심 있으면 아무거나 하게 되었다.
이때는 앞의 시간과는 다르게 한사람씩 주제를 맡아서 공부해온 다음에 해당 프로젝트에 대해서 설명하는 방식을 취했다. 그래서 3달 반 동안 아래 프로젝트를 살펴봤다.
- Rook : 클라우드 네이티브 스토리지
- Cluster API : Kubernetes 클러스터 관리용 선언적 API
- CNI : 컨테이너 네트워크 인터페이스
- Telepresence : Kubernetes 개발 워크플로우, 관련 글
- Cortex: Prometheus 장기 스토리지, 관련 글
- etcd : 분산 키-밸류 스토리지
- cilium : eBPF 기반 네트워크 인터페이스, 관련 글
- k8dash, OpenMetrics, Strimzi
- Vitess : MySQL 클러스터링 시스템
- NATS : 메시징 시스템
- Waypoint : HashiCorp의 배포 도구, 관련 글
- Fleet : Rancher에서 만든 Kubernetes 클러스터 관리 도구
- CockroachDB : Google Spanner 데이터베이스의 영향을 받은 오픈소스 데이터페이스
나도 여기서 2개 정도는 공유했지만, 이 많은 프로젝트를 내가 직접 테스트해보려면 어마어마한 시간이 걸렸을 텐데 깊게 이해는 못 해도 스터디 덕분에 어떤 용도의 프로젝트고 어떤 특징이 있는지는 가만히 앉아서 배울 수 있게 되었다. 꽤 많이 살펴봤어도 아직 CNCF에는 모르는 프로젝트가 더 많긴 하다.
3달 반이 짧은 시간은 아니지만 그동안 스터디 중심으로 시간을 쓰면서도 꽤 즐거운 시간이었도 기슷한 고민을 하는 사람들과 같이 공부하니 배울것도 정말 많은 시간이었다. 오랜만의 스터디였는데 아주 재밌었다.
Comments