OpenStack Summit Vancouver 2018 참관 후기(상)

안녕하세요? LINE Verda 2팀에서 사내 인프라 시스템인 Verda의 운영 및 개발을 담당하고 있는 Nishiwaki입니다. 올해 5월 21일부터 24일 사이에 개최된 OpenStack Summit Vancouver에 발표자 겸 청중으로 참석한 후기를 두 번에 걸쳐 전해드릴까 합니다. 먼저 이번 글에서는 OpenStack에 관한 간단한 설명과 함께, 참고할 만 했던 세션을 일부 소개한 뒤, 두 번째 글에서는 저희의 발표 내용을 소개해 드리겠습니다.

OpenStack이란?

우선, OpenStack이 생소한 분들을 위해 OpenStack이 무엇인지 간단히 살펴보겠습니다. OpenStack이란 AWS나 GCP와 같은 클라우드 기반을 구축하기 위한 소프트웨어로, 오픈 소스 프로젝트의 형태로 제공되고 있습니다. 여러분도 아시는 바와 같이, 우리가 단순하게 ‘클라우드 기반’이라고 말해도, 자세히 들여다 보면 다양한 유스케이스(use case)와 대상 서비스가 존재합니다.

클라우드의 형태는 두 가지로서, AWS나 GCP처럼 클라우드 기반 위의 리소스를 사용자에게 제품으로 제공하는 형태(퍼블릭 클라우드)가 있는가 하면 LINE에서와 같이 사내 애플리케이션이나 클라이언트, 서비스 개발자용으로 리소스를 제공하는 형태(프라이빗 클라우드)가 있습니다. 다양한 유스케이스를 만족시키기 위해 리소스도 다양한 형태로 제공됩니다. 단순히 VM(Virtual Machine) 서버나 블록 스토리지만 사용자에게 제공하는 형태인 IaaS와 애플리케이션의 배포부터 관리 기능까지 제공하는 형태인 PaaS가 있습니다. OpenStack은 여러 가지 컴포넌트와 플러그인을 조합하고 개발하여 이런 다양한 유스케이스의 목적이 달성될 수 있도록 지원합니다. LINE의 프라이빗 클라우드는 OpenStack을 있는 그대로 사용하는 대신, 사내의 목적과 유스케이스에 맞게 맞춤식으로 운영되고 있습니다.

이러한 점을 볼 때, OpenStack은 클라우드 기반 구축 소프트웨어이면서, 클라우드 기반 구축 라이브러리 및 프레임워크이라 할 수도 있습니다.

청중으로 참여한 세션

