Back toNutanix 용어집

Kubernetes란?

2023년 10월 27일 | min

Kubernetes는 원래 Google에서 개발한 오픈 소스 컨테이너 오케스트레이션 플랫폼으로, 컨테이너형 애플리케이션의 배포, 확장 및 관리를 자동화하기 위한 프레임워크를 제공합니다. Kubernetes를 통해 사용자는 머신 클러스터 전반에서 컨테이너를 관리하고 조정하여 분산 애플리케이션을 실행하기 위한 확장성과 탄력성이 뛰어난 인프라를 제공합니다.

Google 엔지니어가 사내용으로 개발한 Kubernetes는 2014년 오픈 소스 시스템으로 외부에 공개되었습니다. 그 이후로 이를 도입하는 조직이 광범위하게 늘어나면서 클라우드 네이티브 에코시스템의 필수 요소가 되었습니다.Kubernetes는 컨테이너와 함께 최신 클라우드 애플리케이션 및 인프라의 기본 빌딩블록으로 널리 인정받고 있습니다.

Kubernetes는 하이브리드 클라우드 환경, 퍼블릭 클라우드, 프라이빗 클라우드, 가상 머신 및 베어메탈 서버를 비롯한 광범위한 인프라에서 실행되며, IT 팀에 탁월한 유연성을 제공합니다.

Kubernetes의 작동 원리

Kubernetes 아키텍처는 여러 주요 구성 요소로 구성됩니다. 각 구성 요소는 다음과 같습니다.

클러스터 및 노드

Kubernetes의 빌딩블록인 클러스터는 노드라고 하는 물리적 또는 가상 컴퓨팅 시스템으로 구성됩니다. 단일 마스터 노드는 클러스터의 제어 영역으로 작동하며, 언제든 실행되는 애플리케이션과 사용되는 컨테이너 이미지 등을 관리합니다. 이를 위해 개발자 정의 요구 사항 및 기타 요소를 기반으로 컨테이너 배포를 자동화하는 스케줄러 서비스를 실행합니다.

여러 작업자 노드는 워크로드 및 컨테이너형 애플리케이션의 실행, 배포 및 관리를 책임집니다. 작업자 노드에는 조직이 선택한 컨테이너 관리 도구(예: Docker)뿐 아니라 마스터 노드에서 명령을 받아 실행하는 소프트웨어 에이전트(예: Kubelet)가 포함됩니다.

클러스터에는 온프레미스부터 퍼블릭 클라우드, 프라이빗 클라우드, 하이브리드 클라우드 환경에 이르기까지 조직의 전체 아키텍처에 있는 노드가 포함될 수 있습니다. 이는 Kubernetes가 클라우드 네이티브 아키텍처에서 필수적인 구성 요소인 이유 중 하나입니다. 이 시스템은 빠르게 확장해야 하는 클라우드 네이티브 앱을 호스팅하는 데 가장 적합합니다.

컨테이너

컨테이너는 다양한 컴퓨팅 환경에서 일관되게 애플리케이션을 배포하고 실행하는 데 사용되는 경량의 이동식 소프트웨어 패키징 기술입니다. 또한 라이브러리, 프레임워크, 런타임 환경을 포함하여 모든 종속 항목과 함께 애플리케이션을 캡슐화하는 독립형 실행 단위입니다.

컨테이너는 기본 인프라에서 애플리케이션을 격리하는 방법을 제공하여, 호스트 시스템에 관계없이 일관되게 실행되도록 합니다. 이러한 격리는 Docker와 같은 컨테이너화 기술을 통해 수행할 수 있는데, 운영 체제 수준의 가상화를 사용하여 컨테이너라는 격리된 환경을 구축합니다.

포드

포드는 Kubernetes에서 가장 작은 확장 단위이며, 동일한 네트워크 및 컴퓨팅 리소스를 공유하는 컨테이너 그룹입니다. 컨테이너를 함께 그룹화하면 특정 컨테이너가 너무 많은 트래픽을 수신하는 경우 Kubernetes가 클러스터의 다른 노드에 해당 포드의 복제본을 자동으로 생성하여 워크로드를 분산시킬 수 있습니다.

모든 구성 요소의 연동 방식

