ArgoCD๋?
ArgoCD๋ Kubernetes๋ฅผ ์ํ ์ ์ธ์ ์ธ GitOps ์ง์์ ๋ฐฐํฌ ๋๊ตฌ์ด๋ค. ArgoCD๋ ์๋์ ๊ฐ์ ์ํคํ ์ฒ๋ก ๋์ํ๋ค.

ArgoCD๋ ์คํ ์ค์ธ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ง์์ ์ผ๋ก ๋ชจ๋ํฐ๋งํ๊ณ ํ์ฌ live state๋ฅผ ์ํ๋ ๋์ ์ํ์ ๋น๊ตํ๋ Kubernetes ์ปจํธ๋กค๋ฌ๋ก ๊ตฌํ๋๋ค. live์ํ๊ฐ ๋์ state์์ ๋ฒ์ด๋ ๋ฐฐํฌ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ OutOfSync๋ก ๊ฐ์ฃผ๋๋ค. ArgoCD๋ ์ฐจ์ด์ ์ ๋ณด๊ณ ํ๊ณ ์๊ฐํํ๋ ๋์์ live ์ํ๋ฅผ ์ํ๋ ๋์ ์ํ๋ก ์๋ ๋๋ ์๋์ผ๋ก ๋๊ธฐํํ ์ ์๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค. Git repo์์ ์ํ๋ ๋์ ์ํ์ ๋ํ ์์ ์ฌํญ์ ์๋์ผ๋ก ์ ์ฉ๋์ด ์ง์ ๋ ๋์ ํ๊ฒฝ์ ๋ฐ์๋ ์ ์๋ค.
ArgoCD ํน์ง
- ์ง์ ๋ ๋์ ํ๊ฒฝ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์๋์ผ๋ก ๋ฐฐํฌ
- ์ฌ๋ฌ ๊ตฌ์ฑ ๊ด๋ฆฌ/ํ ํ๋ฆฟ ๋๊ตฌ ์ง์(Kustomize, Helm, Jsonnet, plain-YAML)
- ๋ค์ค ํด๋ฌ์คํฐ๋ฅผ ๊ด๋ฆฌํ๊ณ ๋ฐฐํฌํ ์ ์๋ ๊ธฐ๋ฅ
- SSO ํตํฉ(OIDC, OAuth2, LDAP, SAML 2.0, GitHub, GitLab, Microsoft, LinkedIn)
- ์น์ธ์ ์ํ ๋ฉํฐ ํ ๋ํธ ๋ฐ RBAC ์ ์ฑ
- Git ์ ์ฅ์์ ์ปค๋ฐ๋ ๋ชจ๋ ์ ํ๋ฆฌ์ผ์ด์ ๊ตฌ์ฑ์ผ๋ก ๋กค๋ฐฑ/๋กค๋ง ์ด๋์๋ ๊ฐ๋ฅ
- ์ ํ๋ฆฌ์ผ์ด์ ๋ฆฌ์์ค์ health status ๋ถ์
- ์๋ํ๋ ๊ตฌ์ฑ ๋๋ฆฌํํธ ๊ฐ์ง ๋ฐ ์๊ฐํ
- ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํ๋ ์ํ๋ก ์๋ ๋๋ ์๋์ผ๋ก ๋๊ธฐํ
- ์ ํ๋ฆฌ์ผ์ด์ ํ๋์ ์ค์๊ฐ์ผ๋ก ๋ณผ ์ ์๋ ์น UI
- ์๋ํ ๋ฐ CI ํตํฉ์ ์ํ CLI
- Webhook ํตํฉ(GitHub, BitBucket, GitLab)
- ์๋ํ๋ฅผ ์ํ ํ ํฐ ์ก์ธ์ค
- ๋ณต์กํ ์ ํ๋ฆฌ์ผ์ด์ ๋กค์์์ ์ง์ํ๋ PreSync, Sync, PostSync hook
- ์ ํ๋ฆฌ์ผ์ด์ ์ด๋ฒคํธ ๋ฐ API ํธ์ถ์ ๋ํ ๊ฐ์ฌ ์ถ์
- ํ๋ก๋ฉํ ์ฐ์ค ์งํ
- Git์์ Helm ๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ ์ํ๊ธฐ ์ํ ๋งค๋ณ์ ์ฌ์ ์
ArgoCD ์ค์น ๋ฐ Github ์ฐ๊ฒฐ
1. Helm์ผ๋ก ArgoCD ์ค์น
helm repo add argo https://argoproj.github.io/argo-helm
helm install argocd argo/argo-cd -n devops-tools
๋๋ helm์ ์ด์ฉํด์ argocd๋ฅผ ์ค์นํ์๋ค.
# Linux/Mac OS
kubectl get secret argocd-initial-admin-secret -n argocd -o jsonpath="{.data.password}" | base64 -d
# Powershell
$encoded = kubectl get secret argocd-initial-admin-secret -n argocd -o jsonpath="{.data.password}"
[System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String($encoded))
๊ทธ๋ฆฌ๊ณ ์ ์ํ๊ธฐ ์ํด ์ ๋ช ๋ น์ด๋ฅผ ์ด์ฉํด์ ์ด๊ธฐ ๋น๋ฐ๋ฒํธ๋ฅผ ์ป์ผ๋ฉด ๋๋ค.
2. GKE์ฐ๊ฒฐ์ ์ํ secret ์ถ๊ฐ
kubectl config view --raw -o jsonpath="{.clusters[?(@.name == \"$(kubectl config current-context)\")].cluster.certificate-authority-data}"
์ ๋ช ๋ น์ด๋ก GKE ํด๋ฌ์คํฐ์ ์ธ์ฆ์ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์จ๋ค.
apiVersion: v1
kind: Secret
metadata:
name: argocd-secret
labels:
argocd.argoproj.io/secret-type: cluster
type: Opaque
stringData:
name: <cluster-name>
server: <cluster-api-url or ip>
config: |
{
"execProviderConfig: {
"command": "argocd-k8s-auth",
"args": ["gcp"],
"apiVersion": "client.authentication.k8s.io/v1betat1"
},
"tlsClientConfig": {
"insecure": false,
"caData": <cluster-encoded certificate>
}"
}
๊ทธ๋ฆฌ๊ณ ์์ ๊ฐ์ด secret์ ๋ง๋ค๋ฉด ๋๋ค. ํด๋น secret์ ๋ํ ๋ด์ฉ์ https://argo-cd.readthedocs.io/en/stable/operator-manual/declarative-setup/ ๋ฅผ ์ฐธ๊ณ ํ๋ฉด ๋๋ค.
3. Repository ์ถ๊ฐํ๊ธฐ

์ข์ธก์ Settings > Repositories > Connect repo ์์ผ๋ก ๋๋ฅด๋ฉด ์์ ๊ฐ์ ํ๋ฉด์ด ๋ณด์ผ ๊ฒ์ด๋ค. ์ฐ๊ฒฐ ๋ฐฉ๋ฒ์ via ssh ๋๋ via https๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค. ๋๋ ์ฌ๊ธฐ์ via https๋ฅผ ์ฌ์ฉํ๋ค. ๊ทธ๋ฆฌ๊ณ repository์ url์ ์ ๋ ฅํ๊ณ project๋ถ๋ถ์ default๋ก ํ ํ connect๋ฅผ ๋๋ฌ ์ฐ๊ฒฐํ๋ฉด ๋๋ค.
4. Application ๋ง๋ค๊ธฐ

Repository๋ฅผ ๋ง๋ ํ ์์ ๋ฒํผ์ ๋๋ฅด๋ฉด create application์ด ๋ณด์ผ ๊ฒ์ด๋ค.

Application Name์ ์ค์ ํ๊ณ Project Name์ default๋ก ํ๋ฉด ๋๋ค. sync policy๋ manual๊ณผ automatic์ด ์๋ค. automatic์ผ๋ก ํ๋ ๊ฒฝ์ฐ์๋ git repository์ ๋ณ๊ฒฝ์ ์๋์ผ๋ก ๊ฐ์งํ์ฌ ๋ฐฐํฌ๋ฅผ ์งํํ ๊ฒ์ด๋ค. manual๋ก ํ๊ณ ์ถ๋ค๋ฉด Github action์ ์ฌ์ฉํ์ฌ sync๋ฅผ ์๋ํ๋ฉด ๋ ๊ฒ์ด๋ค.
path๋ถ๋ถ์๋ ๋ฐฐํฌํ๊ณ ์ ํ๋ ํ์ผ์ด ์๋ ์์น๋ฅผ ์์ฑํ๋ฉด ๋๋ค. ๊ทธ๋ฆฌ๊ณ Cluster URL์ https://kubernetes.default.svc๋ก ์์ฑํ๋ฉด ๋๋ค. namespace๋ ๋ฐฐํฌํ๊ณ ์ ํ๋ namespace๋ฅผ ์์ฑํ๊ณ create๋ฅผ ๋๋ฌ ์์ฑํ๋ฉด ๋๋ค.
5. manual๋ก ํ ๊ฒฝ์ฐ yaml ์์ฑ
name: Sync ArgoCD
on:
push:
branches:
- main
jobs:
sync-argocd-github:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up ArgoCD CLI
run: |
curl -sSL -o /usr/local/bin/argocd https://github.com/argoproj/argo-cd/releases/download/v2.6.0/argocd-linux-amd64
chmod +x /usr/local/bin/argocd
- name: ArgoCD Login
run: argocd login ${{ secrets.ARGOCD_SERVER }} --username ${{ secrets.ARGOCD_USERNAME }} --password ${{ secrets.ARGOCD_PASSWORD }} --insecure
- name: Sync ArgoCD app
run: |
argocd app sync test-app
argocd app wait test-app --timeout 300
์์ ๊ฐ์ด workflow๋ฅผ ์์ฑํ๋ฉด ๋๋ค. ๊ทธ๋ ๋ค๋ฉด ์๋์ ๊ฐ์ด build์ ์ฑ๊ณตํ์ฌ pod๊ฐ ๋ฐฐํฌ๋์์์ ํ์ธํ ์ ์๋ค.

