Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- tibero
- springboot
- mybatis
- Kubernetes
- Git
- gson
- LOG4J
- Windows
- dbeaver
- Spring
- JPA
- NCP
- log4j2
- Java
- docker
- database
- nodejs
- react
- wildfly
- intellijIDEA
- BPMN
- jetbrains
- kubectl
- VSCode
- useEffect
- nginx
- IntelliJ
- JavaScript
- MySQL
- gradle
Archives
- Today
- Total
두 손끝의 창조자
도커에 설치된 Redmine을 Kubernetes 환경으로 이관 본문
온프레미스에서 도커로 서비스하던 레드마인을 NCP로 이관하면서 수행한 내용 기록.
쿠버네티스는 NCP 서비스 사용(Master Node).
백업
데이터 베이스
redmine-postgres 컨테이너에서 데이터를 덤프한다.
legacy-host>docker exec -it redmine-postgres
redmine-postgres_container>/usr/bin/pg_dump -U redmine -d redmine -Fc --file=redmine.sqlc redmine # U=user, d=database
💡 host에 psql이 설치되어 있다면 호스트에서 덤프를 한다. psql -h [legacy-host-ip] -U redmine -d redmine -p [DB포트]
덤프한 파일을 호스트로 가져온다.
legacy-host>docker cp redmine-postgres:/redmine.sqlc ~/redmine-backup/db/redmine.sqlc
파일
호스트에 볼륨 설정이 되어 있으므로 저장된 파일을 확인한다.
컨테이너의 /usr/src/redmine/files
위치와 연결된 호스트 경로를 확인한다.
설정 파일
설정 파일 디렉토리 전체를 호스트로 가져온다.
legacy-host>docker cp redmine-postgres:/usr/src/redmine/config ~/redmine-backup/config
테마 파일 디렉토리 전체를 호스트로 가져옴
legacy-host>docker cp redmine-postgres:/usr/src/redmine/public/themes ~/redmine-backup/themes
플러그인 파일 디렉토리 전체를 호스트로 가져옴
legacy-host>docker cp redmine-postgres:/usr/src/redmine/plugins ~/redmine-backup/plugins
백업 파일 로컬 PC로 이관
💡 kubectl
이 legacy-host에 설치되어 있으면 legacy-host에서 직접 수행한다.
파일 이동
local>rsync -avz redmine@[legacy-host-ip]:~/redmine-backup ~/redmine-backup
local>rsync -avz redmine@[legacy-host-ip]:[파일볼륨경로] ~/redmine-backup/files
복원
Database pod 생성
StatefulSet 생성
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: postgres-statefulset
spec:
serviceName : postgres
replicas: 1
selector:
matchLabels:
app: postgres
template:
metadata:
labels:
app: postgres
spec:
containers:
- name: postgres
image: postgres:15.4
ports:
- protocol: TCP
containerPort: [DB포트]
volumeMounts:
- name: postgres-volume
mountPath: /var/lib/postgresql/data
env:
- name: POSTGRES_USER
value: redmine
- name: POSTGRES_PASSWORD
value: [DB패스워드]
volumes:
- name: postgres-volume
hostPath:
path: [데이터베이스 데이터 마운트위치]
type: DirectoryOrCreate
Headless Service 생성
apiVersion: v1
kind: Service
metadata:
name: postgres-service
spec:
clusterIP: None
selector:
app: postgres
ports:
- protocol: TCP
port: [DB포트]
DB 데이터 복원
클라이언트 파드 활용한 DB 접속
- DB에 접근하기 위해 클-라이언트 파드를 만들어서 활용한다.
local>k run -it --rm postgres-client --image=postgres:15.4 --restart=Never -- sh
- 생성된 파드에 덤프한 파일을 옮긴다.(새 CLI을 열어서 해야함)
local>kubectl cp ~/redmine-backup/db/redmine.sqlc default/[postgres-client 파드ID]:/root/redmine.sqlc
- DB에 접속해 복원한다.
- 💡
postgres-service
는 kebernetes에서 변환한다. postgres-client>psql -h postgres-service -U redmine -d redmine -p [DB포트] #접속 테스트 postgres-client>pg_restore -h postgres-service -p [DB포트] -U redmine -d redmine /root/redmine.sqlc
설정 및 파일 복원
파일을 클라우드 노드에 복사
로컬에 백업해놓은 파일 데이터를 Node와 연결된 스토리지로 복사한다.
local>rsync -avz ~/redmine-backup/files redmine@[클라우드 노드 IP]:/[REDMINE 파일 마운트 위치]
설정 파일 노드에 복사
local>rsync -avz ~/redmine-backup/config redmine@[클라우드 노드 IP]:/[REDMINE 설정 마운트 위치]
테마 파일 노드에 복사
local>rsync -avz ~/redmine-backup/themes redmine@[클라우드 노드 IP]:/[REDMINE 테마 마운트 위치]
플러그인 파일 노드에 복사
local>rsync -avz ~/redmine-backup/plugins redmine@[클라우드 노드 IP]:/[REDMINE 테마 마운트 위치]
REDMINE 파드 생성
apiVersion: apps/v1
kind: Deployment
metadata:
name: redmine-deployment
spec:
replicas: 1
selector:
matchLabels:
app: redmine
template:
metadata:
labels:
app: redmine
spec:
containers:
- name: redmine
image: redmine:5.0.5
ports:
- protocol: TCP
containerPort: 3000
env:
- name: REDMINE_DB_POSTGRES
value: postgres-service
- name: REDMINE_DB_PORT
value: [DB포트]
- name: REDMINE_DB_USERNAME
value: redmine
- name: REDMINE_DB_PASSWORD
value: [DB패스워드]
volumeMounts:
- name: redmine-volume
mountPath: /usr/src/redmine/files
- name: redmine-volume-config
mountPath: /usr/src/redmine/config
- name: redmine-volume-themes
mountPath: /usr/src/redmine/public/themes
- name: redmine-volume-plugins
mountPath: /usr/src/redmine/plugins
volumes:
- name: redmine-volume
hostPath:
path: [REDMINE 파일 마운트 위치]
type: DirectoryOrCreate
- name: redmine-volume-config
hostPath:
path: [REDMINE 설정 마운트 위치]
type: DirectoryOrCreate
- name: redmine-volume-themes
hostPath:
path: [REDMINE 테마 마운트 위치]
type: DirectoryOrCreate
- name: redmine-volume-plugins
hostPath:
path: [REDMINE 플러그인 마운트 위치]
type: DirectoryOrCreate
💡 /usr/src/redmine/config 에서 configuration.yml 만 volume 설정을 하고자 하였으나 쓰기 오류 등 발생하여 전체 디렉토리를 마운트 하였음.
서비스 생성
apiVersion: v1
kind: Service
metadata:
name: redmine-service
spec:
selector:
app: redmine
ports:
- protocol: TCP
port: 80
targetPort: 3000
type: LoadBalancer
반응형
Comments