home..

Msa Architecture

kubernetes fullstack msa mont-kim moonwalk

K8S FullStack Demo

전체 아키텍쳐

Untitled

Components

Untitled

컨테이너 기반으로 돌아가는 MSA Fullstack 구축

CI CD(integration / deployment)를 지원하는 구성

Gitlab & Gitlab Runner와 ArgoCD를 통해 CI/CD 파이프라인을 구성해

운영시스템에 배포 파이프라인 구축

HAPROXY

SW L4/L7 LoadBalancer

쿠버네티스를 사용하기 이전부터 오픈소스 L7 로드밸런서로서 점유율이 높았으며, 컨트롤 플레인 내부에 마스터 노드들 위에 배포 되어 있는 여러 쿠버 API 서버로 로드밸런싱하기 위해서 사용합니다. 헬스 체크를 지원함으로써 단일 장애점 문제를 해소하는데 도움이 되는 기능이 존재합니다

  • roundrobin: 순차적으로 분배 (최대 연결 가능 서버 4128개)
  • static-rr: 서버에 부여된 가중치(weight)에 따라서 분배
  • leastconn: 접속 수가 가장 적은 서버로 분배
  • source : 운영 중인 서버의 가중치를 나눠서 접속자 IP를 해싱(hashing)해서 분배
  • uri: 접속하는 URI를 해싱해서 운영 중인 서버의 가중치를 나눠서 분배(URI의 길이 또는 depth로 해싱)
  • rdp-cookie: TCP 요청에 대한 RDP 쿠키에 따른 분배

접속하고자 하는 URL을 HAPROXY로 보내주면

HAPROXY에서 loadbalancing을 통해 해당 주소로 리다이렉팅 해준다.

Untitled

  1. windows의 hosts 파일에서 해당 도메인을 입력받으면 HAPROXY로 연결
  2. HAPROXY에서 해당 도메인을 backend로 리다이렉팅
  3. 리다이렉팅 받은 기존 서비스에 연결

Untitled

http://haproxy.mont-kim.com:8888/status 로 접속을 하게되면 HAProxy의 작동상태를 확인 할 수있다.

K8S

K8S는 컨테이너 Orchestration 도구로서 컨테이너의 배포, 관리, 확장, 네트워킹을 자동화

Kubernetes Rancher의 차세대 K8S 배포판인 RKE2를 사용

Untitled

3개의 master node끼리 연결되어 있다.

K8S dashboard로 서비스마다 pod가 NODE별로 생성되어 병렬 처리를 하는 것을 볼 수 있다.

Longhorn

K8S용 고가용성 영구 스토리지

  • 스냅샷, 백업
  • 클러스터 재해복구

기능이 있습니다.

Untitled

동적 볼륨 프로비저닝으로 NFS 구성.

나중에 Longhorn에 NFS 마운트를 위해 헬퍼프로그램을 설치한다.

(마스터 노드가 아닌 모든 노드에 설치 필요)

CI / CD

Untitled

Untitled

  • 개발자가 git push / commit
  • gitlab runner에서 commit 된 코드 실행 및 이미지 빌드
  • 생성된 docker image를 Harbor에 Push
  • ArgoCD가 gitops repository 변화 감지
  • K8S 클러스터 배포

ArgoCD

K8S용 Continous Deployment 도구.

GitOps 흐름을 고려해 설계, K8S cluster에 설치

Untitled

ArgoCD는 git을 배포의 원천으로 사용하는 GitOps CD 도구입니다. Git에 작성된 매니페스트 기반으로 쿠버네티스의 리소스 상태를 일치시키므로 선언적인 리소스 관리가 가능합니다. 소스 코드를 원천으로 애플리케이션만을 배포하는 것과 달리 선언적인 리소스를 배포하므로 배포된 리소스 전체의 상태에 대한 일관성 있는 관리가 가능합니다.

Harbor

Docker를 위한 Private Docker Registry

오픈소스 컨테이너 이미지 레지스트리 기능을 제공

(Harbor는 역할 기반 접근 제어, 이미지 취약점 스캐닝, 이미지 서명 등의 기능을 갖춘 오픈소스 컨테이너 이미지 레지스트리입니다. Harbor는, Kubernetes와 Docker와 같은 클라우드 네이티브 플랫폼에서 이미지를 안전하고 일관적으로 관리할 수 있는 컴플라이언스와 성능, 상호 운영성을 제공합니다)

가장 큰 컨테이너 레지스트리

하버 자체를 관리할 수 있는 API를 통해서 자동화도 쉽게 구성 가능한 장점

추가로 번들(플러그인)으로 이미지 스캐너인(trivy)나 차트 저장소(chartmuseum)도 같이 구성하여 컨테이너 인프라 에서 요구하는 것에 대한 모든 저장소를 통합할 수 있습니다.

Untitled

CLI 명령어로 Image Pull / Push test 진행

Gitlab

Gitlab CI/CD는 오픈소스 및 SaaS 소스코드 저장소인 Gitlab에서 사용할 수 있는 CI/CD 기능입니다. Github Actions와 달리 설치형 오픈소스 버전에서도 CI/CD 기능을 사용할 수 있습니다.

