if(kakao)dev2022, KiC 세션 다시보기: 클라우드 개발자들의 쿠버네티스 이야기
시작하며
안녕하세요. 카카오 i 클라우드팀입니다. 카카오와 공동체는 지난 12월 7일~9일간 기술 컨퍼런스 'if(kakao)dev2022'를 개최했습니다. 많은 분들이 아시는 것처럼 if(kakao)는 카카오와 공동체 개발자들이 한해 동안 노력해온 과정과 성과를 외부 개발자들과 커뮤니티에 나누는 연례 개발자 컨퍼런스입니다.
카카오 i 클라우드팀은 카카오엔터프라이즈가 출범한 2020년부터 매년 저희의 클라우드 개발 노력과 성과를 세션을 통해 공유하고 있습니다. 이번 if(kakao)dev2022에서는 저희가 쿠버네티스를 얼마나, 어디까지 활용하고 있는지 세 개의 세션에서 소개하였습니다. 이번 글에서는 저희 세션을 진행하게 된 배경과 세션에서 소개하지 못했던 이야기를 짧게 소개해드리려고 합니다. 국내 클라우드 사업자로서 클라우드와 쿠버네티스의 활용에 대해 궁금하셨던 분이라면 이 글을 먼저 가볍게 읽어보시면 좋을 것 같습니다.
첫 번째 세션. 모든 것이 쿠버네티스인 세상
안녕하세요. '모든 것이 쿠버네티스인 세상에서 안전하게 배포하기'를 발표한 al(이어형)입니다.
저는 2020년에 kubernetes-native datacenter라는 제목으로 '데이터센터 안의 모든 것들을 쿠버네티스로 관리하는 방법'을 소개드린 적이 있습니다. 이번 'if(kakao)dev2022'은 제 두 번째 발표인데요, 이번에는 데이터센터 안의 모든 것들을 쿠버네티스로 관리한다면 '배포는 어떻게 할 것인가?' 라는 카카오 i 클라우드의 고민과 해결 방식을 소개해드리려고 합니다.
Infra as a Service(IaaS) 기술은 사용자에게 다양한 클라우드 자원을 제공하기 위해서 인프라 설계부터 서비스의 다양성을 고려해야 합니다. 이러한 다양성이 필요한 환경에서도 개발된 코드는 동일한 동작이 보장되어야 하기 때문에 컨테이너 기술은 선택이 아닌 필수가 되고 있습니다. 카카오 i 클라우드는 컨테이너 기술 중에서도 쿠버네티스라는 강력한 기술을 이용하여 클라우드 네이티브함을 추구하고 있습니다. 저 또한 클라우드를 10년 넘게 개발해오면서 경험하게 된 여러 어려운 점들을 쿠버네티스를 활용하면서 적극적으로 해소해가고 있습니다.
한 가지 예로 컨테이너 이전 세대의 기술로 클라우드 인프라를 관리하게 될 때는 종속성이라는 한계에 쉽게 다다르게 됩니다. 클라우드 서비스와 사용자에게 제공되는 자원들은 리눅스와 그 운영체제가 올라가 있는 장비 스펙에 종속성을 갖습니다. 또 서비스할 프로세스들의 버전과 라이브러리의 버전에 대한 관리에 영향을 받아 쉽게 변경이 불가능하죠. 그렇기에 새로 투입되는 OS의 버전이 계속 상이하면서 같은 프로세스들도 동일한 동작을 하지 못합니다. 신규 OS를 투입하지 못하면 신규 기능에 대해 제한이 있고, CVE 대응에도 취약해지는 문제가 발생합니다. 하지만 컨테이너를 사용하게 되면 OS와 장비 스펙의 종속성을 덜게 되면서 사용자에게 다양한 리소스를 빠르게 제공할 수 있게 됩니다. 클라우드 사업자 또는 인프라 서비스 제공자 내부에서는 관리 비용을 줄여 보다 저렴한 가격으로 효율적인 서비스를 제공할 수 있게 되었습니다.
모든 IaaS 자원을 쿠버네티스로 관리하기 위한 도전은 높은 기술력이 필요합니다. 그만큼 저희에게도 쉽지 않았지만, 정말 많은 크루들의 노력과 열정으로 함께 만들어왔습니다. 그 성과로 카카오 i 클라우드는 국내 최초 쿠버네티스 기반의 IaaS 서비스로 클라우드 서비스 보안 인증인 Cloud Security Assurance Program(CSAP)를 취득하였습니다. 실제로 CSAP 인증 취득을 위한 준비기간이 충분치 않았음에도 불구하고, 쿠버네티스라는 기술을 활용한 민첩성으로 짧은 기간에도 목표하는 형상을 만들 수 있었습니다.
더 나아가 저희는 실제 프로덕션 환경에서 쿠버네티스 기반 배포의 민첩성을 높이고자 노력하고 있습니다. 실제로 카카오 i 클라우드는 yaml 관리를 통한 배포의 단순화/표준화를 통해서 주요 컴포넌트들을 주당 1회 이상 배포하고 있습니다. 그런데 이런 민첩성을 기르기 위해서는 안전하게 배포할 수 있는 도구가 매우 중요합니다. 다른 의미로, 배포 이후의 상황을 확정적으로 예측할 수 있는 도구들이 꼭 필요해졌습니다. 배포되었을 때의 형상을 제대로 예측하지 못한다거나, 무슨 일이 발생할지 알 수 없다면 배포는 누군가의 책임이라는 '두려움'이 됩니다. 저희는 모두가 개발에만 집중할 수 있게, 누군가의 책임이 아닌 시스템으로 이를 방지할 방법을 만들기 위해 노력하고 있습니다.
이번 발표에는 바로, 이 이야기를 담았습니다. 쿠버네티스의 선언적인 관리 방법과 GitOps의 지속적인 배포 방법을 이용하면서 그 안에서 어떻게 예측하고 리뷰하여 미래의 사고를 방지하는지 소개합니다. 많은 관심 부탁드립니다.
두 번째 세션. Openstack을 쿠버네티스 네이티브하게 운영하는 방법
안녕하세요. 저는 이번에 클라우드 대선배들 사이에서 'Openstack을 쿠버네티스 네이티브하게 운영하는 방법'이라는 (작고 소중한) 주제로 발표한 Thor(허지현)입니다. 앞에서 al이 전반적인 클라우드의 관리와 배포를 어떻게 쿠버네티스로 하는지 발표해주셨다면 저는 조금 더 상세하게 Openstack hypervisor를 쿠버네티스로 관리하는 방법에 대해 준비했습니다.
Openstack이 쿠버네티스로 운영되는 것이 왜 중요할까요? 그리고 어떻게 쿠버네티스 네이티브하게 관리할 수 있는 것일까요? 이 두 질문은 제가 과제를 해결하면서 지속적으로 점검했던 부분인데요. 이번 클라우드 세션에서 al과 Gonzales, Buck이 강조하는 것도 일맥상통합니다. 카카오 i 클라우드는 모든 리소스가 쿠버네티스로 관리되고 있기 때문에 개발자가 하나부터 열까지 직접 컨트롤 해야했던 오픈스택 컴포넌트를 선언적으로 관리할 수 있습니다. 나아가 '모든 것이 쿠버네티스'인 클라우드 구조가 있었기 때문에 커스텀 리소스 구현을 통해 Openstack hypervisor를 자동으로 제거하는 컨트롤러 개발도 가능합니다.
제 세션에서 소개했던 것처럼 이 프로젝트의 시작은 작년 인턴 과제 프로젝트였지만, 지금은 추가적인 기능 개발과 테스트를 통해 클라우드 환경 배포까지 완료되어 있습니다. 쿠버네티스의 컨트롤러 패턴을 사용해서 직접 리소스를 정의하고 리컨사일 로직을 구현해보는 것은 쉽게 해볼 수 없는 값진 경험이었습니다. 다음 단계로 장애 자체를 패턴화하고 자동 감지하는 기능을 구현할 계획을 구체화하고 있습니다. 클라우드 서버를 운영하다보면 소프트웨어부터 가장 밑단의 하드웨어까지 다양한 장애 상황이 발생하는데요, 할 수 있는 모든 상황에 대처하는 오퍼레이터를 구현하는 것이 목표입니다.
이미 많은 커스텀 오퍼레이터가 카카오 i 클라우드 위에서 동작하고 있는 만큼, 앞으로 더 안정적인 운영을 위한 기능 고도화가 벌써 기대됩니다.
처음 이 프로젝트를 시작했을 때는 막막하고 제가 해낼 수 있을지 걱정이 많이 되었지만, 함께 하는 저희 파트 분들이 믿어주시고 도움을 주셔서 여기까지 도전해볼 수 있었습니다. 감사의 말씀을 적으려 했는데.. 이미 Gonzales가 아래에 스페셜 땡스투를 남겨주셨군요. :)
이 세션을 준비한 또 다른 목적! 쿠버네티스를 자유롭게 확장하고, 클라우드 네이티브한 서비스를 개발하고 싶은 분들, 이 글을 보고 계신 바로 여러분들을 기다리고 있습니다. 클라우드 개발팀의 문은 언제든 열려있습니다. 저희와 함께 펀하고 쿨하고 섹시한 클라우드를 만들어보고 싶으시다면 노크해주세요.
세 번째 세션. 쿠버네티스 펀하고 쿨하고 섹시하게 만들기
안녕하세요. '쿠버네티스 펀하고 쿨하고 섹시하게 만들기'라는 제목으로 관심을 끌어보려고 했으나 기대만큼 큰 관심을 못 끈(넝담) Buck(허진)과 Gonzales(손준호)입니다.
카카오 i 클라우드는 al이 2020년 발표한 것처럼 모든 것이 쿠버네티스인 환경에서 개발 및 구성되어 있습니다. Undercloud에서 IaaS서비스를 구성하기 위한 쿠버네티스는 ‘Underground’라는 이름으로 제공되고 있고, 클라우드 고객이 사용하는 Overcloud 환경에서는 ‘Kubernetes Engine’ 이라는 이름의 쿠버네티스 서비스를 제공하고 있습니다.
저희는 이 세션에서 Cluster API라는 오픈소스를 이용하여 Kubernetes as a Service를 개발하는 여정을 풀어가고 있습니다. Cluster API를 이용해서 Kubernetes as a Service를 개발하고 싶은 분들이라면 누구나 가벼운 마음으로 저희 세션을 보실 수 있습니다. 또한 개발자가 아니더라도 카카오 i 클라우드가 어떠한 방식으로 쿠버네티스를 쉽고 빠르게 프로비저닝하여 사용자에게 전달하는지에 대해서도 알 수 있습니다. 더 자세한 내용은 저희 세션을 통해 확인해주시면 좋겠습니다.
Special thanks to. 서비스를 위해 불철주야 노력하고 있는 저희 개발 파트 멤버 Toby, Ms, Jay, Harold, Kamo, Thor 에게 이 글을 빌어 고마움을 표현하고 싶습니다. 사..사…사…….
마치며
지금 이 순간에도 카카오 i 클라우드팀은 쿠버네티스 기반의 선언적이고 민첩한 클라우드 서비스를 만들기 위해 치열하게 고민하고 연구하고 개발하고 있습니다. 이번 if(kakao)dev2022 Cloud 트랙에서 소개해드린 것처럼 카카오 i 클라우드팀의 철학, 신념, 열정은 모두 제대로 된 클라우드를 만드는데에 결집되어 있다고 해도 과언이 아닐 것입니다.
혹시 저희 열정을 좀 더 보여드려도 된다면, 지난 if(kakao) 발표 영상을 소개해드리고 싶습니다. 클라우드 개발자들의 고민과 열정이 담긴 기술 세션이라 시간이 아깝지 않으실 거라 자신합니다. 관심 있으신 분들은 꼭 살펴봐주시기 바랍니다.
마지막으로, 카카오 i 클라우드에 대한 많은 기대와 관심 부탁드립니다. 감사합니다.
📣 카카오 i 클라우드팀의 지난 if kakao 발표 영상을 소개합니다.
2020년
Kubernetes-native Datacenter: 데이터센터 안의 모든 것들을 쿠버네티스로 관리하는 방법
Kubernetes와 함께 flex 해버린 Multitenancy Network
MySQL on Kubernetes: 발표자도 데이터베이스를 컨테이너로 운영하게 될 줄 몰랐다
2021년
카카오 i 클라우드에서 10분 만에 서비스 가능한 Gitlab 만들기
Multitenancy L2DSR Loadbalancer