gitlab-ci集成kubernetes自动化部署

1、从Kubernetes获取ServiceAccount token

Service Account 是 Kubernetes 用于集群内运行的程序,进行服务发现时调用 API 的帐号,帐号的 token 会直接挂载到 Pod 中,可以供程序直接使用,ServiceAccount给运行在Pod中的进程提供一个身份

如果kubernetes开启了ServiceAccount,那么会在每个namespace下面都会创建一个默认的default的sa。我这里使用的是默认的default。

步骤:

(1)登录到kubernetes集群中,使用命令

kubectl get -n uase-iot-dev secret

uase-iot-dev是你的命名空间

然后使用kubectl get -n uase-iot-dev secret default-token-v0jdt -o yaml

查看拿到token,但是这个token是经过base64加密过的,所以要将token解密

echo token | base64 -d

将解密结果保存好,后续会用到

gitlab-ci集成kubernetes自动化部署

gitlab-ci集成kubernetes自动化部署

 

2、获得Kubernetes CA证书

登录kubernetes集群,在/etc/kubernetes/pki目录下,有一个ca.crt文件就是kubernetes的证书

证书格式如下:

-----BEGIN CERTIFICATE-----

[REDACATED]

-----END CERTIFICATE-----

3、在gitlab中集成kubernetes

登录gitlab,选择你的项目,在左侧选择Settings下的Integrations,往下拉找到kubernetes,点击进入

然后输入以下:

API URL:kubernetes集群的API URL, kubernetes API Server公网地址

CA Certificate:kubernetes的CA证书

Project namespace (optional/unique):kubernetes的命名空间

Token:之前获取到的token,base64解码后的

然后save changes即可

gitlab-ci集成kubernetes自动化部署

gitlab-ci集成kubernetes自动化部署

4、添加.gitlab-ci.yml到项目中

在项目根目录下添加.gitlab-ci.yml配置文件,这个文件就是写自动化部署的脚本,包含打jar包、打镜像、自动部署到kubernetes

 

gitlab-ci集成kubernetes自动化部署

 

在deploy-huang-test阶段,image是registry.gitlab.com/gitlab-examples/kubernetes-deploy的镜像,上图中是我们把它拉下来上传到我们的私服中的

 

配置文件中的${}都是在gitlab中配置的,在Setting下的CI/CD中的Secret variables

gitlab-ci集成kubernetes自动化部署

gitlab-ci集成kubernetes自动化部署

5、给service account授权

我们使用的service account是默认的default,它默认是没有任何权限的,我们需要给他授权,不然会报如下错误:

Error from server (Forbidden)

授权步骤:

登录kubernetes集群,执行如下命令:

kubectl create rolebinding default-edit --clusterrole=edit --serviceaccount=uase-iot-dev:default --namespace=uase-iot-dev

 

uase-iot-dev是你的命名空间

 

这样default就有权限去执行我们的部署脚本了

 

最后运行结果如下:

gitlab-ci集成kubernetes自动化部署

6、碰到的错误

(1)Unable to connect to the server: x509: certificate signed by unknown authority

我碰到这个错误是因为证书弄错了,我使用的证书是前面获取token里有的ca证书,所以报了这个错。正确的证书是在/etc/kubernetes/pki目录下的ca.crt。

(2)Error from server (Forbidden): error when creating "gitlabci/deployment.yml": User "system:serviceaccount:uase-iot-dev:default"

这个错误是因为没有给default授权