$ 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
#搞定
网友评论