티스토리 뷰

tips

argoCD

killog 2022. 2. 21. 23:26
반응형

Argo CD (gitops)

logo

ArgoCD

  • Argo CD 는 Kubernetes용 GItOps 스타일의 배포를 지원하는 CD 도구이다.
  • Git 저장소의 내용과 쿠버네티스 클러스터를 동기화해주는 에이전트이다.
  • 쿠버네티스 클러스터 내부에서 Pod 형태로 배포가 된다.

why ArgoCD?

  • 애플리케이션 정의, 구성, 및 환경은 선언적이어야하고 버전을 제어해야한다.
  • 애플리케이션 배포 및 수명 주기 관리는 자동화되고 감시 가능하고, 이해하기 쉬워야한다.

특징

  • 애플리케이션 정의, 구성 및 환경은 선언적이어야하며, 버전을 제어한다.
  • 애플리케이션 배포 및 수명주기 관리는 자동화되고, 확인하기 쉽다.
  • 지정된 대상 환경에 애플리케이션 자동 배포

  • 여러 구성 관리/템플릿 도구 지원(Kustomize, Helm, Ksonnet, Jsonnet, plain-YAML)

  • 여러 클러스터에 대한 관리 및 배포 기능

  • SSO 통합(OIDC, OAuth2, LDAP, SAML 2.0, GitHub, GitLab, Microsoft, LinkedIn)

  • 권한 부여를 위한 다중 테넌시 및 RBAC 정책

  • Git 리포지토리에서 커밋된 모든 애플리케이션 구성으로 롤백/어디서나 롤백

  • 애플리케이션 리소스의 상태 분석

  • 자동화된 구성 드리프트 감지 및 시각화

  • 애플리케이션을 원하는 상태로 자동 또는 수동 동기화

  • 애플리케이션 활동의 실시간 보기를 제공하는 웹 UI

  • 자동화 및 CI 통합을 위한 CLI

  • Webhook 통합(GitHub, BitBucket, GitLab)

  • 자동화를 위한 액세스 토큰

  • 복잡한 애플리케이션 롤아웃을 지원하는 PreSync, Sync, PostSync 후크(예: 블루/그린 및 카나리아 업그레이드)

  • 애플리케이션 이벤트 및 API 호출에 대한 감사 추적

  • 프로메테우스 측정항목

  • Git에서 ksonnet/helm 매개변수 재정의를 위한 매개변수 재정의

작동 원리

  • argoCD 는 원하는 애플리케이션 상태를 정의하기 위한 소스로 git repository 를 사용하는 GitOps 패턴을 따른다.
  • Kubernetes 매니페스트는 여러 방법으로 지정할 수 있다. (helm차트 이용 권장((많이 쓰니깐~)))
  • ArgoCD는 지정된 대상 환경에 원하는 애플리케이션 사애의 배포를 자동화한다.

빠른 시작

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

아키텍처

아르고 CD 아키텍처

  • ArgoCD 는 실행중인 애플리케이션을 지속적으로 모니터링하고 현재 라이브 상태를 원하는 대상 상태와 비교하는 Kubernetes 컨트롤러로 구현된다.

GitOps

  • 핵심은 git repository에 저장된 쿠버네티스 매니페스트 같은 파일을 이용하여 배포를 선언하는 것이다.
  • git 저장소에 있는 것을 쿠버네티스 클러스터에 동기화한다.

기본 배포 방식

  1. 개발자가 소스 코드를 작성한다.
  2. git 저장소에 올린다.
  3. Jenkins , CircleCI, Github Action 과 같은 CI 툴에 의해서 테스트와 빌드 같은 작업이 실행된다.
  4. 생성한 컨테이너 이미지를 컨테이너 저장소(ECR)에 업로드한다.
  5. CI/CD 툴은 업로드된 컨테이너 이미지의 정보를 참조해서 서버에 배포한다.

img

GitOps 의 배포 방식

  1. (기존과 동일) 개발자가 소스코드를 작성한다.
  2. (기존과 동일) Git 저장소에 올린다.
  3. (기존과 동일) Jenkins , CIrcleCI, Github Action 과 같은 CI툴에 의해 테스트와 빌드 같은 작업이 실행되고, 생성한 컨테이너 이미지를 컨테이너 저장소(ECR)에 업로드한 후
  4. 매니페스트가 저장된 Git 저장소를 가져온다.
  5. 그리고 매니페스트의 특정부분(예를 들면, 이미지 태그)을 업데이트 한후, Git 저장소에 올리고 작업을 종료한다.

img

Getting Started

Requirements

1. Install Argo CD

이렇게 하면 새로운 네임스페이스가 생성되고argocd여기서 Argo CD 서비스와 애플리케이션 자원이 상주하게 된다

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

