Ssoon

AWS EKS - GitOps - Argo CD 본문

AWS EKS Workshop Study 2기

AWS EKS - GitOps - Argo CD

구구달스 2024. 4. 19. 14:19
CloudNet@ 팀의 AWS EKS Workshop Study 2기 - 7주차
# EKS Workshop 참고

Argo CD

  • Argo CD는 Kubernetes를 위한 선언적 GitOps 지속적 배포 도구입니다. 
  • Kubernetes 클러스터의 Argo CD 컨트롤러는 클러스터의 상태를 지속적으로 모니터링하고 이를 Git에 정의된 원하는 상태와 비교합니다. 
  • 클러스터 상태가 원하는 상태와 일치하지 않는 경우, Argo CD는 편차를 보고하고 시각화를 제공하여 개발자가 클러스터 상태를 원하는 상태로 수동 또는 자동으로 동기화할 수 있도록 도와줍니다.
  • Argo CD는 애플리케이션 상태를 관리하는 3가지 방법을 제공합니다:
    • CLI - 애플리케이션에 대한 YAML 리소스 정의를 생성하고 이를 클러스터와 동기화할 수 있는 강력한 CLI입니다.
    • 사용자 인터페이스 - CLI에서 할 수 있는 것과 동일한 작업을 수행할 수 있는 웹 기반 UI입니다. 또한 사용자가 생성한 Argo CD 애플리케이션에 속하는 Kubernetes 리소스를 시각화할 수 있습니다.
    • 클러스터에 적용된 쿠버네티스 매니페스트 및 헬름 차트.

 실습준비

더보기
  • AWS CodeCommit 리포지토리 만들기
  • Amazon EKS 클러스터에 ArgoCD 설치

AWS 코드 커밋에 액세스

  • 실습 환경에서 AWS CodeCommit 리포지토리가 생성되었지만 Cloud9에서 연결하기 전에 몇 가지 단계를 완료해야 합니다.
  • 알려진 호스트 파일에 CodeCommit용 SSH 키를 추가하여 나중에 경고를 방지할 수 있습니다:

  • 그리고 Git이 커밋에 사용할 ID를 설정할 수 있습니다:

 


Argo CD에 액세스하기

  • 이 실습에서는 로드 밸런서 타입의 Kubernetes 서비스를 사용하여 Argo CD 서버 UI를 클러스터 외부에 노출했습니다.
  • Argo CD 서비스에서 URL을 가져오려면 다음 명령을 실행하세요:

 

  • 초기 사용자 아이디는 admin입니다. 비밀번호는 자동으로 생성됩니다. 다음 명령을 실행하여 비밀번호를 얻을 수 있습니다:

  • 방금 얻은 URL과 자격 증명을 사용하여 Argo CD UI에 로그인합니다.

 

  • 또한 Argo CD는 애플리케이션을 관리하는 데 사용할 수 있는 강력한 CLI 도구인 argocd를 제공합니다.
  • CLI를 사용하여 Argo CD 오브젝트와 상호 작용하려면 다음 명령을 실행하여 Argo CD 서버에 로그인해야 합니다:

 


초기 설정

  • Argo CD는 Kubernetes에 GitOps 방법론을 적용합니다. 
  • 클러스터의 원하는 상태에 대한 신뢰할 수 있는 소스로 Git을 사용합니다. 
  • Argo CD를 사용하여 애플리케이션을 배포하고, 상태를 모니터링하고, 원하는 상태와 동기화할 수 있습니다. 
  • Kubernetes 매니페스트는 여러 가지 방법으로 지정할 수 있습니다:
    • Kustomize applications
    • Helm charts
    • Jsonnet files
    • Plain directories of Kubernetes YAML files
  • 이 실습에서는 Argo CD를 사용하여 Kustomize에 지정된 애플리케이션을 배포합니다. 
  • EKS Workshop 리포지토리의 UI 애플리케이션을 사용합니다.
  • AWS CodeCommit의 Git 리포지토리는 이미 생성되어 있습니다.
  • Git 리포지토리를 복제해 보겠습니다.

  • Argo CD에서 Git 리포지토리에 대한 액세스 권한을 부여하려면 Argo CD 시크릿을 만드세요:

  • Argo CD 애플리케이션은 환경에 배포된 애플리케이션 인스턴스를 나타내는 CRD Kubernetes 리소스 오브젝트입니다.
  • 애플리케이션 이름, Git 리포지토리, Kubernetes 매니페스트 경로 등 애플리케이션에 대한 주요 정보를 정의합니다.
  • 애플리케이션 리소스는 또한 대상 리비전, 동기화 정책 및 상태 확인 정책과 같은 애플리케이션의 원하는 상태를 정의합니다.
  • 다음 단계로 Git 리포지토리에서 원하는 상태와 동기화되는 Argo CD 애플리케이션을 만들어 보겠습니다:

  • 애플리케이션이 생성되었는지 확인합니다:

  • 이제 ArgoCD UI에서도 이 애플리케이션을 확인할 수 있습니다:

  • 또는 kubectl 명령을 사용하여 클러스터의 Argo CD 오브젝트와 상호 작용할 수도 있습니다:


