하반기 스터디 발표자료 모음

Team 2

DR on AWS

Team 3

DPDK & OpenStack why?

HA using DVR

Team 4

Docker를 이용한 OpenStack 가상화

Team 5

Interoperability with ML2: LinuxBridge, OVS and SDN

  • 장재민

    스터디그룹 마지막 날 참관했던 장재민이라고 합니다. 그 날 백그라운드 정리를 해드리기로 했는데 발표자료를 보고

    댓글로 대신합니다.

    Docker는 어디에서 왔을까?

    리눅스는 보안성능을 향상하기 위해서 모든 리소스의 사용을 제한하고 사용자와 분리하기 원했어요.
    그래서 cgroup(control group)과 namespace를 만들었죠.
    cgroup은 selinux로 대표될 만큼 보안성 강화를 위해 사용했고,
    cpu affinity 로 대표되는 cpusets 처럼 cpu를 할당하고 프로세스의 memory 사용량을 설정
    할 수 있었지만 가상화나 사용자 격리와는 거리가 멀었습니다. 효율적인 선택이 필요했었죠. 그래서
    namespace를 강화했습니다.
    namespace는 mount /uts/ipc/pid/network/user 에 대한 격리를 다루며 커널 2.6.x대에서 구현
    하기 시작해서 3.8에서 완성되었습니다. 오래전부터 시작한 기술이 있었다는 걸 말하고 싶었어요.
    특히 Network namespace를 생성한다는 것은 device와 주소, 포트, 라우팅, 방화벽 룰셋을 분리할
    수 있다는 것을 의미합니다.

    트래픽을 해당 namespace에서 처리하기때문에 다른 namespace에서는 다루지 않아서 부하가 줄어
    듭니다. 리눅스의 방화벽은 룰셋처리를 순서대로 처리합니다. 그래서 룰셋의 길이가 길어지면 지연시간
    또한 길어집니다. namespace로 룰셋을 분산한 만큼 줄어든 룰셋의 길이는 지연시간을 줄여줍니다.
    network namespace에 해당하는 conntrack은 slab allocator를 통해 /sys/kernel/slab에 생성하고 관리
    합니다. 룰셋뿐만 아니라 conntrack 또한 줄어든다는 의미가 됩니다. 룰셋이 바늘이라면 conntrack은
    모래사장이라고 할 수 있습니다. 수많은 접근을 등록하고 추적하기 위해 만든 conntrack은 절망에 가까
    울 정도로 넓고도 광활합니다. 단 한줄의 방화벽 룰셋을 찾기위해 일일히 헤쳐나갑니다. namespace
    에 해당하는 conntrack 에 한정된 지역을 찾는 것은 그래서 의미가 있는 일입니다.

    사용자에게 리소스를 할당하는 시나리오로 잘 알고 있는 hypervisor(hyper-v, vmware, kvm, xen)
    외에도 lxc/vserver가 namespace/cgroup위에서 커널을 공유하며 먼저 사용되고 있었습니다.
    물론 docker도 같은 기술위에서 구동합니다.

    그런데 왜 후발주자로 나온 docker가 왜 인기가 있을까?

    사실 docker는 lxc+aufs를 제공하기 위해 특화되었죠. 이것이 이미지 저장소(repository)를 활성화
    시켰고 사용자의 이미지 저장과 배포가 dockerc라는 하나의 파일로 정의될 만큼 단순화됐습니다.
    그래서 간편한 배포설정과 배포설정 공유, 빠른 배포라는 DNA를 가지게 되었습니다.

    참고문서 :
    http://man7.org/linux/man-pages/man7/namespaces.7.html
    https://lwn.net/Articles/531114/
    https://lwn.net/Articles/621006/
    https://www.flockport.com/lxc-vs-docker/
    https://www.flockport.com/experimenting-with-overlayfs-and-lxc/
    http://lxr.free-electrons.com/source/include/net/netns/conntrack.h

    마치면서

    http://idchowto.com/?p=19919 에 똑같은 내용이 있습니다. 이번 답글을 달기위해서 1달전쯤에 정리해둔 내용입니다.

    추가로 데모용 스크립트를 작성해뒀습니다. 스터디 하시던 분께 도움이 되길 바랍니다.

    https://raw.githubusercontent.com/jaeminj/blogs/master/container-namespace-cgroup-for-ubuntu-demo.sh

    따로 주석이 없지만 짧은 스크립트라 금방 이해가 되실거에요.
    이해가 안된다면 배경지식이 부족한 겁니다.

    • Nicholas H. Park

      설명 감사드립니다.
      막연히 Docker에 대한 공부를 하면서 실제로 이 기술이 탄생된 배경을 정확하게 알필요가 있었는데요.
      덕분에 이해하는데 많은 도움 되었습니다.
      감사합니다.