Kubernetes 플랫폼은 시스템의 OS(일반적으로 Linux) 위에서 실행되며 노드에서 작동하는 포드와 통신합니다. 관리자 또는 DevOps 사용자는 kubectl이라는 명령줄 인터페이스를 사용하여 원하는 클러스터 상태로 전환합니다. 여기에는 실행해야 하는 앱, 이미지 및 리소스, 기타 세부 정보가 포함될 수 있습니다.

클러스터의 마스터 노드는 이러한 명령을 수신하여 작업자 노드로 전송합니다. 플랫폼은 명령을 수행하는 데 가장 적합한 클러스터의 노드를 자동으로 결정할 수 있습니다. 그런 다음 플랫폼은 요청된 작업을 완료할 리소스와 노드의 특정 포드를 할당합니다.

Kubernetes는 컨테이너 관리의 기본 프로세스를 변경하지 않고 이를 간편하게 자동화하고 작업의 일부를 전달받으므로, 관리자와 DevOps 팀이 모든 노드 또는 컨테이너를 개별적으로 관리하지 않고도 더 효율적으로 제어할 수 있습니다. 직원 팀은 단순히 Kubernetes 시스템을 구성하고 시스템 내의 요소를 정의합니다. Kubernetes는 모든 실제 컨테이너 오케스트레이션 작업을 수행합니다.

Kubernetes의 기능과 특징

Kubernetes에는 여러 노드에서 컨테이너 오케스트레이션을 단순화하고 클러스터 관리를 자동화하며 리소스 활용을 최적화하는 다양한 기능과 특징이 있습니다. 여기에는 다음이 포함됩니다.

  • 자동 확장 – 사용량을 기준으로 필요에 따라 컨테이너 및 해당 리소스를 확장하거나 축소합니다.
  • 라이프사이클 관리 – 관리자가 배포를 일시 중지한 후 계속 진행할 수 있을 뿐만 아니라 이전 버전으로 롤백할 수 있습니다.
  • 원하는 상태 선언 – 관리자가 필요한 항목을 정의하고 Kubernetes를 통해 이를 구현합니다.
  • 자가 회복 및 탄력성 – 자동 재시작, 배치, 복제 및 확장을 포함합니다.
  • 확장 가능한 스토리지 – 관리자가 필요에 따라 동적으로 스토리지를 추가할 수 있습니다.
  • 로드 밸런싱 – 시스템은 내부 또는 외부 로드 밸런싱을 위해 여러 도구를 사용합니다.
  • DevSecOps 지원 – 컨테이너 라이프사이클 및 클라우드 전반에서 컨테이너 운영 보안을 단순화하고 팀이 보안 앱을 시장에 더 빠르게 출시할 수 있도록 지원합니다.
RELATED

Kubernetes 라이프사이클 관리를 간소화하는 7가지 방법

Kubernetes의 용도

Kubernetes는 조직이 가장 복잡한 애플리케이션을 효과적으로 관리하고 기존 리소스를 최대한 활용하도록 지원합니다. 또한 애플리케이션 가용성을 보장하고 다운타임을 크게 줄이는 데 도움이 됩니다. 컨테이너 오케스트레이션을 통해 플랫폼은 애플리케이션 배포, 롤아웃, 서비스 검색, 스토리지 프로비저닝, 로드 밸런싱, 자동 확장, 자가 회복 등을 비롯한 많은 작업을 자동화합니다. 이렇게 하면 IT 또는 DevOps 팀의 관리 부담이 크게 줄어듭니다.

예를 들어 컨테이너에 장애가 발생했다고 가정해 보겠습니다. 다운타임을 최소화하거나 완전히 제거하기 위해 Kubernetes는 컨테이너 오류를 감지하고 장애가 발생한 컨테이너를 다시 시작, 교체 및/또는 삭제하여 자동으로 전환을 실행할 수 있습니다. 또한 시스템은 모든 클러스터를 감독하고, 리소스가 이미 사용되고 있는 위치와 방법에 따라 최적의 컨테이너 실행 위치를 결정합니다. 이 모든 작업은 밀리초 이내에 자동으로 이루어지므로, 어떤 직원도 이에 대응할 수 없습니다.

Kubernetes as a Service란?

