해결된 질문
24.03.03 23:07 작성
·
443
·
수정됨
2
가상화 기술의 사용 이유 중 하나는 실행 환경을 분리하여 서비스의 안정성을 높이는 것으로 알고 있습니다. 하지만 컨테이너는 하나의 커널을 공유합니다. 이는 빠르고 가볍다 라는 장점을 가져다주지만 이렇게 되면 하나의 서비스에서 장애가 발생했을 때 다른 서비스에도 영향을 미칠 수 있는 것 아닌지 궁금합니다. 결국 가상화의 장점을 가지지 못한것 아닐까하는 의문점이 듭니다 !
컨테이너가 하나의 커널을 공유한채 실행된다면 프로세스와 크게 다른 부분이 없다고 생각하는데 프로세스와 컨테이너가 어떤 차이를 가지고 있는지 궁금합니다.
답변 2
0
2024. 03. 06. 00:45
정 민욱님 안녕하세요. 데브위키입니다.
컨테이너 기술을 사용하면 비록 커널을 공유하더라도, 커널의 격리 기능을 사용해 독립적인 환경에서 실행되기 때문에 영향을 받지 않을 수준의 안정성을 제공합니다!
그래서 컨테이너 기술은 한 컨테이너의 장애가 다른 컨테이너에 미치는 영향을 최소화 할 수 있습니다. 물론 커널을 완전히 독립적으로 사용하는 VM 방식보다는 분리의 수준이 덜 할 수 있지만, 일반적으로 소프트웨어를 운영함에 있어서 가상화의 장점을 누릴 수 있을 정도로는 충분한 격리 수준을 제공하고 있습니다 😀
2번 질문에서의 하나의 OS에서 프로세스 형태로만 실행하는 것보다는 큰 수준의 차이가 있다고 보시면 됩니다. 가장 쉽게 이해하실 수 있는 부분이 리소스 사용량에 대한 격리입니다. 예를 들어 프로세스 A, B를 실행할 경우, 프로세스 A가 호스트OS의 리소스를 100% 사용해 버린다면, 프로세스 B가 정상적으로 동작하지 않게 될 것입니다.
하지만 컨테이너의 경우 컨테이너 별로 리소스 사용량이 격리되어 있기 때문에, 프로세스 A가 사용할 수 있는 리소스를 100% 사용하더라도 프로세스 B가 실행되는 다른 컨테이너에는 영향을 미치지 않습니다. 이러한 리소스 격리는 cgroups(Control Groups)를 통해 이루어집니다.
추가로 컨테이너를 사용하면 파일시스템, 네트워크 인터페이스, 프로세스ID, 사용자 등 다양한 수준에서의 격리가 이루어지기 때문에, 일반 프로세스를 실행하는 것보다 훨씬 안전하다고 볼 수 있습니다.
질문에 답변이 되셨는지요?
강의 들으시면서 더 궁금하신 부분이 있으면 편하게 질문주세요!
0
안녕하세요, 인프런 AI 인턴입니다.
민욱님, 컨테이너와 전통적인 가상화 기술의 차이에 대해 관심을 가져주셔서 감사합니다.
가상화 기술은 각각의 게스트 운영 체제가 별도의 커널을 가지고 있기 때문에 격리 수준이 높은 반면, 컨테이너는 호스트 OS의 커널을 공유하면서 프로세스 수준에서 격리를 제공합니다. 컨테이너는 가상화보다 경량화되어 있으나, 커널 레벨에서 발생할 수 있는 문제가 다른 컨테이너에 영향을 줄 수 있는 단점도 있습니다. 하지만, 컨테이너 자체의 보안 기능(예: seccomp, AppArmor 등)과 쿠버네티스와 같은 오케스트레이션 툴을 통해 멀티 텐트 환경에서도 충분한 격리와 관리가 가능하도록 설계할 수 있습니다.
컨테이너는 일반적인 프로세스와 달리, 자체적인 네임스페이스와 cgroups를 가지고 있어 운영체제 리소스를 프로세스마다 격리하여 사용할 수 있게 합니다. 이를 통해 컨테이너는 자신만의 파일 시스템, 네트워킹 인터페이스, 프로세스 ID 공간 등을 가지고 독립적으로 실행될 수 있으며, 이것이 프로세스와 컨테이너의 주된 차이점입니다.
도움이 되셨다면 좋겠습니다. 프로그래밍 관련 추가 질문이 있으시다면 언제든지 문의해 주세요.