이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
쿠버네티스란?
- 쿠버네티스는 컨테이너화된 워크로드와 서비스를 관리하기 위한 이식성이 있고, 확장 가능한 오픈소스 플랫폼이다.
- 선언적 구성과 자동화를 모두 용이하게 해 준다.
- 크고, 빠르게 성장하는 생태계를 가지고 있다.
- 서비스, 기술 지원 및 도구는 어디서나 쉽게 이용할 수 있다.
- 쿠버네티스란 명칭은 그리스어로 조타수나 캡틴을 의미하며, 그 의미에 맞게 타륜 그림이 로고이다.
시대 흐름에 따른 Deployment 의 변화
Traditional Deployment(전통적인 배포 시대)
- 초기 조직은 애플리케이션을 물리 서버에서 실행했다.
- 하나의 물리 서버에서 여러 애플리케이션을 실행하게 되면 리소스 할당에 관한 문제가 발생할 수 있다.
- 예를 들어, 하나의 물리 서버에서 여러 애플리케이션을 실행할 때 어떤 애플리케이션 인스턴스가 모든 리소스를 독점할 경우 다른 애플리케이션들의 성능이 저하될 수 있는 문제점이 발생할 수 있다.
- 이 문제를 해결하기 위한 방안으로 각 애플리케이션을 서로 다른 여러 물리 서버에서 실행할 수 있는 방법이 있다.
- 그러나 이 방법은 리소스를 효율적으로 활용하는 데에 있어 제한적이고, 많은 물리 서버를 유지하는 데에 높은 비용이 든다.
Virtualized Deployment(가상화된 배포 시대)
- 전통적인 배포에서의 문제점을 해결하기 위해 가상화가 도입되었다.
- 단일 물리 서버의 CPU에서 여러 가상 시스템(VM)을 실행할 수 있게 한다.
- 가상화를 사용하면 각 VM은 독립적으로 애플리케이션을 실행하고 격리할 수 있는 환경을 제공한다.
- 이로 인해 애플리케이션 간 자유롭게 액세스 할 수 없으므로, 일정 수준의 보안성을 제공할 수 있다.
- 각 VM은 가상화된 하드웨어 상에서 자체 운영체제를 포함한 모든 필요한 구성 요소를 실행하는 완전한 머신이다.
- 장점
- 가상화를 통해 물리 서버의 리소스를 보다 효율적으로 활용할 수 있다.
- 애플리케이션을 쉽게 추가하거나 업데이트할 수 있는 장점이 있다.
- 하드웨어 비용을 절감하면서도 더 나은 확장성을 제공할 수 있다.
- 가상화를 통해 일련의 물리 리소스를 폐기 가능한 가상 머신으로 구성된 클러스터로 형성할 수 있다.
Container Deployment(컨테이너 개발 시대)
- 컨테이너는 가상 머신(VM)과 유사하지만 격리 속성을 완화하여 애플리케이션 간에 운영체제(OS)를 공유한다.
- 이러한 특성으로 인해 컨테이너는 가볍다고 여겨지며, 가상 머신(VM) 보다 빠르게 시작되고 실행될 수 있다.
- 컨테이너는 VM과 마찬가지로 자체 파일 시스템, CPU 점유율, 메모리, 프로세스 공간 등을 갖추고 있다.
- 그러나 컨테이너는 기본 인프라와의 종속성을 끊었기 때문에, 클라우드 환경이나 다양한 운영체제(OS) 배포본에 모두 쉽게 이식할 수 있다.
- 이는 컨테이너가 애플리케이션을 패키징하고 배포할 때 특히 유용한 특성을 지니고 있다.
- 컨테이너의 장점
- 신속한 애플리케이션 생성과 배포
- VM 이미지보다 컨테이너 이미지를 생성하고 배포하는 과정이 더욱 간편하고 효율적이다.
- 지속적인 통합 및 배포
- 컨테이너 이미지는 불변성을 가지고 있어 안정적이고 일관된 배포를 가능하게 하며, 필요시 빠르고 효율적으로 롤백할 수 있다.
- 개발과 운영의 분리
- 애플리케이션 컨테이너 이미지는 빌드/릴리스 시점에 만들어지므로 인프라스트럭처와 분리되어 관리된다.
- 가시성(observability)
- 애플리케이션의 헬스 상태와 다양한 시그널을 OS 수준의 정보와 메트릭에 종속되지 않고 관찰할 수 있다.
- 환경 일관성
- 개발, 테스트, 운영 환경에서 동일한 방식으로 작동하므로 일관성 있는 배포와 테스트가 가능하다.
- 랩탑에서도 클라우드에서와 동일하게 구동된다.
- 다양한 환경 호환성
- 다양한 운영체제와 클라우드 플랫폼에서 컨테이너를 실행할 수 있어 환경 간 이식성이 뛰어납니다.
- 애플리케이션 중심 관리
- 가상화된 OS 수준에서 논리적인 리소스를 사용하는 것보다 애플리케이션을 실행하는 수준에서의 추상화 수준이 높아집니다.
- 마이크로서비스 아키텍처 지원
- 느슨하게 결합되고 분산된 마이크로서비스를 지원하여 애플리케이션을 보다 유연하게 구성하고 관리할 수 있습니다.
- 리소스 격리와 효율성
- 각 컨테이너는 격리된 환경에서 실행되어 애플리케이션의 성능을 예측 가능하게 하며, 리소스 사용을 효율적으로 관리할 수 있습니다.
- 신속한 애플리케이션 생성과 배포
쿠버네티스가 왜 필요한가?
- 컨테이너는 애플리케이션을 포장하고 실행하는 좋은 방법이다.
- 프로덕션 환경에서는 애플리케이션을 실행하는 컨테이너를 효과적으로 관리하고 가동 중지 시간을 최소화해야 한다.
- 예를 들어, 컨테이너가 다운되면 다른 컨테이너를 다시 시작하는 문제를 시스템에 의해 처리한다면 더 쉽지 않을까?
- 그것이 바로 쿠버네티스가 필요한 이유이다.
- 컨테이너화된 애플리케이션의 자동 관리
- 쿠버네티스는 컨테이너가 다운되면 자동으로 다른 컨테이너를 다시 시작하여 가동 중지 시간을 최소화한다.
- 분산 시스템의 탄력적 실행
- 쿠버네티스는 애플리케이션의 확장과 장애 조치를 자동으로 처리하여 안정적인 서비스를 제공한다.
- 다양한 배포 패턴 지원
- 쿠버네티스는 카나리아 배포 등 다양한 배포 패턴을 쉽게 관리할 수 있어 애플리케이션 업데이트를 안전하게 수행할 수 있다.
쿠버네티스가 무엇을 할 수 있나?
- 서비스 디스커버리와 로드 밸런싱
- 쿠버네티스는 애플리케이션의 여러 컨테이너를 서로 연결해 준다.
- 사용자는 DNS 이름이나 IP 주소를 통해 컨테이너를 찾을 수 있다.
- 쿠버네티스는 요청을 여러 컨테이너에 나누어 보내 안정적이고 빠른 서비스를 제공한다.
- 즉, 컨테이너에 트래픽이 많을 때, 쿠버네티스는 네트워크 트랙픽을 자동으로 로드밸런싱하여 애플리케이션의 성능과 안정성을 유지한다.
- 스토리지 오케스트레이션
- 쿠버네티스는 애플리케이션에 필요한 저장소를 자동으로 연결하고 관리한다.
- 사용자는 로컬 저장소나 클라우드 저장소를 쉽게 활용할 수 있다.
- 자동화된 롤아웃과 롤백
- 쿠버네티스는 새로운 애플리케이션 버전을 자동으로 배포한다.
- 사용자가 문제가 발생할 경우, 이전 버전으로 자동으로 되돌릴 수 있다.
- 자동화된 빈 패킹(bin packing)
- 쿠버네티스는 컨테이너가 필요한 CPU와 메모리를 고려하여 적절한 서버(노드)에 배치한다.
- 쿠버네티스는 컨테이너를 노드에 맞추어서 리소스를 가장 잘 사용할 수 있도록 한다.
- 사용자는 자원을 최적으로 활용하여 효율적인 배치를 보장받을 수 있다.
- 자동화된 복구(self-healing)
- 쿠버네티스는 실패한 컨테이너를 자동으로 다시 시작하거나 교체한다.
- 사용자는 애플리케이션의 상태가 계속 유지되도록 보장받을 수 있다.
- 쿠버네티스는 '사용자 정의 상태 검사'에 응답하지 않는 컨테이너를 죽이고, 서비스 준비가 끝날 때까지 그러한 과정을 클라이언트에 보여주지 않는다.
- 시크릿과 구성 관리
- 쿠버네티스는 중요한 정보(토큰, 암호, SSH 키 등)를 안전하게 저장하고 관리한다.
- 사용자는 애플리케이션 설정을 업데이트할 때 컨테이너 이미지를 재구성하지 않고도 필요한 정보를 관리할 수 있다.
Reference
https://kubernetes.io/ko/docs/home/
이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
'IT > Kubernetes' 카테고리의 다른 글
[Kubernetes] Container Runtimes(컨테이너 런타임) - DevelopMoon (0) | 2024.11.01 |
---|---|
[Kubernetes] Cluster Architecture(클러스터 아키텍처) - DevelopMoon (8) | 2024.10.31 |
[Kubernetes] Kubernetes Object (쿠버네티스 오브젝트) - DevelopMoon (4) | 2024.10.23 |
[Kubernetes] 쿠버네티스 구성 요소 (Components) - DevelopMoon (2) | 2024.10.23 |