Sync Setting
Refresh Period
argocd는 default 설정으로 3분(180초)마다 git과 현재상태를 비교합니다. 이 주기를 Period 시간(time)이라고 합니다.
3분마다 차이를 비교하는 것은 운영단계에서 매우 중요합니다. git의 업데이트 내용이 바로 반영이 안되는 상황이 발생합니다. 최악은 3분을 대기해야 합니다.
period 시간 수정
helm으로는 values.yaml을 오버라이딩해서 수정할 수 있고 yaml파일로 배포했다면 Argo Controller deployment(또는 statefulset) command을 수정해야 합니다.
수동 Refresh
3분 주기를 기다리지 않고 사용자가 수동으로 Refresh하는 방법이 존재합니다. git에 업데이된 내용을 바로 쿠버네티스 클러스터에 적용하고 싶을 떄 사용합니다.
refresh는 일반 refresh와 hard refresh가 있습니다. hard refresh는 캐시를 무효화시키고 refresh를 수행합니다. 아마도 argocd controller가 내부적으로 캐시 매커니즘을 사용하는 것 같아요.
Sync와 Sync Policy
Sync
Sync는 git에 있는 의도된 상태를 쿠버네티스 클러스터에 배포하는 작업으로 동기화라고 불립니다. sync의 조건은 git과 쿠버네티스 현재 상태와 차이가 있어야 합니다.
Sync Policy
Sync Policy는 Auto sync와 Manual sync가 있습니다. 차이점은 누가 sync을 수행하는가 입니다.
git과 쿠버네티스 현재 상태를 비교해서 차이가 있다면, Auto Sync는 argocd가 자동으로 sync 수행합니다. manual로 되어 있으면 사용자가 수동으로 sync를 해줘야 합니다.
Sync Status
Sync Status git과 쿠버네티스 현재 상태를 비교한 결과를 보여줍니다. 디폴트로 3분마다 또는 사용자가 Refresh을 수행하면 Sync Status가 업데이트 됩니다.
상태(status)는 Synced, Out Of Sync 2종류가 있습니다. git과 클러스터 현재 상태가 같으면 Synced, 다르면 Out Of Sync입니다.
Health Status
Health Status는 2가지 의미가 있습니다.
•
git의 의도된 상태가 이상없이 클러스터에 동기화 되었을 때, 쿠버네티스 리소스가 이상없는지 쿠버네티스 상태를 보여줍니다. 예를 들어 pod가 생성되었는데 Crash가 발생하면 Argo CD는 상태가 이상하다고 표시해줍니다.
•
sync status의 상세정보를 보여줍니다.
Healthy
동기화 한 쿠버네티스 리소스가 이상없는 상태입니다.
Missing
Sync Status가 OutOfSync일 때, 어떤 리소스가 git과 클러스터 상태가 불일치 한지 보여줍니다. 예를 들어 service가 불일치하여 service에만 불일치 아이콘이 보입니다.
Progressing
Sync작업(git의 의도된 상태를 클러스터로 동기화)이 수행 중이면 Progressing으로 표시됩니다.
Degraded
Degraded는 Sync작업을 실패했다는 의미입니다. 쿠버네티스 설정 문제(예: serviceaccount 권한 없음, 노드에 스케쥴링 불가 등) 또는 네트워크 등 인프라 문제 등 때문에 동기화를 실패할 수 있습니다. 운영단계에서 가장 주목받는 Health Status입니다.
Suspended
sync작업이 일시중지된 상태입니다. 다른 작업이 끝나야 수행되거나 외부 이벤트가 필요한 경우 suspended상태로 됩니다.
Prune
prune은 동기화된 리소스 삭제옵션입니다. argocd로 쿠버네티스 리소스를 동기화하고 git에서 리소스를 삭제할 때, 해당 리소스를 쿠버네티스에서 삭제할지 유지할지 결정하는 옵션입니다.
prune이 비활성화되어 있으면 argocd로 동기화한 쿠버네티스 리소스는, git에 리소스가 삭제되더라도 쿠버네티스에 삭제되지 않고 유지됩니다. 반대로 prune이 활성화되면 git에 삭제되면 쿠버네티스 리소스도 삭제됩니다.
prune옵션은 default로 비활성화 되어 있습니다. applicatino생성 때 Prune체크박스를 선택해야 활성화 됩니다.
Sync Policy가 Auto이면 [Prune Resources]로 설정할 수 있습니다.
Prune이 비활성화 되어 있으면 리소스는 삭제되지 않지만 X표시 아이콘이 보입니다.
prune이 비활성화 되어 있으면 OutOfSync Health Status상태가 늘어납니다. git에 삭제되었지만 쿠버네티스 클러스터에는 있기 때문이죠.
Directory Recurse
argocd는 path로 선택한 리소스 파일만 배포합니다. 지정한 경로에 폴더가 있다면, 폴더의 리소스는 배포되지 않습니다.
폴더를 포함한 모든 리소스를 배포하고 싶다면 [DIRECTORY RECURSE] 옵션을 선택해야 합니다.
Self healing
sync policy가 auto로 설정된 경우 선택할 수 있는 옵션입니다. argocd로 동기화된 리소스를 항상 git에 있는 의도된 상태로 보장해주는 기능입니다.
Ignore Difference
Ignore Difference는 특정 필드나 리소스를 비교대상에 제외시키는 기능입니다. 에를 들어 replica를 git에 수정해도 argocd에서 replica수정을 무시하게 합니다.
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: external-secrets-operator
...
spec:
project: default
source:
...
destination:
...
syncPolicy:
...
ignoreDifferences: <--
...
YAML
복사
Non Cascade
ArgoCD Application을 삭제할 때, 쿠버네티스 리소스는 그대로 두고 Application만 삭제하는 옵션입니다. 디폴트는 ArgoCD Application을 삭제하면 Application에 연결된 쿠버네티스 리소스 전부 삭제됩니다.
기존 리소스 연결
ArgoCD Application을 생성 또는 Sync할 때, 이미 쿠버네티스 리소스가 존재하면 어떻게 될까요? 정답은 기존 리소스가 ArgoCD에 연결됩니다.
ArgoCD에서 pod를 관리하기 위해 라벨을 추가합니다. pod를 선택하고 Diff로 리소스를 비교하면 ArgoCD가 라벨을 추가하려는 것을 알 수 있습니다.
•
주의사항
ArgoCD Application을 삭제하면 어떻게 될까요? pod는 ArgoCD로 생성하지 않았습니다. 하지만, Application 관리범위에 있으므로, Application삭제 시 같이 삭제됩니다.
Helm Chart
Argo cd에서 helm차트 release 방법은 2가지 입니다. helm release설정은 Argo cd application생성 과정 중 source에서 설정합니다.
Argo cd에서 helm차트를 사용하는 방법은 2가지 입니다.
•
helm 차트 저장소 주소를 지정
•
git주소 지정
helm 차트 저장소 주소 지정
helm차트 저장소를 선택하려면 source타입을 “HELM”을 선택하면 됩니다. 그리고 helm차트 주소를 지정하면 helm차트 목록과 helm차트 버전이 자동으로 출력됩니다.
git 주소 지정
두 번째 방법은 git에 있는 helm차트 경로를 직접 지정하는 방법입니다. “GIT’타입을 선택 한 후 git 주소 helm차트 경로를 지정하면 됩니다.
helm values override
Argo cd에서도 helm차트 values를 override할 수 있습니다. source에서 helm차트를 지정하고 스크롤을 아래로 내리면 helm values를 설정하는 화면이 나옵니다.
또는 필드 1개씩 입력하여 helm values를 override할 수 있습니다.
Helm 차트 release 원리
Argo cd는 helm install명령어로 차트를 release하지 않습니다. helm template으로 차트를 렌더링하고 deploy합니다. 아래 명령어와 동작이 비슷합니다. 그래서 helm ls 명령어로 helm release, helm rollback 등 helm 관리 명령어를 적용할 수 없습니다.
helm template | kubectl apply -f
Shell
복사
kustomize
Argo CD는 kustomize 설정 파일이 있으면 kustomize build를 실행합니다. 그리고 이 결과를 쿠버네티스에에 배포합니다. 정리하면 Argo CD가 kustomize를 실행하는 방법은 아래 명령어와 비슷합니다.
kustomize build | kubectl apply -f
Shell
복사
플러그인 사용 제약
kustomize의 기본 기능 이외에 플러그인을 사용하는 경우, 정상적으로 동작하지 않을 수 있습니다.
플러그인이 올바르게 작동하려면 공식 문서를 참고하여 kustomize build 옵션을 수정해야 합니다. kustomize build 옵션은 argocd-cm configmap에서 설정할 수 있습니다. 아래 예제는 helm 플러그인을 사용하기 위해 --enable-helm 인자를 build 옵션에 추가한 것입니다.
apiVersion: v1
kind: ConfigMap
metadata:
name: argocd-cm
namespace: argocd
data:
kustomize.buildOptions: --enable-helm
YAML
복사
configmap을 수정한 경우 argo-server pod를 재부팅해야 합니다.




















