[Kubernetes] 쿠버네티스란 무엇인가

메린·2023년 5월 16일
0

Kubernetes

목록 보기
2/8
post-thumbnail

과거의 개발, 운영에 대해서 생각해보며 쿠버네티스에 대해 얘기해보려 한다. 과거에는 개발 팀에서 애플리케이션을 만든 후에 운영 팀에 넘겨주면 애플리케이션을 배포하고, 관리하고, 계속 실행했다.

하지만 이제 애플리케이션을 개발하는 사람이 배포와 관리 실행까지 참여하는 것이 DevOps 이며 그것을 가능하게 하는 것이 Kubernetes 이다.

바로 Orchestration management system 이다.

Container 란

Kubernetes ? 리눅스 컨테이너 기술 을 사용해 실행 중인 애플리케이션을 분리하도록 만들어주어 컨테이너 어플리케이션을 쉽게 배포하고 관리할 수 있게 해주는 소프트웨어 시스템

Virtual Machine 과 Container 의 비교

  • Container는 하이퍼바이저가 없으며, 커널이 하나로 존재한다.

Container를 통해 동일한 하드웨어에서 더 많은 구성요소를 실행 할 수 있게 된다.
컨테이너는 하이퍼바이저 없이 직접 운영 체제의 커널을 공유하여 가상화하는 기술이다. 컨테이너는 호스트 시스템의 운영 체제 위에서 동작하며, 가상화된 환경에서 애플리케이션을 격리하여 실행한다.

하이퍼바이저는 가상 머신 단위로 리소스를 분할하고 격리시키는 반면, 컨테이너는 운영 체제 수준에서 프로세스를 격리한다. 컨테이너는 가상화된 운영 체제를 생성하지 않고, 호스트 운영 체제의 커널을 공유하여 동작하므로 더 가볍고 빠른 실행 속도를 가진다.

example

  • 가상 머신 3개 -> 완전히 불리된 3개의 운영체제 실행 (Hypervisor:물리적 하드웨어 리소스를 내부의 운영체제에서 사용할 수 있는 리소스로 나눠줌 + 호스트 os)

컨테이너 격리를 가능하게 해주는 매커니즘

  1. Linux namespace
    각 Process, PID, 네트워크, 파일시스템, host name 등 독립 뷰를 제공한다.
  2. cgroups (Control Groups)
    프로세스 리소스 사용량(CPU, memory, disk I/O, 네트워크)을 제한한다.

Docker

Container 기술을 사용해 애플리케이션을 구축, 패키징, 배포, 실행하게 해주는 소프트웨어 플랫폼이다.

Docker에 필요한 개념 3가지

  • Image : 컨테이너 실행에 필요한 파일 시스템과 소프트웨어 설정 등이 포함된 하나의 파일, 이미지는 응용 프로그램을 실행하기 위한 모든 것을 포함하며, 미리 구성된 상태로 배포된다.
  • Registry : 도커 이미지를 저장하고 관리하는 중앙 저장소입니다. 도커 이미지는 레지스트리에서 가져와서 컨테이너를 생성하고 실행할 수 있다. 대표적인 도커 레지스트리로는 도커 허브(Docker Hub)가 있다.
  • Container : 도커 이미지를 기반으로 생성된 독립적인 실행 단위입니다. 컨테이너는 이미지의 인스턴스로, 호스트 시스템에서 격리된 환경에서 동작한다. 각각의 컨테이너는 자체 파일 시스템을 가지며, 프로세스를 실행할 수 있다.

Docker Container Platform
도커(Docker) 기술을 기반으로 한 컨테이너화 플랫폼, 이 플랫폼은 애플리케이션을 컨테이너 단위로 패키징하고 배포하며, 컨테이너의 실행과 관리를 위한 도구 및 기능을 제공한다.

Kubernetes

Container System 상에서 Application을 쉽게 배포하고 관리할 수 있게 해주는 orchestration management 시스템

배포의 과정

  • Application manifest 제출 -> 워커 노드 클러스터에 배포

Kubetnetes 에서 Application 실행하기

  1. 컨테이너 이미지 생성 : 어플리케이션의 컴포넌트를 포함하는 하나 이상의 컨테이너 이미지를 작성한다.

  2. 이미지 레지스트리에 푸시 : 생성한 컨테이너 이미지를 이미지 레지스트리에 푸시한다. 이미지 레지스트리는 컨테이너 이미지를 저장하고 공유할 수 있는 중앙 저장소입니다.

  3. 쿠버네티스 리소스 생성 : Kubernetes 클러스터 내에서 어플리케이션을 실행하기 위해 쿠버네티스 리소스를 생성한다. 이 리소스는 어플리케이션의 구성을 정의하며, Pods, Deployments, Services, ConfigMaps, Secrets 등과 같은 Kubernetes 오브젝트로 표현된다.

  4. kubectl apply 또는 helm을 사용하여 어플리케이션 배포 : 생성한 쿠버네티스 리소스를 Kubernetes 클러스터에 배포한다. 이를 위해 kubectl apply 명령이나 Helm과 같은 배포 관리 도구를 사용할 수 있다. 이 단계에서 어플리케이션의 구성이 쿠버네티스 API 서버에 전달되고, 쿠버네티스 클러스터는 해당 구성에 따라 어플리케이션을 생성하고 실행한다.

Docker와의 차이점

  • Docker : image를 컨테이너로 띄우고 실행하는 기술적인 개념 + 도구
  • Kubernetes : Docker을 관리하는 Tool

Kubernetes State

  • Desired State vs Current State
  • 사용자가 Kubernetes에 바라는 상태와, 객체의 현재 상태를 의미
  • Kubernetes는 끊임없이 객체의 current state를 감시해 desired state를 달성하고자 한다.
profile
I can do it ! 苦盡甘來

0개의 댓글