feat(bootstrap): add Podman socket fallback for macOS#502
feat(bootstrap): add Podman socket fallback for macOS#502craigamcw wants to merge 2 commits intoNVIDIA:mainfrom
Conversation
Implemented feature with help from Claude Code
Add additive Podman support on macOS without changing any Linux paths,
K3s logic, policy engine, or inference routing.
Socket discovery fallback chain:
1. $DOCKER_HOST
2. $CONTAINER_HOST
3. /var/run/docker.sock (bollard default)
4. Podman socket via `podman machine inspect` (macOS only)
Container runtime adaptations when Podman is detected:
- security_opt: unmask /sys/fs/cgroup and /dev/kmsg
- kubelet feature gate: KubeletInUserNamespace=true
- kubelet arg: cgroups-per-qos=false, enforce-node-allocatable=
Image push reliability:
- Extended timeout (120s → 600s) for Unix socket connections
- Fallback from bollard put_archive API to `docker cp` CLI for
large image transfers that fail over the Podman API socket
Also adds documentation for Podman setup in quickstart, support matrix,
and a new troubleshooting page.
Signed-off-by: Craig <craig@epic28.com>
|
All contributors have signed the DCO ✍️ ✅ |
|
I have read the DCO document and I hereby sign the DCO. |
|
recheck |
|
Thanks for the PR. I'm thinking through the best way to to test this. There is enough business logic and difference in implementation that we'll want some podman specific e2e tests. |
Add E2E tests that validate the Podman macOS support end-to-end: - doctor check succeeds with explicit DOCKER_HOST pointing at Podman - doctor check auto-discovers the Podman socket without DOCKER_HOST - doctor check respects CONTAINER_HOST as a fallback - full gateway lifecycle (start → status → destroy) under Podman with KubeletInUserNamespace and cgroups-per-qos flags All tests skip gracefully when Podman is not installed or not running, so they do not break CI on Docker-only environments. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> Signed-off-by: Craig <craig@epic28.com>
|
Thank you Drew. I added Podman-specific E2E tests in
All tests skip gracefully when Podman is not installed, so they won't break CI on Docker-only runners. Verified locally: 4/4 pass on macOS M4 with Podman 5.8.1 (applehv, rootful mode). |
|
Let's hold on this for now. podman isn't installed on our CI images, so our e2e tests are still going to fail. We're going to switch to a microVM based approach which should alleviate this bug all together. If the microVM approach doesn't work, or we decide to continue to support docker we can bring the PR back and get proper CI support. Feel free to contribute to the discussion here, #558. |
Implemented feature with help from Claude Code.
Add additive Podman support on macOS without changing any Linux paths, K3s logic, policy engine, or inference routing.
Socket discovery fallback chain:
podman machine inspect(macOS only)Container runtime adaptations when Podman is detected:
Image push reliability:
docker cpCLI for large image transfers that fail over the Podman API socketAlso adds documentation for Podman setup in quickstart, support matrix, and a new troubleshooting page.
Summary
Adds Podman as a supported container runtime on macOS. OpenShell now auto-discovers the Podman machine socket, configures k3s kubelet flags for rootful Podman compatibility, and falls back to docker cp for reliable large image uploads. No Linux paths, K3s core logic, policy engine, or inference routing are changed.
Related Issue
N/A — feature contribution (Podman on macOS was previously unsupported)
Changes
Testing
mise run pre-commitpassesChecklist
docs/reference/troubleshooting.md (new)