背景
公司最近有服务器的变更,准备把服务搬到新的服务器上,包括了gitlab,这里记录下过程,旧极狐gitlab为docker部署,新极狐gitlab为k8s部署
1、在新的服务器上部署同版本的极狐gitlab
一定要同版本,不然备份文件无法恢复,k8s的yaml如下
apiVersion: v1
kind: Namespace
metadata:
name: common-service
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: gitlab
namespace: common-service
spec:
selector:
matchLabels:
app: gitlab
serviceName: gitlab
replicas: 1
template:
metadata:
labels:
app: gitlab
spec:
containers:
- name: gitlab
image: gitlab-jh.tencentcloudcr.com/omnibus/gitlab-jh:14.5.0
resources:
requests:
memory: "4Gi"
cpu: "2000m"
limits:
memory: "8Gi"
cpu: "4000m"
ports:
- containerPort: 80
name: http
- containerPort: 443
name: https
- containerPort: 22
name: ssh
volumeMounts:
- name: gitlab-data
mountPath: /var/opt/gitlab
- name: gitlab-logs
mountPath: /var/log/gitlab
- name: gitlab-conf
mountPath: /etc/gitlab
volumeClaimTemplates:
- metadata:
name: gitlab-data
spec:
accessModes: [ "ReadWriteMany" ]
storageClassName: "repo-storage-class"
resources:
requests:
storage: 40Gi
- metadata:
name: gitlab-conf
spec:
accessModes: [ "ReadWriteMany" ]
storageClassName: "repo-storage-class"
resources:
requests:
storage: 2Gi
- metadata:
name: gitlab-logs
spec:
accessModes: [ "ReadWriteMany" ]
storageClassName: "repo-storage-class"
resources:
requests:
storage: 8Gi
---
apiVersion: v1
kind: Service
metadata:
name: gitlab
namespace: common-service
spec:
selector:
app: gitlab
type: NodePort
ports:
- name: http
protocol: TCP
port: 80
targetPort: 80
nodePort: 31080
- name: https
protocol: TCP
port: 443
targetPort: 443
nodePort: 31081
- name: ssh
protocol: TCP
port: 22
targetPort: 22
nodePort: 31082
2、备份旧的数据
进入容器内执行备份指令
docker exec -it gitlab /bin/bash
gitlab-rake gitlab:backup:create
备份文件路径为/var/opt/gitlab/backups,把它拷贝出来
docker cp gitlab:/var/opt/gitlab/backups/备份文件名 备份文件名
docker cp gitlab:/etc/gitlab/gitlab.rb gitlab.rb
docker cp gitlab:/etc/gitlab/gitlab-secret.json
3、新服务器导入数据
把备份文件拷贝到容器内
kubectl cp 备份文件名 -n common-service gitlab-0:/var/opt/gitlab/backups/
kubectl cp gitlab.rb -n common-service gitlab-0:/etc/gitlab/
kubectl cp gitlab-secret.json -n common-service gitlab-0:/etc/gitlab
4、数据恢复,修改配置
进入容器,用文件编号恢复。比如备份的文件名叫1623831881_2021_06_16_13.12.1_gitlab_backup.tar,他的文件编号就是1623831881_2021_06_16_13.12.1
kubectl exec -it -n common-service gitlab-0 -- /bin/bash
vim /etc/gitlab/gitlab.rb #external_url改为新服务器的地址
gitlab-rake gitlab:backup:restore BACKUP=文件编号
中途需要输入两次yes,即可完成恢复
5、异常情况
开始迁移的时候没有拷贝gitlab-secret.json文件,导致webhook、runner等页面点进去就报500,如果出现同样的情况,检查gitlab-secret.json是否一致