gitlab CI 执行 kubectl 命令失败

$ kubectl apply -f deployment.yml
error: unable to recognize "deployment.yml": Get http://localhost:8080/api?timeout=32s: dial tcp [::1]:8080: connect: connection refused

gitlab 将以gitlab-runner用户的身份运行runner命令,而并非root用户,所以需要给该用户赋予kubectl的访问权限:

首先登陆 k8s master 节点,使用以下命令把 /etc/kubernetes/admin.conf内容输出为 base64 格式:

cat /etc/kubernetes/admin.conf | base64

以上这个这个值,是操作kubectl命令的凭证,我们将它放在gitlab的CI参数中。

 进入gitlab > Projects > your project > Settings > CI/CD > Variables

设置变量 kube_config ,值为刚才的base64值。

之后直接在.gitlab-ci.yml中获取该参数,设置访问权限即可,目前我们将参数设置到了项目中,也可以设置到组中,这样组下的项目就都可以访问该参数,我没有发现哪里可以设置全局的CI参数,如果你知道的话,可以给我留言。

before_script:
  - mkdir -p /root/.kube
  - echo ${kube_config} | base64 -d > /root/.kube/config   
  - export KUBECONFIG=/root/.kube/config              
  - kubectl version                        

哥还有一招更简单的办法,不过不是很明智,直接用root用户运行gitlab-runner:

#直接把--user改成root
vi /etc/systemd/system/gitlab-runner.service

#重启runner
systemctl daemon-reload
systemctl restart gitlab-runner.service
#搞定

你可能感兴趣的:(gitlab CI 执行 kubectl 命令失败)