Gitlab runner with Kubernetes executor 本身是pod时如何创建pods?

How does Gitlab runner with Kubernetes executor create pods when it is a pod itself?

嘿,我是 gitlab CI/CD 的新手,我有点困惑。

我有一个 Kubernetes 集群连接到一个 Gitlab 实例到 运行 CI/CD 管道。 有一个带有 kubernetes 执行程序的 gitlab 运行ner,据我所知,这意味着有一个 pod 运行s 管道。

kubectl get pods -n gitlab-runner 的外观支持(现在还有一些其他问题,但通常是 1/1 running):

NAMESPACE        NAME                                           READY   STATUS    RESTARTS   AGE
gitlab-runner    gitlab-runner-gitlab-runner-6b7bf4d766-9t4k6   0/1     Running   248        29d

CI/CD 管道调用 kubectl apply -f [...] 等命令来创建新部署和 pods。 但为什么会这样呢? 如果管道命令是 运行 pod,那么修改主机集群配置应该是不可能的,对吧? 我认为容器化的重点是客人不能修改主机。

我的逻辑错误在哪里?

I thought the whole point of containerization is that guests can't modify the host.

您忽略了 the serviceAccount,它 可选地 注入到每个 Pod 中,那些 ServiceAccount 对象可以绑定到 RoleClusterRole 反对选择性地 g运行t 他们对 kubernetes API 进行操作的特权,它在众所周知的 DNS 地址 https://kubernetes.default.svc.cluster.local[=17= 上公开 in-cluster ]

所以,是的,他们大多无法修改 host 但 kubernetes 是一个编排引擎,因此 GitLab runner 可以 request一个新的 Pod 在集群中启动,只要 GitLab 运行器具有正确的 kubernetes 凭据,就会像用户从 kubectl 请求相同的操作一样认真对待

另一种看待这个问题的方法是,如果你 运行 在 kubernetes 的 gitlab-runner 之外 ,你会取得同样的成功,但提供它集群的凭据,然后您就会遇到 运行 现有集群基础架构之外的另一个 VM 的问题,随之而来的是

总是带来的所有维护负担