Kubernetes란 무엇인가요?

컨테이너를 도입하는 조직이 점점 많아짐에 따라 컨테이너 중심 관리 소프트웨어인 Kubernetes는 컨테이너화된 애플리케이션을 배포하고 운영하기 위한 표준이 되었습니다. Kubernetes는 원래 Google에서 개발되어 2014년에 오픈소스로 출시되었으므로 Google Cloud가 시초라고 할 수 있습니다. Kubernetes는 15년 동안 축적된 Google의 컨테이너화된 워크로드 실행 경험과 오픈소스 커뮤니티의 소중한 기여를 기반으로 성장했습니다. Google의 내부 클러스터 관리 시스템인 Borg에서 영감을 얻어 시작된 Kubernetes를 사용하면 애플리케이션의 배포 및 관리와 관련된 모든 작업이 한층 간편해집니다. 자동화된 컨테이너 조정 기능을 제공하는 Kubernetes는 안정성을 개선하고 일상적인 작업에 소요되는 시간과 리소스를 절감해 줍니다.

Google Skills의 실무형 실습으로 학습한 내용을 테스트하세요.

Kubernetes의 정의

Kubernetes('K'와 's' 사이의 문자 수를 나타내는 8을 사용하여 K8s로 줄여 쓰기도 함)는 컨테이너화된 애플리케이션을 어디서나 배포, 확장, 관리할 수 있는 오픈소스 시스템입니다.

Kubernetes는 컨테이너 관리의 운영 작업을 자동화하며 애플리케이션 배포, 애플리케이션 변경사항 출시, 변화하는 요구사항에 맞춘 애플리케이션 확장 및 축소, 애플리케이션 모니터링 등을 위한 기본 제공 명령을 포함하고 있으므로 이를 통해 애플리케이션을 보다 쉽게 관리할 수 있습니다.

Kubernetes 작동 방식

애플리케이션이 여러 컨테이너와 서버로 확장됨에 따라 Kubernetes는 관리를 간소화하는 데 도움이 됩니다. 오픈소스 API를 사용하여 배포를 조정하고 컨테이너를 포드로 그룹화하여 수요와 리소스 가용성에 따라 확장합니다. 또한 Kubernetes는 서비스 검색, 부하 분산, 리소스 할당을 자동화하고 상태를 모니터링하여 컨테이너를 다시 시작하거나 복제하여 자체 복구를 지원합니다.

엔터프라이즈 개발자를 위해 Kubernetes의 작동 방식을 단계별로 자세히 살펴보겠습니다.

  • 애플리케이션 정의: YAML 파일을 사용하여 애플리케이션의 원하는 상태를 정의하는 것으로 시작합니다. 이러한 파일은 실행할 컨테이너, 필요한 리소스(CPU, 메모리), 네트워크에 노출되는 방식을 지정합니다.
  • Kubernetes API에 요청 전송: 일반적으로 kubectl 명령줄 도구를 사용하여 이러한 YAML 파일을 Kubernetes API에 제출합니다.
  • 스케줄러가 포드를 노드에 할당: Kubernetes 스케줄러는 애플리케이션의 요구사항을 분석하고 클러스터에서 컨테이너(포드로 패키징됨)를 실행하기에 가장 적합한 노드를 찾습니다.
  • Kubelet이 컨테이너 실행: 각 노드에서 Kubelet 프로세스는 컨트롤 플레인으로부터 안내를 수신하고 컨테이너를 실행합니다.
  • 서비스가 애플리케이션 노출: Kubernetes 서비스는 애플리케이션에 안정적인 IP 주소와 DNS 이름을 제공하므로 포드가 생성, 소멸, 재예약되더라도 다른 애플리케이션이 애플리케이션에 액세스할 수 있습니다.
  • 컨트롤러가 원하는 상태를 보장: Kubernetes 컨트롤러는 애플리케이션의 상태를 지속적으로 모니터링하고 필요한 경우 시정 조치를 취합니다. 예를 들어 포드가 비정상 종료되면 컨트롤러가 자동으로 새 포드를 만들어 대체합니다.
  • 확장 및 업데이트: 배포 구성에서 복제본 수를 업데이트하여 애플리케이션을 쉽게 확장할 수 있습니다. Kubernetes는 원하는 규모에 맞게 포드를 자동으로 생성하거나 삭제합니다. 순차적 업데이트를 사용하면 다운타임 없이 애플리케이션의 새 버전을 배포할 수 있습니다.

