일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 딥레이서 보상함수
- Aurora cluster
- grafana on kubernetes
- terraform
- 솔데스크
- blue-green
- Solution Architecture
- helm
- 로드밸런서 컨트롤러
- Kubernetes
- Prometheus install
- kubernetes 동작 원리
- LoadBalancer Controller
- 메탈LB
- jenkins
- 그라파나 대시보드
- 쿠버네티스 컴포넌트
- github action 사용법
- SAA 합격 후기
- Firelens
- EFS CSI Driver
- headless service
- 딥레이서
- 쿠버네티스
- AWS 딥레이서
- 깃허브 액션
- EKS 클러스터
- livenessPorbe
- 그라파나 시각화
- Kubernets on Jenkins
mingming
Github Action ArgoCD CI/CD 파이프라인 구축 (2) - Kustomize , ArgoCD 본문
Kustomize
Kustomize는 Kubernetes 애플리케이션 배포를 위한 오픈 소스 도구로, 배포 구성을 관리하고 수정하기 위한 YAML 패치 메커니즘을 제공합니다. Kustomize를 사용하면 Kubernetes 리소스 정의에 대한 설정을 관리하고 커스터마이징할 수 있으며, 여러 환경 또는 배포 단계에 따라 리소스를 조정할 수 있습니다. Kustomize는 Kubernetes에 내장되어 있으며, Kubernetes 1.14 버전 이후에는 kubectl 명령어를 통해 직접 사용할 수 있습니다.
Base
Base는 원본 리소스 정의를 담고 있는 디렉토리나 파일입니다. 기본적으로는 애플리케이션을 설명하는 Kubernetes 리소스 정의가 들어있는 곳입니다.
Overlay
Overlay는 Base를 기반으로 하여 수정사항이나 추가사항을 정의하는 디렉토리나 파일입니다. Overlay를 사용하여 리소스를 수정하거나 확장할 수 있습니다. 여러 Overlay를 사용하여 다양한 환경 또는 배포 단계에 맞게 설정을 변경할 수 있습니다.
Patch
Patch는 리소스의 특정 부분을 수정하기 위한 작은 YAML 파일입니다. 이를 사용하여 리소스의 필드를 추가, 변경 또는 삭제할 수 있습니다.
manifest repo
먼저 manifest repo를 생성해줍니다. 레포지터리 디렉터리 다음과 같습니다.
base 디렉터리에는 현재 배포중인 원본 리소스를 담은 매니페스트 파일이 위치합니다.
overlay/dev 디렉터리에는 수정하기 위한 patch yaml파일과 kustomization 파일이 위치합니다.
base/kustomization.yaml 에서는 kustomization 원본 리소스를 지정합니다.
---
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- myapp-deployment.yaml
- myapp-service.yaml
overlay/dev/kustomization.yaml 에서는 새로운 이미지 이름과 태그를 지정합니다.
patchesStrategicMerge 블럭에서 패치파일을 지정하고 해당 패치파일을 이용해 리소스를 패치합니다.
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
images:
- name: <AWS 계정 ID>.dkr.ecr.ap-northeast-2.amazonaws.com/my-app
newName: <AWS 계정 ID>.dkr.ecr.ap-northeast-2.amazonaws.com/my-app
newTag: 665f2f2b
resources:
- ../../base
patchesStrategicMerge:
- myapp-deployment-patch.yaml
- myapp-service-patch.yaml
ArgoCD 설치하기
argocd namespace 및 argocd 설치
kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
argocd 서비스 타입을 LoadBalancer 로 바꿔 ELB로 접속
kubectl patch svc argocd-server -n argocd -p '{"spec": {"type": "LoadBalancer"}}'
로드밸런서가 하나 생성된 것을 확인하실 수 있습니다. 해당 도메인으로 접속하시면 됩니다.
기본 username은 admin 입니다.
ARGO_PWD=`kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d`
echo $ARGO_PWD
위 명령어로 password를 얻을 수 있습니다.
application 생성
argocd 에서 관리할 application을 생성해 줍니다.
현재 kustomize 파일에 있는 이미지 태그가 존재하지 않아 생기는 오류입니다. 아래에서 kustomize build 부분을 추가 후 확인하면 정상적으로 sync 되는것을 확인 하실 수 있습니다.
Kustomize build
srcrepo 로 돌아가 workflow build.yaml 파일에 아래 내용을 추가해줍니다.
Kustomize 명령어를 통해 새로운 이미지 태그를 업데이트하고, 그 내용을 manifestrepo에 커밋하는 부분입니다.
kustomize edit set image 명령어를 통해 newTag가 생성됩니다.
- name: Setup Kustomize
uses: imranismail/setup-kustomize@v1
- name: Checkout kustomize repository
uses: actions/checkout@v2
with:
repository: Minki-An/k8s-manifest-repo
ref: main
token: ${{ secrets.ACTION_TOKEN }}
path: manifestrepo
- name: Update Kubernetes resources
run: |
echo ${{ steps.login-ecr.outputs.registry }}
echo ${{ steps.image-info.outputs.ecr_repository }}
echo ${{ steps.image-info.outputs.image_tag }}
cd manifestrepo/overlay/dev/
kustomize edit set image ${{ steps.login-ecr.outputs.registry}}/${{ steps.image-info.outputs.ecr_repository }}=${{ steps.login-ecr.outputs.registry}}/${{ steps.image-info.outputs.ecr_repository }}:${{ steps.image-info.outputs.image_tag }}
cat kustomization.yaml
- name: Commit files
run: |
cd manifestrepo
git config --global user.email "github-actions@github.com"
git config --global user.name "github-actions"
git commit -am "Update image tag"
git push -u origin main
해당 내용을 추가 후 커밋합니다.
빌드가 정상적으로 완료되고 ECR 에 새로운 이미지 태그가 업데이트 되었습니다.
manifestrepo에 newTag가 생성되었습니다.
레포지터리를 지켜보던 ArgoCD에서 자동으로 변경사항을 감지해 해당 레포지터리와 정보값을 일치하도록 sync합니다.
새로운 이미지 태그의 pod가 생성되고 기존의 pod는 삭제되는 것을 확인할 수 있습니다.
간단한 어플리케이션에 대해 github action과 Argocd를 이용해 간단한 CI/CD 파이프라인을 생성해보았습니다.
'DevOps' 카테고리의 다른 글
Jenkins Blue/Green Deployment (0) | 2023.09.14 |
---|---|
Jenkins 메뉴 소개 (0) | 2023.09.11 |
jenkins on kubernetes (0) | 2023.09.10 |
Github Action ArgoCD CI/CD 파이프라인 구축 (1) - ECR Push (0) | 2023.08.12 |
Github Action 이란? (1) | 2023.08.11 |