클라우드 엔지니어/클라우드 캠프과정

쿠버네티스 모니터링 실습 셋팅을 위한 3티어 아키텍쳐 구축

해아's 2022. 10. 22. 15:04

실습 셋팅

3계층아키텍쳐 구성하는데

개발환경과 운영환경으로 구분하여 구축하고 모니터링시스템을 구축하는 실습이다.

네임스페이스로 구분하며 was 와 web은 부하분산시스템(오토스케일링으로)구축되게 설정하고 다음주에 모니터링 시스템을 구축하는것을 배울것이므로

개발환경과 운영환경부분 구축하는것을 실습하자

자 정리하자면

네임스페이스 두개가 필요하다 prod , dev

일단 나는 작업폴더를 백업하기 위하여 각각 노드1과 2를 개발환경과 운영환경으로 분리하였다.

이유는 3티어 아키텍쳐 데이타를 노드에 보관하기 위해서 이다.

그래서 구성은 아래와 같다

=====    운영환경 셋팅  ====
네임스페이스명 > prod
셋팅위치 > node1
/3tir/mysql > db서버
/3tir/was > was서버 홈디렉토리
/3tir/web > web서버 홈디렉토리
db > mysql
was> tomcat:9
web > httpd:2.45
실제로 셋팅할때는 3가지모두 버전을 명시하여 셋팅하는것이 좋다
WAS, WEB 서버부터는 오토스케일링및 부하분산 시스템을 구축하여야 함으로 POD를 Deployment 로 구성하였으며
오토스케일링은 cpu사용률 80%이상일경우 증설되게 설정하였다.
아래와 같이 구성하였으며

=== 개발환경 셋팅 ===
개발환경셋팅은 모든값이 같으며 CPU사용률만 낮게(60%) 설정하였다
네임스페이스명 > dev
셋팅위치 > node2
/3tir/mysql > db서버
/3tir/was > was서버 홈디렉토리
/3tir/web > web서버 홈디렉토리
db > mysql
was> tomcat:9
web > httpd:2.45

yml파일 생성 (설정파일 및 네임스페이스 셋팅)

# prod 네임스페이스 셋팅

#네임스페이스 선언
apiVersion: v1
kind: Namespace
metadata:
  name: prod
  nodeSelecter:
    kubernetes.io/hostname: node1
---
#db 설정파일
apiVersion: v1
kind: Secret
metadata:
  namespace: prod
  name: sec-mysql
data:
  MYSQL_ROOT_PASSWORD: cXdlcjEyMzQ=  #qwer1234 를 base64 인코딩한값
---
#was 설정파일
apiVersion: v1
kind: ConfigMap
metadata:
  namespace: prod
  name: cm-was
data:
  TYPE: '0.0.0.0'
---
#web 설정파일
apiVersion: v1
kind: ConfigMap
metadata:
  namespace: prod
  name: cm-httpd
data:
  TYPE: 'svc-was'

mysql 서버 셋팅(PV / PVC / pod / Service)

#PV생성 (mysql)
apiVersion: v1
kind: PersistentVolume
metadata:
  namespace: prod
  name: mysql-pv
spec:
  capacity:
    storage: 10G #용량2기가
  accessModes:
  - ReadWriteOnce
  local: #지금은 로컬에 연결 각종타입이 지원됨
    path: /3tir/mysql #디렉토리를 생성해둬야함
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - {key: kubernetes.io/hostname, operator: In, values: [node1]}
---
#PVC 로 PV연동
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  namespace: prod
  name: mysql-pvc
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 10G
  storageClassName: ""
---
apiVersion: v1
kind: Pod
metadata:
  namespace: prod
  name: mysql-server
  labels:
     app: db-pod
spec:
  nodeSelecter:
    kubernetes.io/hostname: node1
  containers:
  - name: mysql
    image: mysql
    ports:
    - containerPort: 3306
    envFrom:
    - secretRef:
        name: sec-mysql  #mysql 설정파일을 불러오자
    volumeMounts:
    - mountPath: /var/lib/mysql
      name: mysql-pvc-pv
  volumes:
  - name : mysql-pvc-pv
    persistentVolumeClaim:
      claimName: mysql-pvc
