1. 개요
1) Openshift 컨테이너의 특징
내용 | 비고 |
---|---|
Hostname 또는 IP가 임의로 생성 및 변경됨 |
|
Pod 재생성시 컨테이너 내부 데이터는 초기화됨 | |
Openshift는 보안상 컨테이너 실행시 임의의 User가 만들어져 사용됨 |
|
표준출력으로 전달되는 로그는 Web Console의 Log 탭에서 조회됨 |
|
2) 주요 고려사항
기존 시스템을 Openshift로 옮기는 경우 고려할 사항에 대해서 다음과 같은 기준으로 생각해볼 필요가 있다.
구분 | 내용 | 비고 |
---|---|---|
1) 컨테이너화 대상선정 | 시스템의 여러 구성요소 중에서 컨테이너로 옮길 부분을 검토 |
|
2) WEB/WAS 연동 아키텍처 | WAS의 IP가 고정될 수 없고 Scale Out을 고려해야 하므로 Web서버에서 WAS IP 지정방식의 연동방법은 사용할 수 없음 |
|
3) Base 이미지선택 | WAS로 사용할 수 있는 Official 이미지가 있는지 확인 |
|
4) Session Clustering | IP가 임의로 변경되므로 IP 지정방식에 의한 세션클러스터링은 사용할 수 없음 |
|
5) 어플리케이션 설정 값 | 시스템에서 변경이 필요한 값은 이미지에 넣지 않고 별도 관리 |
|
6) 어플리케이션 소스 | 소스에서 특정 Hostname이나 IP 주소에 기반한 로직이 있으면 수정필요 | Web서버를 별도 URL로 구성하는 경우 Static Content의 URL경로 수정 필요 |
7) 대용량 컨텐츠 | 어플리케이션에서 사용하는 대용량 컨텐츠가 있는 경우 이미지를 복사하거나 Build 할때 느려지므로 공유볼륨 사용에 대한 확인 필요 |
|
8) 내부 인터페이스 주소 | Openshift 내부에 인터페이스 해야할 API서버 등이 있는 경우 대상 IP가 동적으로 생성되므로 연동방법 확인필요 |
|
9) Logging | Standard Out 으로 출력되는 로그는 오픈시프트 콘솔에서 확인가능 |
|
3) Migration Work Flow
단계1 | 단계2 | 내용 | 비고 |
---|---|---|---|
분석 | 요건분석 | 필요사항 분석 | |
어플리케이션 및 아키텍처 분석 | Apache 및 JBoss 아키텍처를 Container 환경에 맞게 분석 | ||
솔루션 현황/ 호환성 분석 | 어플리케이션에서 사용중인 솔루션 현황 파악 및 Container 배포 적합성 검토 | 해당 솔루션 벤더와 협의필요 | |
WAS 종류 및 버전 변경 시 | WAS 버전 변경시 영향도 분석 | ||
Preparation | 사전 검증 테스트 | Docker Container에 어플리케이션을 배포하여 컨테이너 환경에 적합한지 사전 검증 | Docker만 사용하여 테스트 |
이행 계획 수립 | 컨테이너 배포 검증 결과를 토대로 Openshift 배포계획 수립 | ||
WAS 이미지 및 Build | 사용할 이미지 및 어플리케이션에 맞게 Build 정책 수립 | ||
Migration | S2I 빌드 환경구성 | Gitlab, Image Registry 등 구성 | |
WAS 이미지 Build 구성 | ImageStream 구성 | ||
Application Build 및 배포 | Git과 ImageStream 구성 후 Application Build 수행 | ||
배포 테스트 | 정상 배포여부 테스트 | ||
Optimization | VM OS 최적화 | Container가 운영되는 기반인 VM (OS) 최적화 | |
JBoss Container 최적화 | JBoss Container 설정 최적화 | ||
Application Build 최적화 | 어플리케이션 생성 시 Template으로 최적화하여 구성 | ||
App 컨테이너 마이그레이션 내역서 | App 컨테이너 마이그레이션 내역서 정리 |
2. 상세내용
1) 컨테이너화 대상선정
고려사항
2) Web / WAS 연동 아키텍처
고려사항
아키텍처 변경
일반적인 WEB/WAS 연동구조 Openshift에서 적용 가능한 구조 비고 Web서버의 Static Contents를 WAS로 통합
심플한 구조로 가장 많이 사용되며 클라우드 환경에서 효율적인 구조 Web서버를 별도로 구성하는 경우
Web서버가 별도의 URL을 사용하므로 리소스 위치 관련된 소스 수정필요 WEB, WAS를 하나의 Pod로 구성
별도의 템플릿 필요하며 Pod가 복잡성이 증가하므로 관리포인트 증가됨
3) Base 이미지 선택
고려사항
이미지 관련 주로 발생하는 이슈사항
Tomcat의 이미지 버전 (샘플)
4) 세션 클러스터링
고려사항
JBoss의 세션 클러스터링
5) 어플리케이션 설정 값
고려사항
적용방법
구분 주요 내용 변경방법 Java Option Java Memory 설정
Heap Dump 설정
GC Log 설정 등
환경변수 JAVA_OPTS를 설정하고 WAS 기동시 사용한다. 어플리케이션 설정 어플리케이션 필요 내용 필요한 내용을 환경변수로 설정하고 설정파일에서 환경변수를 사용하도록 변경한다.
환경변수 사용 예
Java System Property (JAVA_OPTS) 사용방법
Tomcat 컨테이너 실행
설정파일에서 변수처리
Java System Property로 넘어온 db_host 를 이용하여 설정파일 작성
6) 어플리케이션 소스 확인사항
Openshift 특징 | 관련사항 |
---|---|
1. Pod의 Hostname 또는 IP가 임의로 생성 및 변경됨 | 소스에서 특정 Hostname이나 IP 주소에 기반한 로직이 있으면 수정필요 |
2. Dynamic한 IP 부여로 인하여 Web서버를 통한 WAS로의 LB처리가 어려움 | Static Contents를 WAS로 통합하는 경우는 소스 수정이 필요없으나 이미지서버를 별도 URL로 구성하여 사용하는 경우 Static Contents의 URL 경로 수정이 필요 |
3. Openshift는 보안상 컨테이너 실행시 임의의 User가 만들어져 사용됨 | 특정 User의 사용이 필요한 경우 옵션으로 조정할 수 있지만 기본적으로는 디렉토리 및 파일의 Group 권한을 Openshift ID에 맞게 조정필요 어플리케이션에서 생성하는 파일이 특정 User의 권한을 가져야 한다면 -Duser.name=userid 형태의 Java Option 사용 |
7) 대용량 컨텐츠
고려사항
컨테이너에서 외부 볼륨 사용을 위한 가이드
8) 내부 인터페이스 주소
고려사항
- Service의 Name을 이용하는 방법
Openshift에서 Pod 앞단에 LB를 위한 Service가 존재한다. 이 Service의 이름은 Application 명으로 고정되므로 이를 이용하여 인터페이스가 가능하다.
- 환경변수를 이용하는 방법
오픈시프트의 Project 내부에서 생성되는 모든 Pod는 생성 시점에 프로젝트 내부에 존재하는 모든 Service 이름과 IP를 환경변수로 가지고 있다.
따라서 이 환경변수를 이용하여 어플리케이션 내부에서 사용할 수 있다.
9) Logging
고려사항
Openshift에서는 컨테이너의 로그를 Web UI에서 바로 조회 할 수 있는 기능이 있다.
그런데 여기서 조회되는 로그는 컨테이너에서 Standard Out (CONSOLE)으로 출력되는 로그만 조회 가능하다.
- JBoss에서 Standard Out (CONSOLE)으로 로그를 출력하도록 설정하는 방법
어플리케이션의 로그를 Web UI에서 바로 조회하려면 로그를 Standard Out으로 출력되도록 설정을 하여야 한다.
File로 출력하도록 설정하는 방법
PV 연결
PV정보PVC정보아래 예시 처럼 컨테이너의 특정 디렉토리(mountPath)를 Persistent Volume으로 마운트하면,
/opt/eap/standalone/log 저장되는 파일은 Pod 삭제시 지워지지 않고 보관할 수 있다.
Pod 마운트 정보
3. 컨테이너 테스트
Openshift 가 구축되어 있지 않은 경우 우선 Docker를 이용하여 간단하게 컨테이너 기동 부분만 테스트할 수 있다.
다만 여기서는 문제가 없더라도 나중에 Openshift에 올렸을 경우 추가적으로 권한 문제는 발생할 수 있다.
주요 테스트 절차 (Tomcat7 인경우 예시)
순서 구분 설명 비고 1 이미지 준비 테스트 환경에 Docker Image 다운로드하여 준비한다. 2 어플리케이션 테스트 어플리케이션 및 필요한 설정파일 준비 simple.war, server.xml 3 Dockerfile 작성 Tomcat 이미지의 디렉토리에 simple.war와 server.xml 복사 4 어플리케이션 이미지 생성 위에서 만들어진 Dockerfile을 이용하여 이미지 생성 5 컨테이너 실행 생성된 app-simple 이미지를 컨테이너로 기동 6 어플리케이션 호출 웹브라우저 또는 curl을 이용하여 호출 테스트