쿠버네티스를 알기 전 컨테이너와 도커의 개념을 먼저 알아야 한다.
Container??
어떤 환경에서든 실행하기 위해 필요한 모든 요소를 포함하는 소프트웨어이다.
쉽게 말해 우리가 구동하려는 애플리케이션을 실행할 수 있는 환경까지 감싸서, 어디서든 쉽게 실행할 수 있도록 해주는 기술이다.
EX)
개발을 한다고 하였을 때 해당 개발에 대한 실행 환경을 일일히 다 구축해야 한다. 컨테이너는 이러한 환경까지 모두 포함하여 독립적으로 프로그램을 실행할 수 있도록 도와준다.
Container Runtime??
컨테이너를 쉽게 내려받거나 공유하고 구동할 수 있도록 해주는 도구이다.
종류는 여러 가지가 있고, 가장 유명한 도구로 Docker가 있다.
Docker
도커는 Container Runtime으로 컨테이너를 쉽게 관리할 수 있게 해주는 오픈소스 가상화 플랫폼이다.
즉, 독립된 환경을 만들어서 하드웨어를 효율적으로 활용하는 기술이다.
가상 환경이 아닌 Container를 쓰는 이유는 무엇일까?
Virtual Machines vs Containers
가상화
가상화는 하나의 하드웨어를 여러 개의 가상 머신으로 분할해 효율적으로 사용할 수 있는 기술로 분할된 가상 머신들은 독립적인 환경으로 구동된다.
이 때 기존 환경을 Host OS, 가상 머신으로 분할된 환경을 Guest Os라고 부른다.
가상 머신 생성
가상 머신을 생성하기 위해서는 Hypervisor, 가상 머신 모니터라고 불리는 소프트웨어를 사용한다.
Hypervisor??
Hypervisor는 Host 하드웨어에 설치되어 Host와 Guest를 나누는 역할을 하고, 각각의 게스트는 Hypervisor에 의해 관리되며 시스템 자원 할당을 받게 된다.
이처럼 Hypervisor를 활용하면 하드웨어가 여러 개인 것처럼 하나의 서버를 여러 명이 나눠 쓸 수 있고, 컴퓨터 한 대에 서로 다른 OS를 동시에 사용할 수 있다.
한계
가상 머신으로 무언가를 하려면 반드시 Hypervisor를 거쳐야 하기 때문에 속도 저하와 배포할 때 만들어지는 이미지 크기가 매우 커진다는 한계가 있다.
Container
Container는 가상의 OS를 만드는 것이 아닌 베이스 환경의 OS를 공유하면서 필요한 프로세스만 격리하는 방식으로 커널을 공유하기 때문에 Host의 OS의 기능을 모두 사용할 수 있다.
격리시킬 애플리케이션과 거기에 필요한 파일, 특정 라이브러리만 포함하기 때문에 배포를 위해 생성되는 이미지의 용량이 작아진다.(경량화)
또한, Hypervisor를 거칠 필요가 없어 실행속도가 빠르다.
한계
Container 위에서는 Host OS와 다른 OS를 구동할 수 없다.
Kubernetes??
Kubernetes란 컨테이너화된 애플리케이션의 배포, 확장 및 관리를 자동화하는 오픈소스 시스템이다.
쉽게 말해 Kubernetes는 Container Runtime을 통해 Container를 다루는 도구로 여러 서버에 Container를 분산해서 배치하거나 문제가 생긴 컨테이너를 교체하거나 컨테이너가 사용할 비밀번호나 환경 설정을 관리해주는 일을 한다.
이것을 Container Orchestration이라고 한다.
Virtual와 Kubernetes 변화
Traditional Deployment
Traditional Deployment는 가상화 이전, 오래전부터 쓰이던 방법이다.
물리적인 컴퓨터 한 대의 하나의 OS를 깔고 여러 가지 프로그램을 설치하는 방식이다.
문제점
한 대의 컴퓨터에서 모든 것을 처리하기 때문에 다른 프로그램의 동작을 방해하거나 중지시키는 등 성능이 떨어진다.
Virtualized Deployment
위의 문제를 해결하기 위해 등장한 것이 Virtualized Deployment 가상화 배포이다.
중간에 위치한 Hypervisor를 통해 하나의 시스템 상에서 가상 컴퓨터 여러 개를 구동한다.
문제점
Traditional Deployment 방식보단 효율적이지만 가상머신에 운영체제를 일일히 설치해야 되기 때문에 무겁다.
Container Deployment
마지막으로 Virtualized Deployment 컨테이너 중심 배포이다.
Hypervisor 부분이 Container Runtime으로 대체되었고, Virtual Machine 부분은 Container로 대체되었다.
Containe는 Virtual Machine과 달리 프로그램 구동을 위해 OS를 매번 설치할 필요가 없다.
문제점
OS를 공유하는 방식이기 때문에 어떤 프로그램의 문제가 다른 프로그램의 문제를 간섭할 수 없으나 OS에 문제를 일으키는 경우 OS에서 구동중인 전체 Container의 문제가 될 가능성이 있다.
정리
'DevOps > Kubernetes' 카테고리의 다른 글
[kubernetes] Pod 외부 접속 연결하기 (0) | 2024.07.09 |
---|---|
[kubernetes] Deployment란? (0) | 2024.07.08 |
[kubernetes] ReplicaSet이란? (0) | 2024.07.03 |
[Kubernetes] Pod란? (0) | 2024.07.02 |
[Kubernetes] Kubernetes란? (0) | 2024.07.02 |