쿠버네티스 cloudserver-web : Argo CD 자동화

KIM HYUNMIN·2024년 10월 10일

쿠버네티스

목록 보기
14/16

CI/CD는 소프트웨어 개발의 중요한 개념으로, 지속적인 통합과 지속적인 배포를 의미한다. 이 두개념을 통해 소프트웨어 개발,테스트,배포의 자동화된 파이프라인을 구축하여 개발 효율성을 높이고, 코드 품질을 향상시킬수 있다.

CI란?

  • CI는 개발자가 코드 변경 사항을 자주(하루에도 여러 번) 메인 브랜치에 통합하는 프로세스를 의미합니다.
  • 모든 코드 변경 사항은 자동화된 빌드와 테스트 과정을 거치게 되며, 이를 통해 새로운 코드가 기존 코드와 잘 호환되는지, 오류가 없는지를 검증합니다.
  • 주요 목표는 개발자들이 작업을 병합하는 과정에서 발생할 수 있는 충돌을 빠르게 발견하고 해결하는 것입니다.

CD란?

  • Continuous Delivery(지속적인 전달)는 CI를 거친 코드가 항상 배포 가능한 상태가 되도록 보장하는 프로세스입니다. 코드 변경 사항이 자동화된 테스트를 통과하면, 수동 승인 후에 프로덕션 환경에 배포될 수 있습니다.
  • Continuous Deployment(지속적인 배포)는 자동화된 테스트를 통과한 모든 코드 변경 사항이 자동으로 프로덕션 환경에 배포되는 것을 의미합니다. 수동 승인 과정이 없으며, 더 자주 배포하는 방식입니다.

CI/CD 파이프라인의 주요 구성 요소

  • 코드 리포지토리
  • 자동화된 빌드
  • 자동화된 테스트
  • 배포 단계

CI/CD 사용했을 때의 장점

  • 개발 속도 향상
  • 높은 코드 품질 보장
  • 배포 자동화
  • 문제의 조기 발견
  • 팀 간의 협업 향상

Argo CD 설치 및 다운로드

# Argo CD 네임스페이스 생성
kubectl create namespace argocd

# Argo CD 설치
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
#설치된 리소스가 잘 실행 중인지 확인
kubectl get pods -n argocd

Argo CD 서비스 파일 작성 및 배포

Argo CD 서버에 접근할 수 있도록 서비스 파일(argocd-server.yaml)을 작성하여 NodePort 방식으로 노출합니다.

apiVersion: v1
kind: Service
metadata:
  annotations:
    kubectl.kubernetes.io/last-applied-configuration: |
      {"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"creationTimestamp":"2024-10-06T09:30:16Z","labels":{"app.kubernetes.io/component":"server","app.kubernetes.io/name":"argocd-server","app.kubernetes.io/part-of":"arg>
  creationTimestamp: "2024-10-06T09:30:16Z"
  labels:
    app.kubernetes.io/component: server
    app.kubernetes.io/name: argocd-server
    app.kubernetes.io/part-of: argocd
  name: argocd-server
  namespace: argocd
  resourceVersion: "1112038"
  uid: 647a69fa-71f5-40dd-a715-f3334f396fbf
spec:
  clusterIP: 10.108.21.147
  clusterIPs:
  - 10.108.21.147
  externalTrafficPolicy: Cluster
  internalTrafficPolicy: Cluster
  ipFamilies:
  - IPv4
  ipFamilyPolicy: SingleStack
  ports:
  - name: http
    nodePort: 30080
    port: 80
    protocol: TCP
    targetPort: 8080
  - name: https
    nodePort: 30443
    port: 443
    protocol: TCP
    targetPort: 8080
  selector:
    app.kubernetes.io/name: argocd-server
  sessionAffinity: None
  type: NodePort
status:
  loadBalancer: {}
# 적용
kubectl apply -f argocd-server.yaml

웹 UI 접속

http://<클러스터-노드-IP>:30080

아이디: admin

# 초기 비밀번호 확인
kubectl get secret argocd-initial-admin-secret -n argocd -o jsonpath="{.data.password}" | base64 --decode


new app 누르고
application name 설정 저는 cloudapp
프로젝트는 기존에 만든것 없으니 default
SYNC POLICY는 저는 자동 동기화를 원하니 AUTOMATIC
하고 깃허브 url 작성하고 클러스터 네임스페이스 모두 작성하면 됩니다.그러고 만들면 깃허브에 올라가있는 설정 파일데로 저절로 연결 됩니다.


이제 로컬에서 설정파일을 변경하고 깃허브에 푸시만 해도 저절로 Argo CD가 gitops 방식으로 이를 인식해서 자동을 동기화 해서 적용시켜주게 됩니다.
다음에는 이내용을 애플리케이션 cicd 파이프라인을 구축해서 cloudapp 깃허브에 푸쉬하게 되면 저절로 도커 허브 레지스트리에 푸시가 되고 쿠버네티스 deployment.yml 파일에서도 최신 이미지를 사용해서 다시 배포되게 하는 자동화를 구상해보겠습니다. 즉 쉽게 말해서 앱 개발을 완료해서 깃허브에 푸시만해도 쿠버네티스 배포까지 최신이미지로 재배포 되는 과정을 자동화 해보겠습니다.

profile
Linux,Window,Network,docker,kubernets

0개의 댓글