좌충우돌 kubernetes 익히기(1)

코인원

TL;DR

kubernetes를 잘 이용하기 위해서는 주요 개념을 제대로 이해하고 익히는 것이 중요합니다. 먼저 kubernetes objects, controllers, control plane 개념을 알아보고, kubernetes를 사용한 경험을 중점적으로 말씀드리겠습니다.

Photo by Luca Bravo on Unsplash

안녕하세요, CGEX DevOps 엔지니어 김영한입니다. 제가 kubernetes라는 용어를 알게 된 것은 2017년 가을 정도로 기억됩니다. kubernetes는 docker swarm과 유사한 container orchestration tool 정도로 어렴풋이 알고 있었습니다.

kubernetes는 어느 정도 규모 있는 서비스를 개발하거나 운영할 때 효과적인 기술입니다. 초기 스타트업에서 간단한 웹서비스에 적용하려다가 자칫 overkill이 될 수 있습니다. kubernetes는 1) 언제 사용할지 2) 어느 곳에 활용해야 할지 신중하게 고민하고 가늠해 봐야 할 기술 스택입니다. 다행히 저는 코인원에서 kubernetes를 사용해 볼 수 있는 기회를 얻을 수 있었죠.

kubernetes를 이야기하기에 앞서, 코인원에 대해 좀 더 이야기해보겠습니다. 2017년 말에 불어닥친 암호화폐 열풍으로 인해 거래소 이용자와 거래량이 급증하고 덩달아 서버에 걸리는 부하도 크게 높아졌습니다. 내부적으로 새로운 서비스 아키텍처를 도입해야 한다는 목소리도 함께 높아졌습니다. ‘monorithic architecture에서 microservices architecture로의 전환’이 절실히 요구되는 시점을 코인원이 맞이한 것입니다.

코인원은 이에 대해 과감히 기술 연구 개발에 투자했습니다. (사실 이것이 코인원의 두드러진 장점입니다!) 2018년 초, 핵심 멤버들이 해외 Pivotal Labs 프로그램에 3개월간 참여하고 돌아왔습니다. 저를 비롯한 DevOps 엔지니어들은 Pivotal Platform Dojo라는 별도의 프로그램에 1개월간 참여했습니다.

그 결과 3개월 뒤, 새로운 microservices 구조의 글로벌 암호화폐 거래소 CGEX를 개발하는 성과를 도출하게 되었습니다. 이런 일련의 과정에서 kubernetes 도입은 정말 시기 적절했다고 판단합니다. Pivotal에서 배워온 개발 문화와 kubernetes가 제공하는 서비스 환경이 훌륭한 시너지 효과를 내었습니다. 팀의 모든 엔지니어들이 cloud native, microservices 개념을 몸으로 배울 수 있었고, 이에 든든한 서비스 기반을 단시간 내에 구축했습니다.

https://cgex.com/

CGEX 경우와 같이, kubernetes는 cloud native / microservices architecture로 서비스를 개발하고 구현해 가는데 보다 편리하고 유연성 있는 플랫폼을 제공해줍니다. 또한 kubernetes 연관된 CI/CD 자동 파이프라인 구축 방법, monitoring, logging, 그리고 관련 보안 기법들을 함께 습득하고 적용해야 궁극적으로 원하는 효과를 거둘 수 있습니다.

저는 CGEX 팀의 DevOps 엔지니어로 일하면서, kubernetes를 익히고 사용한 경험을 함께 공유하고자 합니다. kubernetes 실제 이용과 밀접하게 연관된 툴들과 모범사례도 틈틈이 소개하겠습니다.

이제, 본격적으로 kubernetes에 대해 알아보시죠!

‘왜 kubernetes를 사용해야 할까요?’

AWS ec2 같은 vm 단위 기반으로 인프라를 구축해서 어느 정도 규모 있는 서비스를 개발하고 운영하다 보면 여러 가지 비효율적인 문제에 부딪히게 됩니다. 전통적인 vm 기반 방식과 kubernetes 기반 방식을 나름대로 비교해 보면 다음과 같이 나열할 수 있습니다.

비용 : vm 기반 방식은 자원을 알뜰하게 사용하는 것이 어렵습니다. 반면, kubernetes 경우 주어진 자원을 알아서 조절하며 사용할 수 있으므로 비용을 절감할 수 있죠. 마치 여행가방에 짐을 챙길 때 ‘같은 분량의 짐을 가방 두개에 넣느냐 or 가방 한개에 잘 정리해서 넣느냐’의 차이처럼 말입니다. (Automatic Bin Packing)