Kubernetes의 이점

 운영 자동화

Kubernetes에는 애플리케이션 관리에 필요한 많은 부담스러운 작업을 처리할 수 있는 명령이 기본적으로 포함되어 있으므로 이러한 명령으로 일상적인 운영을 자동화할 수 있습니다. 또한 애플리케이션이 항상 의도한 대로 실행되도록 할 수 있습니다.

인프라 추상화

Kubernetes를 설치하면 Kubernetes에서 워크로드를 대신해 컴퓨팅, 네트워킹 및 스토리지를 처리합니다. 따라서 개발자는 기본 환경에 신경 쓰지 않고 애플리케이션에 집중할 수 있습니다.

서비스 상태 모니터링

Kubernetes는 끊임없이 서비스 상태를 확인하여 장애가 발생하거나 중단된 컨테이너를 재시작하고 서비스가 실행 중인 것으로 확인되었을 때만 사용자가 서비스를 사용할 수 있도록 합니다.

최적화된 리소스 사용률

Kubernetes는 요구사항에 따라 컨테이너를 노드에 효율적으로 패킹하여 리소스 사용률을 최적화합니다. 이는 결과적으로 리소스 낭비를 줄이고 인프라 비용을 낮추는 데 도움이 됩니다.

간소화된 애플리케이션 관리

Kubernetes로 애플리케이션 관리를 간소화합니다. Kubernetes는 다양한 복잡성을 지닌 애플리케이션을 배포, 업데이트, 관리하는 데 있어 일관된 접근방식을 제공합니다.

향상된 이식성

Kubernetes는 온프레미스 데이터 센터부터 퍼블릭 클라우드에 이르기까지 다양한 환경에서 일관되게 실행되는 오픈소스 플랫폼으로, 기업에 유연성과 이식성을 제공합니다.

Google Cloud로 비즈니스 문제 해결

신규 고객에게는 Google Cloud에서 사용할 수 있는 $300의 무료 크레딧이 제공됩니다.
Google Cloud 영업 전문가와 고유한 문제에 대해 자세히 논의해 보세요.

Kubernetes와 Docker 비교

Kubernetes와 Docker는 둘 중 하나만 선택해야 하는 것으로 오해되는 경우가 많지만 사실은 컨테이너화된 애플리케이션을 실행하기 위한 서로 다르면서 보완적인 기술입니다. 

Docker를 사용하면 애플리케이션을 실행하는 데 필요한 모든 것을 필요할 때 언제 어디서나 저장하고 열 수 있는 컨테이너에 넣을 수 있습니다. 애플리케이션을 컨테이너에 넣은 후에는 애플리케이션을 관리할 방법이 필요한데 Kubernetes가 하는 일이 바로 그것입니다.

Kubernetes는 영어로 'captain(선장)'을 의미하는 그리스어입니다. 선장이 선박의 안전한 항해를 책임지는 것처럼 Kubernetes는 이러한 컨테이너를 사용 가능한 곳으로 안전하게 운반하여 전달할 책임이 있습니다.

  • Kubernetes는 Docker와 함께 사용할 수도 있고 단독으로 사용할 수도 있습니다.
  • Docker는 Kubernetes의 대안이 아니므로 'Kubernetes냐, Docker냐' 하는 것은 문제가 되지 않습니다. Kubernetes와 Docker를 함께 사용하여 애플리케이션을 컨테이너화하고 대규모로 실행할 수 있습니다.
  • Docker와 Kubernetes의 차이점은 애플리케이션 컨테이너화 및 실행 과정에서 각각 맡은 역할과 관련이 있습니다.
  • Docker는 애플리케이션을 컨테이너에 패키징하여 배포하기 위한 개방형 업계 표준입니다.
  • Kubernetes는 Docker를 사용하여 컨테이너화된 애플리케이션을 배포, 관리, 확장합니다.

