Skip to content
This repository has been archived by the owner on May 30, 2023. It is now read-only.

app-emulation/(docker*|containerd): Revert to Go 1.13 #774

Merged
merged 1 commit into from Jan 18, 2021

Conversation

pothos
Copy link
Contributor

@pothos pothos commented Jan 12, 2021

When Docker/containerd binaries are compiled with Go 1.15 the
containers generate many signal 23 (SIGURG) events which flood
monitoring systems:
kubernetes/kops#10388
The SIGURG signal does not kill the process but is generated by Go
runtime scheduling:
https://go.googlesource.com/proposal/+/master/design/24543-non-cooperative-preemption.md)
Because the Go runtime does not know if the process expects external
SIGURG signals, the signal is not filtered out but reported to the
process: golang/go#37942
The process has to filter this signal out itself before forwarding it
to, e.g,. children processes or logs.
This change was introduced with the Go 1.15 update (actually Go 1.14
but Flatcar skipped that for Stable), however, while containerd has
some workarounds in place, e.g., in
containerd/containerd#4532 but there are still
areas where the signal is not handled correctly.
Until this is the case, downgrade to use the Go 1.13 compiler for
Docker/containerd binaries.

See flatcar/Flatcar#315

Note: Should be picked for all channels

How to use

Testing done

Manually built the image and ran docker events in one shell, docker run --rm -it alpine in the other with hitting Ctrl-C or Enter a few times. With Go 1.13 there are no SIGURG events as expected.
Jenkins

When Docker/containerd binaries are compiled with Go 1.15 the
containers generate many signal 23 (SIGURG) events which flood
monitoring systems:
  kubernetes/kops#10388
The SIGURG signal does not kill the process but is generated by Go
runtime scheduling:
  https://go.googlesource.com/proposal/+/master/design/24543-non-cooperative-preemption.md)
Because the Go runtime does not know if the process expects external
SIGURG signals, the signal is not filtered out but reported to the
process: golang/go#37942
The process has to filter this signal out itself before forwarding it
to, e.g,. children processes or logs.
This change was introduced with the Go 1.15 update (actually Go 1.14
but Flatcar skipped that for Stable), however, while containerd has
some workarounds in place, e.g., in
containerd/containerd#4532 but there are still
areas where the signal is not handled correctly.
Until this is the case, downgrade to use the Go 1.13 compiler for
Docker/containerd binaries.

See flatcar/Flatcar#315
@pothos pothos requested a review from a team January 13, 2021 15:16
@pothos pothos marked this pull request as ready for review January 13, 2021 15:17
@pothos pothos merged commit 3b3aa1b into main Jan 18, 2021
@pothos pothos deleted the kai/use-go-1.13-for-docker branch January 18, 2021 10:57
pothos added a commit that referenced this pull request Jan 18, 2021
app-emulation/(docker*|containerd): Revert to Go 1.13
pothos added a commit that referenced this pull request Jan 18, 2021
app-emulation/(docker*|containerd): Revert to Go 1.13
pothos added a commit that referenced this pull request Jan 18, 2021
app-emulation/(docker*|containerd): Revert to Go 1.13
pothos added a commit that referenced this pull request Feb 1, 2021
app-emulation/(docker*|containerd): Revert to Go 1.13
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
2 participants