3. 쿠버네티스와의 첫 만남
쿠버네티스와의 첫 만남
ECS 가 제공하는 강력한 GUI 와 편의성으로 인해 ECS 에 대한 완전한 이해 없이도 사용이 가능했습니다. 잘 알지 못하면서 ECS 가 제공하는 기능들을 사용하는 것이 불안하게 느껴졌습니다. 이는 완전히 이해하지 못하는 상태에서의 사용이기 때문입니다. 또한, 팀원들의 질문에 효과적으로 대응하기 어려웠습니다. ECS 와 컨테이너 오케스트레이션 환경을 잘 이해하기 위해 쿠버네티스에 대한 공부를 시작했습니다. ECS 와 쿠버네티스는 제공하려는 가치는 비슷하지만, 쿠버네티스는 현재 이 분야의 오픈소스 기술 표준으로 인정받고 있습니다. 쿠버네티스에 대한 깊은 이해가 ECS 에 대한 이해와 숙련도를 향상시킬 것이라고 생각합니다.
쿠버네티스가 무엇인가요?
쿠버네티스는 오픈 소스 컨테이너 오케스트레이션 플랫폼입니다. 이는 컨테이너화된 애플리케이션의 배포, 관리, 그리고 확장성 측면에서 많은 수작업을 자동화합니다.
쿠버네티스를 통한 이점
CICD 를 적용하기 전에 앱을 배포하려면 일련의 복잡한 수동 단계를 거쳐야 했습니다. 예들 들어 자바 앱을 배포하기 위해서는 머신에 직접 jar 파일을 옮기고 서버를 재시작 해야하며, 서버가 잘 실행되었는지도 확인해야했습니다. 쿠버네티스는 컨테이너와 함께 이 프로세스를 자동화되고 효율적이며 신뢰할 수 있는 시스템을 구축할 수 있도록 합니다.
자가 복구
쿠버네티스에서는 모든 것이 의도한 상태를 유지하는 것을 중심으로 이루어집니다. 앱의 원하는 상태를 정의하면 쿠버네티스는 이 상태를 유지하기 위해 필요한 모든 작업을 수행합니다. 컨테이너가 비정상적으로 종료된다면 쿠버네티스는 자동으로 컨테이너를 교체하여 중지시간을 최소화하여 앱의 가용성을 유지합니다. 자가 복구 기능은 고가용성이 요구되는 현대 앱에 필수적입니다.
확장성
쿠버네티스를 통해 다양한 부하에 대응하여, 사용량이 가장 많은 시간대에 확장하고 적은 시간대에 축소할 수 있습니다. 최대, 최소 컨테이너 수를 지정하면 쿠버네티스는 앱의 현재 상태를 모니터링하고 필요에 따라 컨테이너 수를 자동으로 조정합니다.
리소스 관리
앱의 리소스 요구 사항 및 조건에 따라 컨테이너를 효율적으로 배치하여 인프라 자원의 사용을 극대화할 수 있습니다. 성능을 최적화할 뿐만 아니라 오버프로비저닝 또는 리소스 활용도 저하로 인한 비용관리에도 효율적으로 대응할 수 있습니다.
롤아웃, 롤백
앱의 업데이트 프로세스를 간소화합니다. 롤링업데이트를 지원하여 앱의 중지시간 없이 새로운 버전으로 업데이트할 수 있습니다. 만약 업데이트가 실패한다면, 쿠버네티스는 이전 버전으로 롤백할 수 있습니다.
쿠버네티스의 핵심 요소
쿠버네티스는 다양한 앱 유형에 대한 관리를 위해 다양한 핵심 요소를 제공합니다.
Pod: 기본단위
Pod 은 쿠버네티스에서 가장 기본적인 배포 단위입니다. Pod 는 스토리지, 네트워크 등 컨테이너 실행 방법을 공유하는 하나 이상의 컨테이너로 구성된 그룹을 나타냅니다. Pod 는 함께 작동해야 하는 서비스를 관리하기 위해 필수요소입니다.
Deployment : 앱의 상태 관리
Deployment 는 앱을 원하는 상태로 유지하기 위한 핵심 역할을 합니다. 개별 Pod 와 ReplicaSet 의 복잡성을 추상화하여 앱의 확장, 업데이트, 롤백에 대해 보다 직관적인 방식을 제공합니다. Deployment 는 앱이 실행 중일 때 뿐만 아니라 변경 및 장애에도 탄력적으로 대응할 수 있도록 보장합니다.
Service : 네트워크 통신
Service 는 Pod 에 대한 네트워크 게이트웨이 역할을 합니다. Service 는 Pod 에 대한 접근을 추상화하여 Pod 이 어디에 있는지, 어떻게 찾을 수 있는지에 대해 걱정할 필요가 없도록 합니다. 또한 Pod 이 변경되거나 재시작되더라도 Service 는 동일한 접근 방식을 유지할 수 있도록 합니다.
ReplicaSet : Pod 복제
ReplicaSet 은 명시한 Pod 의 수를 유지하는 역할을 합니다. 만약 Pod 가 비정상적으로 종료되면 ReplicaSet 은 새로운 Pod 를 생성하여 지정한 수를 유지합니다.
StatefulSet : 상태를 유지하는 Pod
StatefulSet 은 영구 스토리지 및 일관된 Id 를 가진 Pod 를 관리하기 위해 사용됩니다. StatefulSet 은 각 파드에 대해 고정된 Id 를 부여하여, 파드가 재시작되더라도 동일한 Id 를 유지할 수 있도록 합니다. 이는 주로 데이터베이스와 같은 상태를 유지하는 앱에 사용됩니다.
쿠버네티스와 ECS
쿠버네티스는 오픈소스 특성과 활발한 커뮤니티로 인해 성공적인 컨테이너 오케스트레이션 플랫폼이 되었습니다. AWS ECS 와 비교하면서 쿠버네티스의 특성을 알아봅시다.
AWS ECS 란
ECS 는 AWS 에서 제공하는 컨테이너 오케스트레이션 서비스입니다. 이를 통해 컨테이너를 쉽게 관리할 수 있으며 AWS 의 다른 서비스와의 연동성이 뛰어납니다. 쿠버네티스와 마찬가지로 자가 복구, 확장성, 롤아웃, 롤백 등의 기능을 제공합니다.
쿠버네티스 vs AWS ECS
-
환경 전반의 유연성: 쿠버네티스는 온프레미스 데이터 센터부터 다양한 클라우드 플랫폼에 이르기까지 다양한 환경에서 운영할 수 있는 능력이 뛰어납니다. 반면, ECS 는 주로 AWS 환경을 위해 설계되었기 때문에 멀티클라우드 또는 하이브리드 설정에서 운영되는 환경에서는 유연성이 떨어집니다.
-
커뮤니티 및 에코시스템: 쿠버네티스는 오픈 소스 기반 덕분에 넓은 분야의 커뮤니티 참여와 더 넓은 에코시스템의 이점을 누리고 있습니다. 주목할만한 예시로 Prometheus, Fluentd, Envoy, Jaeger, Grafana 등의 다양한 오픈 소스 프로젝트가 있습니다. ECS 는 AWS 에서 지원하지만 커뮤니티 주도의 혁신과 다양한 통합이 가능하다는 점에서 차이가 있습니다.
-
기능 비교: 쿠버네티스는 특히 고급 배포, 확장 및 관리 기능에서 보다 포괄적인 기능 세트를 제공합니다. 반면에 ECS는 AWS 에코시스템 내에서 더 간단하고 통합하기 쉬우며 이는 AWS 중심 워크플로우에 유리할 수 있습니다.
요약하면, 풍부한 기능 세트와 강력한 커뮤니티 지원과 결합된 쿠버네티스의 오픈 소스 기반은 다재다능하고 역동적인 선택입니다. AWS 환경에서는 ECS 는 효과적인 솔루션, 다양한 환경, 상세한 설정과 관리를 고려한다면 쿠버네티스는 넓은 유연성과 폭넓은 기능을 제공하며 더 나은 솔루션이 될 수 있습니다.
AWS 에서는 쿠버네티스를 쉽게 사용할 수 있도록 EKS 를 제공합니다. EKS 는 쿠버네티스를 AWS 환경에서 쉽게 실행할 수 있도록 지원하는 서비스입니다. 추후에 EKS 에 대해 자세히 알아보도록 하겠습니다.