본문
K8s 배포 전략의 두 갈래: 표준 GitOps(Pull) vs EKS Native(Push)
프로그래밍/CICD 2024. 3. 29. 08:14
쿠버네티스(K8s) 환경에서 CI/CD를 구축할 때, 우리는 종종 두 가지 접근 방식 사이에서 고민하게 됩니다. 하나는 클라우드 벤더에 구애받지 않는 표준화된 'GitOps (Pull 방식)'이고, 다른 하나는 AWS와 같은 퍼블릭 클라우드의 관리형 서비스를 최대한 활용하는 'Native (Push 방식)'입니다.
두 방식 모두 목표는 같지만, 그 목표에 도달하는 '흐름'과 '운영 철학'은 확연히 다릅니다. 이번 글에서는 일반적인 K8s 환경의 ArgoCD 기반 GitOps 흐름과 AWS EKS 환경의 CodeSeries 기반 Native 흐름을 비교하고, 각 방식의 핵심적인 차이를 살펴보겠습니다.
1. 일반적인 K8s + GitOps (ArgoCD) : "표준과 보안의 Pull 방식"
이 접근 방식의 핵심은 "클러스터 외부에서는 클러스터에 접근할 권한이 필요 없다"는 보안 원칙과 "Git이 유일한 진실 공급원(SSOT)"이라는 철학입니다.
- 핵심 흐름 (Pull): CI 파이프라인(Jenkins, Github Actions 등)은 컨테이너 이미지를 빌드하여 레지스트리에 푸시하고, 배포용 Git 저장소의 매니페스트 파일(Helm 등) 버전만 업데이트하고 종료됩니다. 실제 배포는 클러스터 내부에 설치된 ArgoCD 컨트롤러가 주기적으로 Git 저장소를 확인(Pull)하고 변경 사항을 감지했을 때 클러스터 상태를 동기화하며 이루어집니다.
- 장점: CI 서버가 클러스터 접근 키를 가질 필요가 없어 보안성이 매우 뛰어납니다. 또한, 플랫폼 중립적이므로 멀티 클라우드 환경에 유리합니다.
2. EKS Native CI/CD (CodeSeries) : "통합과 편의성의 Push 방식"
이 접근 방식의 핵심은 "AWS 관리형 서비스 간의 강력한 통합"과 "운영 오버헤드 감소"입니다.
- 핵심 흐름 (Push): AWS CodePipeline이 전체 오케스트레이션을 담당합니다. CodeBuild 단계에서 이미지를 빌드 및 ECR에 푸시한 후, CodeBuild가 직접 IAM 권한을 가지고 EKS 클러스터 API에 kubectl apply 등의 명령을 실행하여 배포를 밀어 넣습니다(Push).
- 장점: 별도의 GitOps 도구를 운영할 필요가 없어 관리가 간편합니다. 특히 AWS IAM 역할 기반 인증(IRSA)을 통해 CI/CD 파이프라인의 권한을 세밀하게 제어할 수 있습니다.

[시나리오 1] K8s + GitOps (Pull 방식)
- 코드 Push (1, 2): 개발자가 애플리케이션 코드를 Git에 푸시하면 CI 서버(Jenkins 등)가 이를 감지합니다.
- 이미지 빌드 및 설정 업데이트 (3, 4): CI 서버는 컨테이너 이미지를 빌드하여 ECR에 푸시하고(3), 배포 설정 파일이 있는 Git Config 저장소를 새 버전으로 업데이트합니다(4).
- 변경 감지 및 배포 (5, 6): 클러스터 내의 ArgoCD가 주기적으로 Git Config 저장소를 확인(Pull)하다가(5) 변경 사항을 발견하면 클러스터에 배포(Deploy) 명령을 내립니다(6).
- 이미지 Pull (7): 클러스터(Pod)는 ECR에서 새로운 컨테이너 이미지를 받아와(Pull image) 실행합니다(7).
[시나리오 2] EKS Native CI/CD (Push 방식)
- 파이프라인 트리거 (1, 2, 3): 개발자의 코드 Push로(1) AWS CodePipeline이 시작되고(2), CodeBuild 빌드 단계가 실행됩니다(3).
- 이미지 Build 및 Push (4): CodeBuild는 Docker 이미지를 빌드하여 ECR에 Push합니다(4).
- 배포 명령 Push (5): IAM 역할을 가진 CodeBuild가 Kubernetes API 서버에 직접 배포 명령(Deployment command)을 보냅니다(Push)(5).
- 배포 및 이미지 Pull (6, 7): API 서버가 배포를 지시하면(6), EKS 클러스터는 ECR에서 새 이미지를 받아와(Pull image) Pod를 생성합니다(7).
| 특징 | [시나리오 1] K8s + GitOps | [시나리오 2] EKS Native CI/CD |
| 주요 도구 | Jenkins/GitHub Actions + ArgoCD | CodePipeline + CodeBuild |
| 배포 방식 | Pull (당기기): ArgoCD가 내부에서 수행 | Push (밀기): CodeBuild가 외부에서 수행 |
| 보안 (자격증명) | CI 서버는 클러스터 접근 권한 없음 (안전) | CI 서버가 클러스터 접근 IAM 권한 보유 |
| 운영 포인트 | ArgoCD 운영 관리 필요, K8s 표준 준수 | AWS 서비스 종속, 관리형 서비스로 운영 부담 감소 |
| 적합한 환경 | 멀티 클라우드, 보안 규정이 매우 엄격한 환경 | AWS 단일 환경, 빠른 구축과 운영 편의성이 중요한 환경 |
댓글