Home 컨테이너 기술 이해하기
Post
Cancel

컨테이너 기술 이해하기

Overview

이전 글에서 MSA(Micro Service Architecture) 를 이해하였습니다. 컨테이너는 MSA의 시대가 열리면서 굉장히 주목받게된 기술 중에 하나이기 때문에 연관지어 이해할 필요가 있습니다.

MSA 에서는 하나의 큰 어플리케이션이 작은 단위의 서비스 여러개로 나뉘고, 각 서비스는 서로에게 영향을 주지않고 운영되어야 하기 때문에 서비스 수 만큼의 독립된 컴퓨터 시스템을 가져야합니다. 기존에는 하나의 컴퓨터 시스템이 필요했다면, MSA에서는 서비스 수 만큼의 여러 컴퓨터 시스템이 필요하게 된 것입니다.

MicroServiceArchitectureProblem-1.png

그리고 대체로 서비스는 단위가 작지만, 서버로 운영되는 컴퓨터 리소스는 대체로 용량이 크기 때문에 하나의 컴퓨터 리소스로 하나의 컴퓨터 시스템을 운영하는 것이 비효율적이게 됩니다.

MicroServiceArchitectureProblem-2.png

가상화 기술

이러한 문제점을 해결하기 위해서 가상화 기술을 사용할 수 있습니다. 가상화 기술을 사용하면 Hypervisor를 통해 독립된 Guest OS를 실행하고 그 위에서 어플리케이션이 실행되는 방식으로 동작합니다. 결과적으로 하나의 컴퓨터 리소스에서 여러개의 독립된 컴퓨터 시스템을 운영하고 각 시스템 위에서 어플리케이션을 실행시킬 수 있습니다. (*자세하게 살펴보면 전가상화/반가상화로 구분되지만, 최소한의 이해를 위해서 생략하도록 합니다.)

Virtulization.png

가상화 기술의 단점

가상화 기술을 통해서 시스템을 독립시킬 수는 있지만 여러 단점도 함께 드러납니다. 그리고 이러한 단점들은 MSA를 운영하는 관점에서 큰 단점으로 부각됩니다.

  • 오버헤드가 크다.

    Operating System은 사용자가 컴퓨터 자원을 효율적이고 직관적으로 사용할 수 있도록 설계되어 있습니다. 때문에 어플리케이션 실행과 무관하게 사용성을 위한 기능도 포함되어 있고, 이는 불필요하게 서버의 자원을 잡아먹습니다.

    서비스의 수가 많아지면 많아질 수록 해당 오버헤드는 더 커지게 되며 큰 규모의 프로젝트에서 단점으로 극명하게 드러납니다.

    클라우드 운영 측면에서는 필요한 자원의 크기가 클 수록 프로비저닝에 걸리는 시간이 지연되고 이는 전체적인 성능에도 영향을 줍니다.

  • 성능 감소가 크다.

    반가상화/전가상화인지에 따라 방식은 다르지만, Guest OS의 Kernel을 하나 더 거쳐 하드웨어와 통신하기 때문에 시스템 성능이 전체적으로 감소합니다.

컨테이너 기술

컨테이너는 namespace, cgroup, chroot와 같은 기능을 활용하여 OS 수준에서 시스템을 격리시키는 기술입니다. 가상화 기술과 같이 시스템을 격리시킬 수 있지만 오버헤드가 적고, 성능 감소가 적어서 MSA를 운영하는 관점에서 큰 관심을 받게 됩니다.

  • 오버헤드가 적다.

    시스템 격리를 위해서 Guest OS가 필요없고, 어플리케이션 실행에 필요한 최소한의 기능들만 포함하기 때문에 경량화된 시스템 격리 기술이라고 이야기 합니다.

  • 성능 감소가 적다.

    모든 컨테이너는 Host OS의 Kernel을 공유하고, Host OS의 Kernel만을 거쳐 하드웨어와 통신하기 때문에 시스템 성능 감소가 가상화 시스템에 비해 덜 합니다.

Containerization.png

컨테이너 기술의 단점

하지만 컨테이너 기술은 하나의 커널을 공유하고 리눅스 OS 기능에 의존하기 때문에 몇 가지 단점을 수반합니다.

  • 보안성

    하나의 컨테이너에서 보안적인 결함이 발생하여 Host OS의 관리자 계정 권한을 얻는다면, 이를 통해 타 컨테이너에 접근할 수 있습니다. 즉, 한 서비스의 보안 결함이 다른 서비스의 보안성까지 위협합니다.

  • 안정성

    만약 하나의 컨테이너에서 kernel에 장애(에러)를 일으킨다면 다른 컨테이너도 Kernel을 사용하는 것에 영향을 줍니다. 이는 가상화 시스템에 비해 불안정적인 요소로 드러납니다.

결론

컨테이너는 MSA 를 운영한다면 반드시 이해하고 활용해야할 기술 중에 하나입니다. 하지만, 보안성과 안정성에 이슈가 존재함을 인지하고 있어야 하며 이를 특히 주의하여 컨테이너를 생성하고 관리하여야 합니다.

그리고 시스템 격리에 반드시 컨테이너 기술을 사용하는 것이 정답만은 아니라는 것도 알고 있어야 합니다. (서비스가 많지 않고 보안성을 가장 우선시 두는 어플리케이션이라면 가상화 기술을 사용하는 것도 괜찮은 선택지 중 하나입니다.)

This post is licensed under CC BY 4.0 by the author.

Kubernetes - Healthcheck (liveness-probe, startup-probe, readiness-probe)

Kubernetes - Pod 불균형 없애고 가용성 높이기