Ssoon
GitOps와 Kubernetes 본문
🚀 GitOps와 Kubernetes: 현대 개발의 새로운 패러다임
소프트웨어 개발은 Infrastructure as Code (IaC) 같은 실천 방법의 등장으로 인해, 애플리케이션을 실행할 수 있는 플랫폼의 경계를 넓혀왔습니다. 몇 년 전만 해도 개발자들은 애플리케이션 소스 코드에만 집중했지만, 이제는 애플리케이션이 실행될 인프라 자체를 코드로 작성할 수 있게 되었습니다. 이는 제어권을 강화하고 자동화를 가능하게 하여, 배포 리드 타임을 크게 줄여줍니다.
Public cloud나 오픈 소스 인프라 솔루션처럼 프로그래머블하고 API-driven 플랫폼에서 이러한 변화가 더 빈번해집니다. Kubernetes 같은 인기 있는 오픈 소스 컨테이너 워크로드 오케스트레이션 플랫폼은, public cloud나 private cloud에서 프로덕션 애플리케이션을 실행하는 de facto standard가 되었습니다. 이 플랫폼의 개방성과 확장성은 자동화를 촉진하여 배포 위험을 줄이고 서비스 품질을 높입니다. 게다가 이 강력한 패러다임은 GitOps라는 점점 인기 있는 접근 방식으로 확장됩니다.
"Kubernetes의 개방성은 자동화를 통해 배포 위험을 줄이고, GitOps는 이를 더 체계적으로 구현합니다."
📋 1.1 What Is GitOps?
GitOps는 Git 리포지토리를 인프라 as code를 배포하는 단일 소스 오브 트루스(single source of truth)로 사용하는 방법론이자 실천입니다. DevOps 문화의 기둥과 접근 방식을 기반으로 하며, 이를 실현하기 위한 프레임워크를 제공합니다. GitOps는 DevOps를 구현하고 강화하는 인기 있는 선택으로, platform engineering과 SRE(Site Reliability Engineering)에도 깊이 연결되어 있습니다.
GitOps는 agnostic한 접근 방식으로, Git, Kubernetes, CI/CD 솔루션 같은 도구로 프레임워크를 구축할 수 있습니다. GitOps의 세 가지 주요 기둥은 다음과 같습니다:
- Git is the single source of truth: 모든 상태가 Git에 저장되어 신뢰할 수 있는 유일한 출처가 됩니다.
- Treat everything as code: 인프라와 배포를 코드처럼 관리합니다.
- Operations are performed through Git workflows: 모든 작업이 Git 워크플로를 통해 이뤄집니다.
GitOps 커뮤니티는 활발하며, GitOps Working Group이 OpenGitOps에서 정의한 GitOps Principles (현재 버전 1.0.0)를 따릅니다. 이 원칙은 다음과 같습니다:
- Declarative: GitOps로 관리되는 시스템은 원하는 상태(desired state)를 선언적으로 표현해야 합니다.
- Versioned and immutable: 원하는 상태는 불변성과 버전 관리를 강제하며, 완전한 버전 히스토리를 유지합니다.
- Pulled automatically: 소프트웨어 에이전트가 소스에서 원하는 상태 선언을 자동으로 pull합니다.
- Continuously reconciled: 소프트웨어 에이전트가 실제 시스템 상태를 지속적으로 관찰하고 원하는 상태를 적용하려 합니다.
이 원칙들은 초보자도 이해하기 쉽게, GitOps가 어떻게 안정적이고 자동화된 배포를 보장하는지 설명합니다.
"GitOps의 핵심은 Git을 통해 모든 것을 선언적이고 버전화된 코드로 관리하는 것입니다."
💡 1.2 Why GitOps?
GitOps는 개발자들이 익숙한 Git 기반 워크플로를 활용하여, 애플리케이션 개발부터 배포, 앱 라이프사이클 관리, 인프라 구성까지 기존 프로세스를 확장합니다. 애플리케이션 라이프사이클의 모든 변화가 Git 리포지토리에 추적되어 감사(auditable) 가능합니다. 이는 개발자와 운영 팀 모두에게 이익이 되며, 문제를 빠르게 추적하고 재현할 수 있게 하여 보안을 강화합니다. 특히, 원치 않는 변화(drift)를 줄이고 프로덕션 전에 수정하는 데 유용합니다.
GitOps 도입의 이점을 네 가지 주요 측면으로 요약하면 다음과 같습니다:
- Standard workflow: 애플리케이션 개발 팀의 익숙한 도구와 Git 워크플로를 사용합니다.
- Enhanced security: 변경 사항을 미리 검토하고, 구성 drift를 감지하며 조치를 취합니다.
- Visibility and audit: Git 히스토리를 통해 클러스터의 모든 변화를 캡처하고 추적합니다.
- Multicluster consistency: 여러 환경과 Kubernetes 클러스터를 안정적이고 일관되게 구성합니다.
이러한 이점은 GitOps가 단순한 도구가 아닌, 전체 개발 생태계를 강화하는 방법론임을 보여줍니다.
"GitOps는 Git 워크플로로 보안과 가시성을 높여, drift를 방지하고 일관성을 유지합니다."
🔄 1.3 Kubernetes CI/CD
Continuous Integration (CI)와 Continuous Delivery (CD)는 앱 개발 단계를 자동화하여 자주 배포하는 방법입니다. CI/CD 파이프라인은 GitOps의 가장 일반적인 사용 사례 중 하나입니다.
전형적인 CI/CD 파이프라인에서, 제출된 코드가 CI 프로세스를 거치고 CD 프로세스는 보안, IaC, 애플리케이션 프레임워크의 경계를 확인합니다. 모든 코드 변화가 추적되어 업데이트가 쉽고, 롤백 시 버전 컨트롤을 제공합니다. CD는 GitOps의 영역으로, CI와 함께 여러 환경에 앱을 배포합니다.

Kubernetes에서는 in-cluster CI/CD 파이프라인을 쉽게 구현할 수 있습니다. CI 소프트웨어가 애플리케이션을 나타내는 컨테이너 이미지를 생성하고 컨테이너 이미지 레지스트리에 저장합니다. 그 후, pull request 같은 Git 워크플로가 Kubernetes manifests를 변경하여 CD sync loop를 시작합니다.

이 cookbook은 Kubernetes를 CI/CD와 GitOps 플랫폼으로 활용하는 실전 레시피를 보여줍니다.
"Kubernetes CI/CD는 Git 워크플로와 sync loop를 통해 자동화된 배포를 실현합니다."
🚀 1.4 App Deployment with GitOps on Kubernetes
GitOps는 agnostic하고 platform-independent한 접근 방식이므로, Kubernetes에서의 앱 배포 모델은 in-cluster나 multicluster일 수 있습니다. 외부 GitOps 도구가 Kubernetes를 단순 타겟으로 사용하거나, in-cluster 접근에서 GitOps 엔진이 Kubernetes 내부에서 앱을 배포하고 manifests를 sync합니다.
GitOps 엔진은 CI/CD 파이프라인의 CD 부분을 담당하며, GitOps loop를 구성합니다. 이 loop는 네 가지 주요 액션으로 이뤄집니다:
- Deploy: Git에서 manifests를 배포합니다.
- Monitor: Git repo나 클러스터 상태를 모니터링합니다.
- Detect drift: Git에 설명된 상태와 클러스터의 실제 상태 간 변화를 감지합니다.
- Take action: Git에 맞춰 롤백이나 three-way diff 같은 액션을 수행합니다. Git이 소스 오브 트루스입니다.
Kubernetes에서 GitOps 앱 배포는 최소 두 개의 Git 리포지토리를 사용합니다: 앱 소스 코드용 하나, Kubernetes manifests(Deployment, Service 등)용 하나.


- App source code repository
- CI pipeline creating a container image
- Container image registry
- Kubernetes manifests repository
- GitOps engine syncing manifests to one or more clusters and detecting drifts
"GitOps loop는 Git을 중심으로 drift를 감지하고 자동 조정을 통해 안정적인 배포를 보장합니다."
🌟 1.5 DevOps and Agility
GitOps는 continuous delivery와 인프라 운영을 위한 developer-centric 접근 방식으로, Git을 통한 개발자 워크플로로 프로세스를 자동화합니다. DevOps가 Agile 소프트웨어 개발의 보완재라면, GitOps는 DevOps를 위한 인프라 자동화와 앱 라이프사이클 관리의 보완재입니다. 이는 운영을 자동화하는 개발자 워크플로입니다.
Agile 방법론의 가장 중요한 측면은 리드 타임(요구사항 식별부터 충족까지의 시간)을 줄이는 것입니다. 이는 IT 조직의 문화적 변화가 필요합니다. 애플리케이션이 살아 움직이는 것을 보는 것은 개발자에게 피드백 루프를 제공하여 코드를 재설계하고 개선하게 합니다. DevOps처럼 GitOps도 비즈니스 프로세스의 문화적 채택을 요구합니다. 모든 운영, 예를 들어 앱 배포나 인프라 변화는 Git 워크플로를 통해서만 가능합니다. 이는 때때로 문화적 전환을 의미합니다.
Burr Sutter의 “Teaching Elephants to Dance (and Fly!)” 연설은 이 맥락을 명확히 합니다. 코끼리(elephant)는 오늘날 조직의 상태를 상징하며, 전통적 환경에서 GitOps 도구로 구동되는 현대 환경으로의 변화 단계를 설명합니다. 일부

"GitOps는 DevOps와 Agile을 보완하며, Git 워크플로로 리드 타임을 줄이고 문화적 변화를 촉진합니다."
📌 핵심 요약
- IaC와 Kubernetes는 개발의 자동화와 제어를 강화하며, GitOps는 Git을 소스 오브 트루스로 활용해 DevOps를 구현합니다.
- GitOps 원칙(Declarative, Versioned, Pulled, Reconciled)은 안정적 배포를 보장합니다.
- 이점: 표준 워크플로, 보안 강화, 가시성, 멀티클러스터 일관성.
- Kubernetes CI/CD는 Git sync loop로 앱을 자동 배포하며, GitOps loop(Deploy-Monitor-Detect-Take action)가 drift를 방지합니다.
- GitOps는 Agile의 리드 타임 단축을 돕고, 문화적 전환을 통해 조직을 현대화합니다.
'CICD Study [1기]' 카테고리의 다른 글
| Kustomize : Kustomize에서 Kubernetes 필드 업데이트하기 (0) | 2025.10.14 |
|---|---|
| Kustomize : Kustomize에서 컨테이너 이미지 업데이트하기 (0) | 2025.10.14 |
| Kustomize : Kustomize를 사용한 Kubernetes 리소스 배포 (0) | 2025.10.14 |
| Containers (0) | 2025.10.14 |
| Container Registry, Git Repository, Local Kubernetes Cluster (0) | 2025.10.14 |