Close

GitOps는 DevOps의 다음 대세일까요?

DevOps는 책임 공유, 투명성, 더 빠른 피드백 문화를 장려하기 때문에 이제 많은 조직에서 DevOps를 디지털 혁신 전략의 일부로 생각하고 있습니다. 개발 팀과 운영 팀 간의 격차가 줄어들면서 프로세스도 줄어들고 있습니다.

따라서 오늘날 환경에서 가장 널리 사용되는 버전 제어 시스템인 Git에 적합합니다. 회사가 DevOps 방법론을 수용함에 따라 개발자가 더 많은 IT 운영 관련 작업을 수행할 수 있도록 해주는 일련의 관행인 GitOps에 혁신을 일으킨 도구도 받아들이고 있습니다.


GitOps란?


GitOps는 Git을 소스 제어 시스템으로 사용하는 코드 기반 인프라 및 운영 절차입니다. GitOps는 코드형 인프라(IaC)가 진화된 프레임워크이자 DevOps 모범 사례로, Git을 단일 정보 출처로 활용하는 동시에 시스템 아키텍처를 만들고 업데이트하고 삭제하는 제어 메커니즘으로 활용합니다. 간단히 말해서, Git 풀리퀘스트를 사용하여 시스템 인프라 수정 사항을 확인하고 자동으로 배포하는 관행입니다.

주요 DevOps 메커니즘인 Git에 더해 GitOps는 Git의 기본 기능을 보강하는 도구를 설명하는 데도 사용됩니다. 이러한 도구는 주로 Kubernetes 기반 인프라 및 애플리케이션을 위한 운영 모델과 함께 사용되었습니다. DevOps 커뮤니티에서는 Terraform과 같이 Kubernetes가 아닌 다른 플랫폼에 GitOps 도구를 도입하기 위한 개발과 논의가 이루어지고 있습니다.

GitOps는 Git 리포지토리 상태에 따라 시스템의 클라우드 인프라를 즉시 재현할 수 있도록 해줍니다. 풀리퀘스트는 Git 리포지토리의 상태를 수정합니다. 승인 및 병합이 이루어지면 풀리퀘스트가 라이브 인프라를 자동으로 재구성하여 리포지토리 상태에 동기화합니다. 이러한 라이브 동기화 풀리퀘스트 워크플로는 GitOps의 핵심 요소입니다.

Git 로고
관련 자료

Git 치트 시트

Bitbucket 로고
솔루션 보기

Bitbucket Cloud에서 Git에 대해 알아보기

GitOps의 역사


Git은 풀리퀘스트 및 코드 검토 워크플로를 지원하는 소프트웨어 개발에 필수적인 도구입니다. 풀리퀘스트는 코드베이스로 들어오는 변경 사항에 대한 가시성을 높이고 커뮤니케이션, 논의, 변경 사항 검토를 장려합니다.

풀리퀘스트는 공동 작업 소프트웨어 개발의 핵심적인 기능이며 팀과 비즈니스가 소프트웨어를 만드는 방식을 바꿔놓았습니다. 풀리퀘스트는 이전에 불투명했던 프로세스에 투명성과 측정 가능성을 제공합니다. Git 풀리퀘스트는 DevOps 프로세스를 소프트웨어 개발로 발전시키는 데 도움이 되었습니다. 일반적으로 변화를 주저했던 시스템 관리자들은 이제 애자일 및 DevOps와 같은 새로운 소프트웨어 개발 방식을 수용하고 있습니다.

기술으로서의 시스템 관리는 엉성한 역사를 가지고 있습니다. 이전에는 시스템 관리자가 물리적 서버 랙에 있는 컴퓨터에 연결하고 프로비저닝하거나 클라우드 프로비저닝 API를 통해 하드웨어를 수동으로 관리했습니다. 수동 프로비저닝 프로세스 외에도 많은 양의 수동 구성 작업이 일상적으로 이루어졌습니다. 관리자들은 명령형 스크립트 및 구성의 사용자 지정 컬렉션을 보관하고, 서로 조합하여 다양한 위치에 배치했습니다. 이러한 스크립트는 언제든지 중단되거나 손실될 수 있습니다. 사용자 지정 도구 체인이 정기적으로 문서화되거나 공유되지 않았기 때문에 공동 작업이 쉽지 않았습니다.

