일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- headless service
- LoadBalancer Controller
- 딥레이서
- livenessPorbe
- 솔데스크
- Kubernets on Jenkins
- 딥레이서 보상함수
- 그라파나 대시보드
- 로드밸런서 컨트롤러
- Firelens
- 깃허브 액션
- blue-green
- 쿠버네티스 컴포넌트
- jenkins
- github action 사용법
- kubernetes 동작 원리
- AWS 딥레이서
- Prometheus install
- Aurora cluster
- EFS CSI Driver
- 쿠버네티스
- Solution Architecture
- 그라파나 시각화
- SAA 합격 후기
- EKS 클러스터
- helm
- 메탈LB
- grafana on kubernetes
- Kubernetes
- terraform
mingming
Jenkins + ArgoCD CI/CD Pipeline 구축(2) - Kustomize, ArgoCD 본문
Kustomize
Kustomize는 Kubernetes 애플리케이션 배포를 위한 오픈 소스 도구로, 배포 구성을 관리하고 수정하기 위한 YAML 패치 메커니즘을 제공합니다. Kustomize를 사용하면 Kubernetes 리소스 정의에 대한 설정을 관리하고 커스터마이징할 수 있으며, 여러 환경 또는 배포 단계에 따라 리소스를 조정할 수 있습니다. Kustomize는 Kubernetes에 내장되어 있으며, Kubernetes 1.14 버전 이후에는 kubectl 명령어를 통해 직접 사용할 수 있습니다.
해당 프로젝트에서 배포할 manifest 파일이 있는 git repo의 파일 구조는 다음과 같습니다.
├── base
│ ├── kustomization.yaml
│ ├── sessac-deployment.yaml
│ ├── sessac-ingress.yaml
│ └── sessac-service.yaml
├── ingress
│ ├── argo-ingress.yaml
│ ├── grafana-ingress.yaml
│ ├── jenkins-ingress.yaml
│ └── kibana-ingress.yaml
└── overlays
├── dev
│ ├── dev-deployment-patch.yaml
│ ├── dev-ingress-patch.yaml
│ ├── dev-service-patch.yaml
│ └── kustomization.yaml
├── product
│ ├── kustomization.yaml
│ ├── prod-deployment-patch.yaml
│ ├── prod-ingress-patch.yaml
│ └── prod-service-patch.yaml
└── stage
├── kustomization.yaml
├── stage-deployment-patch.yaml
├── stage-ingress-patch.yaml
└── stage-service-patch.yaml
Base
Base는 원본 리소스 정의를 담고 있는 디렉토리나 파일입니다. 기본적으로는 애플리케이션을 설명하는 Kubernetes 리소스 정의가 들어있는 곳입니다.
Overlay
Overlay는 Base를 기반으로 하여 수정사항이나 추가사항을 정의하는 디렉토리나 파일입니다. Overlay를 사용하여 리소스를 수정하거나 확장할 수 있습니다. 여러 Overlay를 사용하여 다양한 환경 또는 배포 단계에 맞게 설정을 변경할 수 있습니다.
Patch
Patch는 리소스의 특정 부분을 수정하기 위한 작은 YAML 파일입니다. 이를 사용하여 리소스의 필드를 추가, 변경 또는 삭제할 수 있습니다.
kustomization.yaml
kustomize 도구의 설정파일로 리소스 정의에 대한 수정을 허용하여 여러 환경에 맞게 manifest 파일을 쉽게 커스터마이징 할 수 있도록 합니다. 다음은 해당 프로젝트에서 사용한 kustomization.yaml 파일입니다.
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- ../../base ## 참조할 base 리소스
patches:
- path: prod-ingress-patch.yaml ## Ingress 리소스에 대한 패치 파일 경로
target:
group: networking.k8s.io
kind: Ingress
name: sessac-app-ingress ## Ingress 리소스의 이름
- path: prod-deployment-patch.yaml ## Deployment 리소스에 대한 패치 파일 경로
target:
group: apps
kind: Deployment
name: sessac-app-deployment ## Deployment 리소스의 이름
version: apps/v1 ## Deployment의 API 버전
- path: prod-service-patch.yaml ## Service 리소스에 대한 패치 파일 경로
target:
kind: Service
name: sessac-app-service ## 목표 Service 리소스의 이름
version: v1 ## Service의 API 버전
images:
- name: <AWSID>.dkr.ecr.ap-northeast-2.amazonaws.com/sessac-app
newName: <AWSID>.dkr.ecr.ap-northeast-2.amazonaws.com/sessac-app
newTag: "{Build_Number}" ## 새 이미지의 태그
ArgoCD
ArgoCD는 선언적 배포를 통해 정의되어있는 YAML파일을 Kubernetes cluster에 배포하는 역할을 담당합니다. YAML 파일이 저장되어 있는 git repo를 사용해 손쉽게 배포가 가능하고, 프라이빗 git repo를 이용하기 위해선 같이 인증을 통한 git repo 등록이 필요합니다.
git repo 등록
SSH, HTTPS, Github App 등 여러가지 인증 방식을 지원하지만 해당 프로젝트에서 HTTPS 방식으로 인증을 진행했습니다. 해당 방식으로 repo를 등록할 때 사용자 이름과 Credential이 필요합니다.
ArgoCD가 바라볼 manifest git repo에 대한 Credential을 생성 후 사용자 이름과 Credential을 입력하여 repo 등록을 완료합니다.
Applications 등록
Ingress와 prod-sesac-app 두 개의 Application을 생성했습니다. Application은 배포하고자 하는 애플리케이션을 의미합니다. 각 애플리케이션은 Git repo 에서 가져온 정의를 기반으로 하며, Kubernetes 클러스터에 배포됩니다.
ArgoCD는 Helm, Kustomize, Directory 방식의 배포를 지원하며. Ingress의 경우 변경사항이 거의 없을거라 판단하여 Directory 방식으로 애플리케이션을 구성하였고, prod-sesac-app의 경우 Kustomize 방식을 통해 애플리케이션을 구성하였습니다. 앞서 Jenkins에서 Kustomize 명령이 수행되어 변경된 kustomization.yaml 파일의 내용을 기반으로 build해 변경사항을 체크하고 지속적으로 sync를 맞추게 됩니다.
'DevOps' 카테고리의 다른 글
Jenkins Maven Project JDK 버전 설정 (0) | 2025.02.08 |
---|---|
Jenkins + ArgoCD CI/CD Pipeline 구축(1) - Jenkins (0) | 2024.02.04 |
Jenkins Blue/Green Deployment (0) | 2023.09.14 |
Jenkins 메뉴 소개 (0) | 2023.09.11 |
jenkins on kubernetes (0) | 2023.09.10 |