전공영역 공부 기록

Argocd가 겪는 문제: 닭이 먼저냐, 닭걀이 먼저냐

악분 2023. 10. 29. 18:40
반응형

음... 스크린샷 화질을 높이는 방법을 생각 중입니다.

 

1. 닭이 먼저냐, 달걀이 먼저냐 문제란?

gitops 닭이 먼저냐 달걀이 먼저냐(chicken and eggs)용어는 gitops방법론을 사용할 때 겪는 어려움을 말합니다. 이 어려움은 gitops에서 관리 주체를 어떻게 관리할 것인가에 대한 어려움입니다. Argocd에서는 "Argocd appliation을 어떻게 관리할 것인가"에 대한 고민이 있습니다.

Argocd는 git에 있는 내용을 쿠버네티스에 반영하기 위해 Argocd application이 필요합니다. 문제는 git 저장소에 코드를 푸시해도 Argocd application이 자동으로 생성되지 않습니다. 따라서 사용자가 수동으로 Argocd application을 만들어야 하며, 필요한 경우 수동으로 수정하거나 삭제해야 합니다.

 

 

Argocd application이 동작하기 위해 Argod application이 필요한 상황이 닭이 먼저냐 달걀이 먼저냐 상황과 비슷합니다.

 

2. 저의 해결방법: 디렉터리 구조 설계

저는 Argo application이 git에 push되면 자동으로 생성되도록 디렉터리 구조를 설계했습니다.

 

디렉터리는 1레벨, 2레벨로 분류합니다. 1레벨은 2레벨 Argocd application을 관리하기 위한 Argocd application입니다. 즉, 1레벨, 2레벨 디렉터리 구조는 App of Apps패턴을 갖습니다.

 

2.1 2단계 디렉터리 배포 방법

사용자는 2레벨 디렉터리에 Argocd application(yaml 파일)을 생성하고 git에 push하면, 1레벨 Argocd appliation이 자동으로 Argocd application을 생성합니다. 수정, 삭제도 같은 흐름입니다.

 

2.2 1단계 디렉터리 배포 방법

1레벨 디렉터리는 2단계 디렉터리와 다르게 수동으로 한번 생성해야 합니다. 1단계 디렉터리는 최상단 디렉터리이므로 관리주체가 없기 때문입니다.

 

argocd CLI, kubectl를 이용하여 수동으로 Argocd application을 생성할 수 있습니다. 하지만, 휴먼실수가 발생할 수 있어 다른 클러스터에 Argocd application을 잘못 배포할 가능성이 있습니다. 그래서 휴먼실수를 최소화하기 위해 외부 도구 도움을 받아야 한다고 생각했습니다. jenkins, github action workflow 등이 있습니다.

 

3. 1단계 디렉터리 배포방법 다른 사례

3.1 self-managed Argo application

Argocd는 자신을 관리하는 self managed Argo application패턴이 있습니다. self-managed에 1레벨 Argocd app을 추가하는 방법이 있습니다. 하지만, 이 방법은 Argocd 자신을 관리하는 목적에 어긋나서 채택하지 않았습니다.

 

3.2 FluxCD, Argocd autopilot

FluxCD, Argocd autopilot는 1단계 디렉터리 배포를 하는 CLI도구를 개발했습니다. 외부 도구를 사용하는 것이 아닌 직접 도구를 개발한 사례입니다.

 

4. 고려해야할 문제

1레벨 Argo application은 삭제되지 못하도록 정책이 필요합니다. 또는 삭제되더라도 복구 프로세스를 만들어야 합니다.

 

1레벨 Argocd application에 cascade(finalizer)정책이 설정되어 있으면 2레벨 Argocd appliation이 삭제됩니다. 그리고 2레벨 Argocd application에도 cascade가 설정되어 있으면 쿠버네티스 리소스가 삭제됩니다. 즉 장애상황이 발생합니다.

 

5. 마치며

다음 글에서는 생각한 디렉터리 구조를 어떻게 구현했는지 설명할 예정입니다.

반응형