DevOps 운동은 시스템 관리라는 원시적인 늪에서 비롯되었습니다. DevOps는 소프트웨어 엔지니어링에서 최고의 아이디어를 빌려 시스템 관리에 적용했는데, 여기에서 함께 결합된 도구는 버전 제어 코드가 되었습니다.

IaC는 DevOps의 가장 큰 발견 중 하나입니다. 이전에 시스템 관리자는 시스템을 구성하기 위해 사용자 지정 명령형 스크립트를 선호했습니다. 명령형 소프트웨어는 원하는 상태에 도달하기 위한 일련의 단계를 따르며 예를 들면 다음과 같습니다.

명령형 소프트웨어는 오류에 취약하며 이벤트 순서를 바꾸면 쉽게 손상됩니다. 최신의 소프트웨어 개발은 명령형 패턴에서 벗어나 선언형 소프트웨어 패턴으로 발전해 왔습니다.

선언형 소프트웨어는 일련의 명령 대신 예상 상태의 선언을 따릅니다. 다음은 명령형 DevOps 설명과 선언형 DevOps 설명을 비교한 것입니다.

명령형 설명은 다음과 같을 수 있습니다.

  1. 이 컴퓨터에 운영 체제 설치
  2. 이 종속성 설치
  3. 이 URL에서 코드 다운로드
  4. 코드를 이 디렉터리로 이동
  5. 3대의 다른 컴퓨터에서 같은 작업을 3회 수행

이것을 선언형 버전으로 바꾸면 다음과 같습니다. 4대의 컴퓨터에 이 URL의 소프트웨어가 있으며 이 디렉터리에 설치되었습니다.

IaC는 사용자 지정 명령형 솔루션보다 선언형 시스템 관리 도구를 장려하고 지원합니다. 따라서 정적인 선언형 구성 파일을 활용하는 Docker Containers, Ansible, Terraform 및 Kubernetes와 같은 기술이 등장했습니다. 사용자가 읽을 수 있고 일관되고 재현 가능한 상태라는 이점 덕분에 이러한 구성 파일은 추적 및 검토를 위해 자연스럽게 Git에 추가되었습니다. GitOps와 비슷하지만 GitOps라고 할 수는 없습니다.

DevOps 역사의 이 시점에서 기존의 시스템 관리 문제 중 많은 부분이 해결되었습니다. 구성 파일과 도구는 이제 중앙 위치에 저장되고 문서화되어 많은 팀원이 액세스할 수 있게 되었습니다. 커밋과 풀리퀘스트는 구성에 대한 수정 사항을 추적하고 공동 작업의 논의와 검토를 촉진하는 데 사용되었습니다. 이 시점에서 남은 유일한 문제는 구성이 여전히 라이브 시스템과 연결되지 않은 것처럼 느껴진다는 것입니다. 구성 풀리퀘스트가 승인되고 리포지토리에 병합되면 정적 리포지토리의 상태와 일치하도록 라이브 시스템이 수동으로 업데이트됩니다. 이것이 바로 GitOps가 해결하는 문제입니다.

GitOps 아이디어는 엔터프라이즈 Kubernetes 관리 회사인 WeaveWorks에서 처음으로 개발하고 공유했으며 이후 DevOps 커뮤니티 전체로 확산되었습니다. GitOps는 위에서 설명한 IaC 및 선언형 구성의 확장 기능입니다. GitOps는 라이브 시스템의 상태를 정적 구성 리포지토리의 상태와 동기화하는 풀리퀘스트 워크플로에 몇 가지 마법을 더해줍니다.

GitOps의 이점


