Kubernetes란?

종종 "클라우드용 운영체제"로 설명되는 Kubernetes는 컨테이너화된 애플리케이션 및 서비스 클러스터를 관리하기 위한 오픈 소스 플랫폼입니다. Google 엔지니어인 Joe Beda, Brendan Burns, Craig McLuckie가 2014년에 개발하고 곧 오픈 소스로 공개된 Kubernetes는 곧 그 자체로 번성하는 클라우드 네이티브 생태계가 되었습니다. 오늘날 Kubernetes(고대 그리스어로 "조타수"또는 "조종사"를 의미함)는 Linux Foundation의 한 부서인 CNCF(Cloud Native Computing Foundation)에서 관리합니다.

Kubernetes는 CNCF의 첫 번째 졸업 프로젝트였으며 역사상 가장 빠르게 성장하는 오픈 소스 프로젝트 중 하나가 되었습니다. Kubernetes는 현재 2,300명 이상의 기여자를 보유하고 있으며 Fortune 100대 기업의 절반을 포함하여 크고 작은 기업에서 널리 채택되었습니다.

Kubernetes 101-주요 용어

먼저 Kubernetes와 관련된 몇 가지 주요 용어를 소개합니다. Kubernetes 표준 용어집 페이지에서 전체 목록을 확인하실 수 있습니다. 또한 일반적으로 사용되는 kubectl 명령 및 플래그 목록이 포함된 Kubernetes Cheat Sheet를 활용할 수 있습니다.

클러스터

Kubernetes로 관리되는 컨테이너화된 애플리케이션을 실행하는 데 사용되는 노드라고 하는 일련의 시스템을 개별적으로 참조하는 머신 조합입니다.

노드

가상 또는 물리적 머신입니다. 클러스터는 마스터 노드와 여러 개의 작업자 노드로 구성됩니다.

클라우드 컨테이너

소프트웨어와 종속성을 포함하는 이미지입니다.

포드

단일 컨테이너이거나 Kubernetes 클러스터에서 실행되는 컨테이너 집합입니다.

배포

포드로 대표되는 복제된 애플리케이션을 관리하는 객체입니다. 포드는 클러스터의 노드에 구축됩니다.

복제본

지정된 수의 포드 복제본이 한 번에 실행될 수 있도록 합니다.

서비스

일련의 포드로 대표되는 애플리케이션에 액세스하는 방법을 설명합니다. 서비스는 일반적으로 포트 및 로드 밸런서를 설명하고 클러스터에 대한 내부 및 외부 액세스를 제어하는 데 사용할 수 있습니다.

KubeCon은 무엇입니까?

KubeCon은 Kubernetes 개발자 및 사용자를 위한 연례 컨퍼런스입니다. 2015년에 500명이 참석한 첫 번째 KubeCon 이후 KubeCon은 클라우드 네이티브 커뮤니티의 중요한 이벤트로 성장했습니다. 2019년 캘리포니아 샌디에이고 KubeCon 에디션에는 Kubernetes 클라우드 오케스트레이션 플랫폼을 중심으로 피어나는 오픈 소스 생태계를 축하하는 12,000명의 개발자와 사이트 안정성 엔지니어가 참석했습니다.

Kubernetes 컨테이너란?

개발자가 다양한 클라우드, 테스트 환경, 노트북, 장치, 운영체제 및 플랫폼을 사용하는 다양한 컴퓨팅 환경을 위한 소프트웨어를 점점 더 많이 배포함에 따라 소프트웨어를 안정적으로 실행하는 문제가 가장 중요합니다. 컨테이너가 제공되는 위치로 전체 런타임 환경과 애플리케이션을 번들화합니다. 이러한 의미에서 컨테이너는 올바른 라이브러리, 종속성 및 운영체제를 포함하여 애플리케이션을 실행할 수 있는 "버블"을 제공하기 때문에 가상화의 한 형태입니다. 그러나 컨테이너는 애플리케이션에 필요한 리소스만 포함하고 그 이상은 포함하지 않기 때문에 가상 머신보다 작습니다.

Kubernetes와 Docker 비교