KaaS(Kubernetes as a Service)는 관리형 Kubernetes 클러스터를 사용자에게 제공하는 클라우드 기반 오퍼링입니다. 이를 통해 조직은 기본 인프라의 광범위한 설정 및 유지보수 없이도 Kubernetes의 기능을 활용할 수 있습니다. KaaS를 사용하면 사용자는 Kubernetes 클러스터 관리의 복잡성을 처리하는 대신 애플리케이션 배포 및 관리에 더 집중할 수 있습니다.

KaaS 제공업체는 클러스터 프로비저닝, 확장, 업그레이드 및 모니터링과 같은 작업을 처리하여 사용자의 운영 부담을 덜어줍니다. 또한 Kubernetes 클러스터와 상호 작용할 수 있도록 사용자 친화적인 인터페이스 또는 API를 제공하며, 경우에 따라 로드 밸런싱, 자동 확장, 통합 로깅 및 모니터링과 같은 추가 기능을 제공합니다.

Kubernetes as a Service를 제공함으로써 클라우드 제공업체와 관리형 서비스 제공업체는 개발자와 조직이 컨테이너형 애플리케이션을 규모에 맞게 빠르고 쉽게 배포하고 관리할 수 있도록 지원하므로, 광범위한 Kubernetes 전문 지식이나 인프라 관리 기술 없이도 Kubernetes의 이점을 활용할 수 있습니다.

Docker란?

Kubernetes와 마찬가지로 Docker는 사용자가 애플리케이션 배포를 자동화할 수 있게 해주는 오픈 소스 솔루션입니다. 그러나 Kubernetes와는 다르게 컨테이너 파일 형식이기도 하며, 사실상 Linux 컨테이너의 파일 형식이 되었습니다. Docker Engine을 사용하면 개발 환경에서 컨테이너를 빌드하고 실행할 수 있습니다. Docker Hub와 같은 컨테이너 레지스트리를 사용하면 컨테이너 이미지를 공유하고 저장할 수 있습니다. Docker 솔루션 제품군은 개별 컨테이너를 배포하고 실행하는 데 정말 유용합니다.

Kubernetes와 Docker의 비교

Kubernetes와 Docker는 서로를 보완하는 별개의 기술이며, 최신 컨테이너 기반 애플리케이션 배포에서 함께 사용되는 경우가 많습니다. 다음은 Kubernetes와 Docker를 비교한 것입니다.

Docker:

  • Docker는 컨테이너를 빌드하고 실행하기 위한 플랫폼 및 도구 모음으로, 애플리케이션과 해당 종속 항목을 경량의 격리된 컨테이너로 패키징할 수 있습니다.

  • 개발자는 Docker를 사용하여 코드, 라이브러리 및 런타임 환경과 같이 애플리케이션을 실행하는 데 필요한 모든 것을 포함하는 컨테이너 이미지를 생성할 수 있습니다.

  • Docker를 사용하면 다양한 환경에서 애플리케이션을 일관되게 배포할 수 있으므로, 호스트 시스템에 관계없이 애플리케이션이 안정적으로 실행됩니다.

  • Docker는 사용하기 쉬운 명령줄 인터페이스(CLI)와 컨테이너 관리를 위한 강력한 도구 및 서비스 에코시스템을 제공합니다.

Kubernetes:

  • Kubernetes(K8s라고도 함)는 컨테이너형 애플리케이션의 배포, 확장 및 관리를 자동화하는 오픈 소스 컨테이너 오케스트레이션 플랫폼입니다.

  • Kubernetes는 머신 클러스터에서 컨테이너를 실행하고 조정하기 위한 프레임워크를 제공합니다.

  • 자동 확장, 로드 밸런싱, 서비스 검색, 자가 회복 등의 기능을 제공합니다.

  • Kubernetes는 선언적 구성 및 확장을 허용하므로 복잡한 애플리케이션 배포를 더 쉽게 관리할 수 있습니다.

  • 높은 수준의 내결함성 및 탄력성을 제공하여 장애 발생 시에도 애플리케이션이 항상 실행되고 언제든지 사용 가능한 상태로 유지되도록 합니다.

요약하면 Docker는 주로 컨테이너의 빌드 및 패키징에 중점을 두는 반면 Kubernetes는 규모에 맞게 컨테이너를 오케스트레이션하고 관리하는 데 중점을 둡니다. Docker는 컨테이너를 만들고 실행하는 도구를 제공하는 반면 Kubernetes는 분산 환경에서 컨테이너형 애플리케이션을 배포하고 관리하기 위한 인프라를 제공합니다. 따라서 일반적으로 Docker를 사용하여 컨테이너 이미지를 빌드한 다음 Kubernetes를 사용하여 머신 클러스터 전반에서 컨테이너를 관리하고 오케스트레이션합니다.