2. Download Argo CD CLI

https://github.com/argoproj/argo-cd/releases/latest에서 최신 Argo CD 버전을 다운로드하십시오.자세한 설치 지침은 CLI 설치 설명서를 참조하십시오.

3. Access The Argo CD API Server

기본적으로 Argo CD API 서버는 외부 IP로 노출되지 않는다.API 서버에 액세스하려면,다음 기술 중 하나를 선택하여 Argo CD API 서버를 표시하십시오.

Service Type Load Balancer

argocd-server 서비스 유형을 다음으로 변경LoadBalancer:

kubectl patch svc argocd-server -n argocd -p '{"spec": {"type": "LoadBalancer"}}'
Ingress

Argo CD를 ingress과 함께 구성하는 방법에 대한 ingress설명서를 따르십시오.

Port Forwarding

Kubectel 포트 포워딩은 서비스를 노출하지 않고 API 서버에 연결하는 데도 사용할 수 있다.

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

그런 다음 localhost:8080을 사용하여 API 서버에 액세스할 수 있다.

4. Login Using The CLI

admin 계정의 초기 암호는 자동으로 생성되고 Argo CD 설치 네임스페이스에 argocd-initial-admin-secret라는 이름의 암호에 일반 텍스트로 저장됩니다. 쿠벡틀을 사용하여 간단히 이 암호를 검색할 수 있습니다.

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

사용자 이름 admin과 위의 암호를 사용하여 Argo CD의 IP 또는 호스트 이름에 로그인합니다.

argocd login <ARGOCD_SERVER>

5. Create An Application From A Git Repository

게스트북 애플리케이션이 들어 있는 예제 저장소는 다음 사이트에서 사용할 수 있습니다. https://github.com/argoproj/argocd-example-apps.git를 통해 Argo CD의 작동 방식을 확인할 수 있습니다.

Creating Apps Via CLI

다음 명령을 사용하여 예제 게스트북 애플리케이션을 생성합니다.

argocd app create guestbook --repo https://github.com/argoproj/argocd-example-apps.git --path guestbook --dest-server https://kubernetes.default.svc --dest-namespace default`
Creating Apps Via UI

브라우저를 열고 브라우저에서 IP/호스트 이름을 방문하여 로그인하고 4단계에서 설정한 자격 증명을 사용합니다.

로그인 후 아래와 같이 + New App 버튼을 클릭합니다.

+ new app button

앱에 방명록 이름을 지정하고 프로젝트 기본값을 사용하고 동기화 정책을 수동으로 유지합니다.

app information

저장소 URL을 github repo URL로 설정하여 https://github.com/argoproj/argocd-example-apps.git repo를 Argo CD에 연결하고 리비전을 HEAD로 유지한 다음 guestbook PATH를 설정합니다.

connect repo

Destination에서 클러스터 URL을 https://kubernetes.default.svc(또는 클러스터 이름의 경우 in-cluster)로 설정하고 네임스페이스를 기본값으로 설정합니다.

destination

6. Sync (Deploy) The Application

Syncing via CLI

guestbook 애플리케이션이 생성되면 이제 상태를 볼 수 있습니다.

$ argocd app get guestbook
Name:               guestbook
Server:             https://kubernetes.default.svc
Namespace:          default
URL:                https://10.97.164.88/applications/guestbook
Repo:               https://github.com/argoproj/argocd-example-apps.git
Target:
Path:               guestbook
Sync Policy:        <none>
Sync Status:        OutOfSync from  (1ff8a67)
Health Status:      Missing

GROUP  KIND        NAMESPACE  NAME          STATUS     HEALTH
apps   Deployment  default    guestbook-ui  OutOfSync  Missing
       Service     default    guestbook-ui  OutOfSync  Missing

OutOfSync애플리케이션 상태는 애플리케이션이 아직 배포되지 않았고 Kubernetes 리소스가 생성되지 않았기 때문에 초기 상태입니다 . 애플리케이션을 동기화(배포)하려면 다음을 실행합니다.

argocd app sync guestbook

이 명령은 저장소에서 매니페스트를 검색하고 매니페스트를 수행합니다 kubectl apply. 이제 방명록 앱이 실행 중이며 이제 해당 리소스 구성 요소, 로그, 이벤트 및 평가된 상태를 볼 수 있습니다.

Syncing via UI

방명록 앱

앱 보기

참고 문헌

https://ithub.tistory.com/345

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

반응형

'tips' 카테고리의 다른 글

shell script how to user my absolute path name  (0) 2022.04.11
linux tree 분석  (0) 2022.04.10
Pycharm, vim 에 black 세팅하기  (0) 2021.09.16
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함