如何将已有的docker服务迁移至Kubernetes集群中
问题描述
在接触到Kubernetes集群之前,我所需要的服务都是以docker的形式部署在三台不同的服务器上的,由于docker服务数量越来越多,我有时分不清某个服务部署在哪台服务器上,或者我想将一个服务由A服务器迁移至B服务器就很麻烦,还有一个就是我想接入promethese来做监控
综上原因,我打算将这三台服务器组成一个Kubernetes集群,并且将所有的docker服务都迁移至Kubernetes集群中
目前我已有的服务有gitlab、nextcloud、verdaccio还有一些个人打包镜像定制的服务,这里就以这gitlab服务为代表来描述整个迁移过程
迁移思路
我的迁移思路就是:
- 先准备好一个跟原来服务使用相同版本镜像的环境
- 将这个空白环境的服务启动
- 将原来docker服务的数据进行打包或者说备份
- 将备份的压缩文件复制到现在的集群环境中来
- 执行恢复操作
- 检查恢复后的数据是否异常,恢复后的服务是否都可用
准备工作
在正式迁移前,你需要准备如下:
- 一个已经部署好并且能够正常运行的Kubernetes集群(包括Kubernetes的网络组件、ingress controller等都需安装好)
- 已经具备Kubernetes的基础知识,包括如何编写资源对象的yaml文件、创建pv/pvc等
迁移gitlab过程
我的gitlab打算迁移到Kubernetes集群中,不指定分配在哪个节点,但是要求要将gitlab的配置文件、数据、日志映射出来并保存
我这里是先创建一个空的gitlab,也就是提前讲gitlab所需要的资源对象都迁移过来,然后再执行恢复数据的步骤
数据持久化保存可以使用storageclass可以自己创建pv并且绑定pvc,这里我是自己创建pv跟pvc的
正式开始迁移前,请将三台服务器上部署nfs,并且将一个统一保存数据的目录挂载到node节点上(我这里是将master的/volume目录挂载到两个node节点上)
1. 创建namespace
创建一个namespace,将gitlab相关的资源对象都部署在这个namespace里面
#创建namespace app
kubectl create namespace app
2. 创建gitlab需要的pv跟pvc
这里通过nfs的方式进行数据卷挂载,gitlab的相关数据都挂载到master的/data/gitlab目录下
root@master:/deployment/pvc# cat gitlab-pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: gitlab
labels:
name: "gitlab"
spec:
capacity:
storage: 2Gi
accessModes: ["ReadWriteMany"]
volumeMode: Filesystem
persistentVolumeReclaimPolicy: Retain
nfs:
path: /data/gitlab
server: 172.16.10.21
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: gitlab-pvc
namespace: app
spec:
accessModes: ["ReadWriteMany"]
resources:
requests:
storage: 2Gi
selector:
matchLabels:
name: "gitlab"
创建这个pv跟pvc
kubectl apply -f gitlab-pv.yaml
3.创建gitlab的deployment
root@master:/deployment/deployment# cat gitlab-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: gitlab
namespace: app
labels:
name: gitlab
spec:
selector:
matchLabels:
nam