본문 바로가기

cicd/argocd

ArgoCD PRUNE과 SELF HEAL 테스트

반응형

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에 직접적인 영향을 주는 설정으로 사용에 주의가 필요하다.

반응형