티스토리 뷰

반응형

Kubernetes에서 5-Tier 아키텍처 구현하기-wrtn 사용

※ 뤼튼(wrtn) 을 이용하여 Kubenetes 의 5-Tire 아키텍처를 구성해 보겠습니다.
  Kubernetes에서 "5-tier" 아키텍처란 일반적으로 다섯 개의 다른 계층으로 구성된 애플리케이션 구조를 의미합니다.

 

5-Tier 아키텍처란?

5-tier 아키텍처 구성은 대규모, 고가용성을 필요로 하는 어플리케이션을 위한 훌륭한 선택입니다. 5-tier 아키텍처는 일반적으로 클라이언트, 프레젠테이션, 비즈니스 로직, 데이터 액세스, 데이터베이스의 5개 계층으로 구성됩니다. 각 계층은 독립적으로 확장 및 관리가 가능해야 하며, 서로 간의 의존성은 최소화되어야 합니다.

 

1단계: 쿠버네틱스 클러스터 준비하기

쿠버네틱스 클러스터를 준비합니다. Google Kubernetes Engine(GKE), Amazon EKS, Azure Kubernetes Service(AKS) 등의 클라우드 서비스를 이용하거나, Minikube, kubeadm 등을 이용해 직접 클러스터를 구성할 수 있습니다.

2단계: 네임스페이스 생성

각각의 tier를 분리하기 위해 쿠버네틱스 네임스페이스를 생성합니다. 이는 리소스 관리와 보안 측면에서 이점을 제공합니다.

3단계: 데이터베이스 구성

데이터베이스 계층에서는, MySQL, PostgreSQL 등의 데이터베이스를 StatefulSet으로 배포합니다. 데이터의 지속성을 위해 PersistentVolume과 PersistentVolumeClaim을 사용합니다.

4단계: 데이터 액세스 계층 구성

데이터 액세스 계층은 데이터베이스와 비즈니스 로직 계층 사이의 인터페이스 역할을 합니다. 여기서는 ORM(Object-Relational Mapping) 라이브러리를 사용할 수 있습니다. Kubernetes의 Deployment를 이용해 배포합니다.

5단계: 비즈니스 로직 계층 구성

비즈니스 로직 계층은 어플리케이션의 핵심 기능을 담당합니다. 이 계층을 Kubernetes Deployment로 배포하고, 필요에 따라 Horizontal Pod Autoscaler를 설정하여 자동 스케일링을 구성합니다.

6단계: 프레젠테이션 계층 구성

프레젠테이션 계층은 사용자 인터페이스를 담당합니다. 이 계층을 Kubernetes에서는 주로 Deployment와 Service로 배포합니다. Ingress를 설정하여 외부에서 접근할 수 있도록 합니다.

7단계: 클라이언트

클라이언트는 웹 브라우저나 모바일 앱이 될 수 있으며, 프레젠테이션 계층을 통해 사용자와 상호작용합니다.

8단계: 모니터링 및 로깅

Prometheus와 Grafana를 이용한 모니터링, ELK Stack(Elasticsearch, Logstash, Kibana) 또는 EFK Stack(Elasticsearch, Fluentd, Kibana)을 이용한 로깅 시스템을 구성합니다. 이는 시스템의 성능 모니터링 및 문제 해결에 필수적입니다.

9단계: CI/CD 파이프라인 구성

GitLab CI/CD, Jenkins, Argo CD 등을 이용하여 자동화된 배포 파이프라인을 구성합니다.

 

쿠버네틱스 5-tier 아키텍처를 구성

1. Namespace 생성

각 계층을 구분하기 위한 네임스페이스 생성:
# presentation-namespace.yaml
kind: Namespace
apiVersion: v1
metadata:
  name: presentation
---
# business-namespace.yaml
kind: Namespace
apiVersion: v1
metadata:
  name: business
---
# data-access-namespace.yaml
kind: Namespace
apiVersion: v1
metadata:
  name: data-access
---
# database-namespace.yaml
kind: Namespace
apiVersion: v1
metadata:
  name: database

 

2. Database 계층

MySQL database를 예로 들겠습니다. 이를 StatefulSet 과 PersistentVolumeClaim 을 사용하여 배포합니다.
# mysql-deployment.yaml
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: mysql
  namespace: database
spec:
  selector:
    matchLabels:
      app: mysql
  serviceName: "mysql"
  replicas: 1
  template:
    metadata:
      labels:
        app: mysql
    spec:
      containers:
      - name: mysql
        image: mysql:5.7
        env:
        - name: MYSQL_ROOT_PASSWORD
          value: "yourpassword"
        ports:
        - containerPort: 3306
        volumeMounts:
        - name: mysql-persistent-storage
          mountPath: /var/lib/mysql
  volumeClaimTemplates:
  - metadata:
      name: mysql-persistent-storage
    spec:
      accessModes: [ "ReadWriteOnce" ]
      resources:
        requests:
          storage: 10Gi

 

3. Data Access 계층

이 계층의 구성은 애플리케이션의 구조에 따라 크게 다를 수 있으므로, 간단한 REST API 서버를 예로 들겠습니다.

 

# rest-api-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: rest-api
  namespace: data-access
spec:
  replicas: 2
  selector:
    matchLabels:
      app: rest-api
  template:
    metadata:
      labels:
        app: rest-api
    spec:
      containers:
      - name: rest-api
        image: your-rest-api-image
        ports:
        - containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
  name: rest-api
  namespace: data-access
spec:
  selector:
    app: rest-api
  ports:
  - protocol: TCP
    port: 80
    targetPort: 8080

 

4. Business Logic 계층

# business-logic-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: business-logic
  namespace: business
spec:
  replicas: 3
  selector:
    matchLabels:
      app: business-logic
  template:
    metadata:
      labels:
        app: business-logic
    spec:
      containers:
      - name: business-logic
        image: your-business-logic-image
        ports:
        - containerPort: 8080

 

5. Presentation 계층

# presentation-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: presentation
  namespace: presentation
spec:
  replicas: 2
  selector:
    matchLabels:
      app: presentation
  template:
    metadata:
      labels:
        app: presentation
    spec:
      containers:
      - name: presentation
        image: your-presentation-image
        ports:
        - containerPort: 80
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: presentation-ingress
  namespace: presentation
spec:
  rules:
  - host: yourdomain.com
    http:
      paths:
      - path

 

 

#Kubernetes #5-Tier #아키텍처 #뤼튼 #쿠버네틱스 #클러스터 #네임스페이스 #데이터베이스 #StatefulSet #ORM #Deployment #HorizontalPodAutoscaler #프레젠테이션 #Ingress #클라이언트 #모니터링 #로깅 #CI/CD #GitLab #Jenkins #ArgoCD

반응형
반응형
최근에 올라온 글
«   2024/07   »
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
Total
Today
Yesterday