Linux 컨테이너는 2008년부터 존재했지만 Docker 컨테이너는 2013년에 등장하여 유명해졌습니다. 마찬가지로 컨테이너화된 애플리케이션(실행에 필요한 모든 것이 포함된 애플리케이션) 배포에 대한 관심이 폭발적으로 증가함에 따라 궁극적으로 수천 개의 컨테이너 관리라는 새로운 문제가 발생했습니다. Kubernetes는 컨테이너 수명 주기를 자동으로 조정하여 호스팅 인프라 전체에 컨테이너를 배포합니다. Kubernetes는 수요에 따라 리소스를 확장하거나 축소합니다. 컨테이너의 상태를 프로비저닝, 예약, 삭제 및 모니터링합니다.

Kubernetes의 구성 요소는 무엇입니까?

Kubernetes의 주요 구성 요소는 클러스터, 노드 및 제어 영역입니다. 클러스터에는 노드가 포함됩니다. 각 노드는 하나 이상의 작업자 머신 세트로 구성됩니다. 노드는 배포된 애플리케이션의 요소를 포함하는 포드를 호스팅합니다. 제어 평면은 고가용성을 위해 종종 많은 컴퓨터에서 클러스터의 노드 및 포드를 관리합니다.

Kubernetes란?

제어 평면에는 다음이 포함됩니다.

  • Kubernetes API 서버는 Kubernetes 제어를 위한 프로그래밍 인터페이스(API)를 제공합니다.
  • etcd: 클러스터 데이터용 키-값 저장소
  • Kubernetes 스케줄러: 사용 가능한 노드에 새 포드를 일치시킵니다.
  • Kubernetes Controller Manager: 노드 장애를 관리하고, 복제를 제어하고, 엔드포인트를 통해 서비스 및 포드에 가입하고, 계정 및 액세스 토큰을 제어하기 위해 여러 프로세스를 실행합니다.
  • 클라우드 컨트롤러 관리자: 특정 인프라 경로 및 로드 밸런싱과 같은 측면에서 특정 클라우드 공급자의 API를 관리하는 데 도움이 됩니다.

노드 구성 요소는 다음과 같습니다.

  • kubelet: 컨테이너가 포드에서 실행 중인지 확인하는 에이전트
  • Kubernetes 네트워크 프록시: 네트워크 규칙 유지 관리
  • Docker, 컨테이너화된 또는 다른 유형의 컨테이너 런타임

Kubernetes는 어떤 이점을 제공합니까?

컨테이너를 사용하면 애플리케이션이 실행에 필요한 모든 항목과 함께 번들로 제공된다는 확신을 가질 수 있습니다. 그러나 마이크로서비스를 포함하는 컨테이너를 추가하면 Kubernetes를 사용하여 컨테이너를 자동으로 관리하고 배포할 수도 있습니다.

Kubernetes를 사용하면 조직에 다음과 같은 이점이 있습니다.

자동 확장 수요에 따라 배포 수량을 조정합니다.
서비스 검색 DNS 또는 IP 주소를 통해 컨테이너화된 서비스를 찾습니다.
부하 균형 네트워크 트래픽을 분산하여 배포를 안정화합니다.
스토리지 관리 로컬 또는 클라우드 스토리지를 선택하십시오.
버전 관리 실행할 컨테이너 종류와 새 이미지 또는 컨테이너 리소스를 사용하여 교체할 컨테이너를 선택합니다.
보안 유지 관리 특정 컨테이너 이미지와 관련된 암호, OAuth 토큰 및 SSH 키를 안전하게 업데이트합니다.

Kubernetes를 사용하는 데 어떤 어려움이 있습니까?

Kubernetes는 구성 기능이 뛰어나고 모든 유형의 애플리케이션을 지원할 수 있지만 이해하고 사용하기가 어려울 수 있습니다. 많은 CNCF 회원들이 언급했듯이 Kubernetes가 주어진 워크로드에 대해 항상 올바른 솔루션은 아닙니다. 이것이 Kubernetes 생태계에 조직에서 특정 워크로드 문제를 해결하기 위해 만든 여러 관련 클라우드 네이티브 도구가 포함된 이유입니다.

Kubernetes는 소스 코드가 아닌 컨테이너를 배포하고 애플리케이션을 빌드하지 않습니다. 로깅, 미들웨어, 모니터링, 구성, CI/CD 및 기타 여러 프로덕션 활동을 위해서는 추가 도구가 필요합니다. 즉, Kubernetes는 확장 가능하며 제트기에서 머신러닝에 이르기까지 다양한 사용 사례에 능숙한 것으로 입증되었습니다. 실제로 Oracle, Google, Amazon Web Services 등을 비롯한 클라우드 공급업체는 Kubernetes의 자체 확장성을 사용하여 복잡성을 줄이고 개발자 생산성을 높이는 서비스인 관리형 Kubernetes를 구축했습니다.

관리형 Kubernetes란 무엇입니까?

클라우드 네이티브 및 Kubernetes는 AgroScout가 프레임기를 지원하는 방식을 혁신합니다.

Oracle의 클라우드 인프라 Container Engine for Kubernetes는 컨테이너화된 애플리케이션을 클라우드에 배포하는 데 사용할 수 있는 개발자 친화적인 관리형 서비스입니다. 개발 팀이 클라우드 네이티브 애플리케이션을 안정적으로 빌드, 배포, 관리하려는 경우 Container Engine for Kubernetes를 사용하십시오. 애플리케이션에 필요한 컴퓨트 리소스를 지정하고 Container Engine for Kubernetes가 기존 클라우드 인프라 테넌시 내에서 프로비저닝합니다.

Oracle Cloud Infrastructure(OCI)에서 관리형 Kubernetes 서비스를 사용할 필요는 없지만 Container Engine for Kubernetes는 Oracle Cloud Infrastructure(OCI)의 제어, 보안 및 예측 가능한 성능으로 고가용성 클러스터를 쉽게 실행할 수 있는 방법입니다. Container Engine for Kubernetes는 베어 메탈 및 가상 머신을 모두 노드로 지원하며 CNCF에 의해 적합하다는 인증을 받았습니다. 또한 모든 Kubernetes 업데이트를 받고 추가 작업 없이 CNCF 생태계와의 호환성을 유지합니다.


Kubernetes 생태계 및 커뮤니티

Oracle은 성숙도별로 구성된 수십 개의 소프트웨어 개발 프로젝트를 지원하는 오픈 소스 커뮤니티인 CNCF(Cloud Native Computing Foundation)의 플래티넘 회원입니다. 졸업 프로젝트(Kubernetes, Prometheus, Envoy, CoreDNS, containerd, Fluentd, Jaeger, Vitess, TUFHelm)은 모두 클라우드 네이티브 개발 측면에서 매우 중요한 것으로 입증되었습니다.

Kubernetes를 시작하는 방법

Kubernetes는 주변에서 생겨난 프로젝트를 지원하는 대규모 생태계를 가지고 있습니다. 배경 지식은 어려울 수 있으며 간단한 질문에 대한 답을 찾는 것은 당신을 토끼굴로 이끌 수 있습니다. 그러나 이 경로의 처음 몇 단계는 간단하며 여기에서 필요에 따라 고급 개념을 탐색할 수 있습니다. 다음 작업을 수행하는 방법 알아보기:

  • Docker 및 Kubernetes를 사용하여 로컬 개발 환경 설정
  • Helidon으로 간단한 Java 마이크로서비스 생성
  • Docker를 사용하여 마이크로서비스를 컨테이너 이미지로 빌드
  • 로컬 Kubernetes 클러스터에 마이크로서비스 배포
  • 클러스터에서 마이크로서비스 확장 및 축소

개발자를 위한 Kubernetes

첫 번째 Kubernetes 프로젝트를 시작하고자 하는 개발자는 개발자 포털을 체크아웃하여 Kubernetes에서 첫 번째 Arm 앱을 구축하거나 클라우드 셸을 사용하여 Kubernetes 클러스터를 배포하는 방법을 알아볼 수 있습니다.


OCI의 Kubernetes 소개 (8:32)