장애 대처 : vm 기반 방식에서는 load balancer에 물려있는 어느 하나의 vm에 장애가 발생하면 운영자가 해당 vm을 내리고 새로운 vm을 수동으로 올려야 합니다. 그러나 kubernetes 경우는 대부분 자동으로 복구해 줍니다. 요즘은 IT서비스에서 대부분의 서버나 서버 프로세스가 언젠가 장애를 일으킨다는 점을 기본적으로 가정하고 이에 대비하는 추세입니다. kubernetes는 이런 장애 상황에 대해 유연하게 대처할 수 있도록 만들어졌고 그렇게 운영됩니다. (Automatic Healing)

수평 확장/축소 : vm 기반 방식이나 kubernetes 기반 방식 모두 자동적인 수평 확장/축소(auto scaling)를 지원합니다. 다만 vm 기반의 경우, 이를 구현하는 방법이 사용하는 관리형 public cloud 서비스에 따라 차이가 있고 번거로울 수 있는데 kubernetes 경우는 auto scaling 개념을 근본적으로 내포하고 있으므로 사용법이 간편하고 표준화 되어 있습니다.

업데이트 배포 : vm 기반 방식에서 서비스를 업데이트 배포하려면 무중단 롤링업데이트를 실현하기가 어렵습니다. kubenetes는 다양한 배포 방식을 지원하며 기본적으로 무중단 롤링업데이트를 지원합니다. 코인원과 같은 암호화폐 거래소는 연중 무휴로 서비스 되기 때문에 무중단 롤링 업데이트가 가져다 주는 가치는 매우 크다고 볼 수 있습니다. (Automatic Rolling Update)

환경 이전 : vm 기반 방식에서는 on-premise 환경 또는 cloud 환경에 맞는 전문적인 배포, 운영 기법을 필요로 합니다. kubenetes에서는 어떤 환경이든 동일한 방식으로 배포/운영을 할 수 있기 때문에 환경 이전에 드는 비용이 매우 적습니다. 이뿐만 아니라 development 환경과 production 환경도 거의 추가적인 노력 없이 동일한 환경을 가져갈 수 있습니다. 이는 multi-cloud 환경 구축이나 disaster recovery (재해 복구) 환경을 구축하는데도 유리하게 작용됩니다.

선언적(declarative) or 명령절차적(imperative) 배포 : vm 기반 방식에서는 서비스를 배포하려면 운영자가 하나하나 명령을 내려 절차적, 순차적으로 배포합니다. kubernetes에서는 선언적인(declarative) 명세(manifest)에 따라 배포가 진행되고 자동으로 관리되기 때문에 사람의 실수가 적고, 업무 효율성이 높아지게 됩니다. (Infrastructure as a code)

업계 표준: 2019년 현재 kubernetes는 업계의 표준(de facto standard) 환경으로 굳건히 자리를 잡아가고 있습니다. 구글, 아마존, 마이크로소프트 등 모든 public cloud 제공자들이 kubernetes 관련 managed service를 앞다투어 제공하고 있는 것만 보더라도 알 수 있습니다. 업계 표준이 다 좋은 것은 아니지만, 그만큼 관련 커뮤니티 등 그 생태계가 탄탄하다는 것이기에 적어도 향후 10년 정도는 유지 발전될 것이라고 예상할 수 있습니다.

Cloud Native, MSA 최적화: 이는 kubernetes가 인기를 끌며 성장하게 된 이유이기도 합니다. kubernetes는 cloud native applicatoin 및 microservice architecture에 적합한 환경을 제공합니다. kubernetes는 현재도 약 3개월 주기로 업그레이드가 되고 있습니다. 이 뜻은 최신 개발 트렌드와 서비스 아키텍처를 유효 적절히 품으면서 진화 발전하고 있다는 것입니다.

위와 같은 이유들로 IT업계에서 kubernetes는 점점 더 거부할 수 없는 기반 환경이 되어가고 있습니다. 다음 편에서는 kubernetes를 익히기 위한 필수 사전 지식들을 소개하도록 하겠습니다.

김영한, DevOps Engineer, CGEX

기업문화 엿볼 때, 더팀스

로그인

/