개요
이전 게시글(홈서버를 소개합니다 🐥)에서 구성해서 사용하고 있는 홈서버에 대해서 소개했습니다 😊
이번 글에서는 홈 서버를 쓰면 어떤게 좋은지! 쿠버네티스를 쓰면 어떤게 좋은지! 설명해보려 합니다.
부제: 홈 서버 팝니다. 쿠버네티스 팝니다.
어떤게 불편했길래 홈서버랑 쿠버네티스까지 사용하게 되었을까요.
홈서버와 쿠버네티스를 어쩌다가 사용했는지를 말씀드리기 앞서 작성자의 과거 이야기를 조금 꺼내 보겠습니다.
(스압주의 긴 글을 읽는게 힘드시다면 넘어가셔도 됩니다)
때는 작성자의 대학생 시절 운좋게 학원 선생님의 소개로 Node.js로 웹소켓 서버를 만드는 외주를 소개받게 되었습니다.
외주로 Node.js를 처음 접하면서 비즈니스적인 로직은 어떻게 어떻게 작성을 했지만 서버를 운영해본 경험이 없는 저는 서버는 그냥 켜두면 알아서 돌아가는 애겠거니 하고 EC2에 리눅스 서버를 올려서 돌렸지만 서버는 생각보다 나약하기 그지 없었습니다.
테스트하면서 조금만 코드를 잘못 작성하면 에러가 나서 종료되고.. 로그 때문에 디스크가 꽉차서 죽기도 하고.. 원인 모를 이유로 서버가 죽는 경우도 많아서 서버가 종료되면 자동으로 재시작 시켜주는 forever나 PM2같은 프로세스 관리 도구를 사용하기도 했지만 노트북을 항상 들고다니며 문제가 생기면 원인파악하고 서버를 재시작하는게 일상이였습니다. 🫠
그래서 저는 항상 안정적으로 서버를 운영할 수 있는 방법이 어떤게 있을지 고민하면서 (고민만 했습니다 🤓)
방법을 찾았었는데 그중에 눈에 들어온게 홈서버(NAS)와 쿠버네티스였습니다.
홈서버를 사용하면 어떤게 좋을까요?
자유로운 서버 생성/제거
- ProxmoxOS를 사용하면 클라우드를 사용하는 것 처럼 필요할때 언제든지 서버를 만들고 지울 수 있습니다. 원하는 사양, 원하는 OS로 가상머신을 생성할 수 있어요. 🙂
로컬 네트워크에서의 서버 구성
- 로컬 네트워크에서 서버를 구성하게되면 로컬의 사설망을 통해서 통신하기 때문에 외부 네트워크를 거치는 것보다 훨씬 효율적이고 외부에서의 공격으로부터 자유로워요
- AWS에서도 Private VPC를 통해 클라우드 상의 리소스들을 내부 네트워크로 묶거나
로컬 네트워크를 클라우드상의 사설 네트워크와도 묶을 수 있지만 로컬 네트워크에서는 추가비용과 복잡한 과정 없이 사설망을 구성할 수 있어요.
나만의 실험실 🥸
- 언제든지 서버를 생성하고 제거할 수 있기 때문에 깃헙에 공개되어 있는 오픈소스 프로젝트들을 얼마든지 설치해서 사용해볼 수 있어요. awesome-selfhosted 레포지토리에서 셀프 호스팅 가능한 다양한 오픈소스 프로젝트를 만나볼 수 있어요.
쿠버네티스를 사용하면 어떤게 좋을까요?
자동화된 서버(컨테이너) 관리
- 서버에 대한 설정을 정의하는 파일에 서버를 몇개 띄울건지만 정의해놓으면 자동으로 정의된 개수만큼 서버를 띄우기 위해 쿠버네티스가 노력해요.
- 서버의 자원 사용량(CPU, Memory)을 모니터링해서 자동으로 서버의 개수를 늘리거나 줄일 수 있어요. 예를들면 CPU사용량이 70퍼 이상이라면 최대 5개, 최소 2개로 설정해두면 CPU가 70퍼 이상 되었을때 자동으로 5개까지 늘어났다가 다시 사용량이 줄어들면 서버도 2개까지 줄어들어요.
- 서버를 일일이 관리하는 부분에 대해서 자유로워져요. 쿠버네티스는 미리 선언해둔 서버의 상태를 유지하려는 성질이 있기 때문에
잘못됬다 싶으면 죽여요 알아서 다시 살아나요.
편리한 원격지로의 배포, IaC(infrastructure as code)와 GitOps
- 쿠버네티스는 기본적으로 API통신을 하는 서버로 구성되어 있어요. 그래서 서버에 접속하지 않고 로컬에서 명령어 또는 미리 정의한 선언 파일을 통해 어플리케이션을 배포할 수 있어요.
- 쿠버네티스는 리소스 선언 파일을 통해 어플리케이션을 배포할 수 있기 때문에 GitOps를 적용하게되면 Git의 버전관리와 원격 저장소의 이점을 모두 활용하면서 어플리케이션을 배포할 수 있어요. (리소스 정의 파일을 코드로 정의해서 Git에 푸시하면 자동으로 서버가 생성되요!)
- GitOps를 지원해주는 ArgoCD를 통해 서버를 모니터링하는 모습이에요. Git에 리소스 정의 파일을 수정하면 ArgoCD가 해당 깃헙 레포지토리의 파일을 읽어서 선언된 상태로 변경해줘요.
서버 확장 및 네트워크/하드웨어 제약의 자유로움
- 쿠버네티스는 기본적으로 대규모 시스템 구성을 염두에 두고 만들어졌어요. 서버가 추가되어도 쿠버네티스 클러스터에 연결하기만 하면 기존에 구성되어 있던 네트워크의 서버들과 내부 네트워크 통신이 가능해요. 네트워크 대역이 달라도, 물리적으로 떨어져 있어도 하나의 사설 네트워크처럼 동작하도록 클러스터로 묶을 수 있어요. 또한 호스트(서버)간에 사양이 다르더라도 서버별로 자원을 일부 할당해서 사용하고 쿠버네티스가 서버의 리소스 사용량을 보고 여유가 있는 호스트에 서버를 배치해주기 때문에 서버를 확장하는 과정이 굉장히 편리해요.
바로 실행 가능한 형태로 패키지 배포
- 쿠버네티스는 기본적으로 독자분들도 잘 알고 계시는 도커의 컨테이너 기술을 이용해서 런타임 형태로 패키징하고 동작하기 때문에 도커를 사용했을때의 장점을 모두 누릴 수 있는건 물론이고 여러 컨테이너 이미지들을 실행 가능한 형태로 묶어서 실행 가능한 helm패키지 형태로 배포할 수 있어요
- helm은 보다 복잡한 어플리케이션도 하나의 어플리케이션 형태로 배포가 가능하기 때문에 대부분의 오픈소스 프로젝트를 편리하게 구성할 수 있어요. 리눅스 서버에 직접 구성할때 소요되는 시간과 노력을 상당히 줄여줘요.
홈서버 팔아요. 쿠버네티스 팔아요.
이전 게시글(홈서버를 소개합니다 🐥)과 이번 게시글에서 홈서버와 쿠버네티스를 왜 사용하게 되었는지, 사용하면 어떤 장점을 누릴 수 있는지에 대해서 설명드렸는데요. 저는 홈서버와 쿠버네티스를 사용하면서 언제든지 원하는 만큼 원하는 사양으로 서버를 구성하고 안정적으로 운영할 수 있겠다는 생겼고, 처음에 이루고자 했던 목적인 안정적인 서버 운영
을 달성할 수 있었어요.
안정적인 서버 운영이 목적이 아니더라도, 백엔드 개발자라면 하나쯤은 구성해서 사용해보는 것도 좋다고 생각해서 추천하고 싶어요.
특히 저와 같이 저연차 주니어 백엔더라면 학습 측면에서도 많은 도움이 될거라고 생각합니다 😀
쿠버네티스에 익숙하지 않으신 분들이 많고, 마냥 생소하고 어려워 보이는 기술로 보일 수 있지만 인프라쪽에서는 선두적인 컨테이너 오케스트레이션 도구인 만큼 많은 분들이 관심을 갖고 필요하다면 적용까지 해볼 수 있으면 좋지 않을까 하는 생각에 이 글을 작성해 보았어요. 혹시라도 궁금한 부분이 있으시다면 언제든지 댓글로 질문 주시면 답변 드리겠습니다. 많은 관심 부탁드려요 🙇🏻♂️
추가로... 꾸준히 공부해서 최근에 CKA자격증도 취득하게 되었습니다 👏
와.. 감사합니다 ㅜㅜ 이런 글 필요했는데