저희가 청중으로 참여한 세션은 프라이빗 클라우드와 하이브리드 클라우드 분야와 컨테이너 인프라 분야로 나뉩니다.

  • Root your OpenStack on a solid foundation of leaf-spine architecture!
  • Kata Containers: The way to run virtualized containers
  • Friendly coexistence of Virtual Machines and Containers on Kubernetes using KubeVirt
  • Bringing Istio to OpenStack
  • Leveraging Serverless Functions in Heat to deliver Anything as as Service (XaaS)
  • 프라이빗 클라우드와 하이브리드 클라우드

    Root your OpenStack on a solid foundation of leaf-spine architecture!

    이 세션은 OpenStack보다는 데이터센터 네트워크를 어떻게 설계할 것인지에 중점을 둔 세션입니다. 10분 정도의 짧은 라이트닝 토크 세션이었는데, 40분간의 본 세션으로 듣고 싶었을 정도로 훌륭한 발표였습니다. 저희의 발표와 내용이 겹치는 부분도 꽤 있었지만, 이 세션의 중심은 저희와는 달리 데이터센터 네트워크쪽 이야기였습니다. 이 발표를 들어보시면 저희 발표 내용이 더욱 잘 이해되시리라 생각합니다. 참고로 저희 세션에 대한 내용은 하편에서 다룰 예정입니다.

    컨테이너 인프라

    Kata Containers: The way to run virtualized containers

    2017년 12월에 OpenStack Foundation이 발표한 새로운 컨테이너 기술인 OSS Kata Container가 어떻게 작동하는지에 관한 발표였습니다. ‘컨테이너란 게 뭐지?’라는 궁금증을 가진 분들께서도 부담없이 들을 수 있을 정도로 진입장벽이 낮으면도 매우 유익한 세션이었습니다. Kata Container의 공식 홈페이지에 나와 있는 설명을 이미 읽어보신 분이라면 아실 텐데요, Kata Container란 경량 VM을 컨테이너처럼 취급하게 함으로써 컨테이너의 단점 중 하나였던 보안상의 문제, 즉 커널이 서로 공유되어 버리는 문제를 해결하기 위한 프로젝트를 말합니다.

    발표자는 Kata Container가 어떤 식으로 경량 VM이나 컨테이너를 생성하는지, 또 Docker나 Kubernetes(이하 ‘k8s’) 상에서 리소스 접근을 하기 위해 무엇을 하고 있는지에 대해 설명하였습니다. 뿐만 아니라 설계 부분에서 가장 염려되는 점인 경량 VM의 오버헤드를 경감시키기 위해 KSM나 Shared Rootfs를 이용한 것에 대한 이야기도 들을 수 있었습니다. 또 컨테이너별로 커널의 버전을 변경할 수 있다는 점을 이용하여, 호스트 커널에서 지원되지 않는 하드 디바이스를 패스 스루해서, 지원되는 커널의 컨테이너에서 이용할 수 있도록 하는 유스케이스도 소개되었습니다. 저도 미처 몰랐던 부분이라 흥미롭더군요.

    Friendly coexistence of Virtual Machines and Containers on Kubernetes using KubeVirt

    이 세션은 VM을 Kubernetes Pod처럼 관리하기 위한 k8s의 확장 소프트웨어인 KubeVirt에 관한 세션이었습니다. 언뜻 Kata Container 같은 것을 떠올리실지도 모르겠는데요, 그것과는 방향성이 완전히 다른 소프트웨어입니다. 얼마 전부터 애플리케이션 개발자 사이에서 컨테이너화와 k8s를 통한 배포가 흔해지고 있습니다. 아마 새로 개발되는 소프트웨어 중에는 아예 컨테이너화를 전제로 설계되는 것도 많을 것입니다. 하지만 현실적으로 시스템을 구성하는 모든 서비스를 컨테이너화할 수는 없습니다. OS 제약이 있는 구 버전 소프트웨어 등 VM으로 배포해야만 하는 서비스도 있습니다. 따라서 서비스 일부는 컨테이너로, 일부는 VM으로 운영해야 하는 상황도 많지 않을까 싶네요. 그렇게 되면 시스템을 배포하고 운영하기 위해, 컨테이너용 관리 도구와 VM용 관리 도구, 이렇게 두 가지 이상의 도구를 병용해야 해서 운영이 복잡해집니다.

    이에 컨테이너용 관리 도구인 k8s에서 VM도 관리할 수 있도록 확장함으로써, 컨테이너 관리 도구만 사용해서, VM을 포함한 시스템을 운용하도록 시도한 결과가 바로 KubeVirt입니다. k8s의 Custom Resource Definition을 이용해서 VM을 나타내는 새로운 리소스 타입을 추가하고, 다른 컨트롤러와 마찬가지로 Custom Controller가 Etcd의 키를 watch하며, 변경사항이 발생하면 Hypervisor 스케줄링 및 VM 배포를 진행하는 방식으로 구현됩니다. 자세한 사항은 세션 영상을 통해 확인하시기 바랍니다.

    Bringing Istio to OpenStack

    이 세션에서는 애플리케이션 서비스 메시 프레임워크인 Istio를 소개했습니다. 컨테이너나 마이크로 서비스 아키텍처가 실제로 애플리케이션에 적용되기 시작하면서 여러 개의 컨테이너로 하나의 시스템을 구축하는 경우도 요즘은 드물지 않은 편이죠. 하지만 그런 시스템을 실제로 운영하다 보면 ‘컨테이너 간의 의존 관계를 어떻게 통제할 것인가’ 하는 문제에 종종 부딪히게 됩니다.

    가령, 어떤 시스템을 구성하는 컨테이너의 종류가 백 개라고 가정해 봅시다. 어느 컨테이너 하나에 장애가 발생하거나 치명적인 버그가 침투했을 때 영향을 받는 컨테이너는 얼마나 될까요? 또 컨테이너 하나를 업그레이드하고 싶은데, 일단 트래픽 중 20%는 구 버전 컨테이너로, 80%는 신 버전 컨테이너로 보내고자 할 때, 다른 컨테이너에서 발생하는 트래픽 제어 문제는 어떻게 해결할까요? 이런 것들을 해결하고 처리해 주는 것이 바로 애플리케이션 서비스 메시 프레임워크입니다.

    이 세션에서는 Istio 자체에 관한 설명 외에도 k8s와 OpenStack 환경에서 Istio를 어떻게 사용하는지, 또 타이프 로드밸런서나 Pod 사이의 네트워킹에 관해서도 언급한 뒤, 마지막 부분에서는 Cloudinit에서 사용자 스크립트를 이동시켜 VM을 Istio의 서비스 메시에 포함시키는 시연을 보여주었습니다. 관심은 있었으나 자세한 내용을 모르셨던 분은 강연 영상을 꼭 확인해 보시기 바랍니다.

    Leveraging Serverless Functions in Heat to deliver Anything as as Service (XaaS)

    이 세션은 k8s상에서 돌아가는 서버리스 프레임워크인 Fission과 OpenStack Heat의 연계에 관한 이야기를 다뤘습니다. Heat 템플릿에 코드를 그대로 적은 뒤 Heat의 스택을 만들면, Heat의 Fission용 플러그인이 해당 리소스 정의로부터 Fission용 패키지를 생성해서 실행시킨다는 내용이었습니다. 간단한 API 서버 실행 예시가 소개되었는데, 별도의 질문으로, 타이머나 이벤트를 통해 실행시키는 것도 이미 검토 중이라는 답변을 들을 수 있었습니다. 이벤트에 대해서는 OpenStack의 각 컴포넌트가 리소스 변경을 메시지큐를 통해 알리는 기능을 지원하는 방안이 현재 논의되고 있다고 합니다.

    단순한 서버리스 API 서버를 생성할 수 있는 시스템이 전부라고 하면 아직 어딘가 부족한 느낌도 들지만, 이벤트나 타이머 등 API 이외의 트리거에도 대응할 수 있다면 OpenStack의 확장성을 더욱 넓힐 수 있을 것입니다. 비단 OpenStack에 국한시키지 않더라도 클라우드상에서 실제로 애플리케이션을 구축하고 운영하다 보면 특정 처리를 하고 싶어지는 이런저런 상황에 직면합니다. 예를 들자면, 배포할 때, 혹은 자동 확장 구현이나 특정 패턴을 보이는 애플리케이션 장애에 대응할 때, 또한 거버넌스를 위해 특정 리소스 작성을 audit log로 남겨두고자 할 때 등 상황은 다양합니다. 물론 그런 상태를 클라우드 기반의 외부 영역에서 실현함으로 이미 애플리케이션 운영 효율화에 성공한 사람들도 있습니다. 하지만 이러한 클라우드의 특성을 살린 운영 효율화는 가능한 한 클라우드 관리자 쪽에서 진행하고, 이를 통해 애플리케이션 개발자들은 최대한 그들의 비즈니스 로직 구현에 집중할 수 있는 환경을 제공하자는 것이 클라우드 기반에 대한 개발을 맡고 있는 저희의 생각입니다.

    실제로 LINE에서도 비슷한 시도가 이루어지고 있습니다. OpenStack을 포함한 클라우드상에서 사용자가 특정 이벤트에 임의의 코드를 연결시킬 수 있는 시스템을 개발하고 도입하는 안을 현재 검토 중에 있습니다. 이번 발표에서 언급된 Fission의 OpenStack 연동은, 강연 내용대로라면 이제 막 시작한 단계로, LINE으로서도 지금 바로 도입 가능하다고 쉽게 말할 수는 없습니다. 하지만 앞으로의 동향이 무척 주목되는 소프트웨어 가운데 하나라 하겠습니다.

    세션에 대한 생각

    이상, 컨테이너와 관련된 몇몇 기술에 대해서 강연 내용을 정리해 보았습니다. 요즘은 LINE 내부적으로도 컨테이너를 사용하려는 움직임도 있고, 컨테이너 오케스트레이터의 평가, 프라이빗 클라우드에서 컨테이너를 일등 시민(first-class)으로 취급해달라는 요청 등 컨테이너와 관련된 많은 논의가 있었습니다. 컨테이너를 둘러싼 기술에는 굉장히 많은 컨텍스트와 구현이 뒤따릅니다.

    이 글에서는 다루지 않았지만 이번 OpenStack Summit에서는 OpenStack의 네이티브 컨테이너 오케스트레이터인 Zun이나 k8s의 카탈로그 기능인 Helm 등 컨테이너와 관련된 다양한 기술에 관한 이야기를 들을 수 있었습니다. 개중에는 출발점이 비슷한 기술도 많은데요, 언뜻 비슷해 보이던 것들도 바탕에 깔린 생각이 다르면 1년 후 다른 소프트웨어가 되어 있기도 합니다. 따라서 새로운 기술에 휘둘리지 않고 ‘근본적으로 무엇을 해결하기 위한 시스템인가’라는 관점으로 이들 기술의 향후 동향을 주시하여, LINE에서 활용할 수 있는 것을 가려내가며 도입할 생각입니다.

    총평

    2, 3년 전과 비교했을 때 이번 OpenStack Summit의 활기는 절반, 혹은 삼분의 일 정도로 줄어든 것 같다는 인상을 받았습니다. 그때만 해도 OpenStack의 도입을 검토 중이거나 이제 막 도입한 상태라서 문제가 산더미같은 분들이 많았기 때문이겠지요. 그에 반해 이번 참가자는, Hypervisor가 1000대 이상에, 클러스터 수는 20개를 넘고, k8s 등 애플리케이션 워크로드의 관리도 OpenStack의 일부로 구현하기를 바라는 등 OpenStack을 단순히 사용하는 데서 나아가, 확장성 문제나 IaaS의 상위 층까지 지원하고자 하는 특수한 유스케이스를 지닌 분이 많았던 것 같습니다.

    2010년 릴리스한 이후 8년. 그 사이, 중간 규모로 OpenStack을 이용하는 조직이라면 이미 각각 우수 사례가 나와, 안정적인 운영이 가능한 수준으로 OpenStack이 성숙해진 것은 아닐까요? LINE도 단순한 IaaS 기반 제공이라는 면에서는 어느 정도 안정화되어 있습니다만, 본문에서도 일부 언급한 바와 같이 개발자가 사용하기 편한 안정된 프라이빗 클라우드를 목표로 하루하루 개선에 힘쓰고 있습니다.

    OSS나 미들웨어, 혹은 다음 사항에 관심 있으신 분은 일본의 채용 공고를 확인해 주세요.

    • IaaS 기반의 확장성, 복수 클러스터의 운영 효율화
    • 애플리케이션 개발자를 위한 개발, 운영 효율화
    • 프로그래밍할 수 있는 프라이빗 클라우드를 목표로 한 Event Handler(AWS Lambda 같은 것) 구현
    • k8s를 비롯한 Managed Middleware Service 제공
    • 후속편에서는 저희의 발표 내용 Excitingly simple multi-path OpenStack networking: LAG-less, L2-less, yet fully redundant에 대해 소개해 드리도록 하겠습니다.

Related Post