Devops搭建记录—基础环境搭建
背景
大概估计了一下,毕设大概20W左右的代码量,没有devops环境的话会死的,所以需要先搭建一套基本的CI/CD,避免后期暴毙
目标
- 代码版本管理能力
- 基本的CI(用于自动化单测之类的)
- 基本的CD(用于bvt和mvp体验)
依赖组件
主要依赖以下几个软件
- gitlab: 作为仓库和CI管理器
- gitlab-runner: 跑CI
- docker-registry: 存储CD产物
- envoy: 边缘路由
- minikube: 不想出现IP,所以需要一个内部的DNS,直接上K8S好了,减少一点工作量
约定
下面的那些配置文件都高度重复,为了避免影响阅读体验,都放到这个repo中
TODO: 在github创建repo
方案
0 连上外网
服务器时不时就会断网,每次用之前都得重新连一下its,很烦
1 创建用户
在58上,用祖传密码创建用户devops,并赋予docker权限
2 更新Docker
当前Docker版本还在13,跑minikube有点困难,需要升级一下,参考了以下博客
Centos7上安装docker
将Docker升级到20.10.9
3 安装minikube
3.1 下载并安装minikube
这台机器有装rpm,直接用官方给的方案即可
minikube start | minikube
3.2 启动minikube
理论上来说,直接运行下面这句话就OK
1 | minikube start |
但实际上,由于墙的原因,默认拉取的gcr镜像是跑不起来的,所以需要用国内版;此外,由于minikube默认只会把数据放在一个默认的挂载卷中,这个管理起来过于麻烦了,所以想裸机启动,管理起来对身体好一些。过程中会缺少一些软件,按照缺少列表挨个yum install即可1
minikube start --image-mirror-country='cn' --driver=none
解决minikube start拉取镜像慢的问题
3.2 配置kubectl
由于不是docker模式,所以只有root用户可以用kubectl,因此,需要把kubectl的配置给devops来一份
1 | ❗ kubectl and minikube configuration will be stored in /root |
按照这么拷过去之后,由于部分文件里面的密钥还是写的/root路径,所以会有麻烦的权限问题,用下面的命令换成devops路径下的就可以1
grep "/root" -rl . | xargs sed -i "s/\/root/\/home\/devops/g"
4 创建命名空间
我很讨厌default空间,所以需要单独创建一个devops空间1
kubectl create ns devops
5 配置持久化
代码什么的可不能运行一次删一次,所以需要在k8s中配置持久化。但是,比较坑的地方出现了,minikube只支持hostpath类型的卷挂载,不能用local了,好气哦
Persistent Volumes | minikube
5.1 配置PV
5.1.1 gitlab
分别给日志,配置,和数据,创建了5Gi,1Gi,20Gi的PV
5.1.2 docker-registry
分配给docker-registry 50Gi用来存各种会用到的镜像
5.2 配置pvc
5.2.1 gitlab
5.2.2 docker-registry
5.2.3 gitlab-runner
6 创建deployment
6.1 gitlab
6.2 docker-registry
6.3 gitlab-runner
6.4 envoy
7 创建service
6.1 gitlab
6.2 docker-registry
6.3 gitlab-runner
6.4 envoy
8 宿主机代理
envoy
在宿主机docker,直接以host模式启动envoy,并将80端口和22端口的流量无条件转发至k8s集群