쿠버네티스 환경에서 설치
설치 파일 준비
AnyEIMS 설치에 필요한 파일을 준비합니다.
-
필수 파일
기동을 위한 필수 파일입니다.
|-- images |-- anyeims_backend.<버전>.tar ....(1) |-- anyeims_frontend.<버전>.tar ....(2) |-- redis.latest.tar |-- yamls |-- be-deployment.yaml ....(3) |-- be-service.yaml ....(4) |-- fe-deployment.yaml ....(5) |-- fe-service.yaml ....(6) |-- redis.yaml ....(7) |-- sqls |-- oracle |-- create.sql ....(8) |-- insert.sql ....(9)
파일 설명 (1) anyeims_backend.<버전>.tar
쿠버네티스 환경 위에서 컨테이너를 실행하기 위한 이미지 파일입니다.
(2) anyeims_frontend.<버전>.tar
쿠버네티스 환경 위에서 컨테이너를 실행하기 위한 이미지 파일입니다.
(3) be-deployment.yaml
백엔드의 디플로이먼트를 생성하기 위한 명령문이 작성된 파일입니다.
(4) be-service.yaml
백엔드의 서비스를 생성하기 위한 명령문이 작성된 파일입니다.
(5) fe-deployment.yaml
프론트엔드 바이너리, Nginx 설정 파일이 담긴 PV를 설정할 수 있는 파일입니다.
(6) fe-service.yaml
프론트엔드의 서비스를 생성하기 위한 명령문이 작성된 파일입니다.
(7) redis.yaml
Redis의 디플로이먼트와 서비스를 생성하기 위한 파일입니다.
(8) create.sql
AnyEIMS에서 사용될 테이블을 생성하는 SQL 파일입니다.
(9) insert.sql
AnyEIMS에서 기본적으로 사용될 값을 넣는 SQL 파일입니다.
-
추가 설정 파일
쿠버네티스 환경에 올려놓은 프로그램에서 추가 설정으로 인해 파드를 재기동하여도 그대로 유지되어야 하는 파일들을 외부 디렉터리에 따로 관리합니다. 해당 디렉터리를 Persistent Volume(PV)이라고 합니다.
|-- libs |-- ojdbc8-12.2.0.1.jar ....(1) |-- nginx-conf |-- nginx.conf ....(2) |-- properties |-- application-extensions.yml ....(3) |-- anyeims_front-<버전>.zip ....(4) |-- favicon.ico |-- index.html +-- assets |-- anyeims-backend.<버전>.zip ....(5) |-- anyeims-backend.jar
-
백엔드 서버용 파일
파일 설명 (1) ojdbc8-12.2.0.1.jar
사용할 데이터베이스에 맞는 JDBC 파일입니다.
(3) application-extensions.yml
백엔드 바이너리의 확장 속성을 정의하는 파일입니다.
(5) anyeims-backend.<버전>.zip
백엔드 바이너리 파일을 포함한 ZIP 파일입니다.
-
프론트엔드 서버용 파일
파일 설명 (2) nginx.conf
Nginx 설정을 변경할 수 있는 파일입니다.
(4) anyeims_front-<버전>.zip
프론트엔드 파일입니다.
-
YAML 파일 설정
쿠버네티스 명령어를 실행하기 위한 파일입니다. 네임스페이스 생성, 서비스 생성, 컨테이너 생성을 하기 위해 만든 명령어 파일입니다.
redis.yaml
Redis의 디플로이먼트와 서비스를 생성하기 위한 파일입니다.
-
서비스
Redis의 서비스를 생성하기 위한 명령문이 작성되어 있습니다. 설치할 네임스페이스, 개방할 포트, 이용할 외부 IP를 설정할 수 있습니다.
apiVersion: v1 kind: Service metadata: labels: name: anyeims-redis name: anyeims-redis namespace: <작업할 네임스페이스> spec: type: ClusterIP ports: - name: "http" port: <통신할 포트 번호> targetPort: 6379 externalIPs: - <통신할 IP 주소> # 외부에 노출되는 IP selector: name: anyeims-redis
-
디플로이먼트
Redis의 디플로이먼트를 생성하기 위한 명령문이 작성되어 있습니다. 설치할 네임스페이스, 생성에 이용할 이미지를 설정할 수 있습니다. 이때 이미지의 경우 로드한 이미지 이름에 맞춰 변경합니다.
apiVersion: apps/v1 kind: Deployment metadata: name: anyeims-redis namespace: <작업할 네임스페이스> labels: name: anyeims-redis spec: replicas: 1 selector: matchLabels: name: anyeims-redis strategy: type: Recreate template: metadata: labels: name: anyeims-redis spec: containers: - image: any-eims:5000/anyeims_redis:7.2.4 # 사용할 이미지 name: anyeims-reids ports: - containerPort: 6379 protocol: TCP restartPolicy: Always
be-deployment.yaml
백엔드 바이너리, 설정 파일이 담긴 PV를 설정할 수 있습니다. 내부에서 외부와 연동하고 싶은 mountPath를 정의하고, 해당 부분을 volumes에서 로컬 머신의 물리 디렉터리와 연동합니다.
apiVersion: apps/v1
kind: Deployment
metadata:
name: anyeims-backend
namespace: <작업할 네임스페이스>
labels:
name: anyeims-backend
spec:
replicas: 1
selector:
matchLabels:
name: anyeims-backend
strategy:
type: Recreate
template:
metadata:
labels:
name: anyeims-backend
spec:
containers:
- env:
- name: ANYEIMS_REDIS_HOST
value: <Redis IP 주소> # redis.yaml에서 설정한 IP
- name: ANYEIMS_REDIS_PORT
value: <Redis 포트 번호> # redis.yaml에서 설정한 포트
image: any-eims:5000/anyeims_backend:1.0.0-r1 # 사용할 이미지
name: anyeims-backend
ports:
- containerPort: 8080
protocol: TCP
volumeMounts:
- mountPath: /home/eims
name: anyeims-backend
restartPolicy: Always
volumes:
- name: anyeims-backend
# 아래 내용을 알맞은 PVC로 변경 필요
hostPath:
type: Directory
path: /home/eims/
be-service.yaml
백엔드의 서비스를 생성하기 위한 명령문이 작성되어 있습니다. 설치할 네임스페이스, 개방할 포트, 이용할 외부 IP를 설정할 수 있습니다.
apiVersion: v1
kind: Service
metadata:
labels:
name: anyeims-backend
name: anyeims-backend
namespace: <작업할 네임스페이스>
spec:
type: ClusterIP
ports:
- name: "http"
port: <통신할 포트 번호>
targetPort: 8080
externalIPs:
- <통신할 IP 주소> # 외부에 노출되는 IP
selector:
name: anyeims-backend
fe-deployment.yaml
프론트엔드 바이너리, Nginx 설정 파일이 담긴 PV를 설정할 수 있습니다. 내부에서 외부와 연동하고 싶은 mountPath를 정의하고, 해당 부분을 volumes에서 로컬 머신의 물리 디렉터리와 연동합니다.
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
name: anyeims-frontend
name: anyeims-frontend
namespace: <작업할 네임스페이스>
spec:
replicas: 1
selector:
matchLabels:
name: anyeims-frontend
strategy:
type: Recreate
template:
metadata:
labels:
name: anyeims-frontend
spec:
containers:
- image: any-eims:5000/anyeims_frontend:1.0.0-r1 # 사용할 이미지
name: anyeims-frontend
ports:
- containerPort: 80
protocol: TCP
volumeMounts:
- mountPath: /home/eims/nginx
name: anyeims-frontend
restartPolicy: Always
volumes:
- name: anyeims-frontend
# 아래 내용을 알맞은 PVC로 변경 필요
hostPath:
type: Directory
path: /home/eims/nginx
fe-service.yaml
프론트엔드의 서비스를 생성하기 위한 명령문이 작성되어 있습니다. 설치할 네임스페이스, 개방할 포트, 이용할 외부 IP를 설정할 수 있습니다.
apiVersion: v1
kind: Service
metadata:
labels:
name: anyeims-frontend
name: anyeims-frontend
namespace: <작업할 네임스페이스>
spec:
type: ClusterIP
ports:
- name: "http"
port: <통신할 포트 번호>
targetPort: 80
externalIPs:
- <통신할 IP 주소> # 외부에 노출되는 IP
selector:
name: anyeims-frontend
데이터베이스 설정
데이터베이스 서버에서 AnyEIMS이 사용할 데이터베이스를 설정하는 SQL문을 실행합니다.
이때 데이터베이스의 ID, PW는 application-extension.yml 파일에 작성되어 있는 값과 일치해야 합니다.
-
AnyEIMS에서 사용될 테이블을 생성하는 SQL
$ create.sql
-
AnyEIMS에서 기본적으로 사용될 값을 넣는 SQL
$ insert.sql
이미지 로드
워커 노드의 로컬 리포지터리에 이미지를 로드합니다.
-
컨테이너 런타임이 DOCKER인 경우
$ docker load -i <파일명>.tar
-
컨테이너 런타임이 CRI-O인 경우
$ podman load -u <파일명>.tar
워커 노드의 리포지터리에서 이미지를 로드하는 이유는 파드가 스케쥴링된 노드의 리포지터리에서 이미지를 불러와서 사용하기 때문입니다. |
볼륨 설정
워커 노드의 디렉터리에 파드의 볼륨을 마운트합니다.
본 안내서에서는 호스트의 특정 디렉터리를 스토리지로 사용하는 방식인 hostPath 방식을 사용합니다. |
백엔드 서버
백엔드 이미지 파일(anyeims_backend.<버전>.tar)을 사용하여 컨테이너 실행 시 컨테이너 디렉터리 구조는 아래와 같습니다.
/home/eims/
|-- applications
|-- anyeims_backend.jar
|-- libs
|-- ojdbc8-12.2.0.1.jar
|-- local-storage
|-- properties
|-- application-extensions.yml
파드의 볼륨을 마운트 하기 위해 be_deployment.yaml 파일에 설정한 호스트 경로(hostPath)로 워크 노드에 관련 파일 및 디렉터리를 구성합니다.
-
anyeims_backend.jar
'{호스트 경로}/applications' 하위에 위치시킵니다.
-
ojdbc8-12.2.0.1.jar
'{호스트 경로}/libs' 하위에 위치시킵니다.
-
local-storage
'{호스트 경로}' 하위에 디렉터리만 생성합니다. 해당 디렉터리에는 사용자가 결재 시 올리는 파일 같은 데이터가 저장됩니다.
-
application-extensions.yml
'{호스트 경로}/properties' 하위에 위치시킵니다.
application-extensions.yml 파일 설정을 통해 백엔드 바이너리의 확장 속성을 정의할 수 있습니다. 만약 최초 실행 시 미리 값을 설정하려면 sample:init을 true로 설정하고, 데이터를 입력합니다. 그 이후에는 false로 설정 변경이 필요합니다.
sample: init: false # UI나 API로 설정할 수 없는 값을 넣으려면 true로 변경 spring: datasource: driver-class-name: oracle.jdbc.driver.OracleDriver url: jdbc:oracle:thin:@<DB의 IP 주소>:<포트 번호>/<DB 이름> username: <DB 사용자 이름> password: <DB 사용자 비밀번호> jpa: defer-datasource-initialization: true show-sql: true database-platform: org.hibernate.dialect.Oracle12cDialect hibernate: ddl-auto: none # 로그 설정 logging: file: name: /home/eims/log/eims.log # 로그 파일의 이름 및 경로 max-size: 500MB max-history: 10 level: org : info
프론트엔드 서버
프론트엔드 이미지 파일(anyeims_frontend.<버전>.tar)을 사용하여 컨테이너 실행 시 컨테이너 디렉터리 구조는 아래와 같습니다.
/home/eims/
|-- nginx
|-- html
|-- assets
|-- favicon.ico
|-- index.html
|-- conf.d
|-- nginx.conf
파드의 볼륨을 마운트 하기 위해 fe-deployment.yaml 파일에 설정한 호스트 경로(hostPath)로 워크 노드에 관련 파일 및 디렉터리를 구성힙니다.
-
anyeims_front-<버전명>.zip
'{호스트 경로}/html' 하위에 해당 파일의 압축을 해제합니다.
-
nginx.conf
'{호스트 경로}/conf.d' 하위에 위치시킵니다.
nginx.conf 파일 설정을 통해 Nginx의 속성을 정의할 수 있습니다. 이때 proxy_pass 값을 be-deployment.yaml에서 설정한 'externalIP:port’로 설정합니다. 백엔드의 IP/Port가 변경될 때 수정해야 합니다.
server { listen 80; # 프론트 포트 설정 가능 client_max_body_size 20M; location /v1 { proxy_pass http://<백엔드 접근 IP 주소>:<백엔드 접근 포트 번호>; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } location / { root /home/eims/nginx/html; # 연결할 Root 경로 index index.html index.htm; try_files $uri $uri/ /index.html; } error_page 500 502 503 504 /50x.html; }
YAML 파일 실행
설정한 YAML 파일을 차례대로 실행합니다.
-
네임스페이스 생성
$ kubectl apply -f namespace.yaml
-
Redis 생성
$ kubectl apply -f redis.yaml -n eims
-
백엔드 디플로이먼트 생성
$ kubectl apply -f be-deployment.yaml -n eims
-
백엔드 서비스 생성
$ kubectl apply -f be-service.yaml -n eims
-
프론트엔드 디플로이먼트 생성
$ kubectl apply -f fe-deployment.yaml -n eims
-
프론트엔드 서비스 생성
$ kubectl apply -f fe-service.yaml -n eims