Gitlab中集成Kubernetes

假装没事ソ 提交于 2019-12-10 05:35:55

前言

本文适用于在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

  1. 百度大法搜不到,只好谷歌大法上,搜索上面的信息,在gitlab官方的issue中发现了这个

Helm Tiller fails to install

  1. 下面提交的答案说让给k8s降级,因为gitlab暂时不支持1.16版本的k8s。
    什么?降级,我这么懒我怎么会降级,我不干,仔细看中间有提到了另一个issue

GitLab managed apps readiness for Kubernetes 1.16

  1. 然后在里面又找到了:

https://gitlab.com/gitlab-org/gitlab/merge_requests/19054

下面的回复中有位开发人员提到了要修改一下install-helm的配置就可以:
修改install-helm.yaml

从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的删除和创建呢?
具体操作是:

  1. 先在浏览器上点击Helm Tiller的安装按钮,
  2. 然后再终端中把gitlab创建的install-helm这个pod删除掉,
  3. 紧接着手动创建我修改后的install-helm,在浏览器还在请求安装状态的这个间隔中完成安装,看看能不能欺骗gitlab。

想到就干,反正没什么影响!于是,准备好两个浏览器和终端按照上面的步骤开始操作,稍等一会儿查看pods的状态,install-helm已经消失不见了,取而代之的是之前安装过的Tiller还在运行状态,不知道是不是好事,刷新浏览器,成了!

Tiller完成安装ToDo: Gitlab AutoCICD

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!