쿠버네티스

쿠버네티스와 컨테이너

GaGah 2022. 11. 30. 22:05

📍 가상화 vs 컨테이너

1) 가상화

  • 하나의 컴퓨터를 다수의 가상 컴퓨터로 분할할 수 있도록 해주는 기술
    • 즉, 하나의 컴퓨터 안에 여러 개의 OS 와 APP이 돌아갈 수 있음. (ex. 맥북에 윈도우OS를 깔 수 있듯!)
  •  리소스를 효율적으로 관리할 수 있음.
  • 여러 개의 가상 컴퓨터를 I/O 명령 처리 및 관리해주는 Hypervisor라는 것이 있다.

 

2) 컨테이너

  • 가상화 기능을 사용하다가, VM보다 좀 더 가벼운 것이 없을까 하고 나타난 개념
  • 이동성과 배포 편의성이 있음. (개발환경의 jdk와 상용환경 jdk 라이브러리가 다르다면, 버전 오류가 발생하지만, 컨테이너는 하나의 이미지로 만들기 때문에, 어떤 환경에서 구동하던 상관없음.)
  • Container Engine 을 통해 자원을 분리해서 사용

 

🌈 컨테이너 엔진

Docker, rkt, Hyper container 다양한 컨테이너 엔진들을 지원

 

 

👀 [more] 도커 컨테이너에 대해

도커 이미지는 파일 형태라고 보면 되고, 기본적으로 변경이 불가하며 생성되면 바뀌지 않는다.

도커 이미지가 실행상태가 되면 컨테이너가 되는 것이라고 보면 된다.

 

👀 [more] 컨테이너 오케스트레이션

컨테이너 배포 관리를 흔히 컨테이너 오케스트레이션 이라고 한다. (즉, 쿠버네티스는 컨테이너 오케스트레이터이다.)

오케스트라의 연주자처럼 서로 다른 역할을 조정하고 나열하는 것을 의미한다.

즉, 여러 컨테이너의 배포 프로세스를 최적화하고, 특정 애플리케이션이 설계 의도대로 기능하도록 함께 작동해야 하는 수십 또는 수백 개의 느슨하게 결합되고 컨테이너화된 요소로 구성된 것이다.

 

 

 


📍 쿠버네티스란?

컨테이너화된 애플리케이션을 자동으로 배포, 스케이링 및 관리해주는 오픈소스

컨테이너 기술은 민첩성을 확보하는 핵심 가상화 기술이며, 컨테이너 기반의 가상화 환경을 운영 관리하는 핵심 기술이 바로 쿠버네티스이다.

CI/CD 도구 및 개발 방법론을 결합함으로써 코딩, 빌드 및 테스트를 보다 쉽고 빠르게 수행하며 개발환경 자동화와 손쉬운 운영 환경 배포의 기반을 마련

 

 

📍 쿠버네티스 아키텍처

Kubernates Master : 클러스터 전체를 관리하는 컨트롤러로써의 마스터

Node : 컨테이너가 배포되는 머신

 

출처 : https://itwiki.kr/w/%EC%BF%A0%EB%B2%84%EB%84%A4%ED%8B%B0%EC%8A%A4

 

 

📍 쿠버네티스 객체

🔆 1. 기본 오브젝트

도커 이미지가 실행된 상태에서는 변경이 불가하다고 했다.

쿠버네티스는 실행이 된 상태에서는 변경이 불가능하며 그 상태를 그대로 유지하길 원한다.

즉, 오브젝트는 사용자가 쿠버네티스에 원하는 상태를 의미한다.

 

기본 오브젝트 종류에는 Pod, Volume, Service, Namespace가 있다.

 

🔎 1-1. Pod : 컨테이너화된 애플리케이션

쿠버네티스는 하나의 컨테이너를 개별적으로 배포하지 않고, Pod 단위로 배포한다.

Pod는 쿠버네티스의 가장 기본적인 배포 단위이며, 1개의 Pod에 여러 개의 컨테이너가 존재할 수 있다. 

Pod 내의 컨테이너들을 IP/Port 및 디스크 볼륨을 공유할 수 있다.

Pod가 재시작되면 IP가 변경되고, Pod 내의 컨테이너들의 로컬디스크 내용은 사라진다. 

 

🔎 1-2. Volum : 디스크

Pod가 기동될 때 각 컨테이너마다 로컬디스크를 생성하고, 재기동 시, 해당 내용은 사라진다고 위에 명시해두었다.

하지만, 각 컨테이너의 모든 파일이 사라진다면?

컨테이너 재시작과 상관없이 파일을 영속적으로 저장해야하는데, 이러한 형태를 볼륨이라고 한다.

볼륨은 컨테이너이 외장 디스크라고 생각하면 되고, Pod가 기동될 때 컨테이너에 마운트하여 사용한다.

 

 

🔎 1-3. Service : 로드밸런서

위에서 말해 듯, Pod는 재기동시 IP가 변경된다. 

이러한 유동적인 IP를 관리하고 쿠버네티스 외부에서 접속할 때, 연결해주는 LodBalancer 역할을 한다.

일반적으로 서비스 시, 여러 개의 Pod를 사용하고 이를 로드밸러서(Service)를 통해 하나의 IP와 포트로 묶어 서비스를 제공한다.

각 Pod를 생성할 때, Object Sepc의 metadata부분에 Pod에서 사용할 라벨을 정의할 수 있다.

 

 

🔎 1-4. Namespace : 패키지명

쿠버네티스 클러스터내의 논리적인 분리 단위이다.

흔히 패키지명이라고 생각하면 되고, namespace에 따라 사용자별 접근 권한을 다르게 운영할 수 있다.

다른 namespace 간의 pod라도 통신은 가능하다.

 

 

🔆  2. 컨트롤러

컨트롤러는 객체가 원래 설정된 상태를 잘 유지할 수 있게 관리하는 역할 

 

🔆 3. 오브젝트 스펙 및 메타 정보

 

 

 

 

LIST

'쿠버네티스' 카테고리의 다른 글

쿠버네티스 아키텍처  (0) 2022.12.06