Gitlab runner 无法部署到 kubernetes 集群

问题描述 投票:0回答:1

我的问题类似于使用 GitLab 的 runner 部署到 Kubernetes 集群,但遗憾的是没有得到解决方案。

我有一个 gitlab 管道作业,部署到名为 的 AKS 集群。该管道在 gitlab 运行器上执行,该运行器部署在名为 的不同 kubernetes 集群上。

使用 Helm Chart 在集群上成功部署 gitlab Agent,同时在集群上成功部署 runner。

但是,由于可能存在权限问题,运行器目前无法部署到集群。我已经创建了服务帐户,但不知何故,部署继续使用创建命名空间时创建的默认服务帐户。

来自管道的错误:

 helm upgrade "test-${ENVIRONMENT}" ./helloworld-chart --install -n $NAMESPACE -f "./helloworld-chart/values.yaml"
WARNING: Kubernetes configuration file is group-readable. This is insecure. Location: /builds/test-deploy-agent-ci.tmp/KUBECONFIG
WARNING: Kubernetes configuration file is world-readable. This is insecure. Location: /builds/test-deploy-agent-ci.tmp/KUBECONFIG
***Error: query: failed to query with labels: secrets is forbidden: User "system:serviceaccount:test-runner:default" cannot list resource "secrets" in API group "" in the namespace "default"***

问题: 如何为不同集群上的 gitlab 运行程序提供访问权限,以在同时运行 gitlab 代理的不同集群上运行部署?

注意:我创建了一个服务帐户,生成了密钥并生成了一个 config.toml 文件。根据一些谷歌搜索,我应该在 helm 部署期间将此配置文件传递给运行器,但不知道如何执行此操作?

将不胜感激任何线索。

gitlab kubernetes-helm azure-aks gitlab-ci-runner cicd
1个回答
0
投票

终于想通了。部署过程由 gitlab 代理处理,该代理作为目标 k8s 集群上的容器运行。 解决方案是使用代理上下文。

我在管道脚本中添加了 "kubectl config get-contexts" 来确定我连接到的集群,有趣的是,我没有看到运行者集群,而是看到了 gitlab 上的代理集群。

这是管道执行日志的示例:

$ kubectl config get-contexts
CURRENT   NAME                           CLUSTER   AUTHINFO      NAMESPACE
          poc-primary-agent   gitlab    agent:0000  

因此,在您的 .gitlab-ci.yml 中,请务必执行以下操作:

kubectl config use-context poc-primary-agent
© www.soinside.com 2019 - 2024. All rights reserved.