안녕하세요. 인포그랩 DevOps 엔지니어 Toma입니다. 오늘날 많은 기술 조직에서 서비스의 유연성과 확장성을 극대화하기 위해 Kubernetes로 마이그레이션을 고려합니다. 이 글에서는 Kubernetes로 마이그레이션을 성공적으로 수행하기 위한 핵심 정보를 소개할 건데요. 지금부터 Kubernetes 마이그레이션의 필요성과 사전 준비 사항, 유의 사항을 알아보겠습니다.

Kubernetes 마이그레이션의 필요성

Kubernetes는 컨테이너화된 애플리케이션을 관리하는 오픈 소스 플랫폼이자 컨테이너 오케스트레이션 시스템입니다. 이는 컨테이너화된 애플리케이션의 배포, 확장, 관리를 자동화하고요. 이로써 소프트웨어를 유연하게 효율적으로 배포하고, 개선하며, 유지하는 데 도움이 되죠.

오늘날 많은 기술 조직이 Kubernetes로 마이그레이션 하는데요. 그 이유는 다음과 같습니다.

  • 운영 효율성 향상
    • Kubernetes는 워크로드를 자동으로 배치하고 리소스를 최적화합니다. 그 결과, 관리 복잡성이 줄어듭니다.
  • 시장 요구 신속 대응
    • Kubernetes를 활용하면 애플리케이션을 빨리 배포하고, 새로운 기능을 자주 출시할 수 있습니다. 이로써 시장 요구에 즉각 대응할 수 있습니다.
  • 비용 절감
    • Kubernetes는 리소스를 효율적으로 활용하고, 클라우드 환경을 최적화합니다. 이는 인프라 비용을 절감하는 데 도움이 됩니다.
  • 멀티 클라우드, 하이브리드 클라우드 지원
    • Kubernetes는 다양한 클라우드 환경과 온프레미스 환경을 통합적으로 관리하도록 지원합니다. 이는 특정 클라우드 제공업체에만 의존하지 않아 사용자가 편리하게 사용할 수 있습니다.

Kubernetes 도입 장점

Kubernetes로 마이그레이션 하면 아래와 같이 다양한 장점을 누릴 수 있는데요. 이는 기술 조직의 Kubernetes 도입 수요를 높이는 요인입니다.

  • 자동화된 오케스트레이션
    • Kubernetes는 컨테이너 워크로드를 자동으로 스케줄링하고, 헬스 체크와 셀프 힐링 기능을 제공합니다.
  • 확장성
    • 서비스 트래픽이 늘어남에 따라 워크로드를 수평적으로 확장하거나 축소할 수 있습니다.
  • 고가용성
    • Kubernetes는 여러 노드에 워크로드를 분산 배치합니다. 따라서 시스템 장애가 발생해도 서비스를 지속적이고 안정적으로 제공할 수 있습니다.
  • 이식성
    • Kubernetes는 컨테이너를 기반으로 애플리케이션을 배포합니다. 이에 특정 클라우드 제공업체에만 의존하지 않고 다양한 환경에서 동일하게 애플리케이션을 실행할 수 있습니다.
  • CI/CD 구현
    • Kubernetes는 DevOps와 자연스럽게 통합됩니다. Argo CD와 같은 GitOps 도구로도 지속적 통합/배포(CI/CD)를 쉽게 구현할 수 있습니다.
  • 생태계 확장성
    • Helm, Istio, Prometheus, Grafana와 같은 도구로 Kubernetes 생태계를 확장할 수 있습니다. 이로써 모니터링, 서비스 메시, 로깅 등 기능을 추가로 이용할 수 있습니다.

다음 표는 온프레미스 환경과 Docker 기반 환경, Kubernetes 기반 환경을 비교한 내용인데요. 배포 방식, 확장성, 가용성, 리소스 사용, 이식성, 운영 복잡도 측면에서 Kubernetes 기반 환경의 장점을 파악할 수 있습니다.

2025-01-08-k8s-migration-0 | 인포그랩 GitLab

사전 준비 사항