Kubernetes의 이점

Kubernetes는 특히 클라우드 네이티브 애플리케이션에 집중하는 조직에 다양한 이점을 제공합니다. 다음과 같은 이점은 Kubernetes가 오늘날 가장 널리 사용되는 컨테이너 관리 시스템인 이유 중 일부일 뿐입니다. 

  • 작동 효율이 가장 높은 곳으로 워크로드를 이동하므로 온프레미스 및 클라우드에서 실행할 수 있는 플랫폼의 기능이 간편해집니다.
  • 크기 또는 규모에 관계없이 모든 컨테이너형 앱을 간단하게 모니터링, 관리, 배포 및 구성합니다.
  • 높은 확장성으로 Kubernetes를 기존 아키텍처에 쉽게 통합합니다.
  • Kubernetes의 내장된 리소스 최적화, 어디서나 워크로드를 실행할 수 있는 기능, 수요에 따른 자동 확장성을 통해 IT 지출을 통제할 수 있습니다.
  • IT 및 DevOps 팀이 컨테이너화된 앱을 관리하고 오케스트레이션하는 대신 더 중요한 작업에 집중할 수 있습니다.
  • 사용 한도를 정의하는 기능으로 네트워크 대역폭, 메모리 및 스토리지 I/O를 포함한 하드웨어 리소스 사용을 최적화합니다.
  • Kubernetes의 자가 회복 기능으로 애플리케이션의 효율성과 가동 시간을 늘립니다.
  • 다운타임 없는 소프트웨어 업데이트를 예약합니다.
  • 분리된 아키텍처에서 실행하고 신속한 대규모 성장을 처리하는 Kubernetes의 기능으로 인프라의 미래 경쟁력을 확보합니다.

Kubernetes 보안 모범 사례

보안은 워크로드 및 애플리케이션을 실행하는 위치에 관계없이 오늘날 모든 조직의 최우선 순위입니다. 다음은 Kubernetes 시스템과 해당 시스템에서 실행되는 애플리케이션 및 데이터를 보호하기 위한 몇 가지 권장 모범 사례입니다.

  1. 보안 클러스터 액세스 - RBAC(Role-Based Access Control)와 같은 강력한 인증 및 권한 부여 메커니즘을 사용하여 Kubernetes API에 대한 액세스를 제한합니다. 강력하고 고유한 암호를 사용하거나 인증서 기반의 인증과 같은 보다 안전한 인증 방법을 구현합니다. 무단 또는 의심스러운 활동에 대한 감사를 활성화하고 API 액세스를 모니터링합니다.

  2. Kubernetes 구성 요소를 정기적으로 업데이트 - 안정적인 최신 릴리스로 Kubernetes 구성 요소(제어 영역, 작업자 노드, etcd)를 최신 상태로 유지하여 보안 패치 및 버그 수정에 따른 이점을 누립니다.

  3. 네트워크 정책 적용 - 네트워크 정책을 구현하여 클러스터 내의 트래픽 흐름을 제어하고 포드 간 통신을 제한합니다. 네트워크 정책을 사용하여 안전한 통신 채널을 적용하고 민감한 서비스나 데이터에 대한 액세스를 제한합니다.

  4. 보안 컨테이너 이미지 - 신뢰할 수 있는 소스의 신뢰할 수 있는 컨테이너 이미지만 사용합니다. 주기적으로 컨테이너 이미지를 스캔하여 취약성을 찾고 패치 적용 및 업데이트되었는지 확인합니다. 이미지 서명 및 확인을 사용하여 이미지 무결성을 보장합니다.

  5. RBAC 및 최소 권한 사용 - RBAC(Role-Based Access Control)를 구현하여 사용자 및 서비스에 적절한 권한과 역할을 할당합니다. 최소 권한 원칙에 따라 각 사용자 또는 서비스에 필요한 필수 권한만 부여합니다.

  6. 포드 보안 정책 적용 - 포드 보안 정책(PSP)을 활용하여 포드 생성에 대한 보안 제한사항(예: 권한 있는 컨테이너 또는 호스트 액세스 방지)을 적용합니다.

  7. 활동 모니터링 및 기록 - Kubernetes 클러스터의 로깅 및 모니터링 기능을 사용하여 보안 인시던트를 즉시 감지하고 대응합니다. API 서버 로그, 컨테이너 로그 및 클러스터 수준 이벤트를 모니터링하여 의심스러운 활동이나 무단 액세스 시도를 식별합니다.

  8. 보안 etcd 데이터 저장소 - 저장 및 전송 중 암호화를 활성화하여 etcd 데이터 저장소를 보호합니다. etcd에 대한 액세스를 제한하여 권한이 있는 엔티티만 클러스터의 구성 데이터에 액세스하고 수정할 수 있도록 합니다.

  9. 재해 복구를 주기적으로 백업 및 테스트 - 중요한 Kubernetes 구성 요소, 구성 및 데이터를 주기적으로 백업하여 문제나 공격이 발생할 경우 재해 복구를 지원합니다. 재해 복구 프로세스를 주기적으로 테스트하여 효과적으로 작동하는지 확인합니다.

  10. 최신 소식 확인 및 모범 사례 따르기 - 최신 보안 모범 사례와 Kubernetes 커뮤니티 및 보안 전문가의 권장 사항으로 최신 상태를 유지합니다.

