Kubernetes(쿠버네티스)는 컨테이너화된 애플리케이션의 배포, 관리, 확장 및 운영을 자동화하는 오픈소스 플랫폼입니다. 구글에서 처음 개발한 후, 현재는 CNCF(Cloud Native Computing Foundation)에서 관리하고 있으며, 현대 애플리케이션 운영의 표준으로 자리 잡았습니다.

 

개요

쿠버네티스는 컨테이너화된 워크로드와 서비스를 관리하기 위한 이식성 있고 확장 가능한 오픈 소스 플랫폼으로, 선언적 구성과 자동화를 모두 용이하게 합니다. 대규모의 빠르게 성장하는 생태계를 갖추고 있습니다. 쿠버네티스 서비스, 지원 및 도구는 널리 제공됩니다.

이 페이지는 Kubernetes에 대한 개요입니다.

Kubernetes라는 이름은 조타수 또는 조종사를 의미하는 그리스어에서 유래했습니다. K8s라는 약어는 "K"와 "s" 사이의 8글자를 세어서 만들어졌습니다. Google은 2014년에 Kubernetes 프로젝트를 오픈소스화했습니다. Kubernetes는 Google이 15년 이상 대규모 프로덕션 워크로드를 실행한 경험 과 커뮤니티의 동종 최고 아이디어 및 관행을 결합합니다.

주요 기능

Kubernetes는 컨테이너 기반 애플리케이션을 클러스터 환경에서 안정적으로 구동하고 확장할 수 있는 다양한 기능을 제공합니다. 대표적인 기능은 다음과 같습니다:

  • 자동화된 컨테이너 오케스트레이션: 컨테이너 배포 및 업데이트, 서비스 디스커버리, 로드 밸런싱을 자동으로 수행하여 일관된 애플리케이션 실행을 보장합니다.
  • 자동 확장 및 복구: 트래픽 증가에 따라 자동으로 컨테이너를 확장하거나 축소하며, 장애 발생 시 컨테이너를 자동으로 재시작하거나 대체해 줍니다.
  • 무중단 배포: 롤링 업데이트와 롤백 기능을 통해 무중단 배포가 가능해, 애플리케이션을 중단 없이 최신 상태로 유지할 수 있습니다.
  • 클러스터 내 자원 관리: 쿠버네티스는 각 애플리케이션이 필요한 자원(CPU, 메모리 등)을 명확하게 정의하고, 이를 최적화하여 클러스터 자원을 효율적으로 분배하고 관리합니다.

Kubernetes의 역사적 맥락

시간을 거슬러 올라가서 Kubernetes가 왜 그렇게 유용한지 살펴보겠습니다.

 

기존 배포 시대:

초기에는 조직이 물리적 서버에서 애플리케이션을 실행했습니다. 물리적 서버에서 애플리케이션에 대한 리소스 경계를 ​​정의할 방법이 없었고, 이로 인해 리소스 할당 문제가 발생했습니다. 예를 들어, 여러 애플리케이션이 물리적 서버에서 실행되는 경우 한 애플리케이션이 대부분의 리소스를 차지하고 결과적으로 다른 애플리케이션의 성능이 저하되는 경우가 있을 수 있습니다. 이에 대한 해결책은 각 애플리케이션을 다른 물리적 서버에서 실행하는 것입니다. 하지만 리소스가 충분히 활용되지 않아 확장할 수 없었고, 조직에서 많은 물리적 서버를 유지하는 데 비용이 많이 들었습니다.

 

가상화된 배포 시대:

해결책으로 가상화가 도입되었습니다. 단일 물리적 서버의 CPU에서 여러 가상 머신(VM)을 실행할 수 있습니다. 가상화를 통해 애플리케이션을 VM 간에 격리할 수 있으며 한 애플리케이션의 정보에 다른 애플리케이션이 자유롭게 액세스할 수 없기 때문에 일정 수준의 보안을 제공합니다.

가상화는 물리적 서버에서 리소스를 더 잘 활용할 수 있게 하고, 애플리케이션을 쉽게 추가하거나 업데이트할 수 있고, 하드웨어 비용을 줄이는 등 더 나은 확장성을 제공합니다. 가상화를 사용하면 물리적 리소스 세트를 일회용 가상 머신 클러스터로 표현할 수 있습니다.

각 VM은 가상화된 하드웨어 상에서 자체 운영 체제를 포함한 모든 구성 요소를 실행하는 완전한 머신입니다.

 

컨테이너 배치 시대:

