Devops搭建记录--基础环境搭建

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
2
3
4
5
❗  kubectl and minikube configuration will be stored in /root
❗ To use kubectl or minikube commands as your own user, you may need to relocate them. For example, to overwrite your own settings, run:

▪ sudo mv /root/.kube /root/.minikube $HOME
▪ sudo chown -R $USER $HOME/.kube $HOME/.minikube

按照这么拷过去之后,由于部分文件里面的密钥还是写的/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集群

Docker安装Gitlab和Gitlab-Runner并实现项目CICD