
GitOps는 Weaveworks에서 이야기 하기 시작한 용어로 Git을 사용하는 프로젝트에서 DevOps를 어떻게 적용할 지에 대한 실천적 방법론입니다.
모든 선언적 코드[IaC(Infra as a Code) 도구]로 되어 있는 파일을 Git으로 관리하고 이것을 Pipeline을 통해 운영에 활용하는 것을 의미합니다.
Git Repository의 코드와 Production 환경이 일치하도록 자동화된 프로세스를 구축하는 것을 의미합니다.(ArgoCD 등) 새 Application을 배포하거나, 기존 Application을 업데이트 할 때, Code만 수정하여도 자동화된 프로세스를 통해 일관된 환경을 유지하여 선언된 인프라와 Application 모두를 실제 상태가 동일하도록 할 수 있습니다.
git repository는 GitOps 구현에 중심에 있습니다. 통상 Application 코드의 repository와 인프라 환경 구성을 위한 repository로 구성 합니다.(일반적인 상황에 대해서 2가지 타입의 repository를 권장합니다)
배포전략은 Push 방식과 Pull 방식이 있는데 일반적으로 Pull 방식의 배포 전략이 더 안전한 방법으로 간주되어 선호 되곤 합니다.
Pull 방식 기반의 배포 전략은 Push 방식과 유사하지만 배포 파이프라인이 작동하는 방식이 다릅니다.
Push 방식에서 CI/CD 파이프라인은 git repository가 변경될 때, 외부 이벤트(repo merge or push)에 의해 트리거 됩니다.
Pull 방식에서는 git repo와 실제 환경을 비교하는 Operater가 중간에 위치하게 됩니다. ArgoCD, FluxCD, JenkinsX 등의 CD 도구를 사용하게 되는 데, 이를 실제 환경 내에 위치 시켜 내부 환경에 필요한 접근 권한을 환경 외부에 둘 필요가 없어지게 됩니다. 단순히 서비스가 동작하는 환경 외부에 저장소인 git repo 혹은 image registry 에 대한 접근 제어를 환경 안 쪽에서 사용하는 방식이므로 실제 환경에 대한 권한이 노출되지 않습니다.
