-
Notifications
You must be signed in to change notification settings - Fork 1.6k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
fix: make kind-with-registry.sh work with podman #3731
Conversation
[APPROVALNOTIFIER] This PR is NOT APPROVED This pull-request has been approved by: wbrefvem The full list of commands accepted by this bot can be found here.
Needs approval from an approver in each of these files:
Approvers can indicate their approval by writing |
Welcome @wbrefvem! |
Hi @wbrefvem. Thanks for your PR. I'm waiting for a kubernetes-sigs member to verify that this patch is reasonable to test. If it is, they should reply with Once the patch is verified, the new status will be reflected by the I understand the commands that are listed here. Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository. |
@@ -36,7 +36,7 @@ EOF | |||
# We want a consistent name that works from both ends, so we tell containerd to | |||
# alias localhost:${reg_port} to the registry container when pulling images | |||
REGISTRY_DIR="/etc/containerd/certs.d/localhost:${reg_port}" | |||
for node in $(kind get nodes); do | |||
for node in $(kubectl get nodes -o jsonpath='{.items[*].metadata.name}'); do |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
isn't the right fix to make kind get nodes
work with podman?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
podman works with kind get nodes, it logs the experimental disclaimer ... podman is not stable enough and still lacks some important capabilities #1778
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There's some small discussion on the linked issue that highlights why the current kind get nodes
output is a challenge with podman.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@wbrefvem I didn't realize, but the script does not rely on kubectl commands, since you can not guarantee you are targeting the right cluster
Since all kind nodes have a -control-plane
or -worker
suffix we may use that inside the loop to skip those, WDYT @BenTheElder
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
oh, my bad again, it does rely on kubectl
at the end of the script ... nevermind, let me reassing this to @BenTheElder , he knows better this script
/assign @BenTheElder
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It should be stderr, which should not be captured:
kind/pkg/internal/runtime/runtime.go
Line 16 in 0483056
logger.Warn("using podman due to KIND_EXPERIMENTAL_PROVIDER") |
Lines 31 to 36 in 0483056
func NewLogger() log.Logger { | |
var writer io.Writer = os.Stderr | |
if env.IsSmartTerminal(writer) { | |
writer = cli.NewSpinner(writer) | |
} | |
return cli.NewLogger(writer, 0) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
logger.Warn("enabling experimental podman provider") |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
$ (out="$(KIND_EXPERIMENTAL_PROVIDER=podman kind get nodes || true)"; echo "out: $out")
using podman due to KIND_EXPERIMENTAL_PROVIDER
enabling experimental podman provider
ERROR: failed to list nodes: command "podman ps -a --filter label=io.x-k8s.kind.cluster=kind --format '{{.Names}}'" failed with error: exec: "podman": executable file not found in $PATH
Command Output:
out:
Are we sure the script is broken?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Are we sure the script is broken?
For podman running on macOS, yes, but I may have misunderstood the reason. Here's what I'm seeing when the script starts to docker exec
the nodes:
using podman due to KIND_EXPERIMENTAL_PROVIDER
enabling experimental podman provider
Error: can only create exec sessions on running containers: container state improper
@BenTheElder you're right that the two lines about podman are not going to stdout. It must be a race condition, and since my solution involves an API call, it's slow enough to lose the race.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Interesting, we really should be safe to exec once kind create cluster
succeeds ... uhhh
Did the container crash or something?
Let's follow up more on the issue.
This seems to be accidentally mitigating some deeper issue, closing the PR for now but watching the issue for more details so we can determine the root cause and fix |
Addresses #3729