반응형

전체 글 133

모니터링의 목표와 측정 항목

목표 CI/CD 파이프라인 중 가장 마지막 단계인 운영에 있어 필요한 측정 항목(metric)과 AWS의 대표적인 모니터링 도구인 CloudWatch를 좀 더 잘 다룰 수 있게 연습합니다. 또한, 쿠버네티스 환경에서 사용하는 Prometheus와 Grafana 조합을 살펴봅니다. 모니터링 목표 - 서비스에 생길 수 있는 현황을 파악하고 문제를 모니터링 함 => 어떤 지표를 수집하고, 어떤 메트릭을 기준으로 삼아야 할까?? - 시간을 기준으로 측정되는 주요 메트릭을 최소화 하여 고가용성 달성 - 사용량을 추적하여, 배포에 앞서 세운 가설을 검증하고 개선 => 애자일에서는 "검증된 학습 (Validated learning) 을 적용한다." 고 함 https://www.boldare.com/blog/lean-..

Project 3 : 마이크로서비스 DAY-3 (자동 재고 확보 시스템 을 위한 MSA 구성)

프로젝트 개요 AWS 클라우드 환경을 기반으로 하는 느슨하게 연결된 (loosely coupled) 어플리케이션 아키텍처에 대한 이해 프로젝트 요구사항 및 시나리오 프로젝트 명 : 을 위한 MSA 구성 Day 3 목표 Factory-API 문서 Factory-API Document Method - POST Path - /api/manufactures Request Body Schema : application/json { MessageGroupId : string(메시지 그룹 아이디) //"stock-arrival-group", MessageAttributeProductId : string(추가 생산이 필요한 제품 아이디), MessageAttributeProductCnt : string(추가 생산 요청..

DevOps/프로젝트 2023.02.22

Project 3 : 마이크로서비스 DAY-2 (자동 재고 확보 시스템 을 위한 MSA 구성)

프로젝트 개요 AWS 클라우드 환경을 기반으로 하는 느슨하게 연결된 (loosely coupled) 어플리케이션 아키텍처에 대한 이해 프로젝트 요구사항 및 시나리오 프로젝트 명 : 을 위한 MSA 구성 Day 2 목표 메시지 큐의 Pub/Sub 패턴과 Producer/Consumer 패턴의 차이를 이해한다 DB와 서버와의 통신이 가능하도록 연결한다 특정 상황에서 SNS, SQS로 메세지가 전달되도록 시스템을 구성한다 SQS에 들어온 메세지를 레거시 시스템(Factory API)으로 전달하는 시스템을 구성한다 레거시 시스템(Factory API)의 콜백 대상이되는 리소스를 생성해 데이터베이스에 접근 할 수 있게 한다 Step 1 : Lambda 서버 (Sales API) - DB 연결 #1. 제공 받은 레..

DevOps/프로젝트 2023.02.21

Project 3 : 마이크로서비스 DAY-1 (튜토리얼)

프로젝트 개요 AWS 클라우드 환경을 기반으로 하는 느슨하게 연결된 (loosely coupled) 어플리케이션 아키텍처에 대한 이해 최소 요구 사항 Serverless 를 이용한 메시지 대기열 활용 이해 및 구현 요구사항에 따른 어플리케이션과 인프라 구현 문제사항 해결을 위한 추가 리소스 생성 -> DLQ, Legacy 시스템 성능문제 해결, SES 아키텍처 다이어그램 제작 Advanced 인프라 관리와 재사용성을 위한 IaC 활용 -> Terraform을 통한 리소스생성 프로젝트 요구사항 및 시나리오 프로젝트 명 : 을 위한 MSA 구성 시나리오 는 온라인으로 도너츠를 판매합니다. 웹사이트 통해서 주문 버튼을 누르는 것으로 구매(Sales API)가 가능합니다. 창고에 재고가 있다면 재고가 감소하고 ..

DevOps/프로젝트 2023.02.18

Kubernetes Controller 종류와 장단점

ReplicationController Deployment Statefulset DaemonSet Job CronJob ReplicationController Pod의 복제본 수를 유지하고 관리하는 컨트롤러 지정된 수의 Pod 본제본을 유지하고, Pod가 삭제되거나 장애가 발생한 경우새로운 Pod를 자동으로 생성한다. 장점 - 쉽게 구성이 가능하며, 안정적이고 예측가능한 작동이 가능하다. 단점 - 업그레이드나 롤백 작업과 같은 변경 사항이 발생할 때 수동으로 처리해야 하는 한계가 있다. Deployment ReplicationController 의 업그레이드된 버전으로, Rolling Update와 같은 전략을 통해 Pod를 업데이트할 수 있다. pod의 롤아웃을 관리하고 여러개의 ReplicationC..

도메인 주도 설계 (DDD, Domain-Driven Design, 분산화 응용 프로그램 설계, 마이크로서비스, miro)

도메인 이란? - 지식, 영향력 또는 활동 영역 - 개발 분야에서는 소프트웨어로 해결하려는 문제의 영역을 의미함 도메인 지식 이란? - 어떤 산업 또는 분야를 이해하기 위해 필요한 지식 도메인을 개념적으로 표현하는 방법 - 객체지향 설계, ERD 등 도메인 주도 설계의 주요 용어 - 보편언어 (ubiquitous language) => 도메인의 특정 업무와 관련된 사람들 사이에서 통용되는 개념 - 한정된 맥락 (bounded context) => 한정된 맥락이 없다면 클래스 이름 설계의 어려움, 클래스가 비대해질 위험, 단일 책임 원칙 위배 가능성 높음, 의존 관계 신경써야함 등의 단점이 있음 DDD 가 제안하는 해결책 - 서비스를 나눔 - 데이터 베이스도 나눔 (마이크로 서비스와 DDD는 같지 않으며,..

DevOps/DevOps 2023.02.16

[Mac OS] helm, kubernetes 패키지 매니저 (helm으로 Jenkins 설치하기)

helm이란? kubernetes 어플리케이션 관리를 위한 오픈소스 패키지 매니저 kubernetes 에서 어플리케이션 배포를 위한 YAML 파일의 복잡성을 줄이는데 사용 Helm 을 사용하면 관리자는 쉽게 어플리케이션 설치, 업그레이드, 롤백 및 구성을 할 수 있음 Chart 라고 불리는 패키지를 사용하여 kubernetes 어플리케이션을 설치함 Chart 는 kubernetes 오브젝트, 구성 파일 및 기타 필요한 파일을 포함하는 패키지 임 https://helm.sh/ Helm Helm - The Kubernetes Package Manager. helm.sh 차트, 저장소, 릴리즈 helm에서의 패키지 = 차트 (Chart) helm에서의 패키지 저장공간 = 저장소 차트를 설치하고 쿠버네티스 클러..

Orchestration/helm 2023.02.16

[Mac OS] 인그레스 란? (Ingress 실습, Ingress 필요성, ingress controller)

인그레스 란? - 클러스터 내부의 서비스에 대한 외부 액세스를 제공하는 Kubernetes 오브젝트 임 => 즉, Kubernetes 클러스터 내에서 실행중인 서비스에 대한 외부 HTTP(S) 및 TCP 액세스를 관리함 제공 기능 - 클라우드에서 호스팅되는 어플리케이션을 위한 라우팅, 로드밸렁싱, SSL 종료와 같은 기능을 제공함 ( SSL (Secure Sockets Layer) = 데이터를 안전하게 전송하기 위한 프로토콜) => 일반적으로 인그레스 컨트롤러는 외부에서 들어오는 HTTPS 요청에 대해 SSL 인증서를 제공함 이를 사용해 요청을 수신하여 내부의 HTTP 서비스로 전달함 이때 SSL 인증서의 유효성을 검증하고 요청 전달하기 전 요청을 복호화 함 *** 이로써 클라이언트와 서버 간의 통신은 ..

볼륨 & 스테이트풀셋 (Persistence Volme)

Pod는 Stateless 하다 파드는 일시적이며, 언제나 삭제될 수 있음 파드 그 자체는 Stateless 하며 파드의 교체와 배치를 담당하는 것이 디플로이먼트임 Pod가 사라져도 데이터 남기기 파드 자체에 상태를 남겨야 하는 Stateful App => MYSQL, mongoDB, redis 와 같은 데이터베이스가 있을 수 있음 => 데이터 베이스 어플리케이션이 담긴 파드가 사라질때, 데이터가 같이 사라지면 안됨 Kubernetes 에도 영속적인 (Persistence) 데이터 저장을 위해 볼륨을 연결할 수 있음 Q. 볼륨과 퍼시스턴스 볼륨(Persistence Volume)은 어떤 차이가 있나요? (AWS EC2에도 비슷한 개념이 있습니다. EBS와 인스턴스 스토어 볼륨의 차이점과 연결해서 설명해주..

kubernetes 치트 시트

리소스 YAML 적용 kubectl apply -f 리소스 조회 kubectl get # 목록 조회 kubectl get all # 현재 네임스페이스에서 모든 리소스 조회 kubectl describe # 상세 조회 리소스 삭제 kubectl delete kubectl delete -f 파드 로그 조회 kubectl logs 클러스터 삭제 후 다시 생성 클러스터에 문제가 생겼거나, 초기화하고 처음부터 다시 시작하고 싶을 때 이용합니다. minikube delete # 삭제 minikube start # 다시 생성 참고링크 https://kubernetes.io/ko/docs/reference/kubectl/cheatsheet/ kubectl 치트 시트 이 페이지는 일반적으로 사용하는 kubectl 커맨드..

[Mac OS] 파드 외부 노출 시키기 (k8s, kubernetes, pod)

파드 외부로 노출 시키기 - 클러스터 안에 위치한 pod는 고유한 IP를 가지고 있지만, 직접 내부로 접속하는것이 아님 - 파드 서비스를 외부로 노출시키기 위해선 어떻게 해야 하는가? 서비스 리소스를 사용하면 파드에서 실행 중인 애플리케이션을 클러스터 외부에서 접근할 수 있다. 또한 서비스를 사용하여 클러스터 내부에서 사용할 수 있는 서비스만 게시할 수 있다. 쿠버네티스에서 서비스는 파드의 집합에 접근할 수 있는 정책을 정의하는 추상적 개념입니다. 서비스 리소스가 정의된 YAML 파일에 selector라는 것을 이용해 서비스할 대상 타겟을 설정할 수 있습니다. 파드 외부 노출 참고 링크 https://kubernetes.io/ko/docs/concepts/services-networking/ 서비스, 로..

[Mac OS] Deployment 란? (디플로이먼트, Deployment)

Deployment (디플로이먼트) 파드를 업데이트 하기 위한 선언적 명세 Deployment 리소스를 통한 설정 가능한 기능 - 레플리카셋, 즉 복제본 구성을 이용하여 파드를 원하는 개수만큼 실행시킬 수 있음 - Control Plane 을 이용하여 파드를 업데이트 할 수 있음 - 파드를 롤백할 수 있음 *복습* 다양한 배포 전략 어플리케이션 복제본에 대한 새버전 업데이트 배포 전략 1. 재생성 (Recreate) : 이전 버전을 삭제하고 새 버전 생성 2. 블루/그린 배포 : 한번에 이전 버전에서 새 버전으로 연결을 전환 3. 롤링 배포 : 이전 버전을 Scale down 하고, 새 버전을 Scale up 하는 방식으로 단계별로 교체 (롤아웃 이라고도 함) 4. 카나리 배포 : 새 버전이 잘 작동한닫..

[Mac OS] 파드 란?(Pods, k8s, kubernetes)

파드란? 파드 (pods)는 쿠버네티스의 배포 가능한 가장 작은 컴퓨팅 유닛 하나의 논리적인 호스트 ** 파드의 포함 요소 (도커 컨테이너 처럼 파드 내에서 다음 요소들은 격리 됨) 1. 하나 이상의 어플리케이션 컨테이너 2. IP 주소 3. 볼륨과 같은 공유 스토리지 워크로드란? 쿠버네티스에서는 "쿠버네티스 상에서 작동되는 어플리케이션"을 의미함 클라우드 분야에서는 "어떤 어플리케이션을 실행할 대 필요한 IT 리소스의 집합"을 의미함 - YAML 파일 생성 및 파드 생성 (simple-pod.yaml) apiVersion: v1 kind: Pod metadata: name: nginx spec: containers: - name: nginx image: nginx:1.14.2 ports: - conta..

[Mac OS] 쿠버네티스 설치 (minikube 설치, minikube 실습, cozserver)

minikube 란? - 쿠버네티스 로컬환경 실행을 위한 쿠버네티스 로컬 클러스터 환경 minikube 설치 참고 링크 https://minikube.sigs.k8s.io/docs/start/ minikube start minikube is local Kubernetes minikube.sigs.k8s.io **** 이미지 기반의 디플로이먼트 생성 및 배포 실습 ( cozserver:1.0 ) 1. minikube 설치 - 필자는 macOS M1 환경에서 설치를 진행하므로 아래 스펙으로 설치 % brew install minikube // minikube 설치 2. cluster 시작 % minikube start // 관리자 액세스 권한이 있는 터미널에서 실행 - doker가 실행중이여야함 => ope..

반응형