Kubernetes Tools/ArgoCD

[Ep.42] [Argo CD ํ™•์žฅ #2] Argo CD API ๋ฐ CLI๋ฅผ ํ™œ์šฉํ•œ ์ž๋™ํ™” ๋ฐฐํฌ ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌ์ถ•

ygtoken 2025. 3. 18. 10:27
728x90

๐Ÿ”น Argo CD API ๋ฐ CLI๋ฅผ ํ™œ์šฉํ•ด์•ผ ํ•˜๋Š” ์ด์œ 

Argo CD๋Š” CLI(Command Line Interface) ๋ฐ REST API ๋ฅผ ์ œ๊ณตํ•˜์—ฌ GitOps ๊ธฐ๋ฐ˜์˜ ๋ฐฐํฌ๋ฅผ ๋”์šฑ ์ž๋™ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ด๋ฅผ ํ™œ์šฉํ•˜๋ฉด CI/CD ํŒŒ์ดํ”„๋ผ์ธ๊ณผ ์‰ฝ๊ฒŒ ์—ฐ๋™ํ•˜์—ฌ ์ฝ”๋“œ ๋ณ€๊ฒฝ ์‹œ ์ž๋™์œผ๋กœ ๋ฐฐํฌ๊ฐ€ ์ด๋ฃจ์–ด์งˆ ์ˆ˜ ์žˆ๋„๋ก ์„ค์ • ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

 

โœ… Argo CD API ๋ฐ CLI ํ™œ์šฉ์ด ํ•„์š”ํ•œ ์ด์œ 

โœ” GitOps ์ž๋™ํ™” ๋ฐฐํฌ๋ฅผ CI/CD ํŒŒ์ดํ”„๋ผ์ธ๊ณผ ์—ฐ๋™ ๊ฐ€๋Šฅ
โœ” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ CLI ๋ช…๋ น์–ด ๋˜๋Š” API ํ˜ธ์ถœ๋กœ ๋ฐฐํฌ ๊ฐ€๋Šฅ
โœ” ์ž๋™ ๋กค๋ฐฑ, ๋ฐฐํฌ ์ƒํƒœ ์กฐํšŒ, ๋™๊ธฐํ™” ์‹คํ–‰์„ ์Šคํฌ๋ฆฝํŠธ์—์„œ ์ œ์–ด ๊ฐ€๋Šฅ
โœ” Argo CD์˜ REST API๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์›๊ฒฉ์œผ๋กœ ๊ด€๋ฆฌ ๊ฐ€๋Šฅ


๐Ÿ”น 1. Argo CD CLI๋ฅผ ํ™œ์šฉํ•œ ๋ฐฐํฌ ์ž๋™ํ™”

โœ… 1.1 Argo CD CLI ์„ค์น˜

Argo CD CLI๋Š” ๋กœ์ปฌ ํ™˜๊ฒฝ์—์„œ Argo CD ์„œ๋ฒ„์™€ ์ƒํ˜ธ์ž‘์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค๋‹ˆ๋‹ค.

# Mac ์„ค์น˜ (Homebrew)
brew install argocd

# Linux ์„ค์น˜
curl -sSL -o /usr/local/bin/argocd https://github.com/argoproj/argo-cd/releases/latest/download/argocd-linux-amd64
chmod +x /usr/local/bin/argocd

 

โœ… Argo CD CLI ๋ฒ„์ „ ํ™•์ธ

argocd version

 

โœ… ์ถœ๋ ฅ ์˜ˆ์‹œ:

argocd: v2.5.0

โœ… 1.2 Argo CD CLI๋ฅผ ํ™œ์šฉํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐฐํฌ

๐Ÿ“Œ Argo CD ๋กœ๊ทธ์ธ

argocd login argocd.example.com --username admin --password mypassword

 

โœ… ์„ค๋ช…:
โœ” argocd login → Argo CD ์„œ๋ฒ„์— ๋กœ๊ทธ์ธ
โœ” --username admin → ๊ด€๋ฆฌ์ž ๊ณ„์ •์œผ๋กœ ๋กœ๊ทธ์ธ

 

๐Ÿ“Œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋™๊ธฐํ™” (๋ฐฐํฌ ์‹คํ–‰)

argocd app sync example-app

 

โœ… ์„ค๋ช…:
โœ” argocd app sync → Git ์ €์žฅ์†Œ์™€ Kubernetes ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๋™๊ธฐํ™”ํ•˜์—ฌ ๋ฐฐํฌ ์‹คํ–‰

 

๐Ÿ“Œ ๋ฐฐํฌ ์ƒํƒœ ํ™•์ธ

argocd app get example-app

 

โœ… ์ถœ๋ ฅ ์˜ˆ์‹œ:

NAME             STATUS     SYNC STATUS
example-app     Healthy    Synced

โœ… 1.3 Argo CD CLI๋ฅผ ํ™œ์šฉํ•œ ๋กค๋ฐฑ

๋ฐฐํฌ ์ค‘ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด Argo CD CLI๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ด์ „ ๋ฒ„์ „์œผ๋กœ ๋กค๋ฐฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

argocd app rollback example-app 2

 

โœ… ์„ค๋ช…:
โœ” rollback example-app 2 → ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋‘ ๋ฒˆ์งธ ์ด์ „ ๋ฒ„์ „์œผ๋กœ ๋กค๋ฐฑ

 

โœ… ๋กค๋ฐฑ ํ›„ ์ƒํƒœ ํ™•์ธ

argocd app history example-app

 

โœ… ์ถœ๋ ฅ ์˜ˆ์‹œ:

ID  COMMIT   STATUS     SYNC STATUS
4   89f2d3a  Deployed   Synced
3   c7a1e2b  Deployed   Synced
2   b5d1f4c  RolledBack Synced

๐Ÿ”น 2. Argo CD REST API๋ฅผ ํ™œ์šฉํ•œ ์ž๋™ํ™” ๋ฐฐํฌ

Argo CD๋Š” REST API๋ฅผ ์ œ๊ณตํ•˜์—ฌ CI/CD ํŒŒ์ดํ”„๋ผ์ธ์—์„œ ์›๊ฒฉ์œผ๋กœ ๋ฐฐํฌ ๋ฐ ๋™๊ธฐํ™”๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

โœ… 2.1 Argo CD API ์ธ์ฆ ํ† ํฐ ์ƒ์„ฑ

Argo CD REST API๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด JWT ํ† ํฐ ๊ธฐ๋ฐ˜์˜ ์ธ์ฆ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

argocd account generate-token --account admin

 

โœ… ์ถœ๋ ฅ ์˜ˆ์‹œ:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ...

โœ… ์ด์ œ REST API ํ˜ธ์ถœ ์‹œ ์ธ์ฆ ํ—ค๋”์— Authorization: Bearer <TOKEN>์„ ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.


โœ… 2.2 Argo CD API๋ฅผ ํ™œ์šฉํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ชฉ๋ก ์กฐํšŒ

curl -X GET -H "Authorization: Bearer " \
    https://argocd.example.com/api/v1/applications

 

โœ… ์ถœ๋ ฅ ์˜ˆ์‹œ:

{
  "items": [
    {
      "metadata": {
        "name": "example-app",
        "namespace": "argocd"
      },
      "status": {
        "sync": {
          "status": "Synced"
        }
      }
    }
  ]
}

โœ… 2.3 Argo CD API๋ฅผ ํ™œ์šฉํ•œ ๋ฐฐํฌ ๋™๊ธฐํ™” ์‹คํ–‰

curl -X POST -H "Authorization: Bearer " \
    https://argocd.example.com/api/v1/applications/example-app/sync

 

โœ… ์„ค๋ช…:
โœ” POST /applications/example-app/sync → Argo CD์—์„œ Git ์ƒํƒœ์™€ ๋™๊ธฐํ™” ์‹คํ–‰

 

โœ… ๋™๊ธฐํ™” ์ƒํƒœ ํ™•์ธ API ํ˜ธ์ถœ

curl -X GET -H "Authorization: Bearer " \
    https://argocd.example.com/api/v1/applications/example-app

๐Ÿ”น 3. GitHub Actions์™€ Argo CD API๋ฅผ ํ™œ์šฉํ•œ ๋ฐฐํฌ ์ž๋™ํ™”

CI/CD ํŒŒ์ดํ”„๋ผ์ธ์—์„œ ์ฝ”๋“œ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด ์ž๋™์œผ๋กœ Argo CD๋ฅผ ํ†ตํ•ด ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

โœ… 3.1 GitHub Actions ๋ฐฐํฌ ํŒŒ์ดํ”„๋ผ์ธ ์˜ˆ์ œ

๐Ÿ“Œ .github/workflows/deploy.yml

name: Deploy with Argo CD

on:
  push:
    branches:
      - main  # main ๋ธŒ๋žœ์น˜์— Push ์‹œ ๋ฐฐํฌ ์‹คํ–‰

jobs:
  deploy:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout repository
        uses: actions/checkout@v2

      - name: Sync Application with Argo CD
        run: |
          curl -X POST -H "Authorization: Bearer ${{ secrets.ARGOCD_TOKEN }}" \
              https://argocd.example.com/api/v1/applications/example-app/sync

 

โœ… ์„ค๋ช…:
โœ” on.push.branches: main → ๋ฉ”์ธ ๋ธŒ๋žœ์น˜์— ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ๋ฐœ์ƒํ•˜๋ฉด ๋ฐฐํฌ ์ž๋™ ์‹คํ–‰
โœ” curl -X POST ... /sync → Argo CD API๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋™๊ธฐํ™” ์‹คํ–‰
โœ” secrets.ARGOCD_TOKEN → GitHub Actions์—์„œ Argo CD API ํ˜ธ์ถœ์„ ์œ„ํ•œ ํ† ํฐ ์ €์žฅ

 

โœ… GitHub Actions CI/CD ๋ฐฐํฌ ์‹คํ–‰

git push origin main

 

โœ… ์ถœ๋ ฅ ์˜ˆ์‹œ (GitHub Actions ๋กœ๊ทธ)

โœ… Sync Application with Argo CD
Successfully triggered sync for example-app.

๐Ÿ”น ๊ฒฐ๋ก : ์ด๋ฒˆ ๊ธ€์—์„œ ๋ฐฐ์šด ํ•ต์‹ฌ ๋‚ด์šฉ ์ •๋ฆฌ

๐ŸŸข Argo CD CLI๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋™๊ธฐํ™”ํ•˜๊ณ  ๋กค๋ฐฑ ๊ฐ€๋Šฅ
๐ŸŸข Argo CD REST API๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์›๊ฒฉ์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ฐฐํฌ ๊ฐ€๋Šฅ
๐ŸŸข GitHub Actions์™€ Argo CD API๋ฅผ ์—ฐ๋™ํ•˜์—ฌ ์ž๋™ํ™” ๋ฐฐํฌ ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌ์ถ• ๊ฐ€๋Šฅ
๐ŸŸข CI/CD ํ™˜๊ฒฝ์—์„œ GitOps ๋ฐฉ์‹์œผ๋กœ ๋ฐฐํฌ๋ฅผ ์ž๋™ํ™”ํ•  ์ˆ˜ ์žˆ์Œ

728x90