본문 바로가기
정보

[쿠버네티스] DevOps / CI / CD / 쿠버네티스(K8S)란?

by 왜지? 2023. 1. 29.
반응형

DevOps

DevOps

 DevOps는 개발(Development)과 운영(Operations)을 하나의 프로세스로 접근하는 개발 방식입니다. Agile 프로세스가 도입됨에 따라 빈번한 고객의 요구에 대응하기 위해 많은 개발자들이 코드를 수정하고 통합/배포하는 일이 잦아졌고, 이를 효율적으로 관리하기 위해 탄생했습니다.    

 

CI(Continuous Intergration)

 CI(지속적 통합)은 코드 변경 시 변경사항이 리포지토리의 전체 코드와 충돌 없이 병합되는지 자동으로 검사하고 컨트롤하는 역할을 수행합니다. 덕분에 개발자들은 작은 변경사항이 생기더라도 직접 모든 코드의 검증을 할 필요가 없어 개발 생산성이 크게 향상됩니다. CI 단계에서 코드의 Build와 검사가 수행되며 문제가 없다면 Docker Image를 생성하여 형상을 관리합니다. 대표적인 CI Tool로는 Jenkins가 있습니다.     

 

CD(Continuous Delivery/Deployment)

 CD(지속적 전달/배포)는 CI 단계에서 생성된 Docker Image를 자동으로 배포하여 사용자에게 서비스를 제공할 수 있는 상태인지 검사합니다. 덕분에 개발자들은 개발 환경에서 잘 수행되던 코드가 서비스 환경에서도 문제없이 잘 수행되는지 직접 검사하지 않아도 되어 생산성이 향상됩니다. 대표적인 CD Tool로는 ArgoCD가 있습니다.

 

쿠버네티스(Kubenetes)

kubenetes 기능

 쿠버네티스(k8s)란 컨테이너화된 Application들의 동작과 컨디션, 자원 사용량 등을 한 번에 관리하는 시스템입니다. 여기서 컨테이너란, 앱이 구동하는 환경 전체를 감싸서 격리하여 이미지화한 것입니다. 쿠버네티스는 이렇게 생성된 많은 컨테이너들을 주어진 자원 내에서 효율적으로 구동되도록 배치하고, 장애가 생긴 컨테이너를 즉각 교체하는 등 쉽게 관리할 수 있도록 해줍니다. 이 과정을 컨테이너 오케스트레이션이라 부르고, 쿠버네티스를 컨테이너 오케스트레이션 도구라고 하기도 합니다. 

 쿠버네티스 환경에서 여러 App들이 동작하는 방식은 VM에서 여러 App이 동작하는 방식과 비슷하지만 큰 차이가 있습니다. 서버의 자원을 나눠 쓰고 App 간 공간을 분리하여 격리시킨다는 개념은 비슷하지만, VM 마다 운영체제를 깔아주는 등 관리 포인트가 늘어난다는 단점을 해결한 것입니다. 쿠버네티스 환경에서 운영체제는 한 번만 설치하고, 각 App이 구동할 컨테이너를 만들어 그 컨테이너가 마치 OS를 독립적으로 소유 한 것처럼 만들었습니다. 그래서 App 간 충돌을 일으키지 않으면서 OS도 따로 관리하지 않아도 되는 가벼운 환경이 구성된 것입니다.  

kubenetes container가 구동되는 원리

 

쿠버네티스를 활용한 CI/CD ( Jenkins & ArgoCD )

  쿠버네티스가 컨테이너를 관리하려면 각 컨테이너의 CD를 담당하는 Tool에 접근해야 합니다. 이때 사용되는 툴이 ArgoCD이며, Git에 저장된. yaml 파일들(deployment, service, ingress 등)을 ArgoCD가 관리합니다. 처음부터 전체 과정을 보면, 개발자가 Git에 Code를 Commit 하면 Jenkins가 자동으로 코드를 검증하여 Image를 생성합니다.(CI) CD를 위한 yaml파일이 Git에 업데이트되면 ArgoCD가 배포 환경이 잘 준비됐는지 검사하고 Kubenetes가 ArgoCD에 접근하여 명령대로 컨테이너(App)를 구동시키게 됩니다.   

Kubenetes & Jnkins & ArgoCD 의 동작 과정

지금까지 기본적으로 CI/CD가 무엇인지, 쿠버네티스가 어떻게 컨테이너를 관리하는지 알아봤습니다. 각 주제별로 알아야 할 내용이 많기 때문에 개별 주제로 다시 포스팅할 예정입니다. 

반응형

댓글