컨테이너는 VM과 비슷하지만, 애플리케이션 간에 운영 체제(OS)를 공유하기 위해 격리 속성이 느슨합니다. 따라서 컨테이너는 가벼운 것으로 간주됩니다. VM과 유사하게 컨테이너는 자체 파일 시스템, CPU 공유, 메모리, 프로세스 공간 등을 갖습니다. 기본 인프라에서 분리되어 있으므로 클라우드와 OS 배포 간에 이식할 수 있습니다.

컨테이너는 다음과 같은 추가적인 이점을 제공하기 때문에 인기를 얻었습니다.

  • 민첩한 애플리케이션 생성 및 배포: VM 이미지를 사용하는 것에 비해 컨테이너 이미지를 생성하는 것이 더 쉽고 효율적입니다.
  • 지속적인 개발, 통합 및 배포: 빠르고 효율적인 롤백(이미지 불변성으로 인해)을 통해 안정적이고 빈번한 컨테이너 이미지 빌드와 배포가 가능합니다.
  • 개발 및 운영 측면에서 관심사 분리: 배포 시점이 아닌 빌드/릴리스 시점에 애플리케이션 컨테이너 이미지를 만들어서 애플리케이션을 인프라에서 분리합니다.
  • 관찰 가능성: OS 수준 정보와 측정 항목뿐만 아니라 애플리케이션 상태와 기타 신호도 표면화합니다.
  • 개발, 테스트, 프로덕션 전반에서 환경의 일관성이 유지됩니다. 클라우드에서와 마찬가지로 노트북에서도 동일하게 실행됩니다.
  • 클라우드 및 OS 배포 이식성: Ubuntu, RHEL, CoreOS, 온프레미스, 주요 퍼블릭 클라우드 및 기타 모든 곳에서 실행됩니다.
  • 애플리케이션 중심 관리: 가상 하드웨어에서 OS를 실행하는 것에서 논리적 리소스를 사용하여 OS에서 애플리케이션을 실행하는 것으로 추상화 수준을 높입니다.
  • 느슨하게 결합되고, 분산되고, 탄력적이고, 자유로운 마이크로 서비스: 애플리케이션은 더 작고 독립적인 부분으로 나뉘며 동적으로 배포 및 관리될 수 있습니다. 단일 목적의 큰 머신에서 실행되는 모놀리식 스택이 아닙니다.
  • 리소스 격리: 예측 가능한 애플리케이션 성능.
  • 자원 활용: 높은 효율성과 밀도.

 

대규모 클러스터에 대한 고려 사항

클러스터는 다음의 집합입니다.노드(물리적 또는 가상 머신) Kubernetes 에이전트를 실행하고 관리합니다. 제어 평면. Kubernetes v1.31은 최대 5,000개의 노드가 있는 클러스터를 지원합니다. 더 구체적으로, Kubernetes는 다음 모든 기준을 충족하는 구성을 수용하도록 설계되었습니다.

  • 노드당 최대 110개의 포드
  • 최대 5,000개 노드
  • 전체 포드 수는 150,000개를 넘지 않습니다.
  • 총 컨테이너 수는 30만개를 넘지 않음

노드를 추가하거나 제거하여 클러스터를 확장할 수 있습니다. 이를 수행하는 방법은 클러스터가 배포되는 방식에 따라 달라집니다.

 

장점

  • 유연성: 다양한 클라우드 환경(퍼블릭, 프라이빗, 하이브리드)에서 동일한 방식으로 컨테이너를 배포할 수 있습니다.
  • 확장성: 마이크로서비스 아키텍처를 지원하며, 수천 개의 컨테이너를 관리할 수 있는 확장성을 갖추고 있습니다.
  • 자체 치유(Self-healing): 장애가 발생한 컨테이너를 자동으로 대체하고, 상태가 좋지 않은 컨테이너를 감지하여 복구합니다.

결론

Kubernetes는 오늘날 클라우드 네이티브 애플리케이션을 배포하고 관리하는 데 필수적인 도구로, 확장성과 자동화가 중요한 환경에서 특히 효과적입니다. 복잡한 인프라를 간단하고 일관된 방식으로 운영할 수 있게 해 주는 Kubernetes는 현대 IT 환경에서 필수적인 역할을 하고 있습니다.

'IT > kubernetes[k8s]' 카테고리의 다른 글

쿠버네티스 서비스(Service)  (0) 2024.11.13
쿠버네티스 - 노드  (1) 2024.11.08
클러스터의 개념  (0) 2024.11.07
Deployment, ReplicaSet, DaemonSet, StatefulSet  (0) 2024.11.06
쿠버네티스 구성 요소  (1) 2024.10.21

+ Recent posts