10주차 금요일, 50일차 Today I Learned
Docker, K8s (5)
: 서버 관리의 어려움, Container Orchestration, 쿠버네틱스
✏️ 학습 내용
1. 서버 관리의 어려움
복잡한 다수의 서버로 구성된 시스템을 효율적으로 관리한다는 것은 쉬운 일이 아니다. 관리해야 하는 서버가 늘어난다면 어느 서버에 문제가 있는지, 어느 서비스에 문제가 있는지, 이런 문제들을 얼마나 빨리 알고 해결할 수 있을지 새로 들어온 사람이나 주니어가 잘 온보딩하려면 어떻게 해야 하는지 등 많은 문제와 고민이 생기게 된다.
이를 해결하기 위해서 문서화를 해도 현재 상황에 맞게 업데이트하는 것은 어려운 일이다. 상황에 따라 의미가 없는 경우도 많고, 많은 수의 서버를 하나하나 관리하고 명령을 실행한다는 것은 거의 불가능에 가깝다.
그래서 문서화가 아닌 코드로 대신 하기도 했다. 대화형 명령보다는 자동화된 스크립트로 해결하여 다수의 서버들에 명령을 대신 실행해준다. 관련된 다양한 툴들이 쏟아져 나왔지만, 배움의 어려움이 있고 설치 시 소프트웨어 충동 문제에는 크게 도움이 되지 않는다는 단점이 존재했다.
소프트웨어 충돌 해결을 위해 VM (Virtual Machine)이 도입되었다. 한 물리적 서버에 다수의 VM을 올리고 서비스별로 하나씩 할당했지만, 전반적으로 리소스 소비가 크고 느리다. 결정적으로 특정 VM 벤더 혹은 클라우드에게 종속되는 락인 효과가 발생하는 문제점이 존재했다.
이후 Docker가 도입되었고 모든 소프트웨어를 이미지로 만들면 어디서건 동작 가능했다. VM에 비해 리소스 낭비도 적고 실행 시간도 빠르며, 오픈소스이기 때문에 클라우드나 특정 업체의 락인 이슈도 없다. 다만 컨테이너의 수가 늘어나면서 관리가 힘들다는 점이 부각되었다. 그럼에도 불구하고 거의 단점이 없어서 서버 관리의 어려움을 어느정도 해결해준다.
Docker container는 컨테이너 생성이 비교적 쉽고 빠르며, 이미지를 통해 버전 관리를 하고 배포하며 문제 시에 롤백이 용이하다. 사용 언어 등의 환경에 따른 관리 방법에 차이가 없어서 편하기도 하다. 이로 인해 Dockerrk 서비스 배포의 기본이 되었다. 개발 후 이미지 빌드하여 이미지를 등록한 다음 컨테이너를 실행하면 서비스가 배포된다. 다만 컨테이너의 수가 기하급수적으로 늘어남에 따라 컨테이너를 효율적으로 관리할 수 있는 도구가 필요하다.
2. Container Orchestration
다수의 컨테이너들을 효율적으로 관리하기 위한 도구가 Container Orchestration이다. 한 클러스터 안에 다양한 서비스들이 공존하면 자원 요청을 받아 마스터가 자원을 할당할 수 있다. 컨테이너 오케스트레이션은 배포, 스케일링, 네트워크, 인사이트 등 다양한 기능을 제공하고 있다.
우선 서비스 이미지를 컨테이너로 배포하여 소프트웨어 배포가 가능하다. 이상이 감지되면 이전 버전으로 롤백할 수도 있다. 그리고 스케일링 기능을 제공한다. 특정 서비스의 컨테이너 수를 쉽게 늘리고 줄일 수 있는데, 이 때 서버의 utilization도 고려해야 한다. 다음으로 네트워크 기능도 제공한다. 서비스가 다수의 컨테이너로 나눠지면서 이들을 대표하는 로드 밸런서를 만들어 주어야 하고, 서비스들 간에 서로를 쉽게 찾을 수 있어야 한다. 마지막으로 다양한 인사이트를 도출할 수 있어야 한다. 노드/컨테이너 문제 시 해결할 수 있어야 하며, 전체 서비스 분석이 가능하다.
3. K8s (쿠버네틱스)
수많은 Container Orchestration 중 K8s (쿠버네틱스)가 가장 널리 사용된다.
쿠버네틱스 (Kubernetes)는 컨테이너 기반 서비스 배포/스케일/관리 자동화를 해주는 오픈 소스 프레임웍이다. 가장 많이 사용되는 컨테이너 관리 시스템으로, 이 위에 기능을 추가한 컨테이너 오케스트레이션 툴들도 생겨나고 있다. 확장성이 좋아서 다양한 환경에서 사용되며, 다수의 서버에 컨테이너 기반 프로그램을 실행하고 관리할 수 있다. 보통 Docker와 같이 사용된다.
Pod란 같은 디스크와 네트워크를 공유하는 하나 이상의 컨테이너들의 집합이다. 쿠버네틱스 사용자가 사용하는 가장 작은 빌딩 블록이면서 1 Pod는 보통 하나의 컨테이너로 구성되어 있다. Pod는 네트워크 주소를 갖는 self-contained server이다.
쿠버네틱스의 기본 구조는 마스터-노드로 이루어져 있다. 마스터 안에는 여러 프로세스들이 돌고 있다.
4. 참고 블로그
https://tech.socarcorp.kr/data/2021/06/01/data-engineering-with-airflow.html
쏘카 데이터 그룹 - Airflow와 함께한 데이터 환경 구축기(feat. Airflow on Kubernetes)
지난 3년간 Airflow 구축 및 운영기록
tech.socarcorp.kr
https://www.bucketplace.com/post/2021-04-13-버킷플레이스-airflow-도입기/
버킷플레이스 Airflow 도입기 - 오늘의집 블로그
탁월한 데이터플랫폼을 위한 Airflow 도입기
www.bucketplace.com
💡 배운 점
- 서버 관리가 왜 어려운지, 어떻게 해결해오고 있는지에 대해 살펴보았다.
- Container Orchestration에 대해 알아보았다.
- K8s (쿠버네틱스)에 대해 간략하게 배웠다.
📝 남아있는 의문과 개선점
- 서버 관리 트렌드
- 쿠버네틱스에 대해
☁️ 소감
강의에서는 Docker를 중점적으로 다루어왔다. 하지만 멘토님 말씀으로는 요즘 Docker는 많이 사용하지 않는다고 하여 혼란스러운 상태이다. 그렇다면 무엇을 배워야 하는 것인지, 전체적인 서비스 이용 흐름에 대해 먼저 파악하고 결정해야 할 것 같다.
그리고 쿠버네틱스를 배우는 것에 대해 기대를 했었는데, 이 부분이 어렵다고 하여 배우지 못해서 아쉽다. 나중에 일하다보면 배울 기회가 있다고 하시는데, 조금은 체험해보고 싶었다. 강의에서는 어떻게 다루는지 궁금했었는데 이번 주차는 쉬어가는 느낌으로 분량이 대체적으로 짧은 것 같다.