CircleCI를 이용한 배포 자동화
·
Ops
개요CircleCI를 활용하여 Docker 기반 Spring Boot app을 자동으로 빌드하고, Azure VM에 배포하는 CI/CD 파이프라인을 구축해보았습니다. CircleCI의 장점빠른 빌드 속도설정이 간편함자체 서버 없이 클라우드에서 CI/CD를 수행Docker 및 Kubernetes 친화적사용기술CI/CD 툴: CircleCI소스 코드 저장소: GitHub배포 환경: Azure VM + Docker프로세스GitHub에 코드 푸시 → 자동 빌드 → Docker 이미지 생성 → 서버에 자동 배포  CircleCI 계정 생성 및 GitHub 연동회원가입 후 organization 생성후 프로젝트를 생성합니다. github repo와 연동해줍니다. 선택한 repo가 추가되었습니다.  yml 파일을 ..
메트릭 모니터링 환경 구축하기
·
Ops
Introduce서비스를 운영하면서 중요한 메트릭을 수집해서 모니터링 할 수 있는 환경을 구축해보았습니다.Prometheus 설치$ helm repo add prometheus-community https://prometheus-community.github.io/helm-charts$ helm install prometheus prometheus-community/prometheusGrafana 설치nginx ingress를 사용하기 위해서 values.yaml을 수정했습니다.nginx ingress는 설치되어 있어야 합니다. 저는 ci/cd할때 설치가 되어 있어서 바로 진행하겠습니다.$ helm repo add grafana https://grafana.github.io/helm-charts$ hel..
Jenkins로 ci/cd 파이프라인 구축하기(3)
·
Ops
ArgoCD 설치//가용성 없는 버전$ kubectl create namespace argocd$ kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/v2.12.0/manifests/install.yaml//가용성 있는 버전 kubectl create namespace argocdkubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/v2.12.0/manifests/ha/install.yaml argocd를 local kind 클러스터에서 사용할 것이기 때문에 nginx ingress를 이용해서 접근하겠습니다.//nginx-ingres..
Jenkins로 ci/cd 파이프라인 구축하기(2)
·
Ops
Introduce지난번에 gitlab과 jenkins를 연동하는 것까지 했으니 이제 script를 작성해서 gitlab에 코드가 push 됐을 때 spring 서버 이미지를 빌드할 수 있도록 해보겠습니다. sonarqube를 이용해 소스코드 취약점을 분석하고 harbor로 private한 이미지 저장소를 구축해 보았습니다.Harbor 저장소 띄우기이미지를 빌드해서 올릴 저장소를 먼저 띄워보겠습니다.먼저 harbor 인증서를 생성해줍니다.# Root CA의 비밀키 생성$ mkdir -p ~/certs$ cd ~/certs$ openssl genrsa -out ca.key 4096#Root CA의 비밀키와 짝을 이룰 공개키 생성$ openssl req -x509 -new -nodes -sha512 -days..
Jenkins로 ci/cd 파이프라인 구축하기(1)
·
Ops
Introducejenkins를 이용해서 이미지를 빌드해서 argocd를 이용해 k8s 환경에 자동 배포 되도록 ci/cd 파이프라인을 만들어 보고자 합니다.sonarqube는 소스코드 취약점 분석 오픈소스이고 harbor는 private image reagistry이고 trivy를 통해 이미지 취약점 분석을 할 수 있습니다.Jenkins 띄우기컨테이너를 만들면서 플러그인도 함께 설치 해줬습니다.//gcp 무료 크레딧을 이용해 서버를 띄웠습니다.//DockerfileFROM jenkins/jenkins:ltsCOPY plugins.txt /usr/share/jenkins/ref/plugins/plugins.txtUSER rootRUN jenkins-plugin-cli -f /usr/share/jenkin..
k8s 환경에 내 서비스 띄워보기
·
Ops
Introduce클라우드 웨이브 활동을 할 때는 eks 클러스터에 내 서비스를 띄워서 테스트 했지만 비용 이슈로 인해 kind 클러스터로 돌아와서 복습과 그 때는 해결하지 못했던 문제들을 해결해보고자 합니다. kind 클러스터는 예전에 구축했으니 클러스터에 바로 서비스를 띄워서 잘 작동하는지 확인해보겠습니다1. ConfigMap, Secret 띄우기쿠버네티스에서 사용하는 파라미터와 환경변수를 관리하기 위해 ConfigMap과 Secret을 사용했습니다.Secret은 패스워드 및 인증서 와 같은 중요정보 보관용으로 사용(BASE 64 인코딩)configMap에 immutable:true를 해주면 성능 향상(감시하지 않는다.)//data 부분에 configMap으로 관리할 변수 추가apiVersion: v1..
kind 이용해서 k8s 다뤄보기
·
Ops
Intro쿠버네티스 실습을 해보기 위해서 kind를 이용해서 간단하게 쿠버네티스 환경을 구축한 뒤 실습을 진행했습니다.kind 설치하기kind를 이용하면 간단하게 쿠버네티스 cluster를 설치할 수 있습니다.설치 가이드: https://kind.sigs.k8s.io/docs/user/quick-start/#installation  클러스터 yaml파일 작성kind: ClusterapiVersion: kind.x-k8s.io/v1alpha4name: kind-clusternodes:- role: control-plane kubeadmConfigPatches: - | kind: InitConfiguration nodeRegistration: kubeletExtraArgs: ..
컨테이너 환경 로그 수집해보기
·
Ops
Introdocker compose에 대해서 배우면서 도커 볼륨을 이용해서 서버로 이용하는 컨테이너와 로그수집기, 메트릭 수집기간에 볼륨을 공유하여 볼륨 안에 데이터를 저장할 수 있다는 방법을 듣고 구현해보았습니다.docker compose를 사용한 이유여러 컨테이너를 한개의 yaml 파일로 관리할 수 있고 버전 관리가 용이합니다. 도커 네트워크와 볼륨을 관리하기 용이합니다.Tooldocker-composeELK stackdocker compose yaml 파일 작성해서 ELK 파이프라인 구축하기elasticsearch, logstash, kibana를 docker compose를 이용해서 구축했습니다. 로그를 표준출력으로 logstash로 내보내서 elasticsearch에 저장되도록 구현했습니다.EL..
Github Action을 이용한 CI/CD 파이프라인 구축
·
Ops
Docker와 github Action을 이용해서 구현했습니다.1. 프로젝트에 github-action workflow 작성할 yml 파일 생성.github/workflows 폴더 안에 위치해야 합니다.name: CI/CDon: push: branches: ["dev"] # dev 브랜치에 push 했을경우 pull_request: types: [closed] # pull_request closed 됐을 경우 workflow_dispatch: # 수동 실행 가능jobs: build: runs-on: ubuntu-latest # OS 환경 #if: github.event.pull_request.merged == true && github.event.pull_request.bas..