[INFRA] 쿠버네티스 개념

Jaehyeong Kwon·2023년 3월 5일
0

INFRA

목록 보기
4/5
post-thumbnail

CKA를 준비하면서 강의를 듣고 준비를 했었는데 환경 문제로 떨어지고 나서 다시 준비하면서 정리할 겸 글을 남기고자 한다.

1. 쿠버네티스란

쿠버네티스(Kubernetes)는 컨테이너화된 애플리케이션의 자동 배포, 자동 스케일링 등을 제공하는 오픈소스 기반 관리 시스템입니다. 처음에는 구글에 의해 설계 되었고, 현재는 리눅스 재단에 의해 관리되고 있습니다.


2. 쿠버네티스의 사용 목적

쿠버네티스의 사용 목적은 여러 클러스터의 호스트 간에 애플리케이션 컨테이너의 배치, 스케일링, 운영을 자동화하기 위한 플랫폼을 제공하기 위함입니다. 도커(Docker)를 포함하여 일련의 컨테이너 도구들과 함께 동작합니다.

도커(Docker)와 쿠버네티스(Kubernetes)의 차이
도커는 '기술적인 개념이자 도구'이고, 쿠버네티스는 컨테이너를 관리하는 툴이라 생각하면 됩니다.
이미지를 컨테이너에 띄우고 실행하는 기술이 도커이고, 도커를 기반으로 컨테이너를 관리하는 서비스가 쿠버네티스라 생각하면 됩니다.


3. 쿠버네티스의 유용성

1) 전통적인 배포(Traditional Deployment)

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

2) 가상화된 배포(Virtualized Deployment)

위의 문제의 해결책으로 가상화가 도입되었습니다. 이는 단일 물리 서버의 CPU에서 여러 가상 시스템 (VM)을 실행할 수 있습니다. 가상화를 사용하면 VM 간에 애플리케이션을 격리하고 애플리케이션의 정보를 다른 애플리케이션에서 자유롭게 액세스할 수 없으므로, 보안성을 갖출 수 있습니다. 가상화를 이용하면 물리 서버에서 리소스를 보다 효율적으로 활용할 수 있으며, 쉽게 애플리케이션을 추가하거나 업데이트할 수 있고 하드웨어 비용을 절감할 수 있어 더 나은 확장성을 제공합니다. 가상화를 통해 일련의 물리 리소스를 폐기 가능한 가상 머신으로 구성된 클러스터로 만들 수 있습니다. 각 VM은 가상화된 하드웨어 상에서 자체 운영체제를 포함한 모든 구성 요소를 실행하는 하나의 완전한 머신입니다.

3) 컨테이너 배포(Container Deployment)

컨테이너는 VM과 유사하지만 격리 속성을 완화하여 애플리케이션 간에 운영체제(OS)를 공유합니다. 그러므로 컨테이너는 가볍다고 여겨집니다. VM과 마찬가지로 컨테이너에는 자체 파일 시스템, CPU 점유율, 메모리, 프로세스 공간 등이 있습니다. 기본 인프라와의 종속성을 끊었기 때문에, 클라우드나 OS 배포본에 모두 이식할 수 있습니ㅏㄷ.

컨테이너는 다음과 같은 추가적인 혜택을 제공하기 때문에 인기가 있습니다.

  • 기민한 애플리케이션 생성과 배포: VM 이미지를 사용하는 것에 비해 컨테이너 이미지 생성이 보다 쉽고 효율적입니다.

  • 지속적인 개발, 통합 및 배포: 안정적이고 주기적으로 컨테이너 이미지를 빌드해서 배포할 수 있고, 빠르고 효율적으로 롤백할 수 있습니다.

  • 개발과 운영의 관심사 분리: 배포 시점이 아닌 빌드/릴리스 시점에 애플리케이션 컨테이너 이미지를 만들기 때문에, 애플리케이션이 인프라스트럭처에서 분리됩니다.

  • 가시성은 OS 수준의 정보와 메트릭에 머무르지 않고, 애플리케이션의 헬스와 그 밖의 시그널을 볼 수 있습니다.

  • 느슨하게 커플되고, 분산되고, 유연하며, 자유로운 마이크로 서비스: 애플리케이션은 단일 목적의 머신에서 모노리스식 스택으로 구동되지 않고, 보다 작고 독립적인 단위로 쪼개져서 동적으로 배포되고 관리될 수 있습니다.

  • 리소스 격리: 애플리케이션 성능을 예칙할 수 있습니다.

  • 자원 사용량: 고효율 고집적


