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
													
											
												
												- sapfiorielements
- NCP
- Java
- MySQL
- BPMN
- springboot
- SAP
- JPA
- Windows
- mybatis
- gradle
- gson
- docker
- JavaScript
- maven
- Git
- VSCode
- Kubernetes
- nodejs
- tibero
- react
- LOG4J
- dbeaver
- nginx
- Linux
- log4j2
- IntelliJ
- database
- useEffect
- Spring
													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: DirectoryOrCreateHeadless 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
			
		
	
               
           
					
					
					
					
					
					
				