반응형
ArgoCD의 sync police를 automatic으로 설정시 선택 가능한 PRUNE RESOURCE와 SELF HEAL 옵션에 대하여 테스트한 내용을 정리한다.
1. PRUNE
- PRUNE : Resource를 업데이트 할 때 기존 Resource의 삭제여부를 결정한다.
- App을 생성할 때 SYNC POLICY를 Automatic으로 선택 후 아래 PRUNE RESOURCES를 선택하지 않는다.
- App Sync가 완료되었다.
- git에 올려둔 yaml파일을 수정한다. deploy명을 수정(prune-test -> argo-test)해 기존 deploy의 상태를 확인해 보겠다.
apiVersion: apps/v1
kind: Deployment
metadata:
name: argo-test
spec:
replicas: 1
selector:
matchLabels:
app: argo-test
template:
metadata:
labels:
app: argo-test
spec:
containers:
- name: prune-test
image: nginx:latest
ports:
- containerPort: 80
- yaml파일 수정 후 argoCD에서 다시 Sync를 맞추면 아래와 같이 기존 prune-test는 OutOfSync상태로 남게된다.
kubernetes 상에도 prune-test deploy는 그대로 남아있는 상태이다.
test@DESKTOP-F55SF6V:~ (⎈|test-cluster:default)# k get deploy -n test
NAME READY UP-TO-DATE AVAILABLE AGE
argo-test 1/1 1 1 91s
prune-test 1/1 1 1 2m20s
- 이번엔 App의 SYNC Option에서 PRUNE을 Enable 시키고 동일하게 테스트를 해본다.
APP DETAILS를 누르고 아래로 가면 PRUNE RESOURCES를 ENABLE시킬 수 있다.
- 우선 OutOfSync로 남아있던 prune-test를 수동으로 PRUNE시키고 argo-test deploy만 남겨두었다.
이상태에서 git에 yaml파일을 수정해 deploy명을 다시 prune-test로 변경해 보겠다.
apiVersion: apps/v1
kind: Deployment
metadata:
name: prune-test
spec:
replicas: 1
selector:
matchLabels:
app: prune-test
template:
metadata:
labels:
app: prune-test
spec:
containers:
- name: prune-test
image: nginx:latest
ports:
- containerPort: 80
- 이전 테스트와 다르게 argo-test deploy는 삭제되고 prune-test만 Synced된 상태로 남는다.
kubernetes상에도 prune-test deploy만 남아있다.
test@DESKTOP-F55SF6V:~ (⎈|test-cluster:default)# k get deploy -n test
NAME READY UP-TO-DATE AVAILABLE AGE
prune-test 1/1 1 1 100s
- 특정 resource만 annotation을 추가해 PRUNE을 Disable시킬 수도 있다.
metadata:
annotations:
argocd.argoproj.io/sync-options: Prune=false
2. SELF HEAL
- SELF HEAL : kubectl을 통해 kubernetes resource를 수정해도 git에 정의된 manifest의 상태를 유지시킨다.
- PRUNE과 동일한 순서로 테스트를 진행한다. 현재 배포되어 있는 prune-test deploy의 replicas를 kubectl edit을 통해 2로 수정한다.
apiVersion: apps/v1
kind: Deployment
...
name: prune-test
namespace: test
...
spec:
progressDeadlineSeconds: 600
replicas: 2
...
- OutOfSync상태로 변하며 replicas는 2개로 변경된 것을 확인할 수 있다.
kubernetes 에서도 pod의 수가 2개로 늘어난 것이 확인된다.
test@DESKTOP-F55SF6V:~ (⎈|test-cluster:default)# k get deploy -n test
NAME READY UP-TO-DATE AVAILABLE AGE
prune-test 2/2 2 2 10m
- SELF HEAL옵션을 Enable 해보자. PRUNE과 마찬가지로 APP DETAILS에 들어가 변경 가능하다.
- Enable시킴과 동시에 git의 manifest설정상태로 돌아간다. 이 후 kubectl을 통해 다시 값을 변경해도 반영되지 않는다.
kubernetes의 pod도 한개로 다시 돌아갔다.
test@DESKTOP-F55SF6V:~ (⎈|test-cluster:default)# k get deploy -n test
NAME READY UP-TO-DATE AVAILABLE AGE
prune-test 1/1 1 1 14m
반응형
PRUNE, SELF HEAL모두 resource에 직접적인 영향을 주는 설정으로 사용에 주의가 필요하다.
반응형
'cicd > argocd' 카테고리의 다른 글
ArgoCD CLI 사용하여 App 배포하기 (0) | 2023.03.24 |
---|---|
ArgoCD Source로 Private Git Repo 접근하기 (0) | 2023.03.24 |
ArgoCD로 Kubernetes CD환경 구성하기 (0) | 2023.03.20 |