CloudNet@ 팀의 AWS EKS Workshop Study 2기 - 7주차
# EKS Workshop 참고
✅ GitOps
GitOps는 소프트웨어 배포 및 인프라 관리 방법론 중 하나로, Git을 사용하여 애플리케이션 및 인프라의 상태를 관리하는 방식입니다. 이를 통해 개발자와 운영팀은 Git을 통해 애플리케이션 코드, 설정 및 인프라 구성을 추적하고 관리하여 일관된 상태로 유지할 수 있습니다.
Git을 사용하여 소프트웨어와 인프라에 대한 모든 정보를 저장하고 관리합니다. 애플리케이션의 상태를 설명하는 모든 것(코드, 설정, 인프라)은 Git 리포지토리에 커밋됩니다. 그런 다음 CI/CD 파이프라인과 GitOps 도구가 이 리포지토리를 모니터링하고 변경 사항을 감지하여 클러스터 또는 인프라에 적용합니다.
변경 사항이 발생할 때마다 인프라나 애플리케이션의 상태를 수동으로 조작하는 대신 GitOps 시스템이 이를 자동으로 처리한다
✅ Flux
Flux는 Kubernetes 클러스터의 애플리케이션 배포를 자동화하기 위한 도구입니다.
Flux는 GitOps 방식을 구현하는 데 사용되며, Git 리포지토리에 저장된 Kubernetes manifest 파일을 기반으로 클러스터를 관리합니다.
실습 환경에서 AWS CodeCommit 리포지토리가 생성되었지만 Cloud9에서 연결하기 전에 몇 가지 단계를 완료해야 합니다.
known hosts 파일에 CodeCommit용 SSH 키를 추가하여 나중에 경고를 방지할 수 있습니다:
그리고 Git이 커밋에 사용할 ID를 설정할 수 있습니다:
✅ 클러스터 부트스트랩
Flux의 "Cluster bootstrap"은 Flux를 처음부터 클러스터에 설치하고 구성하는 프로세스를 가리킵니다. 이 프로세스는 GitOps 워크플로를 구축하기 위한 첫 번째 단계이며, 클러스터에 Flux를 설치하고 초기 구성을 수행하여 GitOps 작업을 시작하는 것을 목표로 합니다.
부트스트랩 프로세스는 클러스터에 Flux 구성 요소를 설치하고 리포지토리 내에 관련 파일을 생성하여 Flux로 GitOps를 사용하여 클러스터 개체를 관리합니다.
Flux의 클러스터 부트스트래핑 프로세스
Flux 설치: 먼저 클러스터에 Flux를 설치합니다. 이를 위해 Flux의 컴포넌트를 클러스터에 배포하고 시작해야 합니다. 대개는 Helm을 사용하여 Flux Helm 차트를 이용하여 이를 수행합니다.
Flux 구성: Flux는 클러스터와 Git 리포지토리 간의 연결을 설정해야 합니다. 이 과정에서 Flux에게 어떤 Git 리포지토리를 사용할지, 어떤 경로에 있는 Kubernetes manifest 파일을 사용할지 등을 지정합니다.
SSH 키 등록: Flux는 Git 리포지토리에 액세스하기 위해 SSH 키를 사용할 수 있습니다. 따라서 Flux가 Git 리포지토리에 액세스할 수 있도록 SSH 키를 등록해야 합니다.
GitOps 워크플로 구성: 클러스터 부트스트래핑 과정에서는 GitOps 워크플로를 설정합니다. 이는 Git 리포지토리의 변경 사항이 자동으로 클러스터에 반영되도록 하는데 필요한 모든 구성과 프로세스를 설정하는 것을 의미합니다.
클러스터를 부트스트랩하기 전에 Flux는 모든 것이 올바르게 설정되었는지 확인하기 위해 사전 부트스트랩 검사를 실행할 수 있습니다. 다음 명령을 실행하여 Flux CLI에서 검사를 수행하세요:
이제 CodeCommit 리포지토리를 사용하여 EKS 클러스터에서 Flux를 부트스트랩해 보겠습니다:
먼저 Flux에 상태를 저장하는 데 사용할 Git 리포지토리를 알려줍니다.
그 후, 동일한 Git 저장소에 여러 개의 브랜치가 있는 패턴이 있으므로 이 Flux 인스턴스가 사용할 Git 브랜치를 전달합니다.
마지막으로 Flux용 SSH를 사용하여 /home/ec2-user/gitops_ssh.pem 에서 SSH 키를 사용하여 연결하고 인증합니다.
다음 명령을 실행하여 부트스트랩 프로세스가 성공적으로 완료되었는지 확인해 보겠습니다:
Flux가 기본 사용자 정의가 생성되었으며 클러스터와 동기화되어 있음을 보여줍니다.
NAME: Kustomization의 이름을 나타냅니다. Kustomization은 Kubernetes 애플리케이션을 정의하는 Kustomize의 구성 파일입니다. 여기서는 "flux-system"이라는 Kustomization이 보입니다.
REVISION: Kustomization이 적용된 Git 리포지토리의 리비전을 나타냅니다. 여기서는 "main@sha1:dba4fa68"로 표시되는데, 이는 Git 리포지토리의 "main" 브랜치에서 해당 리비전(해시 값이 "dba4fa68"인)을 가리킵니다.
SUSPENDED: Kustomization이 일시 중단되었는지 여부를 나타냅니다. "False"는 일시 중단되지 않았음을 나타내며, "True"는 일시 중단되었음을 나타냅니다.
READY: Kustomization이 현재 준비된 상태인지 여부를 나타냅니다. "True"는 준비된 상태를 의미하며, "False"는 준비되지 않은 상태를 의미합니다.
MESSAGE: Kustomization의 상태 메시지를 나타냅니다. 여기서는 "Applied revision: main@sha1:dba4fa68"로 표시되는데, 이는 해당 리비전이 성공적으로 적용되었음을 나타냅니다.
✅ 애플리케이션 배포
클러스터에서 Flux를 성공적으로 부트스트랩했으므로 이제 애플리케이션을 배포할 수 있습니다. 애플리케이션의 GitOps 기반 배포와 다른 방법의 차이점을 보여주기 위해, 현재 kubectl apply -k 접근 방식을 사용하고 있는 샘플 애플리케이션의 UI 구성 요소를 새로운 Flux 배포 방식으로 마이그레이션해 보겠습니다.
먼저 기존 UI 컴포넌트를 제거하여 이를 대체할 수 있도록 하겠습니다:
다음으로, 이전 섹션에서 Flux를 부트스트랩하는 데 사용한 리포지토리를 복제합니다:
이제 복제된 리포지토리로 이동하여 GitOps 구성 만들기를 시작하겠습니다. UI 서비스에 대한 기존 kustomize 구성을 복사합니다: