Study/CI&CD

Argo CD 사용해 보기

Bluesky_ 2024. 3. 19. 04:02
반응형

Argo CD 소개

ArgoCD는 Kubernetes를 위한 GitOps CD 도구이다.
Spinnaker처럼 여러 cloud platform을 지원하기 위한 cloud provider를 제공하지 않는다.

동작 자체가 매우 간단하기 때문에 사용하기 편하다.

  1. kubernetes 관련 설정을 git이나 helm repository에 등록하고
  2. Argo CD에서 이 git이나 helm repository를 등록하면
  3. kubernetes에 해당 설정을 반영한다.
  4. auto-sync를 지원하기 때문에 등록된 git이나 helm에 변경 사항이 push 되면 Argo CD가 해당 변경을 반영해 준다.

또한 Argo CD 자체가 Kubernetes에 설치되어 동작하기 때문에 kubernetes 관련 연결 설정을 하지 않아도 바로 해당 kuberentes에서 CD 사용이 가능하여 설치 단계가 간단하다.

설치하기

Install Argo CD

https://argo-cd.readthedocs.io/en/stable/
https://argo-cd.readthedocs.io/en/stable/cli_installation/

namespace를 만들고 해당 namespace로 argocd install.yaml을 반영하면 설치는 끝난다.

kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml

로컬에 받고 수정한 후엔 다음처럼 작업

kubectl apply -n argocd -f 대상위치

다만 기본 설치의 경우 외부 expose는 설정되어 있지 않다.

기본 설치에는 자체 서명된 인증서가 있으며 약간의 추가 작업을 해야 접근할 수 있다.
다음 중 하나를 수행해야 한다.

  • 인증서를 구성하고 client OS가 신뢰하는지 확인
  • 자체 서명된 인증서를 신뢰하도록 client OS 구성
  • 모든 Argo CD Cli 작업에 --insecure flag를 사용

arogocd login --core 를 사용하여 CLI access를 구성하고 나머지 단계를 생략할 수 있다고 한다.

Download Argo CD CLI

Argo CD를 CLI 환경에서 쉽게 사용할 수 있는 CLI를 제공하고 있다.

https://github.com/argoproj/argo-cd/releases/latest

CLI는 현재 대상 namespace에서 동작을 한다.

따라서 앞서 설치한 것처럼 argocd namespace에 설치를 하였다면 config set-context의 namespace를 argocd로 지정해서 사용해야 한다.

kubectl config set-context --current --namespace=argocd

하지만 굳이 Argo CD CLI를 사용하지 않아도 무방하며 내 경우 CLI를 사용하지 않았다.

Access The Argo CD API Server

앞서 언급한 것처럼 Argo CD는 설치된 이후 기본적으로 외부 expose가 설정되어 있지 않다.

다양한 방법으로 이를 설정할 수 있기 때문에 이 중 하나를 선택하면 된다.
https://argo-cd.readthedocs.io/en/stable/getting_started/

  • Service Type Load Balancer
  • Ingress
  • Port Forwarding

Port Forwarding 사용

Port Forwarding은 가장 간단하게 사용이 가능하다.
그냥 다음과 같이 실행하면

kubectl port-forward svc/argocd-server -n argocd 8080:443

localhost:8080으로 argocd-server 접근을 확인할 수 있다.

잘 떴는지 확인하는 정도로 테스트 삼아 사용해 볼 수 있을 듯하다.

Ingress 사용

다음 문서를 참고하여 설정을 한다.
https://argo-cd.readthedocs.io/en/stable/operator-manual/ingress/

Argo CD API server는 gRPC server (CLI에서 사용)와 HTTP/HTTPS server(UI에서 사용)를 모두 실행한다.
두 프로토콜 모두 다음 port에서 argocd-server service object에 의해 expose 된다.

  • 443 - gRPC/HTTPS
  • 80 - HTTP (redirects to HTTPS)

개인 용도로 사용하였기 때문에 TLS 비활성화 설정을 하였다.
TLS를 비활성화하기 위해서는 argocd-server deployment를 편집하여 argocd-server command에 --insecure flag를 추가하거나 argocd-cmd-params-cm ConfigMap에 server.insecure: "true"를 설정한다.

내 경우 argocd-cmd-params-cm configmap을 설정하였다.

