给私有gitlab添加私有kubernetes集群

gitlab可以通过kubernetes集群安装和运行gitlab runner等应用,以实现其auto Devp的各种机制。能够给私有的gitlab配置好kubrenetes可以给项目开发省下很多功夫。

我们可以给gitlab中的一个工作群组创建Kubernetes,创建过程gitlab给出了很好的引导。这其中我们唯一需要注意的是,创建kubernetes的api url时有时候需要指定到具体的端口。例如 : https://ip_address:6443

但是,base domain不需要指定端口。只需要ip_address即可。

在创建过程中,你需要按照gitlab的说明在集群配置相应的服务账号,生成证书,生成token。如果你的kubernetes网络配置都正确的话,我们就可以通过gitlab给你刚刚所指定的kubenetes集群安装应用了。

在安装这些应用时,我们的第一个挑战出现了。安装gitlab-runner基本没有什么问题,安装Prometheus时因为它要指定一个存储空间,问题可能就会发生了。按照最基本的搭建kubernetes集群方法,并没有告诉我们什么时候给安装kubernetes存储空间,所以这里就会发生问题。

对于计算机集群而言,存储空间是个很严重的问题。因为pod一般是临时的,可能随时被创建,随时被移除。而pod所使用的一些数据有时候却需要持久化。从计算机集群的视角来看,存储空间就不是文件系统,或者数据库那么简单了。

像prometheus这种应用,它会向kubenetes申请一个存储空间,在申请时它会创建一个pvc来描述自己的需求,如果kubernetes发现自己能够按照它的需求创建,则会创建一个给prometheus使用。

在这里的情况下,我们需要kubenetes采用动态创建pv的方式给prometheus创建一个存储空间。要达到这个前提,我们就需要指定一个默认的storageClass。我们可以通过以下指令来查看kubunetes都有哪些存储类型。

kubectl get storageClass

如果此kubenetes是根据官方文档创建的空白集群,这里的输出有可能是空。我们需要给kubernetes创建一个storageClass并且指定其为默认的storageClass, 这样在gitlab安装prometheus时就能成功创建了。考虑到本地的存储的类型不能作为默认的storageClass,这里我们可以创建一个nfs服务器,并给kubenetes创建一个nfs的供应系统

在创建了nfs供应系统后,还需要参照此文的方法,给kubenetes配置正确的默认storageClass

gitlab指定非常规端口的ssh推送代码

在自建gitlab的服务器上,我们采用了一个非常规端口。此是提交代码时需要给remote的url修改一下,以此来指定端口号。修改方式示例如下:

git remote set-url origin [git@<gitlab_host>:<gitlab_ssh_port>]:<user>/<your_project>.git

注意这里的方括号,这里相对于常规用法的改变就是通过方括号把端口号指定出来。