GitOps는 애자일 기능 브랜치 소프트웨어 개발 워크플로와 비슷한 이점을 가지고 있습니다. 첫 번째 주요 이점은 일반적인 도구를 사용하기 때문에 쉽게 채택할 수 있다는 것입니다. Git은 사실상 버전 제어 시스템의 표준이며 대부분의 개발자와 소프트웨어 팀이 공통적으로 사용하는 소프트웨어 개발 도구입니다. 따라서 Git에 익숙한 개발자는 교차 기능 기여자가 되어 GitOps에 쉽게 참여할 수 있습니다.

버전 제어 시스템을 사용하면 팀이 시스템 구성에 대한 모든 수정 사항을 추적할 수 있습니다. 따라서 무언가가 중단되거나 예상과 다르게 동작하는 경우 검토할 수 있는 귀중한 감사 추적과 "정보 출처"가 제공됩니다. 팀은 GitOps 기록을 검토하여 회귀가 도입된 시점을 확인할 수 있습니다. 또한 이 감사 추적을 컴플라이언스 또는 보안 감사를 위한 참조로 사용할 수도 있습니다. GitOps 기록은 암호화 인증서와 같은 항목이 수정되거나 업데이트될 때 증거로 사용할 수 있습니다.

GitOps는 중앙 리포지토리에 대한 조직의 인프라 요구 사항에 투명성과 명확성을 제공합니다. 중앙 리포지토리에 모든 시스템 구성을 포함하면 팀원들의 기여도를 확장하는 데 도움이 됩니다. Bitbucket과 같이 호스팅된 Git 서비스를 통해 이루어진 풀리퀘스트는 코드 검토와 논의 설명을 위한 다양한 도구를 보유합니다. 그러므로 전체 엔지니어링 팀이 인프라 변경 사항을 관찰하고 모니터링할 수 있는 수동적 커뮤니케이션 루프가 구축됩니다.

GitOps는 DevOps 팀의 생산성을 크게 높일 수 있습니다. 이를 통해 새로운 인프라 구성을 신속하게 실험할 수 있습니다. 새로운 변경 사항이 예상대로 작동하지 않으면 팀은 Git 기록을 사용하여 변경 사항을 알려진 양호한 상태로 되돌릴 수 있습니다. 복잡한 인프라에서 익숙한 “실행 취소” 기능을 사용할 수 있으므로 매우 강력한 이점입니다.

GitOps의 작동 방식


GitOps 절차는 기본 오케스트레이션 시스템에서 수행됩니다. GitOps 자체는 모범 사례 패턴에 영향을 받지 않습니다. 오늘날 인기 있는 대부분의 GitOps 솔루션은 주로 Kubernetes를 오케스트레이션 시스템으로 사용합니다. 직접적인 Terraform 조작을 지원하는 일부 대체 GitOps 도구 집합이 출시되고 있습니다.

GitOps를 완전히 설치하려면 파이프라인 플랫폼이 필요합니다. Jenkins, Bitbucket Pipelines 또는 CircleCI는 GitOps를 보완하는 인기 있는 파이프라인 도구입니다. Pipelines는 Git 풀리퀘스트와 오케스트레이션 시스템 사이의 격차를 해소하고 자동화합니다. 파이프라인 후크가 설정되고 풀리퀘스트에서 트리거되면 오케스트레이션 부분에 명령이 실행됩니다.

GitOps와 함께 특별히 도입된 새로운 패턴 또는 구성 요소는 파이프라인과 오케스트레이션 시스템 사이에 있는 메커니즘인 GitOps “연산자”입니다. 풀리퀘스트는 파이프라인을 시작한 다음 연산자를 트리거합니다. 연산자는 리포지토리의 상태와 오케스트레이션 시작을 검사하고 동기화합니다. 연산자는 GitOps의 마법과도 같은 구성 요소입니다.

GitOps 예시


성능 병목 현상이나 트래픽 급증을 발견한 팀에서 부하 분산 장치가 예상대로 작동하지 않는다는 것을 발견했다고 가정해 봅시다. 팀은 인프라 구성을 보관하는 GitOps 리포지토리를 살펴보며 부하 분산 장치를 구성 및 배포하는 특정 파일을 찾습니다. 온라인 Git 호스팅 사이트에서 검토할 수 있습니다. 몇 번의 검토와 논의를 거친 후 부하 분산 장치의 일부 구성 값이 최적이 아니며 조정이 필요하다는 것을 파악합니다.

한 팀원이 부하 분산 장치 값을 최적화하는 새 풀리퀘스트를 엽니다. 다른 팀원이 풀리퀘스트를 검토 및 승인하고 리포지토리에 병합합니다. 병합은 GitOps 파이프라인을 시작하고, 이어서 GitOps 연산자가 트리거됩니다. 연산자는 부하 분산 장치 구성이 변경된 것을 확인합니다. 또한 시스템 오케스트레이션 도구를 통해 이 변경 사항이 현재 팀 클러스터에 있는 내용과 일치하지 않는다는 것을 확인합니다.

연산자는 부하 분산 장치 구성을 업데이트하도록 오케스트레이션 시스템에 신호를 보냅니다. 오케스트레이터는 나머지를 처리하고 새로 구성된 부하 분산 장치를 자동으로 배포합니다. 그런 다음 팀은 새로 업데이트된 라이브 시스템을 모니터링하여 정상 상태로 돌아갔는지 확인합니다. 이것이 이상적인 GitOps 시나리오입니다. 더 자세한 내용과 함께 GitOps 유틸리티를 설명하겠습니다.

팀이 부하 분산 장치 값을 약간 조정하여 더 최적화하는 대신 부하 분산 장치 유형을 완전히 새로 배포하는 적극적인 결정을 내린다고 가정해 보겠습니다. 팀은 현재의 부하 분산 장치에 근본적으로 결함이 있다고 생각하고 다른 옵션을 시도하려고 합니다. 워크플로는 값 조정과 같습니다. 팀은 완전히 새로운 부하 분산 장치 구성을 도입하는 풀리퀘스트를 만들고 이전 구성을 삭제합니다. 이는 파이프라인을 통해 승인 및 배포됩니다.

안타깝게도 팀은 이 새로운 유형의 부하 분산 장치가 클러스터 내의 일부 다른 서비스와 호환되지 않는다는 사실을 알게 됩니다. 새 부하 분산 장치는 심각한 트래픽 장애를 일으키고 사용자 작업을 중단시킵니다. 다행히 팀은 완전한 GitOps 파이프라인을 가지고 있기 때문에 부하 분산 장치 변경을 신속하게 실행 취소할 수 있습니다. 팀은 리포지토리를 이전의 알려진 가동하는 부하 분산 장치로 되돌리는 또 다른 풀리퀘스트를 수행합니다. 이는 다시 GitOps 파이프라인에서 확인되어 자동으로 배포됩니다. 그러면 인프라가 빠르게 개선되고 팀의 신뢰성 점수가 높아집니다.

요약


GitOps는 최신 클라우드 인프라를 관리하기 위한 매우 강력한 워크플로 패턴입니다. 주로 Kubernetes 클러스터 관리에 중점을 두고 있지만 DevOps 커뮤니티는 GitOps 솔루션을 Kubernetes 이외의 다른 시스템에 적용 및 게시하고 있습니다. GitOps는 향상된 커뮤니케이션, 가시성, 안정성, 시스템 신뢰성을 비롯하여 엔지니어링 팀에 많은 이점을 제공할 수 있습니다. GitOps 경험을 위한 핵심 요구 사항 중 하나는 Bitbucket과 같은 최신 호스팅 Git 플랫폼입니다.


이 문서 공유
다음 토픽

여러분께 도움을 드릴 자료를 추천합니다.

이러한 리소스에 책갈피를 지정하여 DevOps 팀의 유형에 대해 알아보거나 Atlassian에서 DevOps에 대한 지속적인 업데이트를 확인하세요.

도구로 가득한 벽을 사용하여 협업하는 사람들

Bitbucket 블로그

DevOps 일러스트레이션

DevOps 학습 경로

Atlassian 전문가와 함께 하는 Demo Den 기능 데모

Bitbucket Cloud가 Atlassian Open DevOps와 작동하는 방법

DevOps 뉴스레터 신청

Thank you for signing up