Support for Windows build pods in Kubernetes executor
Description
We want to fully leverage our hybrid Kubernetes cluster which contains Linux & Windows nodes. Since we're primarily working on net471 we need Windows machines to build, execute tests, ... Kubernetes executor seems to have some options to specify the nodeSelector for the manager process and also for individual build pods. We're deploying with Helm chart with the following options set in values.yml
:
...
nodeSelector:
kubernetes.io/os: linux
runners:
image: mcr.microsoft.com/windows/servercore:ltsc2019
...
nodeSelector:
kubernetes.io/os: windows
...
The functionality works as expected (manager process is deployed on Linux node and when we run a CI build the pod gets deployed to Windows node). However GitLab Runner apparently uses some helper image that is linux-specific. The error we're getting in the build logs:
Using Kubernetes namespace: infra
Using Kubernetes executor with image mcr.microsoft.com/windows/servercore:ltsc2019 ...
...
ERROR: Job failed: image pull failed: rpc error: code = Unknown desc = image operating system "linux" cannot be used on this platform
Upon inspecting the created pod we can see:
helper:
Container ID:
Image: gitlab/gitlab-runner-helper:x86_64-4745a6f3
Image ID:
Port: <none>
Host Port: <none>
Command:
sh
-c
if [ -x /usr/local/bin/bash ]; then
exec /usr/local/bin/bash
elif [ -x /usr/bin/bash ]; then
...
It seems like GitLab Runner currently only supports Linux for it's Docker and Kubernetes executors.
Proposal
Allow the use of Runner's node_selector
configuration for Kubernetes to provide hints about the target platform.
This helps not only identify the best helper image to be used (required until we have better multiarch images), but allows Runner to ensure some other settings are appropriate for the target platform.
Example
[runners.kubernetes.node_selector]
"kubernetes.io/arch" = "amd64" # optional
"kubernetes.io/os" = "windows"
"node.kubernetes.io/windows-build" = "10.0.17763"
Links to related issues and merge requests / references
Something similar was already proposed in #3565 (closed).
This page may contain information related to upcoming products, features and functionality. It is important to note that the information presented is for informational purposes only, so please do not rely on the information for purchasing or planning purposes. Just like with all projects, the items mentioned on the page are subject to change or delay, and the development, release, and timing of any products, features, or functionality remain at the sole discretion of GitLab Inc.