Kubernetes로 성공적으로 마이그레이션 하려면 꼼꼼한 사전 준비가 필요합니다. 애플리케이션 구조, 인프라와 네트워크 구조 분석은 물론이고요. 운영과 관리 체계, 팀 역량과 조직 상태도 미리 분석해야 하죠. Kubernetes로 마이그레이션 하기 전에 구체적으로 파악해야 할 내용은 아래와 같습니다.

애플리케이션 구조 분석

  • 아키텍처 파악
    • ‘단일 애플리케이션(Monolith)인지, 마이크로서비스(Microservices) 구조인지’ 확인합니다.
    • 서비스 간 의존 관계(Dependencies)를 명확히 파악합니다.
  • 배포, 실행 방식 확인
    • ‘애플리케이션이 현재 어떤 방식으로 배포되고 실행되는지(예: VM, Docker)’ 확인합니다.
  • 호환성 평가
    • ‘애플리케이션이 컨테이너화에 적합한지’ 점검합니다.

인프라, 네트워크 구조 분석

  • 리소스 사용 현황 파악
    • CPU, 메모리, 스토리지 사용량을 파악합니다.
    • 이를 토대로 Kubernetes 클러스터에 필요한 리소스를 추정합니다.
  • 네트워크 구성 확인
    • 현재 시스템의 네트워크 토폴로지를 이해합니다.
    • 서비스 간 트래픽 흐름, 외부 연결 방식을 확인합니다.
  • 스토리지 구조 점검
    • 애플리케이션이 사용하는 데이터 저장소(로컬 볼륨, 네트워크 스토리지 등)를 점검합니다.
    • ‘Kubernetes Persistent Volume으로 전환 계획’을 세웁니다.

운영, 관리 체계 분석

  • CI/CD 파이프라인 파악
    • 현재 사용 중인 배포 도구(예: Jenkins, GitLab CI)를 파악합니다.
    • 그다음, Kubernetes와 통합 가능성을 검토합니다.
  • 모니터링, 로깅 체계 확인
    • 현재 모니터링 도구와 로깅 체계를 확인합니다.
    • Kubernetes 환경으로 마이그레이션 전략을 수립합니다.
  • 백업, 복구 절차 분석
    • 기존 시스템의 데이터 백업, 복구 절차를 분석합니다.
    • 이를 ‘Kubernetes 환경에 적용할 수 있는지’ 점검합니다.

팀 역량, 조직 상태 분석

  • Kubernetes, 컨테이너 기술 이해도 파악
    • 현재 팀의 Kubernetes, 컨테이너 기술 수준을 평가합니다.
    • 필요 시 교육 프로그램, 기초 도서 또는 외부 전문가 지원을 고려합니다.
  • 마이그레이션 목표 설정
    • 성능 개선, 비용 절감, 가용성/확장성 확보 등 구체적인 목표를 설정합니다.
    • 마이그레이션 범위(부분 이전 vs 전체 시스템 이전)를 결정합니다.
  • 조직 구조 점검
    • 운영팀, 개발팀 간 협업 프로세스를 점검합니다.
  • PoC(Proof of Concept) 수행
    • 마이그레이션 하기 전에 소규모 테스트 환경에서 PoC를 진행합니다.

마이그레이션 유의 사항

Kubernetes 마이그레이션은 크게 클러스터 설계, 네임스페이스 관리, 스토리지 관리, 데이터 마이그레이션 단계로 이뤄집니다. 퍼블릭 클라우드 환경, 온프레미스 환경별로 단계별 실행 전략은 다음과 같은데요.

2025-01-08-k8s-migration-1 | 인포그랩 GitLab

이밖에 Kubernetes 마이그레이션을 안정적으로 수행하려면 작업별로 아래 사항을 유의해야 합니다.

  • 컨테이너화 준비
    • 애플리케이션을 컨테이너화할 때 고려 사항(Stateful vs Stateless)
    • Docker 이미지 최적화, 빌드 전략
  • 리소스 관리
    • Pod 리소스 요청(Request)과 제한(Limit) 설정
    • 자동 확장(HPA, Cluster Autoscaler) 구성
  • 스토리지 마이그레이션
    • 기존 스토리지 데이터를 Kubernetes Persistent Volume으로 이전
    • 데이터 무결성, 백업 전략
  • 네트워크, 보안
    • 네트워크 정책(Network Policy) 설정
    • TLS 통신과 RBAC 적용
  • CI/CD 파이프라인 통합
    • Kubernetes와 통합 위해 기존 CI/CD 파이프라인 수정
    • GitOps 도구(Argo CD, Flux CD) 도입 여부 검토
  • 모니터링, 로깅
    • Kubernetes 환경에서 사용 가능한 모니터링 도구(Prometheus, Grafana)와 로깅 체계(Fluentd, ELK Stack)
    • Prometheus, Grafana, ELK Stack 등을 활용한 모니터링
    • 로그 분석, 알림 시스템 구축
  • 서비스 중단 방지
    • 블루-그린 배포, 카나리아 배포 등 전략으로 중단 최소화
    • 기존 환경과 Kubernetes를 병행 운영하는 하이브리드 방식
  • 자동화된 CI/CD 파이프라인 통합
    • GitOps 기반 워크플로 구축(GitHub, Argo CD, Jenkins)

맺음말

저는 이전 직장에서 AWS ECS에 호스팅된 서비스를 AWS EKS로 마이그레이션하는 작업과 기존 AWS EC2 기반 환경을 AWS EKS로 전환하는 프로젝트를 주도적으로 수행했습니다. 이 과정에서 주요 기술 스택인 Java(Spring, Maven)와 Node.js 기반 애플리케이션에 상세한 테스트와 검증을 진행했죠.

그때 저는 Docker 기초 지식이 있었고, Kubernetes에도 관심이 있었는데요. 그러나 Kubernetes 실무 경험은 적었습니다. 따라서 개인 시간을 할애해 Kubernetes 환경을 간단히 구성하며 오케스트레이션 기초를 익혔고요. CKA(Certified Kubernetes Administrator) 자격증을 팀원과 함께 준비했습니다. 그 결과, 프로젝트에 필요한 기술을 빠르게 습득했고, 성공적으로 마이그레이션을 완료했습니다.

이 프로젝트는 DevOps 엔지니어로 성장하는 데 큰 도움이 됐습니다. 저는 해당 프로젝트로 Kubernetes를 활용한 클러스터 설계, 애플리케이션 컨테이너화, YAML 기반 배포 정의 작성, EKS 네트워크와 스토리지 설정 등 전반적인 Kubernetes 운영 경험을 쌓았고요. 기존 ECS, EC2 환경의 한계를 극복해 더 나은 확장성과 운영 자동화를 구현했습니다.

Kubernetes 마이그레이션은 조직의 서비스 유연성, 확장성, 운영 효율성을 극대화하는 중요한 전략적 결정입니다. 여기에는 일정 비용과 노력이 들어가지만 장기적으로 효율적인 자원 관리, 자동화된 운영, 빠른 비즈니스 대응 이점이 있고요. 그 결과, 조직의 기술 경쟁력을 크게 향상할 수 있습니다.

Kubernetes로 성공적으로 마이그레이션 하려면 현재 시스템 분석, 체계적 설계, 단계적 실행이 필수입니다. 여러분이 Kubernetes를 효과적으로 활용하는 데 이 글이 도움이 되면 좋겠습니다.

참고 자료

  1. 이정훈, "24단계 실습으로 정복하는 쿠버네티스", 위키북스, 2022
  2. 용찬호, "시작하세요! 도커/쿠버네티스", 위키북스, 2020
  3. 아이자와 고지·사토 가즈히코(저), 박상욱(역), "클라우드 네이티브를 위한 쿠버네티스 실전 프로젝트", 동양북스, 2021
  4. "하루 만에 배우는 Kubernetes", expertLABS, 인포그랩, https://expertlabs.it/workshop/87/

지금 이 기술이 더 궁금하세요? 인포그랩의 DevOps 전문가가 알려드립니다.