이전 포스팅에서는 ArgoCD와 Argo Rollout 컨트롤러를 통한 CD 환경을 구축했다. 이번 포스팅에서는 GitOps 상에서 CI 툴인 Jenkins가 Rollout Manifest 파일을 변경시킴으로써 CD 과정이 자동으로 트리거 되는 시나리오를 구축한다. 최종 GitOps 아키텍처 1) 사용자가 Git에 소스코드를 커밋/푸시 2) Jenkins가 커밋 감지 및 Jenkins Pipeline 실행 2-1) gradle 등의 빌드 툴로 빌드 2-2) 컨테이너 이미지 빌드 2-3) 컨테이너 레지스트리 푸시 (신규 태그 생성) 2-4) Git의 Manifest 레포지토리에 Rollout Manifest 수정(보통 컨테이너 이미지 tag 수정) 3) ArgoCD가 Git의 Rollout Manifest..
순서 1. Argo Rollout이란 2. Argo Rollout 플러그인 설치 1) Argo Rollout 설치 스크립트 작성 2) 실행 확인 3. Argo Rollout으로 배포 1) Rollout(Canary) 배포 설정 2) Rollout Object 배포 및 확인 3) 애플리케이션 신규 배포 및 Canary 업데이트 확인 Argo Rollout이란 Argo Rollout은 Canary, Blue-Grean와 같은 고급 배포 기능을 위한 Argo의 CRD 및 Kubernetes 컨트롤러이다. 이를 통해 Kubernetes에선 제공되지 않는 다양한 배포 기법을 적용하고 자동화할 수 있다. Canary 업데이트란 cf. Canary 배포에 대한 포스팅: https://jh-labs.tistory.co..
이번 포스팅에서는 ArgoCD 기반의 GitOps 환경 구축 과정을 정리한다. GitOps 구축 순서 1. ArgoCD 환경 구축 0) 사전준비: k8s 클러스터 외부에서 ArgoCD 접속을 위해 사용할 NodePort 포트포워딩(또는 LoadBalancer 사용) 1) ArgoCD Manifest 파일 작성 (kustomize 기반) 2) ArgoCD 설치 쉘 스크립트 파일 작성 3) ArgoCD Web UI접속 및 로그인 2. Git 연동 1) SSH Key 발급 2) GitHub에 등록 3) ArgoCD에 등록 3. k8s 클러스터에 애플리케이션 Manifest 배포 1) k8s 클러스터에 애플리케이션 배포 2) GitOps 및 Desired State 검증 ArgoCD 구성 환경 k8s 클러스터 ..
Git을 활용한 쿠버네티스 배포 컨셉 GitOps는 2017년 OpenGitOps 단체에서 발표한 개념으로 Git을 통해 k8s Manifest 파일을 관리하여 seamless 하게 Time to market을 목표로 운영하자는 개념이다. k8s는 yaml 같이 Pod, Deployment 등 모든 리소스를 Manifest 기반의 '선언적 코드'를 명시해 배포한다는 특징이 있다. 또한 git은 파일들에 대해 형상관리를 해준다는 측면에서 Manifest 파일들에 대한 버전을 관리할 수 있다. 즉, k8s 오브젝트들은 모두 Manifest로 관리된다는 특징을 기반으로 Manifest 파일에 대한 생성, 삭제, 변경 등에 대한 형상 관리를 git과 함께 함으로써 변경이력을 관리하자는 컨셉이다. GitOps의 ..
jib 개요 Jib은 Docker 데몬 없이 Java 애플리케이션에 최적화된 Docker 및 OCI 이미지를 빌드하고 Docker Hub와 같은 레지스트리로 저장하는 '플러그인'이다. jib은 gradle, maven과 같은 빌드툴과 함께 사용된다. jib과 기존 Dockerfile 기반 빌드 비교 위 그림과 같이 jib은 빌드와 Dockerfile 작성의 과정을 하나의 파이프라인으로 단일화한다. jib은 프로젝트를 빌드함과 동시에 컨테이너 이미지까지 만들어서 Docker Hub, AWS ECR 등 원하는 레지스트리에 푸시까지 해준다. jib 장점 1) Fast Jib은 애플리케이션을 여러 계층으로 분리하여 클래스에서 종속성을 분리한다. 이제 Docker가 전체 Java 애플리케이션을 다시 빌드할 때까지..
이번 포스팅에서는 Jenkins를 기반으로 CI(Continuous Integration)를 구축했던 과정을 다룬다. Jenkins에서 제공하는 플러그인들과 기능들을 활용하여 빌드 파이프라인 구성뿐만 아니라, 빌드 자동화, 테스트 자동화, 코드 품질 자동화 등의 작업을 파이프라인 상에 같이 연동시켜 사용하는 경우가 많다. 이번 포스팅에서는 Jenkins를 설치하고 간단한 빌드 파이프라인을 구축하는 과정만 다룰 것이고 아래와 같은 순서로 구성된다. 1) Jenkins 설치 및 기본 설정 (컨테이너 기반 Jenkins 설치, 플러그인 설치, SSH 셋업) 2) CI/CD Pipeline Job 구성 (GitHub 연동, Jenkinsfile 작성) 3) 이슈 처리 cf. Jenkins는 Java 프로그램이기..
Static Analysis vs Dynamic Analysis 정적분석과 동적분석은 모두 코드의 취약점을 발견하는데 목표를 두고 있다. 두 분석의 차이점은 분석기가 개발 주기에서 어느 시점에 수행되느냐에 있다. 동적분석은 애플리케이션의 실행 이후 시점에 수행되고 정적분석은 애플리케이션의 실행 이전 시점에 수행된다. 동적분석의 경우 애플리케이션을 실행시켜 애플리케이션 내 결함 및 취약점 분석, 메모리 및 쓰레드 결함 등을 분석할 수 있다. 이와 반대로 정적분석은 애플리케이션을 실행하지 않고 코드의 취약점을 분석하는데 목적이 있다. 정적분석과 동적분석의 목적에 대한 차이는 다음과 같다. - 정적분석: 개발 중 하면 안 될 것을 했는지 검사 - 동적분석: 개발 중 하려고 한 것을 잘했는지 검사 대표적인 분석..
Github Actions Github Actions는 Microsoft에서 Github을 인수한 뒤 출시된 CI 솔루션이다. Github과 연동하여 PR 이벤트뿐만 아니라 다양한 이벤트에 trigger 될 수 있는 다양한 작업을 정의할 수 있다. 또한 다양한 action들이 마켓플레이스에 공개되어 있어서 쉽게 workflow를 작성할 수 있다는 점과 CI 서버를 따로 설치하지 않고도 Github에서 제공하는 클라우드 호스팅을 통해 빠르게 CI파이프라인을 구축할 수 있다는 장점이 있다. 이번 포스팅에서는 Github Actions에 대해 넓고 얕게 핵심 개념과 기본 사용법에 대해 작성했다. Github Actions 주요 개념 5개 Github Actions을 사용하기 전에 알아야 할 주요 키워드는 총 ..
- Total
- Today
- Yesterday
- Non-Blocking
- 쿠버네티스
- go
- helm
- RDB
- ubuntu
- jvm
- argocd
- LFCS
- Controller
- container
- db
- golang
- Stream
- Java
- Kubernetes
- CICD
- 카프카
- docker
- ci/cd
- rolling update
- 우분투
- github actions
- spring
- 컨트롤러
- K8s
- Linux
- kafka
- 코틀린
- GitOps
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |