Search
Duplicate
📒

[Kubernetes Infra] 14-1. ArgoCD

상태
완료
수업
Kubernetes Infra
주제
4 more properties
참고

ArgoCD & GitOps

NOTE
쿠버네티스에서는 ArgoCD를 활용해서 GitOps 시스템을 구축할 수 있다!
ArgoCD 화면
쿠버네티스 환경 GitOps 시스템
지속적인 배포는 개발자가 코드를 수정하고 깃에 푸시하면 이러한 변경이 실제 시스템에 자동으로 적용되는 것을 의미합니다. 이러한 과정에서 ArgoCD와 같은 도구가 중요한 역할을 합니다. 개발자가 원격 저장소에 코드를 업로드하면, ArgoCD는 이를 감지하여 클러스터 운영 환경에 자동으로 배포합니다.
그러나 ArgoCD의 기능은 이것만이 아닙니다. 배포한 헬름 애플리케이션의 리소스 목록, 리소스 간 관계, 그리고 오류의 유무 등도 UI로 표시하여 관리자가 직관적이고 편리하게 파악할 수 있게 합니다.
특히, 애플리케이션을 헬름 차트로 배포할 경우, 다양한 리소스가 하나의 차트로 묶여 있어 상태 파악이 복잡할 수 있습니다. 하지만 ArgoCD를 사용하면 이러한 복잡성을 줄이고 상태를 쉽게 확인할 수 있습니다.

ArgoCD Helm 설치

NOTE
helm repo add argo https://argoproj.github.io/argo-helm helm pull argo/argo-cd --untar cd argo-cd cp values.yaml my-values.yaml
Bash
복사
helm repo & pull
global: # -- Mapping between IP and hostnames that will be injected as entries in the pod's hosts files hostAliases: - ip: 192.168.32.76 hostnames: - git.myhostname ## Server service configuration service: # -- Server service type type: LoadBalancer
YAML
복사
my-values 수정
k create ns argocd k ns argocd helm install argocd -f my-values.yaml . kgp k get svc k get secret argocd-initial-admin-secret \ -o jsonpath="{.data.password}" | base64 -d
Bash
복사
helm install
# argocd 커맨드라인 sudo curl -sSL -o /usr/local/bin/argocd https://github.com/argoproj/argo-cd/releases/latest/download/argocd-linux-amd64 sudo chmod +x /usr/local/bin/argocd argocd # 설치 확인 # repo 추가 argocd login 192.168.32.70 --username admin # y, lRvycBy2SeG7NxZa argocd repo add https://github.com/scofe97/cicd-web-project.git --username scofe97 --insecure-skip-server-verification argocd repo list
Bash
복사
argocd CLI & git repo 추가

ArgoCD 실습 - helm rabiimq 설치

NOTE
Helm을 통해 RabiitMq를 설치하고 ArcoCD를 통해 배포한다!
# helm repo & pull helm repo add bitnami https://charts.bitnami.com/bitnami helm pull bitnami/rabbitmq --untar cd rabbitmq cp values.yaml my-values.yaml # git에 추가 git add . && git commit -m "rabbitmq 헬름설치" git push
Bash
복사
Gitops를 위해 git에 올린다.

ArgoCD CRD

Application는 실제 애플리케이션의 배포를 관리한다.
apiVersion: argoproj.io/v1alpha1 kind: Application metadata: name: rabbitmq-helm namespace: argocd finalizers: - resources-finalizer.argocd.argoproj.io spec: # 배포대상, destination: namespace: rabbitmq server: https://kubernetes.default.svc # AppProject의 이름 project: default # 소스코드가 위치한 레포설정 source: repoURL: https://github.com/scofe97/infra_study path: rabbitmq targetRevision: HEAD helm: valueFiles: - my-values.yaml # 동기화 정책(자동, 수동) syncPolicy: syncOptions: - CreateNamespace=true
YAML
복사
application-rabbitmq.yaml
아르고시디의 applications CRD를 통해 배포한 쿠버네티스 애플리케이션은 현재 실행 상태와 깃 저장소의 의도한 상태를 비교한다.
차이점이 발생하면 대시보드를 통해 확인가능
AppProject는 애플리케이션들을 논리적으로 그룹화하고, 그룹에 대한 정책을 관리합니다.
apiVersion: argoproj.io/v1alpha1 kind: AppProject metadata: creationTimestamp: "2024-03-10T17:08:56Z" generation: 1 name: default namespace: argocd resourceVersion: "3428" uid: #... spec: clusterResourceWhitelist: - group: '*' kind: '*' # 프로젝트 내 배포될 수 있는 네임스페이스의 허용리스트 destinations: - namespace: '*' server: '*' sourceRepos: - '*' status: {}
YAML
복사
appproject 정보
아르고시디는 애플리케이션을 프로젝트 단위로 구분해서 관리한다.
k apply -f rabbitmq-helm-argo-application.yaml k get applications # 이후 사이트 들어가서 확인(270~)
Bash
복사
Application을 생성함으로서 ArgoCD가 배포할 리소스를 관리할 수 있게된다.
OutofSync 상태 ⇒ Sync 클릭
Sync 완료

ArgoCD 실습 - GitOps

NOTE
Git에 매니페스트파일을 올리고 ArgoCD로 배포한다!
apiVersion: apps/v1 kind: Deployment metadata: name: httpd namespace: httpd labels: app: httpd # service가 바라보는 label이 아님. 주의. spec: replicas: 3 selector: matchLabels: app: httpd template: metadata: labels: app: httpd # Service가 바라보는 label 지정 spec: containers: - name: httpd image: httpd
YAML
복사
httpd-deployment.yaml
apiVersion: v1 kind: Service metadata: name: httpd-svc namespace: httpd spec: ports: - name: http port: 80 protocol: TCP targetPort: 80 nodePort: 30180 selector: app: httpd type: NodePort
YAML
복사
httpd-service.yaml
git add . && git commit -m "https 매니페스트 추가" && git push
Bash
복사
git에 올린다.
apiVersion: argoproj.io/v1alpha1 kind: Application metadata: name: httpd namespace: argocd finalizers: - resources-finalizer.argocd.argoproj.io spec: destination: namespace: httpd server: https://kubernetes.default.svc project: default source: repoURL: https://github.com/scofe97/infra_study path: project-privDeployHub/argo-cd/httpd targetRevision: HEAD directory: recurse: true # 자동싱크 설정 syncPolicy: syncOptions: - CreateNamespace=true automated: prune: true
YAML
복사
Application을 생성하면 이제 httpd의 매니페스트 파일들을 읽고 ArgoCD가 자동으로 배포해준다.