6. ๋โผ๏ธ
argocd๋ฅผ ์ค์นํ์ฌ github์ ์ฐ๊ฒฐํ๋ ๊ฒ์ ์ ๋ง ๊ฐ๋จํ๊ฒ ๋๋ผ ์ ์๋ค. ์๋ repository๋ argocd๋ฅผ ์ค์นํ์ฌ ์งํํ๊ณ ์๋ ์ฌ์ด๋ ํ๋ก์ ํธ์ด๋ค.
https://github.com/5a6io/Monitoring-Project
GitHub - 5a6io/Monitoring-Project: Private Project/Web ์๋ฒ ๊ฐ๋ฐ/Locust๋ฅผ ์ด์ฉํ ๋ถํํ ์คํธ/Grafana ์๊ฐํ ๋ชฉ
Private Project/Web ์๋ฒ ๊ฐ๋ฐ/Locust๋ฅผ ์ด์ฉํ ๋ถํํ ์คํธ/Grafana ์๊ฐํ ๋ชฉํ - 5a6io/Monitoring-Project
github.com
์ฐธ๊ณ
'Kubernetes' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[k8s] helm์ผ๋ก Grafana์ Prometheus ์ค์นํ๊ธฐ (0) | 2025.04.01 |
---|---|
[k8s] Kubernetes Scheduling (0) | 2024.12.04 |
[k8s] Pod๋? (0) | 2024.11.25 |
[k8s] Kubernetes ๊ตฌ์ฑ ์์ (0) | 2024.11.24 |
[k8s] Kubernetes๋? (1) | 2024.11.16 |