실습 셋팅
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
반응형