ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Kubernetes] 컨테이너의 이해
    Kubernetes 2022. 1. 6. 22:25
    728x90

    마이크로 서비스 아키텍쳐에서 뿐만 아니라 모든 서비스가 갖고 있는 문제가 있다.

    개발 환경과 프로덕트 환경이 다르다는것

     

    개발 환경에서는 잘 되던 코드가 프로덕트 환경에서 안되는 일을 개발자라면 한 번 쯤은 경험했을 것이다.

    심지어 마이크로 서비스 아키텍쳐에서는 그러한 환경이 더 많으니 더 자주 발생할 수 밖에 없고, 각각의 서비스들이 같은 라이브러리지만 다른 버전을 사용하는 등의 종속성 문제 또한 빈번하게 발생한다.

    예를 들어 A와 B 서비스가 라이브러리 L을 사용한다고 하자. A와 B는 하나의 머신에 있고, A는 L의 1.0버전을, B는 1.1 버전을 사용한다. 이 때 머신은 L의 어떤 버전을 설치해야할까? L이 하위 호환을 잘 해주는 라이브러리라면 상관 없겠지만 그렇지않다면 에러가 발생할 수 밖에 없다.

    따라서 동일한 머신 내에서도 서비스 별로 격리하여, 관리할 필요가 생겼고 이를 해주는 것이 컨테이너이다.

     

    가상머신

    • 프로세스가 별도의 운영체제에서 동작함
    • 무거움
    • 새로운 시스템 프로세스를 돌려야하므로 추가적인 컴퓨팅 리소스가 필요함
    • VM 끼리 완전한 격리를 제공함

    컨테이너

    • 프로세스가 호스트 운영체제에서 동작함
    • 가벼움
    • 격리된 하나의 프로세스에 불과하기에 컴퓨팅 리소스를 추가하지 않아도됨
    • 프로세스에 불과하기에 모두 같은 OS, 같은 커널에서 실행되므로 보안 이슈가 생길 수 있음

    격리 메커니즘

    • 리눅스 네임스페이스 : 프로세스가 시스템(파일, 프로세스, 네트워크 인터페이스 등)에 대한 독립된 뷰만 바라볼 수 있게 함
    • 리눅스 컨트롤 그룹 : 프로세스가 사용할 수 있는 리소스(CPU, 메모리, 네트워크 대역폭 등)만 사용할 수 있도록 함

    네임스페이스 종류

    • 마운트
    • 프로세스 아이디
    • 네트워크
    • 프로세스 간 통신
    • 호스트와 도메인 이름
    • 사용자 아이디

     

    댓글

Designed by Tistory.