0

我面临一个非常奇怪的问题。

首先我的设置:
我有一个私有 Gitlab 服务器,它使用 Kubernetes 上的 Gitlab CI Runners 来构建 Docker 映像。为此,我使用 Kaniko Image。Runners 由 Gitlab 自己提供,并带有内置的 Kubernetes 管理。所有这些都在 PFSense 服务器后面运行。

现在我的问题是:
有时 Kaniko Pod 无法解析 GitLab 服务器的主机名。这会导致 git pull 失败,从而导致构建失败。我认为失败的几率是 60%,这对我们来说太高了。重试几次构建后,它将运行没有任何问题。

运行 Gitlab CI 的 Kubernetes 集群是在 CentOS 7 上设置的。SELinux 和 FirewallD 被禁用。所有主机都可以解析 GitLab 服务器。它也与导致问题的特定主机服务器无关。我已经看到它在包括 Manager Server 在内的所有 5 台服务器上都失败了。另外我还没有看到这个问题出现在其他 Pod 中。但是集群中的其他部署并没有真正通过 DNS 进行连接。我确信 Runner 完全可以访问 DNS,因为它正在从 gcr.io 中提取 Kaniko Image。

有没有人见过这个问题或知道解决方法?

  • 我已经尝试过生成只对域进行 DNS 请求的 Pod。我没有看到一个失败。
  • 我还尝试重新启动整个集群和 Gitlab 实例。
  • 我试图对 PFSense 中的 DNS 路由进行静态覆盖。还是一样的问题。

这是我的 CI 配置:

build:
  stage: build
  image:
    name: gcr.io/kaniko-project/executor:debug
    entrypoint: [""]
  script:
    - echo $REGISTRY_AUTH > /kaniko/.docker/config.json
    - /kaniko/executor --context $CI_PROJECT_DIR --dockerfile $CI_PROJECT_DIR/Dockerfile --destination $REGISTRY_URL/$REGISTRY_IMAGE:$CI_JOB_ID
  only:
    - master

发生以下错误:

Initialized empty Git repository in /builds/MYPROJECT/.git/
Fetching changes...
Created fresh repository.
fatal: unable to access 'https://gitlab-ci-token:[MASKED]@git.mydomain.com/MYPROJECT.git/': Could not resolve host: git.mydomain.com
4

2 回答 2

5

几天来我们遇到了同样的问题。我们尝试更改 CoreDNS 配置,将运行器移动到不同的 k8s 集群等等。最后今天我检查了我的个人跑步者,发现我使用的是不同的版本。集群中的跑步者有gitlab/gitlab-runner:alpine-v12.3.0,而我的有gitlab/gitlab-runner:alpine-v12.0.1。我们添加了行

image: gitlab/gitlab-runner:alpine-v12.1.0

这为values.yaml我们解决了问题

于 2019-10-02T15:57:49.100 回答
1

有一个 gitlab-runner 的 env 可以解决这个问题

- name: RUNNER_PRE_CLONE_SCRIPT
  value: "exec command before git fetch ..."

例如:编辑/etc/hosts

echo '127.0.0.1 git.demo.xxxx' >> /etc/hosts

或编辑/etc/resolv.conf

echo 'nameserver 8.8.8.8' > /etc/resolv.conf

希望这对你有用

于 2020-04-17T02:02:02.353 回答