๐น ์ Argo CD์ ๋ฐฑ์ ๊ณผ ๋ณต๊ตฌ๊ฐ ์ค์ํ๊ฐ?
Argo CD๋ Kubernetes ์ ํ๋ฆฌ์ผ์ด์
์ ๋ฐฐํฌ ๋ฐ ๊ด๋ฆฌ๋ฅผ ๋ด๋นํ๋ ์ค์ํ ์๋น์ค์
๋๋ค.
๋ง์ฝ Argo CD์ ์ค์ ์ด๋ ์ ํ๋ฆฌ์ผ์ด์
์ ๋ณด๊ฐ ์์ค๋๊ฑฐ๋ ์์๋๋ฉด ๋ฐฐํฌ ํ๋ก์ธ์ค๊ฐ ์ค๋จ๋ ์ ์์ผ๋ฉฐ,
์ด๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด ์ ๊ธฐ์ ์ธ ๋ฐฑ์
๋ฐ ์ ์ํ ๋ณต๊ตฌ ์ ๋ต์ด ํ์ํฉ๋๋ค.
โ
Argo CD์์ ๋ฐฑ์
ํด์ผ ํ ์ฃผ์ ๋ฐ์ดํฐ
โ Argo CD ์ ํ๋ฆฌ์ผ์ด์
๋ฐ์ดํฐ (Application CRD)
โ Argo CD ํ๋ก์ ํธ ๋ฐ RBAC ์ค์
โ Redis ์บ์ (์ธ์
๋ฐ์ดํฐ)
โ Argo CD Secret ๋ฐ ConfigMap (์ค์ ์ ๋ณด)
โ PostgreSQL(HA ํ๊ฒฝ์์ ์ฌ์ฉ ์)
๐น Argo CD ๋ฐฑ์ ์ ๋ต
Argo CD์ ๋ฐ์ดํฐ๋ฅผ ๋ฐฑ์ ํ๋ ๋ฐฉ๋ฒ์๋ ๋ค์๊ณผ ๊ฐ์ ์ ๋ต์ด ์์ต๋๋ค.
๋ฐฑ์ ๋ฐฉ๋ฒ | ์ค๋ช |
kubectl์ ์ฌ์ฉํ CRD ๋ฐฑ์ | Argo CD ์ ํ๋ฆฌ์ผ์ด์ ๋ฐ ํ๋ก์ ํธ๋ฅผ ์ง์ ๋ฐฑ์ |
etcd ์ค๋ ์ท(ํด๋ฌ์คํฐ ๋ ๋ฒจ ๋ฐฑ์ ) | Kubernetes etcd ๋ฐ์ดํฐ๋ฅผ ๋ฐฑ์ ํ์ฌ ๋ณต๊ตฌ |
PostgreSQL ๋ฐฑ์ (HA ํ๊ฒฝ) | Argo CD๊ฐ PostgreSQL์ ์ฌ์ฉํ ๊ฒฝ์ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฐฑ์ |
Velero๋ฅผ ํ์ฉํ Kubernetes ๋ฆฌ์์ค ๋ฐฑ์ | Kubernetes ์ ์ฒด ์ํ๋ฅผ ๋ฐฑ์ ํ๋ ์๋ฃจ์ ํ์ฉ |
๐น 1. kubectl์ ์ฌ์ฉํ Argo CD CRD ๋ฐฑ์
Argo CD์ ์ฃผ์ ๋ฆฌ์์ค๋ Kubernetes CRD(Custom Resource Definition)๋ก ์ ์ฅ๋ฉ๋๋ค.
์ด๋ฅผ kubectl์ ์ด์ฉํ์ฌ ๋ฐฑ์
ํ ์ ์์ต๋๋ค.
โ 1๏ธโฃ Argo CD ์ ํ๋ฆฌ์ผ์ด์ ๋ฐ ํ๋ก์ ํธ ๋ฐฑ์
kubectl get applications -n argocd -o yaml > argocd-apps-backup.yaml
kubectl get appprojects -n argocd -o yaml > argocd-projects-backup.yaml
โ 2๏ธโฃ Argo CD RBAC ์ค์ ๋ฐฑ์
kubectl get configmap argocd-rbac-cm -n argocd -o yaml > argocd-rbac-backup.yaml
โ 3๏ธโฃ Argo CD Secret ๋ฐ ์ค์ ํ์ผ ๋ฐฑ์
kubectl get secret -n argocd -o yaml > argocd-secrets-backup.yaml
kubectl get configmap -n argocd -o yaml > argocd-configmaps-backup.yaml
โ 4๏ธโฃ ๋ฐฑ์ ํ์ผ์ Git ์ ์ฅ์ ๋๋ S3์ ์ ๋ก๋
tar -czvf argocd-backup-$(date +%Y%m%d).tar.gz argocd-*-backup.yaml
aws s3 cp argocd-backup-$(date +%Y%m%d).tar.gz s3://my-argocd-backups/
๐น 2. Argo CD CRD ๋ฐฑ์ ๋ณต๊ตฌ
๋ฐฑ์ ํ CRD๋ฅผ ๋ณต๊ตฌํ๋ ค๋ฉด kubectl apply -f ๋ช ๋ น์ ์ฌ์ฉํฉ๋๋ค.
โ 1๏ธโฃ Argo CD ์ ํ๋ฆฌ์ผ์ด์ ๋ณต์
kubectl apply -f argocd-apps-backup.yaml
โ 2๏ธโฃ Argo CD ํ๋ก์ ํธ ๋ฐ RBAC ์ค์ ๋ณต์
kubectl apply -f argocd-projects-backup.yaml
kubectl apply -f argocd-rbac-backup.yaml
โ 3๏ธโฃ Argo CD Secret ๋ฐ ์ค์ ๋ณต์
kubectl apply -f argocd-secrets-backup.yaml
kubectl apply -f argocd-configmaps-backup.yaml
โ 4๏ธโฃ Argo CD ์๋ฒ ์ฌ์์ (ํ์ ์)
kubectl rollout restart deployment argocd-server -n argocd
๐น 3. etcd ์ค๋ ์ท์ ์ฌ์ฉํ ๋ฐฑ์ ๋ฐ ๋ณต๊ตฌ (ํด๋ฌ์คํฐ ์ ์ฒด ๋ณต๊ตฌ์ฉ)
etcd๋ Kubernetes ํด๋ฌ์คํฐ์ ์ํ๋ฅผ ์ ์ฅํ๋ ํต์ฌ ๊ตฌ์ฑ ์์์
๋๋ค.
๋ฐ๋ผ์ etcd๋ฅผ ๋ฐฑ์
ํ๋ฉด Argo CD๋ฟ๋ง ์๋๋ผ ์ ์ฒด ํด๋ฌ์คํฐ์ ์ํ๋ฅผ ๋ณต๊ตฌํ ์ ์์ต๋๋ค.
โ 1๏ธโฃ etcd ๋ฐฑ์ ์์ฑ
ETCDCTL_API=3 etcdctl snapshot save /backup/etcd-snapshot.db \
--endpoints=https://127.0.0.1:2379 \
--cacert=/etc/kubernetes/pki/etcd/ca.crt \
--cert=/etc/kubernetes/pki/etcd/server.crt \
--key=/etc/kubernetes/pki/etcd/server.key
โ 2๏ธโฃ etcd ์ค๋ ์ท ๋ณต๊ตฌ
ETCDCTL_API=3 etcdctl snapshot restore /backup/etcd-snapshot.db \
--data-dir=/var/lib/etcd
โ 3๏ธโฃ etcd ์ฌ์์
systemctl restart etcd
โ 4๏ธโฃ Kubernetes ๋ ธ๋ ์ ์ฒด ์ฌ์์ (ํ์ ์)
systemctl restart kubelet
๐น 4. PostgreSQL์ ์ฌ์ฉํ ๋ฐฑ์ ๋ฐ ๋ณต๊ตฌ (HA ๋ชจ๋ ์ ์ฉ ์)
๊ณ ๊ฐ์ฉ์ฑ(HA) ๋ชจ๋์์๋ Argo CD์ ๋ฐ์ดํฐ๋ฅผ PostgreSQL์ ์ ์ฅํฉ๋๋ค.
์ด ๊ฒฝ์ฐ PostgreSQL์ ๋ฐฑ์
ํ๊ณ ํ์ ์ ๋ณต๊ตฌํด์ผ ํฉ๋๋ค.
โ 1๏ธโฃ PostgreSQL ๋ฐฑ์ ์์ฑ
PGPASSWORD="mypassword" pg_dump -h postgres.example.com -U argocd -d argocd > argocd-db-backup.sql
โ 2๏ธโฃ PostgreSQL ๋ฐฑ์ ํ์ผ์ S3์ ์ ๋ก๋
aws s3 cp argocd-db-backup.sql s3://my-argocd-backups/
โ 3๏ธโฃ PostgreSQL ๋ฐฑ์ ๋ณต๊ตฌ
PGPASSWORD="mypassword" psql -h postgres.example.com -U argocd -d argocd < argocd-db-backup.sql
๐น 5. Velero๋ฅผ ์ฌ์ฉํ ์ ์ฒด Kubernetes ๋ฆฌ์์ค ๋ฐฑ์
Velero๋ Kubernetes ํด๋ฌ์คํฐ ์ ์ฒด๋ฅผ ๋ฐฑ์ ๋ฐ ๋ณต๊ตฌํ ์ ์๋ ์คํ์์ค ๋๊ตฌ์ ๋๋ค.
โ 1๏ธโฃ Velero ์ค์น
velero install --provider aws --bucket my-argocd-backups --backup-location-config region=us-east-1
โ 2๏ธโฃ Argo CD ๋ค์์คํ์ด์ค ๋ฐฑ์
velero backup create argocd-backup --include-namespaces argocd
โ 3๏ธโฃ Argo CD ๋ฐฑ์ ๋ณต๊ตฌ
velero restore create --from-backup argocd-backup
๐น Argo CD ๋ฐฑ์ ๋ฐ ๋ณต๊ตฌ CLI ๋ช ๋ น์ด ์ ๋ฆฌ
๋ช ๋ น์ด | ์ค๋ช |
kubectl get applications -n argocd -o yaml | Argo CD ์ ํ๋ฆฌ์ผ์ด์ ๋ฐฑ์ |
kubectl apply -f argocd-apps-backup.yaml | Argo CD ์ ํ๋ฆฌ์ผ์ด์ ๋ณต๊ตฌ |
ETCDCTL_API=3 etcdctl snapshot save backup.db | etcd ๋ฐ์ดํฐ ๋ฐฑ์ |
ETCDCTL_API=3 etcdctl snapshot restore backup.db | etcd ๋ฐ์ดํฐ ๋ณต๊ตฌ |
pg_dump -h postgres.example.com -U argocd -d argocd > backup.sql | PostgreSQL ๋ฐฑ์ |
psql -h postgres.example.com -U argocd -d argocd < backup.sql | PostgreSQL ๋ณต๊ตฌ |
velero backup create argocd-backup --include-namespaces argocd | Velero๋ฅผ ์ด์ฉํ ์ ์ฒด ๋ฐฑ์ |
velero restore create --from-backup argocd-backup | Velero๋ฅผ ์ด์ฉํ ์ ์ฒด ๋ณต๊ตฌ |
๐น ๊ฒฐ๋ก : ์ด๋ฒ ๊ธ์์ ๋ฐฐ์ด ํต์ฌ ๋ด์ฉ ์ ๋ฆฌ
๐ข Argo CD์ ๋ฐฑ์
์ GitOps ํ๊ฒฝ์์ ์ค์ํ ์ด์ ์์์ด๋ฉฐ, ์ ๊ธฐ์ ์ผ๋ก ์ํํด์ผ ํจ
๐ข kubectl์ ์ฌ์ฉํ์ฌ CRD(์ ํ๋ฆฌ์ผ์ด์
๋ฐ ์ค์ ๋ฐ์ดํฐ)๋ฅผ ๊ฐ๋จํ ๋ฐฑ์
๊ฐ๋ฅ
๐ข etcd ๋ฐฑ์
์ ํ์ฉํ๋ฉด ํด๋ฌ์คํฐ ์ ์ฒด๋ฅผ ๋ณต๊ตฌํ ์ ์์
๐ข HA ๋ชจ๋์์ PostgreSQL์ ์ฌ์ฉํ๋ฉด ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฐฑ์
์ด ํ์์ ์
๐ข Velero๋ฅผ ํ์ฉํ๋ฉด Kubernetes ์ ์ฒด ์ํ๋ฅผ ๋ฐฑ์
๋ฐ ๋ณต๊ตฌํ ์ ์์