Docker에서 Kubernetes로

2024. 12. 19. 00:03·개발 환경 및 운영/Kubernetes

2024.12.15 - [개발 환경 및 운영] - 가상화의 이해: 하이퍼바이저에서 Docker까지

지난 시간의 가상화의 이해에 이어서 이번에는 Docker 컨테이너에서 컨테이너 오케스트레이션을 위해 탄생한 kubernetes에 대해 간략하게 알아보자


Docker란?

Docker는 애플리케이션을 신속하게 구축, 테스트 및 배포할 수 있는 소프트웨어 플랫폼

Docker는 소프트웨어를 컨테이너라는 표준화된 유닛으로 패키징하며, 이 컨테이너에는 라이브러리, 시스템 도구, 코드, 런타임 등 소프트웨어 실행에 필요한 모든 것이 포함되어 있다. 이를 통해 환경에 상관없이 애플리케이션이 일관되게 동작하도록 보장한다.

Docker 등장 이전

과거에는 애플리케이션을 공유할 때 소스 코드뿐만 아니라 OS, 라이브러리 버전, CPU 아키텍처(예: ARM, x86) 등의 제약 조건이 맞아야 동일한 동작을 보장할 수 있어, 애플리케이션 개발과 배포과정이 매우 복잡했다.

  • 개발 환경과 배포 환경의 차이로 인한 비일관적인 동작
  • 애플리케이션이 필요로 하는 모든 라이브러리와 패키지 관리와 설치에 시간이 많이 소요됨
  • 동일 소프트웨어를 Windows, Mac 등 여러 OS에 맞게 따로 패키징
  • 서버 자원관리가 수동으로 이루어져 관리가 힘듬
  • 새로운 서버 추가나 확장이 비효율적

Docker의 현재 역할

이러한 제약을 해결하기 위해 Docker는 컨테이너 기반의 가상화 기술을 도입했다. Docker를 사용하면 개발 환경을 설정하고 이를 컨테이너 이미지로 패키징하여 어디서든 동일하게 실행할 수 있다. 컨테이너 내부에 운영 체제와 라이브러리를 포함해 OS나 하드웨어와 무관하게 일관된 애플리케이션 동작을 보장한다. 이렇게 한번 컨테이너를 이미지로 만들어 놓으면 이미지를 기반으로 빠르게 컨테이너를 생성하고 실행 할 수 있어 스케일 아웃이 쉬워졌다.

Kubernetes란?

Kubernetes는 컨테이너화된 애플리케이션과 서비스를 관리하기 위한 컨테이너 오케스트레이션 플랫폼

Docker는 애플리케이션 배포와 실행을 간소화했지만, 수많은 컨테이너가 생성되면서 이를 관리하는 문제가 새롭게 등장했다. 이 문제를 해결하기 위해 Kubernetes가 등장했는데, 간단히 말해 컨테이너들을 관리하기 쉽게 해주는 도구이다. Kubernetes를 사용하면 애플리케이션을 더 쉽게 배포하고 관리할 수 있다. 오늘날의 소프트웨어 서비스들은 한정된 자원의 서버로 운영하는 것이 아니라, 수많은 역할을 하는 크고작은 각 서버들(프로그램들? 뭐라고함)이 백그라운드에서 서로 통신하며 동작을 한다. 이러한 서버들의 리소스 관리를 한층 더 추상화해 관리할 수 있게 해준다.

Kubernetes의 특징

  • 컨테이너 동작 환경의 추상화: 물리적 서버가 아닌 Kubernetes 환경을 통해 리소스를 관리
  • 선언적 리소스 관리: 원하는 상태를 선언하고 Kubernetes가 이를 자동으로 유지해줌

Kubernetes의 주요 기능

  • 서비스 디스커버리와 로드 밸런싱: 서비스 간 통신을 자동으로 조율하고 부하를 분산
  • 스토리지 오케스트레이션: 로컬 및 클라우드 스토리지를 통합적으로 관리
  • 자동화된 롤아웃과 롤백: 새로운 애플리케이션 버전을 점진적으로 배포하고 문제가 발생하면 자동으로 복구
  • 자동화된 복구(self-healing): 컨테이너가 충돌하면 자동으로 재시작
  • 시크릿과 구성 관리: 애플리케이션 설정 및 민감한 데이터를 안전하게 관리

기존 배포 방식과의 차이

  • 기존 방식: 서버(EC2 같은)에 직접 컨테이너를 배포하여 애플리케이션을 실행. 서버 수가 늘어나면 수동으로 관리해야 하기 때문에 복잡해진다. 서버마다 특정 애플리케이션이 할당되어 자원을 효율적으로 사용하기 힘들다.
  • Kubernetes 도입 후: Kubernetes는 선언적으로 리소스를 관리해 컨테이너의 동작 환경이 서버 하나하나가 아니라 Kubernetes 환경으로 추상화된다. 이 kubernetes 클러스터로 컨테이너를 관리하기 때문에 리소스 수요에 변화에 따라 자동으로 컨테이너 수를 조정하고, 장애 발생시 자동으로 복구할 수 있다.

Docker의 등장으로 컨테이너 기반 개발이 표준화되었고, Kubernetes는 이를 확장하여 대규모 시스템 운영을 자동화하는 오케스트레이션 도구로 자리 잡았다. 다음에는 Kubernetes의 아키텍처와 주요 구성 요소에 대해 순서대로 알아볼 예정이다.

저작자표시 (새창열림)

'개발 환경 및 운영 > Kubernetes' 카테고리의 다른 글

Kubernetes의 Persistent Volume과 Persistent Volume Claim  (0) 2025.01.25
Kubernetes의 네트워크 리소스: Ingress (with ALB)  (0) 2025.01.07
Kubernetes의 서비스(Service)  (1) 2025.01.01
Kubernetes의 구성요소 알아보기 (Pod, ReplicaSet, Deployment)  (1) 2024.12.23
가상화의 이해: 하이퍼바이저에서 Docker까지  (2) 2024.12.15
'개발 환경 및 운영/Kubernetes' 카테고리의 다른 글
  • Kubernetes의 네트워크 리소스: Ingress (with ALB)
  • Kubernetes의 서비스(Service)
  • Kubernetes의 구성요소 알아보기 (Pod, ReplicaSet, Deployment)
  • 가상화의 이해: 하이퍼바이저에서 Docker까지
haong_
haong_
블로그 이전합니다 >> www.hajinnote.me
  • haong_
    일단 시작하는 블로그
    haong_
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 데이터 엔지니어링
      • 이슈 해결 일지
      • 개발 환경 및 운영
        • Kubernetes
      • CS
        • 운영체제
        • 데이터베이스시스템
      • 프로그래밍
      • 알고리즘
      • 머신러닝
        • 통계학
        • 딥러닝
        • 데이터 분석
        • 논문
        • 프로젝트
      • 회고
      • 책 & 스터디
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    데이터메시
    이
    data mesh
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
haong_
Docker에서 Kubernetes로
상단으로

티스토리툴바