apiVersion: v1
kind: ConfigMap
metadata:
  labels:
    app.kubernetes.io/name: argocd-cmd-params-cm
    app.kubernetes.io/part-of: argocd
  name: argocd-cmd-params-cm
data:
  # Run server without TLS
  server.insecure: "true"

Ingress 설정은 다음과 같이 하였다.

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: argocd-server-http-ingress
  namespace: argocd
  annotations:
    nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
    nginx.ingress.kubernetes.io/backend-protocol: "HTTP"
spec:
  rules:
  - host: argocd.bluesky.local
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: argocd-server
            port:
              number: 80

host에 해당 설정을 추가하면 접근이 된다.

xxx.xxx.xxx.xxx    argocd.bluesky.local

여기까지 하면 설치는 끝났다.

정리하면

  1. install
  2. configMap, Ingress 설정
  3. host에 해당 host 추가
    이렇게만 하면 설치가 끝난다.

설정된 주소로 접근하면 로그인 화면이 나타난다.

사용해 보기

초기 비밀번호 변경하기

관리자 계정의 초기 password는 자동 생성되어 Argo CD가 설치된 namespace에 argocd-initial-admin-secret이라는 secret의 password field에 일반 text로 저장된다.

다음과 같이 호출하면 base64로 인코딩 된 값을 확인할 수 있다.
이 값을 base64 decode 하여 초기 비밀번호를 확인할 수 있다.

kubectl get secret -n argocd argocd-initial-admin-secret -o jsonpath="{.data.password}"
// 또는 
kubectl get secret -n argocd argocd-initial-admin-secret -o yaml
kubectl get secret -n argocd argocd-initial-admin-secret -o json

이렇게 획득한 비밀번호로 로그인을 한 후 비밀번호 변경 처리를 하면 된다.

UserInfo -> Update Password를 선택하여 변경하면 된다.

 

비밀번호를 변경한 후에는 Argo CD namespace에서 더 이상 사용하지 않는 argocd-initial-admin-secret secret을 삭제하면 된다.
처음 생성된 비밀번호를 명확하게 저장하는 것 외에 다른 목적으로 사용되지 않는 secret이다.

Application 등록하기

Argo CD는 Application이라는 단위로 등록을 할 수 있다.
등록된 Application은 어디선가 가져온 kubernetes 관련 yaml을 실행하고 sync를 처리한다.

Argo CD를 사용하기 위한 별다른 학습이 필요하지 않고 kubernetes의 yaml을 외부에 등록하고 연동만 하면 된다.
Argo CD는 Kubernetes manifest를 정의하기 위한 다음과 같은 방법을 지원하고 있다.

  • Kustomize applications
  • Helm charts
  • Jsonnet을 포함한 YAML/JSON/Jsonnet manifest의 directory
  • config management plugin으로 구성된 모든 custom config management tool

내 경우 Helm chart로 kubernetes 파일을 구성하여 github에 등록하였고 이 주소를 Argo CD에 Application으로 등록하면 Argo CD 관련 설정은 끝난다.

따라서 사실 Argo CD를 사용하는데 드는 학습 비용은 거의 대부분이 Helm chart나 다른 외부 kubernetes manifest 정의 도구의 학습 비용이나 다름없었다.

kubernetes yaml 파일 그대로 사용해 보기

가장 단순하게는 그냥 kubernetes에 실행할 Depoyment나 Service, Ingress, Hpa 등의 yaml 파일을 git에 올려두고 해당 git의 대상 디렉터리를 정의하면 된다.
Argo CD는 해당 git의 디렉터리에 있는 yaml 파일을 찾아 실행한다.

Argo CD를 사용하면서 좋았던 부분이 기존에 공부용으로 만들어둔 kubernetes yaml 설정 파일을 별다른 변경을 하지 않아도 그대로 Argo CD application으로 등록하여 사용이 가능해졌다는 점이다.

helm 사용하기

helm으로 만든 템플릿을 사용할 수 있다.

kubernetes yaml을 그대로 사용하는 것도 방법이지만 환경에 따라 변수를 다르게 설정한다거나 동일한 yaml파일로 값을 다르게 하여 여러 application을 배포한다거나 하려면 helm이나 kustomize 템플릿을 사용하여 효율적인 관리를 할 수 있다.

반응형