-
[Kubernetes] 컨테이너의 이해Kubernetes 2022. 1. 6. 22:25728x90
마이크로 서비스 아키텍쳐에서 뿐만 아니라 모든 서비스가 갖고 있는 문제가 있다.
개발 환경과 프로덕트 환경이 다르다는것
개발 환경에서는 잘 되던 코드가 프로덕트 환경에서 안되는 일을 개발자라면 한 번 쯤은 경험했을 것이다.
심지어 마이크로 서비스 아키텍쳐에서는 그러한 환경이 더 많으니 더 자주 발생할 수 밖에 없고, 각각의 서비스들이 같은 라이브러리지만 다른 버전을 사용하는 등의 종속성 문제 또한 빈번하게 발생한다.
예를 들어 A와 B 서비스가 라이브러리 L을 사용한다고 하자. A와 B는 하나의 머신에 있고, A는 L의 1.0버전을, B는 1.1 버전을 사용한다. 이 때 머신은 L의 어떤 버전을 설치해야할까? L이 하위 호환을 잘 해주는 라이브러리라면 상관 없겠지만 그렇지않다면 에러가 발생할 수 밖에 없다.
따라서 동일한 머신 내에서도 서비스 별로 격리하여, 관리할 필요가 생겼고 이를 해주는 것이 컨테이너이다.
가상머신
- 프로세스가 별도의 운영체제에서 동작함
- 무거움
- 새로운 시스템 프로세스를 돌려야하므로 추가적인 컴퓨팅 리소스가 필요함
- VM 끼리 완전한 격리를 제공함
컨테이너
- 프로세스가 호스트 운영체제에서 동작함
- 가벼움
- 격리된 하나의 프로세스에 불과하기에 컴퓨팅 리소스를 추가하지 않아도됨
- 프로세스에 불과하기에 모두 같은 OS, 같은 커널에서 실행되므로 보안 이슈가 생길 수 있음
격리 메커니즘
- 리눅스 네임스페이스 : 프로세스가 시스템(파일, 프로세스, 네트워크 인터페이스 등)에 대한 독립된 뷰만 바라볼 수 있게 함
- 리눅스 컨트롤 그룹 : 프로세스가 사용할 수 있는 리소스(CPU, 메모리, 네트워크 대역폭 등)만 사용할 수 있도록 함
네임스페이스 종류
- 마운트
- 프로세스 아이디
- 네트워크
- 프로세스 간 통신
- 호스트와 도메인 이름
- 사용자 아이디
'Kubernetes' 카테고리의 다른 글
[Kubernetes] Minikube 설치 및 애플리케이션 실행 (0) 2022.01.12 [Kubernetes] Spring 프로젝트 Docker hub 올려보기 (0) 2022.01.12 [Kubernetes] 쿠버네티스란 (0) 2022.01.10 [Kubernetes] 도커란? (0) 2022.01.07 쿠버네티스(Kubernetes) 란? (0) 2022.01.06