일반적인 Kubernetes 사용 사례

Kubernetes는 어디서나 쉽게 관리하고 배포할 수 있는 애플리케이션을 만드는 데 사용됩니다. 관리형 서비스로 제공되는 Kubernetes는 사용자의 요구사항에 맞춰 다양한 솔루션을 제공합니다. 다음은 몇 가지 일반적인 사용 사례입니다.

개발 속도 향상

Kubernetes는 클라우드 기반 마이크로서비스를 기반으로 하는 앱을 빌드하는 데 유용합니다. 또한 기존 앱의 컨테이너화도 지원하므로 이를 애플리케이션 현대화의 기반으로 삼아 앱을 더 빠르게 개발할 수 있습니다.

  • 예시: 한 금융 서비스 회사는 Kubernetes를 사용하여 온라인 뱅킹 플랫폼용 마이크로서비스를 배포하여 개발 주기를 단축하고 확장성을 개선했습니다.

위치에 구애받지 않는 애플리케이션 배포

Kubernetes는 어디서나 사용할 수 있도록 빌드되어 있으므로 온사이트 배포 환경과 퍼블릭 클라우드는 물론이고 이 둘이 혼합된 하이브리드 배포 환경에서도 애플리케이션을 실행할 수 있습니다. 따라서 필요한 곳에서 애플리케이션을 실행할 수 있습니다.

  • 예시: 한 글로벌 전자상거래 기업은 Kubernetes를 사용하여 여러 클라우드 제공업체에 애플리케이션을 배포함으로써 고가용성을 보장하고 공급업체 종속을 방지합니다.

효율적인 서비스 실행

Kubernetes는 서비스 실행에 필요한 클러스터의 크기를 자동으로 조정할 수 있습니다. 덕분에 수요에 따라 자동으로 애플리케이션을 확장 및 축소하여 효율적으로 실행할 수 있습니다.

  • 예시: 미디어 스트리밍 서비스는 Kubernetes를 사용하여 콘텐츠를 시청하는 사용자 수에 따라 동영상 인코딩 인프라를 자동으로 확장하여 리소스 사용률을 최적화하고 비용을 절감합니다.

FAQ

Kubernetes에 대해 자주 묻는 질문을 살펴보세요.

Kubernetes 클러스터는 Kubernetes에서 조정하는 컨테이너화된 애플리케이션을 실행하는 노드(가상 또는 물리적 머신)로 구성됩니다.

배포 가능한 최소 단위인 Kubernetes 포드는 하나 이상의 컨테이너를 수용하며, 이는 단일 실행 프로세스 인스턴스를 나타냅니다.

Kubernetes 배포는 복제본을 관리하고 원활한 업데이트를 통해 원하는 애플리케이션 상태를 보장합니다.

Kubernetes 서비스는 애플리케이션에 안정적인 IP 주소와 DNS 이름을 제공하여 다른 애플리케이션이 액세스할 수 있도록 하는 Kubernetes 객체입니다.

배포 구성에서 복제본 수를 업데이트하여 애플리케이션을 확장할 수 있습니다. Kubernetes는 원하는 규모에 맞게 포드를 자동으로 생성하거나 삭제합니다.

다음 단계 수행

$300의 무료 크레딧과 20여 개의 항상 무료 제품으로 Google Cloud에서 빌드하세요.

Google Cloud