작년에 데엔/데옵 스터디를 하면서 인프라에 대해서 많이 공부했다.
그런데... 사람의 기억력이란.. 실습했던 자료는 남아있어서 괜찮은데
개념은 가물가물.. 작년에 깃허브 TIL, 블로그, 노션 여기저기 정리해서 찾아보기도 헷갈렸당
다시 공부해 보자! 출발~
1. Virtualization (가상화)
- 넓은 의미: 컴퓨터 리소스(CPU, MEM 등)의 추상화
- 좁은 의미: 단일 컴퓨터의 리소스를 가상 머신(VM)이라고 하는 다수의 가상 컴퓨터로 분할하는 것
- 장점
- 리소스 효율성: 새로운 서비스를 위해 서버를 구매하지 않아도 된다. VM을 위한 컴퓨터는 필요.
- 관리 편의성: Infrastructure as Code(Iac), 자동화
- 가동 중단 시간 최소화: VM을 여러 개 두어, High Availability를 구성한다. 망가지면 버린다.
- 프로비저닝 고속화: 더 많은 컴퓨팅 리소스가 필요하면, VM을 더 만든다.
🤖 한줄 요약하라!! 삐빅
서버 가상화 기술
: 하나의 물리 서버에 여러 개의 가상 서버를 구축하여 하드웨어 자원을 효율적으로 활용하는 기술
가상화에는 VM과 Container가 있다.
✔️ 하이퍼바이저 기반 가상화(Virtual Machine, VM)
- 하이퍼바이저: 가상 머신(Virtual Machine, VM)을 생성하고 구동하는 소프트웨어
✔️ 컨테이너 기반 가상화(Containerization)
- 컨테이너: 격리된 공간에서 프로세스가 동작하는 기술
하나의 운영 체제 위에 여러 개의 컨테이너를 생성하여 서비스를 운영하는 기술입니다.
2. Container(컨테이너)
포장이사 같은 간편함~ 시몬스(?)~ 컨테이너~
이런 말 흔히 한다. 엥? 내 pc에서는 되는데?
이 말 상당히 무섭고 화가 난다. 뭐가 문제지? 버전? 아니면 대체 또 어떤 오류인가?!
이런 불편함을 해소할 수 있다는데 가만히 있을 수 있는가!!! 같이 알아보자!
클라우드에서 의미하는 컨테이너에 대해 알아보기 전, 우리가 알고 있는 컨테이너에 대해서 알아보자.
✔️ (물류에서) 컨테이너
🧐❓ 누가 컨테이너를 만들고 보급시켰을까?
🙋♀️💡 미국의 트럭기사 말콤 맥린!
트럭기사였던 말콤 맥린은 당시 물건 가격 대비 물류비용이 너무 높아져 화물을 저렴한 가격에 대량으로 배송할 방법을 고민했다.
이때 방법으로 물류 과정에 컨테이너를 이용하기로 했다!
하나의 박스에 실어 한 번에 배송하여 물류비용을 대폭 절감했다.
✔️ (IT 분야에서) 컨테이너
🧐❓그럼 IT 분야에서는 컨테이너가 어떻게 등장하게 되었을까?
🙋♀️💡 기업의 환경 변화로 클라우드 도입은 필수가 되고 있다.
이때 👩💻 개발자는 세 가지 고민이 있다.
- 빠른 애플리케이션 개발 환경이 필요하다.
- 새 응용 프로그램이 내 pc에서는 잘 실행되지만, 기존 IT 서버에서는 잘 작동하지 않는 문제.
- 인프라 자원을 빠르게 공급받지 못해서 개발이 늦어지는 문제.
그리고 👩🔧 운영자 역시 고민이 있다.
- 서버 중지 없이 애플리케이션을 업데이트할 수 있는 환경이 필요하다.
- 최신 애플리케이션을 통합하는 일이 복잡하다.
이러한 고민들을 해결해 주는 게 🚛 컨테이너 환경이다!
🚛 컨테이너
해운업계 : 제품들을 한 번에 배송
IT 업계 (소프트웨어) : 개발부터 실행까지 한 번에 제공
그 과정을 살펴보면 다음과 같다.
소스 코드 개발 -> 컨테이너 이미지 생성 -> 도커에서 컨테이너 실행 -> 애플리케이션 실행
🐳 도커
[ Container Runtime ]
컨테이너를 만들고(Build) 실행(Run)하는 도구
컨테이너 기반의 오픈소스 가상화 플랫폼
해운업계에서 컨테이너가 있듯이 컴퓨팅 환경에서는 🐳 도커라는 소프트웨어가 있다.
컨테이너 내부에 코드와 모든 종속성(라이브러리)을 패키징 했기 때문에 도커가 있다면 별도의 프로그램 설치 없이 바로 실행이 가능하다!!
[ 예시 ]
과거 프로젝트에서 과정을 살펴보자.
아래 도커파일은 내가 '💊 Pill my rhythm'프로젝트 당시 작성한 파일이다.
우선 베이스 이미지는 python이다.
이 위에 내가 필요한 명령어들을 RUN과 함께 작성해 주면 리눅스에 접속해서 한 줄 한 줄 입력하는 것과 같다.
이 서버는 ai 모델을 서빙하는 서버로 ai 모델은 실행을 위해서 java가 필요하다.
필요한 내용을 다 넣어서 포장해 버릴 수 있다.
간편하지???? (강요)
그리고 이것을 우리가 아는 Docker Hub와 같은 Public Registry나 GCP의 Artifact Registry 같은 Private Registry에 컨테이너 이미지를 올려두고 AWS, Azure, GCP, 온-프레미스 등에서 pull 받아 사용할 수 있다.
(가난한 학생 개발자는 Public Registry 사용한다. ㅎ.. 아.. 나 이제 학생 아니네.. 졸업했구나? 무소속)
( 👉 자세한 구현은 예전 포스팅인 여기에서! "[Docker] Flask로 NLP 모델 서빙하기")
✔️ 컨테이너의 장점
1) 경량화
VM과 비교해서 Guest OS가 없어서 OS 가상화 보다 오버헤드가 적고, 효율적으로 동작한다.
애플리케이션을 OS 환경에 종속적이지 않게 동작할 수 있다.
앱 실행을 위한 운영체제가 불필요하다. 운영체제가 필요 없다는 것은 운영체제 부팅시간이 불필요하다는 것과 같다.
정리하면
VM
Host OS 위에 각각의 Guest OS를 가상화해서 사용하는 방식
여러 가지 OS를 가상화할 수 있지만 무겁고 느리다.
추가적으로 각각의 OS를 설치하고, 할당된 가상화 하드웨어를 사용하기 때문에 오버헤드가 발생한다.
Container
동일한 OS Kernel을 공유하며, 프로세스 수준에서 격리
CPU나 메모리가 프로세스에 필요한 만큼 사용해서 효율적이다. (아래 2번 장점)
짧은 시간으로 컨테이너를 만들 수 있다.
2) 효율성
OS 영역을 공유하고 자원 할당 없이 애플리케이션 동작에 필요한 컴퓨팅 자원만 필요로 하여 효율적이다.
3) 이식성
애플리케이션에 필요한 모든 것을 포함한 컨테이너 이미지로 만들었기 때문에
컨테이너가 작동하는 환경이라면 어디서든 작동한다.
따라서 위에서 고민했던 문제들이 해결된다.
👩💻 개발자
- 자동화를 통한 빠른 인프라 환경 구성
- 지속적인 앱 테스트 및 업데이트로 확장이 용이
👩🔧 운영자
- 비용 절감
- 효율적인 배포
- 갑자기 서비스가 늘어나더라도 탄력적으로 인프라를 확장
결론: 👍따봉 컨테이너👍
3. kubernetes (=K8s)
'키잡이', '파일럿'을 뜻하는 그리스어에서 유래
(다들 알겠지만 K8s는 K와 s 사이에 8글자가 있다는 뜻이다;; 나도 예전에 처음 공부할 땐 무슨 심오한 뜻이 있는 줄.. 하면서 당황했다.)
점점 컨테이너가 많아지기 시작한다. 관리가 어려워지고 컨테이너를 관리하기 위한 기술이 필요해졌다!!
[컨테이너 오케스트레이션]
Container Orchestration
: 복잡한 컨테이너 환경을 효과적으로 관리하기 위한 도구
: 컨테이너를 도커 플랫폼에 올려서 관리+운영+클러스터 서비스 지원해 주는 것
🧐❓그래서 쿠버네티스가 뭐라고?
🙋♀️💡주디: 컨테이너를 쉽고 빠르게 배포/확장하고 관리를 자동화해 주는 오픈소스 플랫폼
그래서 그렇다..! 그럼 장점은?!
✔️ 쿠버네티스의 장점
1) 애플리케이션 배포 단순화
개발자가 가상 서버 구성을 알 필요가 없어진다. 애플리케이션에 필요한 모든 항목을 알아서 설정해 준다.
2) 효율적인 하드웨어 활용
리소스 사용량을 기반으로 최적으로 관리해 준다.
3) 자동 복구 및 오토 스케일링
가상 서버에 이상이 생겨 더 이상 컨테이너가 실행이 안 되는 상황에서도 쿠버네티스가 다른 가상 서버로 알아서 실행시켜 주기 때문에
장애 상황에서도 자동 복구가 된다.
또한 서비스가 늘어나도 알아서 컨테이너 수를 조절해 준다. (오토 스케일링)
📌 Reference
'Cloud > Docker | K8s + CI, CD' 카테고리의 다른 글
Github Actions를 이용한 CI 빌드, 테스트 자동화 (0) | 2023.05.06 |
---|---|
[CI/CD] GitHub Actions + AWS Elastic Beanstalk를 활용한 자동화 파이프라인 구축 (정성가득♥️) (2) | 2022.10.02 |
[Kubernetes] 쿠버네티스란? (0) | 2022.07.20 |
Cloud Computing (0) | 2022.07.12 |
댓글