티스토리 뷰
ArgoCD에서 sync 되는 application은 CRD로 만들어지게 된다. 이말은 manifest로 관리가 가능하다는 뜻이다.
manifest 자체를 git 저장소에 저장하는 방식을 하기전 ArgoCD 의 argocd-util을 사용한 cronjob으로 manifest를
먼저 만들어내는 backup 방식에 대하여 알아보자.
Prerequites
간단하게 구현하기 위해 local storage를 이용하는 방식으로 만들어진 manifest를 host에 바로 저장하는 방식을 사용한다.
local storage class
다음 링크에 local storage class 에 대해 설명이 나와있다.
Cronjob을 이용한 Backup 수행
먼저 local storage class가 만들어져있다고 가정하고 각 host별로 생성될 pv를 사전에 생성하자.
apiVersion: v1
kind: PersistentVolume
metadata:
name: host001-argocd-backup
namespace: argocd
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storageClassName: local-sc
local:
path: /data/argocd-backup
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- host001
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: host002-argocd-backup
namespace: argocd
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storageClassName: local-sc
local:
path: /data/argocd-backup
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- host002
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: host003-argocd-backup
namespace: argocd
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storageClassName: local-sc
local:
path: /data/argocd-backup
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- host003
이제 생성된 pv들을 control할 pvc를 생성하자.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: argocd-backup-pvc
namespace: argocd
spec:
accessModes:
- ReadWriteOnce
storageClassName: local-sc
resources:
requests:
storage: 10Gi
생성된 pvc를 mount 하는 cronjob을 생성하자.
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: argocd-backup-batch
namespace: argocd
spec:
schedule: "0 4 * * *"
jobTemplate:
spec:
template:
spec:
containers:
- name: argocd
image: "argocd:2.0.0"
imagePullPolicy: IfNotPresent
command:
- "/bin/bash"
- "-c"
args:
- "/usr/local/bin/argocd-util -n argocd export > /backup/argocd-backup-$(date +%F).yaml"
volumeMounts:
- name: argocd-backup-volume
mountPath: "/backup"
restartPolicy: OnFailure
volumes:
- name: argocd-backup-volume
persistentVolumeClaim:
claimName: argocd-backup-pvc
securityContext:
runAsNonRoot: true
runAsUser: 1000
serviceAccount: argocd-server
serviceAccountName: argocd-server
여기서 필히 확인해둘것은 securityContext 항목이다.
현재 여기서는 runAsUser의 uid를 1000으로 지정했다.
이는 uid 1000을 사용하는 account가 매칭되는 권한을 사용한다는 의미이며 실제 mount 될 대상(각 pv들이 mount될 host에 directory)
의 권한도 맞아야 한다는 의미이다.
하여 다음과 같은 소유자를 변경해주는것이 필요하다.
[root@host1 /data/argocd-backup]# chown -R 1000. .
[root@host2 /data/argocd-backup]# chown -R 1000. .
[root@host3 /data/argocd-backup]# chown -R 1000. .
cronjob의 경우 지정된 시간에만 동작되기 때문에 이를 테스트 해보기위해서는 그 시간까지 기다려야 한다.
하여 이를 수동으로 테스트 하는 방법이 아래와 같은 명령을 통해서 가능하다.
kubectl -n argocd create job --from=cronjob/argocd-backup-batch argocd-backup-batch-manual
https://www.craftypenguins.net/how-to-trigger-a-kubernetes-cronjob-manually/
이후 실제 생성된 backup 파일을 확인해보자.
[root@deply001 ~]# ssh host001 ls /data/argocd-backup
[root@deply001 ~]# ssh host002 ls /data/argocd-backup
argocd-backup-2021-06-27.yaml
[root@deply001 ~]# ssh host003 ls /data/argocd-backup
argocd-backup-2021-06-28.yaml
pod가 생성된 node에 맞게 backup 파일이 생성되었음을 확인할 수 있다.
'Cloud > Kubernetes' 카테고리의 다른 글
How to set the Containerd config.toml on k3s (0) | 2021.07.07 |
---|---|
Argo CD Notification with Mattermost (0) | 2021.07.06 |
Custom domain lookup on Kubernetes (0) | 2021.05.07 |
Kustomize (0) | 2021.04.19 |
initcontainer with multicommand (0) | 2021.04.13 |
- Total
- Today
- Yesterday
- kubernetes install
- Helm Chart
- vmware openstack
- crashloopbackoff
- mattermost
- GateKeeper
- macvlan
- DevSecOps
- kubernetes
- boundary ssh
- minio
- ceph
- azure policy
- metallb
- K3S
- open policy agent
- minikube
- OpenStack
- Jenkinsfile
- kata container
- openstack backup
- aquasecurity
- wsl2
- nginx-ingress
- ansible
- openstacksdk
- hashicorp boundary
- socket
- Terraform
- jenkins
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |