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 |