Kubernetes

ArgoCD Kubernetes 구축

김 정출 2024. 7. 18. 23:38

ArgoCD

ArgoCD는 GitOps를 활용해 인프라와 솔루션을 함께 관리하여 Kubernetes Application의 자동 배포를 위한 오픈 소스이며 Continuous Deliver(CD)의 대표적인 솔루션입니다.

argo-cd 설치

curl -sSL -o argocd-linux-amd64 https://github.com/argoproj/argo-cd/releases/latest/download/argocd-linux-amd64

sudo install -m 555 argocd-linux-amd64 /usr/local/bin/argocd

rm argocd-linux-amd64

argocd version

agrocd help

ArgoCD 배포

Namespace를 생성합니다.

kubectl create ns argocd

Virtual Service와 Cert Manager를 활용한다면 Cert에 호스트를 등록합니다.

kubectl edit cert -nistio-system [CERT_NAME]
---

apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
  name: [CERT_NAME]
  namespace: istio-system
spec:
  commonName: ABC.net
  dnsNames:
  - argocd.ABC.net

Helm으로 ArgoCD 배포를 진행합니다.

# Repo 추가
helm repo add argo https://argoproj.github.io/argo-helm

# Helm 가져오기
git clone https://github.com/argoproj/argo-helm.git

cd argo-helm/charts/argo-cd

# values에서 도메인 수정하기
vi values.yaml
---
## Globally shared configuration
global:
  # -- Default domain used by all components
  ## Used for ingresses, certificates, SSO, notifications, etc.
  domain: argocd.ABC.net

helm install argo -n argocd argo/argo-cd -f values.yaml

ArgoCD 배포된 내용 수정

insecure 모드 지정합니다.

kubectl edit deployment -nargocd argo-argocd-server
--
      - args:
        - /usr/local/bin/argocd-server
        - --port=8080
        - --metrics-port=8083
        - --insecure

Kubernetes Cluster 환경에서 Proxy 서버를 사용 중이라면 repo-server에서 proxy 설정을 해야됩니다.
Proxy 설정을 하지 않을 경우 GitHub 연동 시에 이슈가 있습니다.

kubectl edit deployment -nargocd argo-argocd-repo-server        
        env:
        - name: https_proxy
          value: http://10.27.251.30:3128
        - name: http_proxy
          value: http://10.27.251.30:3128

Istio의 Virtual Service를 활용한다면 다음의 설정을 진행합니다.

vi virtualservice.yaml
---
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
  name: argocd-server
  namespace: argocd
spec:
  gateways:
  - XXX/https-gateway
  - XXX/http-gateway
  hosts:
  - argocd.ABC.net
  http:
  - corsPolicy:
      allowHeaders:
      - authorization
      - content-Type
      - accept
      allowMethods:
      - POST
      - GET
      - DELETE
      - PUT
      - OPTIONS
      allowOrigins:
      - regex: .*
      exposeHeaders:
      - authorization
      - location
      maxAge: 24h
    match:
    - uri:
        prefix: /
    route:
    - destination:
        host: argo-argocd-server.argocd.svc.cluster.local
        port:
          number: 80

 kubectl apply -f virtualservice.yaml

ArgoCD WEB UI

초기 계정은 admin 이고, 패스워드는 다음을 통해 확인합니다.

kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d
----
R8xBudP0D6KFLylO

Kubernetes port-forward를 활용해 Cluster 외부에서 내부 Pod 트래픽으로 전달되도록 설정하여 로컬 환경에서 웹으로 접속해보겠습니다.

kubectl port-forward service/argo-argocd-server -n argocd 38080:443
----
Forwarding from 127.0.0.1:38080 -> 8080
Forwarding from [::1]:38080 -> 8080
Handling connection for 38080
Handling connection for 38080
Handling connection for 38080

VS Code를 활용해 원격 서버의 포트 포워딩을 진행하고 로컬 환경의 웹 브라우저에서 http://localhost:38080으로 접속합니다.

위에서 설정한 VirtualService가 있따면 도메인으로 접속해봅니다.

CLI를 활용하기 위해서는 로그인을 진행합니다.

argocd login argocd.ABC.net
---
WARN[0000] Failed to invoke grpc call. Use flag --grpc-web in grpc calls. To avoid this warning message, use flag --grpc-web.
Username: admin
Password:
'admin:login' logged in successfully
Context 'argocd.ABC.net' updated

ArgoCD Example Application 배포

WEB UI에서 Applications 사이드 메뉴를 클릭하고 New App 버튼을 클릭합니다.

  • Application Name: argocd-example-app
  • Project name: default (초기에는 default만 존재하며, Settings에서 프로젝트를 추가할 수 있습니다.
  • Sync Policy: Automatic
  • Sync Options: auto-create namespace
  • Repository URL: https://github.com/argoproj/argocd-example-apps
  • Revision: HEAD
  • Path: helm-guestbook
  • Destination: https://kubernetes.default.svc 로 ArgoCD가 구축된 Kubernetes 클러스터입니다.
  • Namespace: 저의 경우에는 argocd-test라는 namespace로 지정하겠습니다.

생성이 완료되면 새로운 Application이 확인됩니다.

 

ArgoCD 구축 및 Example App 배포까지 확인하였습니다.
감사합니다!