이번 아티클에선 지난 글에 이어 CGOA 자격증에서 정말 자주 등장하는 핵심 용어를 살펴보려합니다.
GitOps는 DevOps를 실현하는 방법론으로 최근 등장한 개념이다보니 GitOps 용어들이 낯설 수도 있는데요. 너무 많은 것을 단순 나열하기 보단, GitOps 도입에 꼭 알아야 할 핵심 용어 5가지를 엄선해서 이해하기 쉽게 정리해보겠습니다.
비단 CGOA 시험뿐만 아니라 GitOps 도입을 고민하고 계시다면 정말 도움이 되는 내용들로 구성했으니, GitOps에 대해 관심이 있으시다면 이번 아티클에서 다루는 개념까지 꼭 챙겨가셨으면 좋겠습니다.
참고로 CGOA의 공식 언어와 GitOps를 다루는 대부분 문서의 언어가 영어로 되어있기 때문에, 이번 글에서 다룰 핵심 용어도 최대한 영어 원문을 유지했습니다.
1. Desired State
(출처: https://control-plane.io/posts/what-is-gitops)
‘바람직한 상태’ 또는 ‘원하는 상태’란 뜻의 Desired State는 Git 저장소에 코드로 정의된 시스템의 ‘최종 목표 구성’을 말합니다.
예를 들어 Kubernetes 클러스터에 배포할 애플리케이션의 매니페스트 YAML 파일이나, Istio 또는 Kyverno와 같은 Kubernetes 클러스터의 컴포넌트를 정의한 매니페스트 파일 등이 Desired State를 명시하는 거죠.
Desired State는 Git에 저장되기 때문에 버전 관리를 할 수 있고, 모든 변경 이력이 남는다는 특징이 있습니다.
GitOps의 모든 활동은 결국 시스템의 실제 상태(Actual State)를 Desired State와 일치시키는 것을 목표로 하기 때문에, Desired State는 GitOps 워크플로우의 중심축이라고 할 수 있습니다.
우리가 지난 아티클에서 살펴봤던 GitOps의 핵심 원칙인 ‘Declarative’를 실현한 것이 바로 이 Desired State입니다.
2. State Drift
State Drift는 ‘상태의 불일치’란 뜻을 가지고 있습니다. Git에 저장된 Desired State와 현재 시스템의 Actual State가 일치하지 않는 현상을 말하는데요.
주로 관리자가 시스템 구성을 수동으로 변경하거나, 예기치 않은 장애로 인해 State Drift가 발생합니다.
GitOps에서는 Argo CD와 같은 GitOps 에이전트가 Git 저장소의 Desired State를 참고해서 시스템이나 클러스터의 상태를 업데이트해야 하는데, GitOps 에이전트가 아닌 다른 요인으로 시스템의 상태가 변하게 되면 Desired State와 Actual State가 달라지기 때문입니다.
예를 들어, GitOps를 도입한 Kubernetes 클러스터 내에서 관리자가 kubectl로 클러스터 내 리소스를 직접 수정하거나 삭제하면 State Drift가 발생하게 되는 건데요.
State Drift 없이 클러스터 상태를 업데이트하고 싶다면 Git 저장소에 저장된 Desired State를 업데이트해야 하는 겁니다.
GitOps에서 State Drift는 꼭 해소되어야 할 현상이기 때문에 GitOps 에이전트가 State Drift 여부를 지속적으로 감지합니다.
만약 State Drift가 감지되었다면 GitOps 에이전트는 Desired State가 되도록 계속해서 시스템 구성을 업데이트하고, 사용자에게 알림을 보내 리포팅하는데요. 이와 관련해서는 4번째 핵심 용어인 ‘Feedback Loop’에서 더 다뤄보겠습니다.
3. State Store
(출처: https://www.ibm.com/think/topics/gitops)
우리가 지금까지 살펴본 Desired State와 State Drift는 모두 시스템의 ‘상태(State)‘와 관련되어 있습니다. 그만큼 GitOps에서 상태가 중요한 역할을 한다는 뜻인데요.
그래서 State를 저장하는 곳 역시 GitOps에서 중요한 구성요소입니다. 그걸 State Store라고 합니다.
GitOps 워크플로우에서 시스템의 Desired State를 저장하고 관리하는 Git 저장소가 바로 State Store입니다.
Git은 강력한 버전 관리 기능과 변경 이력 추적, 협업을 위한 Pull Request 기능을 제공하여 시스템의 상태를 안정적으로 관리하기 위한 저장소 역할을 훌륭히 수행합니다. GitOps의 핵심 원칙인 ‘Versioned and Immutable’이 State Store 덕에 실현할 수 있는 것이죠.
별도의 데이터베이스나 상태 관리 시스템이 필요하지 않기 때문에 구성이 용이하고, 개발자라면 이미 익숙한 툴이기 때문에 어렵지 않게 사용할 수 있다는 점도 State Store로서의 Git이 가진 장점입니다.
4. Feedback Loop
State Drift를 설명할 때, GitOps 에이전트는 시스템의 Actual State를 감지하고 Desired State와 비교하여 그 차이가 있다면 해소하기 위해 지속적으로 시스템 상태를 업데이트한다고 했었죠.
이렇게 반복해서 조정(Reconcile)하는 과정을 GitOps에선 Feedback Loop라고 합니다.
Feedback Loop는 원래 ‘시스템이나 행동의 Output이 다시 Input으로 활용’되는 것을 의미하는데요.
- 주기적으로 Actual State를 검토
- State Drift를 감지하면 Desired State를 참고해서 시스템의 상태를 업데이트
- 업데이트된 시스템의 Actual State를 다시 주기적으로 검토
GitOps 에이전트는 주기적으로 위와 같은 조정 과정을 순환하기 때문에 이를 Feedback Loop라고 하는 것입니다.
Feedback Loop 덕분에 GitOps가 적용된 시스템은 외부의 변화나, 내부의 오류 또는 오작동이 있더라도 안정적으로 Desired State를 되찾을 수 있습니다.
그리고 Feedback Loop 프로세스는 GitOps 핵심 원칙인 ‘Pulled Automatically’와 ‘Continuosly Reconciled’를 실현하는데요.
- GitOps 에이전트가 State Store에 저장된 Desired State를 주기적으로, 또는 특정 조건에 의해 자동으로 가져와 시스템의 상태를 업데이트(Pulled Automatically)하고
- State Drift 발생 시, Actual State가 Desired State로 될 수 있도록 GitOps 에이전트가 계속해서 조정(Continuosly Reconciled)하기 때문입니다.
5. Rollback
(출처: https://devseccops.ai/mastering-argocd-in-kubernetes-installation-and-best-practices)
GitOps를 도입해서 시스템을 관리하고 운영하고 있을 때, 만약 문제가 발생하면 어떻게 해야 할까요? 예를 들어 Kubernetes의 어떤 컴포넌트 매니페스트 파일을 수정해서 Git에 Push했는데 문제가 생긴 거죠.
그럴 땐 이미 익숙하실 수도 있는 Git의 효과적인 롤백(Rollback) 메커니즘을 사용하면 됩니다. 바로 Git의 Revert 기능인데요.
시스템의 Desired State가 Git에 저장되면서 각 버전이 기록되고 추적할 수 있기 때문에, 우린 git revert
명령어를 사용해서 문제가 없었던 이전 버전의 매니페스트로 원복할 수 있는 겁니다.
이렇게 State Store에 저장된 Desired State를 Rollback하면 어떤 일이 일어날까요?
- GitOps 에이전트가 시스템의 Actual State와 Desired State간의 Drift를 감지하고
- State Store로부터 Desired State를 다시 가져와 시스템의 상태를 업데이트해서
- 시스템은 Rollback된 시점의 상태로 복구됩니다.
이렇게 GitOps에서는 Git의 Revert 기능으로 빠르고 안정적으로 장애 복구가 가능하답니다.
이번 아티클에서는 CGOA 자격증에 꼭 등장하는 GitOps 관련 핵심 용어 5가지를 자세히 살펴봤습니다.
꼭 자격증 시험이 아니더라도, GitOps를 학습하시거나 실제로 도입하시려는 분들에게도 분명 도움이 될 내용들로 구성했는데요.
혹시 GitOps에 대해 궁금하시거나 다뤘으면 하는 내용이 있다면 아래 피드백 사이트를 통해 알려주세요. 여러분이 보내주시는 피드백은 제가 모두 읽고 반영하고 있으니까요.
그럼 다음 아티클에서 더 흥미로운 주제로 찾아오겠습니다.
감사합니다.
참고 자료
✨이번 아티클은 어떠셨나요?
이번 글의 주제에 대해 어떻게 생각하는지 알려주세요! 더 나은 아티클을 전달해드리기 위해 아래 폼에서 짧은 피드백을 받고 있어요.
여러분들의 소중한 의견은 Aiden’s Lab에 큰 힘이 됩니다!