---
#mysql 서비스 생성
apiVersion: v1
kind: Service
metadata:
  namespace: prod
  name: svc-mysql
spec:
  selector:
    app: db-pod
  ports:
  - port: 3306
    containerPort: 3306

WAS 서버 셋팅 ( PV / PVC / Deployment / HorizontalPodAutoscaler / Service )

---
#was pv
---
apiVersion: v1
kind: PersistentVolume
metadata:
  namespace: prod
  name: pv-was
spec:
  capacity:
    storage: 1G #용량1기가
  accessModes:
  - ReadWriteOnce
  local: #지금은 로컬에 연결 각종타입이 지원됨
    path: /3tir/was #디렉토리를 생성해둬야함
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - {key: kubernetes.io/hostname, operator: In, values: [node1]}
---
#was pvc
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  namespace: prod
  name: pvc-was
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 1G
  storageClassName: ""
---
#was pod
apiVersion: apps/v1
kind: Deployment
metadata:
  namespace: prod
  name: was-deploy
spec:
  selector:
    matchLabels:
      servertype: was-cpu
  replicas: 2
  template:
    metadata:
      labels:
        servertype: was-cpu
    spec:
      containers:
      - name: was
        image: yoskr/tomcat:1.1
        envFrom:
        - configMapRef:
            name: cm-was  #cm-dev 설정파일을 불러오자
        ports:
        - containerPort: 8009
        volumeMounts:
        - mountPath: /usr/local/tomcat/webapps
          name: was-pvc-pv
          requests:
            cpu: 100m
          limits:
            cpu: 200m
      volumes:
      - name : was-pvc-pv
        persistentVolumeClaim:
          claimName: pvc-was
---
apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
  name: hpa-was-cpu
spec:
  maxReplicas: 5
  minReplicas: 2
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: was-deploy
  metrics:
  - type: Resource 
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 80
---
apiVersion: v1
kind: Service
metadata:
  namespace: prod
  name: svc-was
spec:
  selector:
    servertype: was-cpu
  ports:
  - name: live
    port: 8009
    containerPort: 8009
---
---
#was 생성 끝
---
---

WEB 서버 셋팅 ( PV / PVC / Deployment / HorizontalPodAutoscaler / Service )

---
---
#web 생성 시작
---
#web pv
apiVersion: v1
kind: PersistentVolume
metadata:
  namespace: prod
  name: pv-web
spec:
  capacity:
    storage: 1G #용량2기가
  accessModes:
  - ReadWriteOnce
  local: #지금은 로컬에 연결 각종타입이 지원됨
    path: /3tir/web
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - {key: kubernetes.io/hostname, operator: In, values: [node1]}
---
#web pvc
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  namespace: prod
  name: pvc-web
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 1G
  storageClassName: ""
---
#web pod
---
apiVersion: apps/v1
kind: Deployment
metadata:
  namespace: prod
  name: web-deploy
spec:
  selector:
    matchLabels:
      servertype: web-cpu
  replicas: 2
  template:
    metadata:
      labels:
        servertype: web-cpu
    spec:
      containers:
      - name: web
        image: yoskr/httpd:0.4
        resources:
          requests:
            cpu: 100m
          limits:
            cpu: 200m
        envFrom:
        - configMapRef:
            name: cm-httpd  #cm-httpd 설정파일을 불러오자
        ports:
        - containerPort: 80
        volumeMounts:
        - mountPath: /usr/local/apache2/htdocs
          name: web-pvc-pv
      volumes:
      - name : web-pvc-pv
        persistentVolumeClaim:
          claimName: pvc-web
---
apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
  namespace: prod
  name: hpa-web-cpu
spec:
  maxReplicas: 5
  minReplicas: 2
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: web-deploy
  metrics:
  - type: Resource 
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 80
---
apiVersion: v1
kind: Service
metadata:
  namespace: prod
  name: svc-web
spec:
  selector:
    servertype: web-cpu
  ports:
  - port: 80 # 사용자들이 접속할 포트
    targetPort: 80 # 파드의 포트번호
  type: LoadBalancer

셋팅결과

 

==== 테스트 was 서버의 로드벨런싱 여부 확인

728x90
반응형