애플리케이션 배포

  • 클러스터에서 Argo CD를 성공적으로 구성했으므로 이제 애플리케이션을 배포할 수 있습니다. 
  • 애플리케이션의 GitOps 기반 배포와 다른 방법의 차이점을 보여주기 위해, 현재 kubectl apply -k 방식을 사용하고 있는 샘플 애플리케이션의 UI 구성 요소를 새로운 Argo CD 배포 방식으로 마이그레이션해 보겠습니다.
  • 먼저 기존 UI 구성 요소를 제거하여 이를 대체할 수 있도록 하겠습니다:

 

  • 이제 복제된 Git 리포지토리로 이동하여 GitOps 구성 만들기를 시작하겠습니다. 
  • UI 서비스에 대한 기존 kustomize 구성을 복사합니다:
  • "eks-workshop/base-application/ui/" 디렉토리의 모든 파일과 하위 디렉토리를 "argocd/apps" 디렉토리로 복사합니다.

 

  • 이제 Git 디렉터리가 다음과 같이 표시되며  tree ~/environment/argocd 를 실행하여 유효성을 검사할 수 있습니다:

 

  • Argo CD UI를 열고 앱 애플리케이션으로 이동합니다.

  • 마지막으로 설정을 Git 리포지토리에 푸시할 수 있습니다:

  • ArgoCD UI에서 새로고침 및 동기화를 클릭하거나 argocd CLI를 사용하여 애플리케이션을 동기화합니다:

  • 잠시 후 애플리케이션이 동기화 상태가 되고 리소스가 배포되면 UI는 다음과 같이 표시되어야 합니다:

  • 이는 Argo CD가 기본 커스터마이징을 생성했으며 클러스터와 동기화되었음을 보여줍니다.
  • 이제 Argo CD를 사용하여 배포할 UI 구성 요소를 성공적으로 마이그레이션했으며, Git 리포지토리에 푸시된 모든 추가 변경 사항은 자동으로 EKS 클러스터에 조정됩니다.
  • 이제 UI 서비스와 관련된 모든 리소스가 배포되었을 것입니다. 확인하려면 다음 명령을 실행하세요:


애플리케이션 업데이트하기

  • 이제 Argo CD와 Kustomize를 사용하여 GitOps를 사용하여 애플리케이션 매니페스트에 패치를 배포할 수 있습니다.
  • 예를 들어, UI 배포를 위한 복제본 수를 3개로 늘린다고 가정해 보겠습니다.
  • 명령을 실행하여 app/deployment.yaml 파일에 필요한 변경 사항을 추가할 수 있습니다:

  • Git 리포지토리에 변경 사항 푸시하기

  • ArgoCD UI에서 새로고침 및 동기화를 클릭하거나 argocd CLI를 사용하여 애플리케이션을 동기화합니다:

  • 이제 UI 배포에 3개의 파드가 있어야 합니다.

  • 확인하려면 다음 명령을 실행합니다:

 


앱의 앱

  • Argo CD는 애플리케이션 및 환경별 사용자 정의에 대한 기본 Kubernetes 매니페스트를 사용하여 애플리케이션 세트를 다양한 환경(개발, 테스트, 프로덕션...)에 배포할 수 있습니다.
  • 이 사용 사례를 구현하기 위해 Argo CD App of Apps 패턴을 활용할 수 있습니다. 이 패턴을 사용하면 다른 애플리케이션으로 구성된 하나의 Argo CD 애플리케이션을 지정할 수 있습니다.
  • EKS Workshop Git 리포지토리 Kubernetes 리소스에 대한 기본 매니페스트가 있는 Git 리포지토리로 참조합니다. 이 리포지토리에는 각 애플리케이션에 대한 초기 리소스 상태가 포함됩니다.
  • 이 예는 헬름을 사용하여 특정 환경(예: DEV)에 대한 구성을 만드는 방법을 보여준다. Git 리포지토리의 일반적인 레이아웃은 다음과 같다:
  • Argo CD 애플리케이션 설정을 시작하기 전에 ui용으로 생성한 Argo CD 애플리케이션을 삭제해 보겠습니다:

💠 설정

  • 헬름 차트에서 DRY 접근 방식을 사용하여 ArgoCD 애플리케이션 세트에 대한 템플릿을 생성합니다:
  • Chart.yaml 은 보일러 플레이트입니다. 템플릿에는 values.yaml에 정의된 애플리케이션을 만드는 데 사용되는 템플릿 파일이 포함되어 있습니다.
  • values.yaml 에는 특정 환경과 관련된 값도 포함되어 있으며 모든 애플리케이션 템플릿에 적용됩니다.
  • ~/environment/eks-workshop/modules/automation/gitops/argocd/app-of-apps/values.yaml

  • 먼저 위에서 설명한 앱의 앱 구성을 Git 저장소 디렉토리에 복사합니다:

  • 그런 다음 변경 사항을 Git 리포지토리에 푸시합니다:

  • 마지막으로 앱 오브 앱 패턴을 지원하기 위해 새 Argo CD 애플리케이션을 생성해야 합니다. 
  • 경로 app-of-apps를 사용하여 Argo CD Application의 새 경로를 정의합니다.
  • 또한 --sync-policy automated 를 사용하여 ArgoCD 애플리케이션이 클러스터의 상태를 Git 저장소의 구성과 자동으로 동기화하도록 설정합니다.

  • 기본 새로 고침 간격은 3분(180초)입니다. 
  • argocd-cm 구성 맵에서 timeout.reconciliation 값을 업데이트하여 간격을 변경할 수 있습니다. 
  • 간격을 0으로 설정하면 Argo CD는 Git 리포지토리를 자동으로 폴링하지 않으며 웹훅 및/또는 수동 동기화와 같은 대체 방법을 사용해야 합니다.
  • 새로 고침 간격을 5초로 설정하고 ArgoCD 애플리케이션 컨트롤러를 다시 시작하여 변경 사항을 더 빠르게 배포해 보겠습니다:

  • Argo CD UI를 열고 앱 애플리케이션으로 이동합니다.

  • ArgoCD UI에서 새로 고침 및 동기화를 클릭하고, argocd CLI를 사용하여 애플리케이션을 동기화하거나 자동 동기화가 완료될 때까지 기다립니다:

  • Argo CD App of Apps 애플리케이션이 배포 및 동기화되었습니다.
  • 아직 구성을 배포하지 않았기 때문에 Argo CD App of Apps 애플리케이션을 제외한 애플리케이션은 알 수 없음 상태입니다.

💠 애플리케이션 배포

  • Argo CD App of Apps를 성공적으로 구성했으므로 이제 애플리케이션 세트에 대한 환경별 사용자 지정을 배포할 수 있습니다.
  • 먼저 기존 애플리케이션을 제거하여 교체할 수 있도록 하겠습니다:

  • 그런 다음 각 애플리케이션에 대한 사용자 지정을 만들어야 합니다

  • ~/environment/eks-workshop/modules/automation/gitops/argocd/apps-kustomization/ui/kustomization.yaml

  • 리소스를 사용하여 애플리케이션(이 경우 ui)에 대한 기본 Kubernetes 매니페스트의 경로를 정의합니다. 
  • 또한 패치를 사용하여 EKS 클러스터의 ui 애플리케이션에 적용해야 할 구성을 정의합니다.
  • ~/environment/eks-workshop/modules/automation/gitops/argocd/apps-kustomization/ui/deployment-patch.yaml

  • UI 애플리케이션에 대해 하나의 복제본을 갖고 싶습니다. 
  • 다른 모든 애플리케이션은 기본 쿠버네티스 매니페스트의 구성을 사용합니다.

  • 이제 최종 Git 디렉터리는 다음과 같아야 합니다. 

  • Git 리포지토리에 변경 사항을 푸시합니다:

  • ArgoCD UI에서 새로 고침 및 동기화를 클릭하고, argocd CLI를 사용하여 애플리케이션을 동기화하거나 자동 동기화가 완료될 때까지 기다립니다:

  • 이제 모든 애플리케이션을 Argo CD를 사용하여 배포하도록 성공적으로 마이그레이션했으며, Git 리포지토리에 푸시된 모든 추가 변경 사항은 자동으로 EKS 클러스터로 조정됩니다.
  • Argo CD가 동기화를 완료하면 모든 애플리케이션이 동기화 상태가 됩니다.

  • 또한 UI 애플리케이션과 관련된 모든 리소스가 배포되어 있어야 합니다. 확인하려면 다음 명령을 실행합니다:

💠 애플리케이션 업데이트

  • 이제 Argo CD와 Kustomize를 사용하여 GitOps를 사용하여 애플리케이션 매니페스트에 패치를 배포할 수 있습니다. 예를 들어 UI 배포를 위한 복제본 수를 3개로 늘린다고 가정해 보겠습니다.
  • 명령을 실행하여 app-kustomization/ui/deployment-patch.yaml 파일에 필요한 변경 사항을 추가할 수 있습니다:

  • apps-kustomization/ui/deployment-patch.yaml 파일에서 계획된 변경 사항을 검토할 수 있습니다.
  • ~/environment/eks-workshop/modules/automation/gitops/argocd/update-application/deployment-patch.yaml

  • Git 리포지토리에 변경 사항을 푸시합니다:

  • ArgoCD UI에서 새로 고침 및 동기화를 클릭하고, argocd CLI를 사용하여 애플리케이션을 동기화하거나 자동 동기화가 완료될 때까지 기다립니다:

  • 확인하려면 다음 명령을 실행합니다:

'AWS EKS Workshop Study 2기' 카테고리의 다른 글

AWS EKS - Terraform - 2  (0) 2024.04.26
AWS EKS - Terraform - 1  (0) 2024.04.26
AWS EKS - GitOps - Flux  (1) 2024.04.19
AWS EKS - Security - Pod Security Standards  (1) 2024.04.12
AWS EKS - Security - Amazon GuardDuty for EKS  (0) 2024.04.12
Comments