Kubernetes 사용 사례

오늘날 조직은 매우 광범위한 사용 사례에 Kubernetes를 사용하고 있습니다. 여기에는 다음이 포함됩니다.

  • 대규모 애플리케이션 배포
  • 마이크로서비스 관리
  • 지속적 통합/지속적 배포(CI/CD) 소프트웨어 개발
  • 서버리스 컴퓨팅 영업 지원
  • 하이브리드 및 멀티클라우드 배포
  • 빅데이터 분석
  • 대규모 또는 복잡한 컴퓨팅 프로젝트
  • 머신 러닝 프로젝트
  • 온프레미스 서버에서 클라우드로 데이터 마이그레이션

Kubernetes가 애플리케이션 개발에 제공하는 이점

Kubernetes는 컨테이너형 애플리케이션을 배포, 관리 및 확장하기 위한 확장 가능하고 탄력적인 플랫폼을 제공함으로써 애플리케이션 개발에서 중요한 역할을 합니다. Kubernetes가 애플리케이션 개발에 제공하는 이점은 다음과 같습니다.

  1. 컨테이너화 - 개발자는 Docker와 같은 기술을 사용하여 애플리케이션과 종속 항목을 컨테이너 이미지로 패키징합니다. 컨테이너를 사용하면 다양한 환경에서 애플리케이션을 일관되게 실행하고 쉽게 배포할 수 있습니다.

  2. 선언적 구성 - 개발자는 일반적으로 YAML 또는 JSON 형식으로 작성된 Kubernetes 구성 파일을 사용하여 애플리케이션 및 해당 구성 요소의 원하는 상태를 정의합니다. 이러한 구성 파일은 복제본 수, 네트워킹 요구 사항, 리소스 한도 등을 비롯하여 애플리케이션을 배포하는 방법을 지정합니다.

  3. 배포 - 개발자는 Kubernetes를 사용하여 컨테이너형 애플리케이션을 배포합니다. 원하는 수의 복제본 및 컨테이너 이미지를 지정하여 Kubernetes에서 배포 오브젝트를 생성합니다. Kubernetes는 클러스터의 사용 가능한 노드에서 컨테이너를 예약합니다.

  4. 확장 및 로드 밸런싱 - Kubernetes는 애플리케이션 확장을 위한 기본 제공 메커니즘을 제공합니다. 개발자는 CPU 사용률 또는 기타 메트릭을 기반으로 자동 확장 정책을 정의하여 애플리케이션을 자동으로 확장 또는 축소할 수 있습니다. 또한 Kubernetes는 고가용성을 보장하고 리소스 활용을 최적화하기 위해 로드 밸런싱을 처리하고 들어오는 트래픽을 애플리케이션의 복제본 전체에 분산시킵니다.

  5. 서비스 검색 및 네트워킹 - Kubernetes는 애플리케이션이 클러스터 내에서 서로 검색하고 통신할 수 있도록 서비스 추상화를 제공합니다. 개발자는 애플리케이션의 엔드포인트를 노출하는 서비스를 정의하고 Kubernetes는 각 서비스에 고유한 DNS 이름과 IP 주소를 자동으로 할당합니다. 이렇게 하면 애플리케이션의 서로 다른 부분 간 통신이 원활해집니다.

  6. 순차적 업데이트 및 롤백 - Kubernetes는 순차적 업데이트를 지원하므로 개발자가 다운타임 없이 애플리케이션을 업데이트할 수 있습니다. 개발자는 컨테이너 이미지의 새 버전을 지정할 수 있으며, Kubernetes는 기존 컨테이너를 새 컨테이너로 단계적으로 교체하여 원활한 전환을 보장합니다. 문제나 오류가 발생할 경우 Kubernetes는 이전 작업 버전으로의 롤백을 지원합니다.

  7. 관측 및 모니터링 - Kubernetes는 모니터링 및 관측을 위한 기능을 제공합니다. 개발자는 애플리케이션을 로깅 및 모니터링 시스템과 통합할 수 있으며, Kubernetes는 애플리케이션 및 해당 구성 요소에 대한 메트릭, 로그 및 이벤트를 제공합니다. 이를 통해 개발자는 애플리케이션의 성능에 대한 인사이트를 얻고 문제를 해결하며 리소스 활용을 최적화할 수 있습니다.

Kubernetes는 컨테이너형 애플리케이션의 라이프사이클, 확장성 및 네트워크 측면을 관리하기 위한 플랫폼을 제공하여 애플리케이션 개발을 간소화합니다. 이를 통해 개발자는 코드를 작성하고 원하는 애플리케이션 상태를 정의하는 데 집중할 수 있으며 Kubernetes는 배포 및 확장을 처리하고 언제든지 사용 가능한 상태로 유지되도록 합니다.

Nutanix를 통한 Kubernetes 관리

Kubernetes는 컨테이너 오케스트레이션 및 관리를 간소화하고 자동화하는 것부터 활성 오픈 소스 커뮤니티 및 유연한 확장성에 이르기까지 다양한 이점을 제공합니다. 또한 클라우드 네이티브 전략에서 핵심적인 역할을 하고 하이브리드 및 멀티클라우드 컴퓨팅 모델을 수용하므로 개발을 가속화하고 애플리케이션을 손쉽게 배포하며 앱 및 서비스 운영을 최적화하려는 조직에 전략적 옵션이 됩니다.

Nutanix는 NKE(Nutanix Kubernetes Engine)를 통해 Kubernetes 운영 및 관리를 훨씬 더 단순화할 수 있도록 지원합니다. NKE를 사용하면 다음을 수행할 수 있습니다.

  • 단 몇 분만에 프로덕션 환경에 즉시 사용 가능한 Kubernetes 클러스터를 배포하고 구성합니다.

  • 전체 클라우드 네이티브 스택에 대한 Kubernetes 스토리지, 모니터링, 로깅 및 알림을 간편하게 통합할 수 있습니다.

  • 개방형 API를 통한 네이티브 Kubernetes 사용자 경험을 제공합니다.

추천 리소스:

주요 리소스 살펴보기

Nutanix Kubernetes Engine 데이터시트

Nutanix Kubernetes Engine

Kubernetes용 HCI 사용에 따른 이점

Kubernetes용 HCI 사용에 따른 5가지 이점

Nutanix Kubernetes Engine 가이드

Kubernetes 라이프사이클 관리를 간소화하는 7가지 방법

관련 제품 및 솔루션

하이브리드 클라우드 Kubernetes

Red Hat, Google Cloud 및 Microsoft Azure와의 협력을 통해 Nutanix는 하이브리드 클라우드 Kubernetes로 전환하는 빠르고 신뢰할 수 있는 경로를 제공합니다.

Nutanix 쿠버네티스 엔진

엔터프라이즈 Kubernetes 관리 솔루션인 Nutanix Kubernetes Engine으로 프로덕션 지원 Kubernetes로 신속하게 전환하고 라이프사이클 관리를 간소화해 보십시오.

Kubernetes 스토리지

Nutanix 데이터 서비스와 CSI는 Kubernetes에서 영구 스토리지를 구성하고 관리하는 과정도 간소화합니다.