Gitlab中集成Kubernetes
前言
本文适用于在Gitlab中集成没有梯子的K8s集群
文中使用的各系统版本:
- CentOS 7.6
- GItlab 12.3.1
- K8s 1.16.3
- Helm 2.16.1
- Tiller 2.15.1
前段时间想要做一站式CICD所以没有使用Jenkins做CICD平台而是使用了GItlab-Runner,
体验了一段时间,发现Gitlab-Runner还是很好用的,除了要升级runner所在机器的git版本以外,暂时没有遇到同其他的问题,如果git版本过低的话,有时候会报下面这个错误:fatal: git fetch pack: expected shallow list
这时候只需要升级git版本即可解决:
curl https://setup.ius.io | sh
yum remove -y git
yum -y install git2u
git version
下面言归正传
Gitlab中集成Kubernetes
刚好之前部署过用于测试的k8s,但是没有用起来,刚好发现新版的gitlab可以集成K8s到gitlab中做AutoCICD,于是开始在gitlab中添加K8s集群,按照官方手册提示的步骤,添加一切顺利,但是到了安装Helm Tiller的时候开始报错,查看pod log:Error: error installing: the server could not find the requested resource
- 百度大法搜不到,只好谷歌大法上,搜索上面的信息,在gitlab官方的issue中发现了这个
- 下面提交的答案说让给k8s降级,因为gitlab暂时不支持1.16版本的k8s。
什么?降级,我这么懒我怎么会降级,我不干,仔细看中间有提到了另一个issue
GitLab managed apps readiness for Kubernetes 1.16
- 然后在里面又找到了:
https://gitlab.com/gitlab-org/gitlab/merge_requests/19054
下面的回复中有位开发人员提到了要修改一下install-helm的配置就可以:
从K8s Dashboard中拿到了yaml文件,找到containers下面的image,将registry.gitlab.com/gitlab-org/cluster-integration/helm-install-image/releases/2.15.1-kube-1.11.10
修改为registry.gitlab.com/gitlab-org/cluster-integration/helm-install-image/releases/2.15.1-kube-1.13.12
其中有一段初始化的命令,在这里也踩了坑,因为Helm默认的仓库在国内也是无法访问的,需要将仓库修改到阿里的仓库,下面的最后一行是需要添加的行,上面的空行是必须的,因为中间没有空行分割算一行,修改后:
value: >-
set -xeo pipefail
helm init --tiller-tls --tiller-tls-verify --tls-ca-cert
/data/helm/helm/config/ca.pem --tiller-tls-cert
/data/helm/helm/config/cert.pem --tiller-tls-key
/data/helm/helm/config/key.pem --service-account tiller
helm init --upgrade -i registry.cn-hangzhou.aliyuncs.com/google_containers/tiller:v2.15.1 --stable-repo-url https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
需要提醒的是,tiller的版本要与上面image中的版本互相对应上!!!
好了,保存yaml文件到你的K8s节点上面,然后执行删除gitlab创建的install-helm和创建修改过的install-helm
kubectl delete -f install-helm.yaml
kubectl apply -f install-helm.yaml
终于,开始正常的运行下去了,可以通过命令查看pod状态及pod日志
查看pod状态
kubectl get pods -n gitlab-managed-apps
查看pod日志
kubectl logs -n gitlab-managed-apps install-helm
欺骗Gitlab安装Helm Tiller
没问题,一次通过,赶紧回gitlab上面看下安装状态,但是悲剧在此来临,虽然我手动安装成功了,tiller也在运行的状态,但是gitlab的集成页面中还是显示安装失败,我刚切掉的阑尾都在痛!
打开浏览器,调试,看看请求,想要通过改请求的方式骗过gitlab,但是发现请求的参数都是空的,根本不知道怎么改!!!之前也想过要改Gitlab中Helm的配置文件,但是根本没找到install-helm的配置文件,头大。
就在这时,突然想到了一个骚操作,能不能在点击install的时候我手动执行install-helm的删除和创建呢?
具体操作是:
- 先在浏览器上点击Helm Tiller的安装按钮,
- 然后再终端中把gitlab创建的install-helm这个pod删除掉,
- 紧接着手动创建我修改后的install-helm,在浏览器还在请求安装状态的这个间隔中完成安装,看看能不能欺骗gitlab。
想到就干,反正没什么影响!于是,准备好两个浏览器和终端按照上面的步骤开始操作,稍等一会儿查看pods的状态,install-helm已经消失不见了,取而代之的是之前安装过的Tiller还在运行状态,不知道是不是好事,刷新浏览器,成了!
ToDo: Gitlab AutoCICD
来源:CSDN
作者:凯云大叔
链接:https://blog.csdn.net/qq_22308607/article/details/103455838