Github Actions가 CI에 집중하는 것과 달리 pipeline 기능을 통해 CI/CD를 함께 구성할 수 있으며, Auto DevOps 기능을 통해 빌드, 테스트, 배포, 보안점검 기능 등을 한꺼번에 수행할 수 있습니다. 또한 Auto Monotoring 기능을 통해 배포된 애플리케이션의 모니터링까지 수행할 수 있어 CI/CD를 넘어서 DevOps 도구로서의 기능까지 충실하게 수행할 수 있습니다.

Untitled

Gitlab 설치 및 Runner 연동

Untitled

CI

pipeline

Untitled

NEXUS

라이브러리 Repository 인 NEXUS

Harbor의 Registry와 개념이 다르다.

Nexus는 메이븐에서 사용할 수 있는 Repository다. 외부에서 dependency를 수고를 덜고, local nexus(cache)로 사용함으로써 빠르게 라이브러리를 끌어올 수 있고, 개발팀에서 사용하는 공용 라이브러리를 local nexus에 배포해서 팀간에 공유할 수 있다.

사설 Repository를 쓰는 이유

  • 회사의 화이트 리스트로 인해 외부 Repository에 접속하기 어려운경우 Proxy 역할
  • 외부 인터넷이 느리거나 Repository가 다운되는 등 여러가지 상황에서도 빠르게 다운로드
  • Maven에 올라와있지않은 자료들을 효율적으로 관리
  • 한번 받은 Dependency는 Local에 저장되지만, 컴퓨터를 포맷하거나 동료가 시작할때 설정을 해야함
  • 서버에도 동일한 설정들을 해주어야하기때문에 서버 구조가 복잡할수록 잔업도 증가
  • 예외 파일로 인한 설정이 줄어들어 전체적인 일관성이 증가

Untitled

asd

Monitoring

Prometheus, Grafana

Rancher에서 사용가능한(SLA) 서비스중 하나로 Rancher 웹에서 설치가능(HELM설치)

메트릭 파이프라인

프로메테우스 : 메트릭 수집 및 조회

Untitled

쿠버네티스 모니터링에 있어서 높은 점유율을 보여주고 있고, CNCF 재단에서 2번째 graduate project 이며, 여러 CNCF 및 오픈소스 프로젝트들이 메트릭을 prometheus 형식에 맞게 공개(export)하고 있습니다. 프로메테우스는 각 애플리케이션이 공개하는 데이터를 수집해오며, 수집된 데이터는 그라파나와 내장되어 있는 브라우저를 통해서 확인할 수 있습니다.

그라파나 : 데이터 시각화 도구 시장에서 점유율이 높은 데이터 시각화 도구 중에 하나이며, 프로메테우스, 엘라스틱서치, 로키 심지어 포스트그레스큐엘과 같은 여러 데이터베이스로부터 데이터를 가져와 이를 사용자가 쉽게 확인할 수 있도록 도와주는 도구입니다. 조직에서 쉽게 사용자를 등록할 수 있도록, LDAP, OIDC, SAML 연동이 가능한 특징이 있습니다.

  • 최고의 오픈 소스 모니터링 솔루션인 Prometheus를 통해 클러스터 노드, Kubernetes 구성 요소 및 소프트웨어 배포의 상태와 프로세스를 모니터링합니다.
  • Prometheus를 통해 수집된 메트릭을 기반으로 경고 정의
  • Grafana를 통해 수집된 지표를 쉽게 시각화할 수 있는 맞춤형 대시보드 생성
  • Prometheus Alertmanager를 사용하여 Email, Slack, PagerDuty 등을 통한 경고 기반 알림 구성
  • HPA에서 사용하기 위해 Prometheus 어댑터를 통해 Kubernetes Custom Metrics API에 Prometheus에서 수집된 메트릭을 노출합니다(2.5에서만 사용 가능).

EFK Logging

로그 파이프라인

fluentbit : 로그 포워더

fluentbit은 오픈소스 로그 포워더입니다. 적은 자원 소비로도 높은 성능을 안정적으로 낼 수 있다는 것을 주된 장점으로 내세우고 있습니다. 쿠버네티스의 로그를 로그 수집 서비스에 전송하기 위하여 fluentbit INPUT 플러그인을 통해 로그 내용을 입력하여 다른 서비스로 전송하는데 쓸 수 있습니다.

엘라스틱서치 : 로그 보관 및 검색엔진

엘라스틱서치는 시장에서 각광받는 로그 보관 및 검색엔진 툴로 아파치 루씬 기반의 풀 텍스트 검색 기능을 제공합니다. 또한 REST API를 통해서 적재되어 있는 이벤트(로그)를 검색할 수 있습니다.

키바나 : 로그 및 데이터 시각화 대시보드

엘라스틱서치의 데이터를 시각화하는데 사용할 수 있는 대시보드입니다. 기본적인 시각화 기능 이외에도 엘라스틱서치의 데이터를 찾을 때 사용할 수 있는 강력한 탐색 도구를 내장하고 있습니다.

© 2024 mont kim   •  Powered by Soopr   •  Theme  Moonwalk