Study_note
[CI/CD] ArgoCD sync 설정 본문
[More]버튼을 클릭하면 각 sync 상태의 상세정보를 볼 수 있습니다.
sync status를 설명했으니 다음으로는 health status를 설명해본다.
health status
상태들은 다음과 같이 Health, Missing, Progressing, Degraded, Suspended로 총 5가지 상태가 있으며 각각 상태의 의미는 아래와 같다
Healthy
git과 동기화 한 쿠버네티스의 리소스가 문제가 없다면 Healthy
Missing
Sync Status가 OutOfSync일 때, git과 쿠버네티스의 특정 리소스가 맞지 않을때 나오는 상태로 맞지 않는 특정 리소스를 찾아준다 (diff 설정이 있어 틀린 부분을 찾아주는거 같지만 필자 생각은 썩 유용한거 같지는 않다)
Progressing
동기화 작업(sync)이 진행 중이면 Progressing으로 표시되면 Sync작업을 실패 한다면 Degraded, Suspended 성공한다면 Health로 변한다.
Degraded
동기화 작업 중 에러나 문제가 발생하여 동기화를 실패할 때 나오는 상태이다.
생성되지 않는 파드를 describe 명령어로 찾아보니 노드의 파드들이 많아 할당이 안되었던것을 확인 할 수 있다.
그렇기 떄문에 health status가 Degraded로 동기화 실패를 보여준다.
Suspended
동기화 작업이 일시 중지 된 상태로 다른 작업이 끝나야 수행되거나 외부 이벤트가 필요한 경우 suspended상태로 변경된다
application에서 app details를 선택 시 sync policy를 설정 가능하다(automated가 manual 시 prune, self heal 선택 불가능)
automated 및 prune, self heal 설정 할 수 있는데 아래와 같다
automated : Auto sync와 Manual sync로 선택할 수 있는 설정
prune
동기화 된 상태에서 git에서 리소스 파일 삭제 또는 변경하고 쿠버네티스에서 삭제할지 유지할지 결정하는 옵션이다.
예를들어 Auto sync상태에서 deployment파일을 깃에서 지웠을때 확인하면 다음과 같다.
아래처럼 health status는 계속 healthy로 application에 문제는 없고 sync status는 out of sync로 동기화에 문제가 있다라는 상태로 변환된다
또한 아래 삭제한 디플로이먼트는 x로 변환된것을 확인 가능하다
git에서 삭제한 디플로이먼트를 클러스터에서 확인하면 다음과 같이 지속적으로 운영되는것을 확인 할 수 있다.
self heal
반대로 self heal은 git이 아닌 쿠버네티스에서 리소스를 변경 해도 결과 값은 git에 있는 파일로 유지되는것이다.
edit 명령어로 replica 수를 3에서 1로 줄였지만 edit 명령어로 1로 줄어들었다가 바로 git 파일에 명시되어있는 replica가 3으로 변환된다.
그 외 동기화 설정 2가지를 더 설명하면 아래와 같다
Ignore Difference
특정 리소스를 sync 대상에서 제외시키는 기능으로 만약 hpa를 통해 파드가 증가할때 git에 따라 자동 동기화 되기 때문에 파드는 지속적으로 증가하지 못하는데 이러한 상황에서 Ignore Difference를 사용한다
현재 WEB UI에서는 제공하지 않으며 생성한 applicationd의 CRD 또는 argocd configmap에서 설정할 수 있다.
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: external-secrets-operator
...
spec:
project: default
source:
...
destination:
...
syncPolicy:
...
ignoreDifferences: # 해당부분에 명시
...
Non Cascade
보통 application을 삭제할 시 쿠버네티스 모든 리소스는 삭제 되어진다 하지만 Non Cascade 설정하면
생성했던 application을 삭제할 때, 쿠버네티스 리소스는 그대로 두고 application만 삭제되어진다.
위에 사진처럼 쿠버네티스 리소스들은 삭제 안되고 남아있는것을 확인 가능
마지막으로 sync과정 순서라 불리는 phase를 설명한다
phase
sync과정은 총 3단계(pre sync, sync, post sync)로 나눌 수 있으며 pre-sync와 post sync는 annotations필드의 argocd hook필드를 사용하여 설정할 수 있다.
argocd github에서 phase예제로 argocd application을 생성할 수 있는데 다음과 같다
git repo https://github.com/argoproj/argocd-example-apps
branch: master
path: pre-post-sync
로 application을 생성하면 되고 pre-post-sync의 야믈 파일은 아래와 같고 kustomization이 포함되어 다른 deployment와 service 파일을 base로 두어졌다
apiVersion: batch/v1
kind: Job
metadata:
name: after
annotations:
argocd.argoproj.io/hook: PostSync # postsync 지정
argocd.argoproj.io/hook-delete-policy: HookSucceeded # 삭제정책
spec:
template:
spec:
containers:
- name: sleep
image: alpine:latest
command: ["sleep", "10"]
restartPolicy: Never
backoffLimit: 0
---
apiVersion: batch/v1
kind: Job
metadata:
name: before
annotations:
argocd.argoproj.io/hook: PreSync # presync 지정
argocd.argoproj.io/hook-delete-policy: HookSucceeded # 삭제정책
spec:
template:
spec:
containers:
- name: sleep
image: alpine:latest
command: ["sleep", "10"]
restartPolicy: Never
backoffLimit: 0
그대로 application을 생성하면 아래 그림 처럼 잘 동기화 된것을 확인 가능하다
여기서 job은 삭제정책을 설정하여 argocd에서는 보이지 않지만 sync status를 클릭하면 아래처럼 pre sync, post sync가 생성된것을 확인 가능 하면 제일 아래 그림 처럼 생성된것을 확인 가능하다.
이런 phase는 보통 slack 같이 알림 기능을 argocd와 연동하고 싶을 때 특정 업데이트 전 알림을 받을 때 등 사용한다.
참조
https://argo-cd.readthedocs.io/en/stable/user-guide/resource_hooks/
https://sungwook-choi.gitbook.io/argocd/sync-lifecycle/phases
'CICD' 카테고리의 다른 글
[CICD] Kustomzie (0) | 2022.12.14 |
---|---|
[CI/CD] ArgoCD 사용하여 간단한 POD 배포 (1) | 2022.11.24 |