4. 쿠버네티스의 필요성

컨테이너는 애플리케이션을 포장하고 실행하는 좋은 방법입니다. 프로덕션 환경에서는 애플리케이션을 실행하는 컨테이너를 관리하고 가동 중지 시간이 없는지 확인해야합니다. 컨테이너가 다운되면 다른 컨테이너를 다시 시작해야합니다. 이 문제를 시스템에 의해 처리하면 더 쉽기 때문에 쿠버네티스가 필요합니다. 쿠버네티스는 분산 시스템을 탄력적으로 실행하기 위한 프레임워크를 제공합니다. 애플리케이션의 확장과 장애 조치를 처리하고, 배포 패턴 등을 제공합니다. 예를 들어, 쿠버네티스는 시스템의 카나리아 배포를 쉽게 관리 할 수 있습니다.

서비스 디스커버리와 로드 밸런싱
쿠버네티스는 DNS 이름을 사용하거나 자체 IP 주소를 사용하여 컨테이너를 노출할 수 있습니다. 컨테이너에 대한 트래픽이 많으면, 쿠버네티스는 네트워크 트래픽을 로드밸런싱하고 배포하여 배포가 안정적으로 이루어질 수 있습니다.

스토리지 오케스트레이션
쿠버네티스를 사용하면 로컬 저장소, 공용 클라우드 공급자 등과 같이 원하는 저장소 시스템을 자동으로 탑재할 수 있습니다.

자동화된 롤아웃과 롤백
쿠버네티스를 사용하여 배포된 컨테이너의 원하는 상태를 서술할 수 있으며, 현재 상태를 원하는 상태로 설정한 속도에 따라 변경할 수 있습니다. 예를 들어 쿠버네티스를 자동화해서 배포용 새 컨테이너를 만들고, 기존 컨테이너를 제거하고, 모든 리소스를 새 컨테이너에 적용할 수 있습니다.

자동화된 빈 패킹(BIN PACKING)
컨테이너화된 작업을 실행하는 데 사용할 수 있는 쿠버네티스 클러스터 노드를 제공합니다. 각 컨테이너가 필요로하는 CPU와 메모리(RAM)을 쿠버네티스에게 지시합니다. 쿠버네티스는 컨테이너를 노드에 맞춰 리소스를 가장 잘 사용할 수 있도록 합니다.

자동화된 복구(self-healing)
쿠버네티스는 실패한 컨테이너를 다시 시작하고, 컨테이너를 교체하며, '사용자 정의 상태 검사'에 응답하지 않는 컨테이너를 죽이고 서비스 준비가 끝날 때까지 그러한 과정을 클라이언트에 보여주지 않습니다.

시크릿과 구성 관리
쿠버네티스를 사용하면 암호, OAuth 토큰 및 SSH 키와 같은 중요한 정보를 저장하고 관리할 수 있습니다. 컨테이너 이미지를 재구성하지 않고, 스택 구성에 시크릿을 노출하지 않고도 시크릿 및 애플리케이션 구성을 배포 및 업데이트할 수 있습니다.


5. 쿠버네티스의 역사

그리스어로 키잡이를 뜻하는 쿠버네티스는 조 베다에 의해 설립되었으며, 2014년 중순에 구글에 의해 처음 발표되었습니다.

개발과 설계는 구글의 보그 시스템, 그리고 이전에 보그에서 일한 프로젝트의 상위 기여자 중 다수의 상당한 영향을 받았습니다. 구글 내 쿠버네티스의 원래 코드명은 프로젝트 세븐이었으며, 이는 더 친숙한 보그 스타트렉 캐릭터를 참조한 것입니다.

쿠버네티스 v1.0은 2015년 7월 21일에 출시되었습니다. 쿠버네티스 v1.0 출시와 함께 구글은 리눅스 재단과 파트너십을 맺고 클라우드 네이티브 컴퓨팅 재단(Cloud Native Computing Foundation, CNCF)를 설립하였고, 쿠버네티스를 시드 테크놀로지로 제공하였습니다.

profile
나무와 같이 성장하는 사람

0개의 댓글