Skip to content

[Epic] Cozystack on ARM #903

Open
2 of 3 issues completed
Open

Description

@nbykov0

Cozystack should be able to run on ARM hardware.

Steps:

Activity

  1. changed the title [-]Cozystack on ARM[/-] [+][Epic] Cozystack on ARM[/+] on Apr 30, 2025
  2. dosubot commented on Oct 18, 2025

    @dosubot

    Hi, Nikita (@nbykov0). I'm Dosu, and I'm helping the cozystack team manage their backlog and am marking this issue as stale.

    Issue Summary:

    Next Steps:

    • Please let me know if this issue is still relevant to the latest version of Cozystack by commenting here.
    • If I do not hear from you within 7 days, this issue will be automatically closed.

    Thank you for your understanding and contribution!

  3. added
    lifecycle/staleDenotes an issue or PR has remained open with no activity and has become stale
    on Oct 18, 2025
  4. nbykov0 commented on Oct 20, 2025

    @nbykov0
    CollaboratorAuthor

    Work is currently on hold but this feature is not abandoned.

  5. removed
    lifecycle/staleDenotes an issue or PR has remained open with no activity and has become stale
    on Oct 20, 2025
  6. dosubot commented on Jan 24, 2026

    @dosubot

    Hi, Nikita (@nbykov0). I'm Dosu, and I'm helping the cozystack team manage their backlog and am marking this issue as stale.

    Issue Summary:

    • You proposed enabling Cozystack to run on ARM hardware, including providing ARM images.
    • Related work has been referenced and partially completed (CI runs on dedicated ARM runners #906).
    • The issue was marked stale due to inactivity.
    • You mentioned the work is currently on hold but not abandoned.
    • No further updates have been provided since your last comment.

    Next Steps:

    • Please let me know if this issue is still relevant to the latest version of Cozystack by commenting here.
    • If I don’t hear back within 7 days, the issue will be automatically closed.

    Thank you for your understanding and contribution!

  7. added
    lifecycle/staleDenotes an issue or PR has remained open with no activity and has become stale
    on Jan 24, 2026
  8. removed
    lifecycle/staleDenotes an issue or PR has remained open with no activity and has become stale
    on Jan 31, 2026
  9. kvaps commented on May 1, 2026

    @kvaps
    Member

    From my point of view the only limitation we have right now is that we need to solve multi-arch builds and tests, which might make our already complex pipeline even more complex and fragile.

    The solutions:

    • create a totally separate pipeline for ARM build and test, but the question is how to stitch the final images together (or, should we?)
    • separate and move all our apps and bundles into an out-of-tree repo, keep cozystack repo only for framework development.

    Yes, we just need to find the solution for the issues mentioned above.

    We have everything prepared, ARM workers sponsored by CNCF. All we need to do is find answers to the questions of how to build and test it without slowing down our existing development for amd64.

  10. added
    kind/featureCategorizes issue or PR as related to a new feature
    area/buildIssues or PRs related to image build infrastructure, multi-arch support
    epicA large development increment that brings definite value to Cozystack users
    on Jun 4, 2026
  11. ajaykumarmandapati commented on Sep 18, 2026

    @ajaykumarmandapati

    Adding a data point from the local-development angle, which I think is the one part of this epic that #1961 doesn't already cover.

    I built and ran Cozystack v1.6.2 (bfde94f, isp-full-generic) on a single Apple Silicon machine — k3d in a Colima VM, M4, 8 CPU / 20 GB. It converged: 98/98 HelmReleases, 74/74 Packages, 109 pods, and a SeaweedFS bucket created through the dashboard provisioned end to end via COSI with a verified S3 PUT/LIST/GET round trip. LINSTOR was excluded (DRBD needs an out-of-tree module the VM doesn't have), and core/talos was skipped.

    This mostly corroborates Aleksei Sviridkin (@lexfrei)'s result in #1961 on a smaller and less representative host, so I'm not claiming it as new. Three things did come out of it that I haven't seen recorded elsewhere.

    1. cilium should be rebuilt, not switched to upstream

    The table in #1961 lists cilium under "previously republished without patches". In v1.6.2 that isn't the case — packages/system/cilium/images/cilium/Dockerfile builds FROM quay.io/cilium/cilium:v1.19.5 and then applies patches/pass-ipv6-to-stack-when-ipv6-datapath-disabled.diff to bpf/bpf_host.c.

    With ENABLE_HOST_FIREWALL set but ENABLE_IPV6 not compiled in, the protocol-switch default drops all IPv6 as DROP_UNKNOWN_L3 before policy evaluation, in both directions. That breaks ICMPv6 Neighbor Discovery and BGP unnumbered over link-local addresses on IPv6/L3 fabrics, and no CiliumClusterwideNetworkPolicy can allow the traffic back. Upstream report is cilium/cilium#33155 — closed stale, not fixed.

    The build already guards it (patch --fuzz=0, then asserts exactly 3 cozystack-ipv6-passthrough markers), so upstream drift fails loudly. But a swap to the upstream image bypasses the Dockerfile entirely and would drop the patch silently. It rebuilds for arm64 in ~35s with the patch intact, so rebuilding costs little here. Flagging in case that list was drawn against an earlier version.

    2. A class of image that no build-pipeline change can fix

    Enabling ingress on a tenant surfaced this on arm64:

    Failed to pull image "ghcr.io/kvaps/ingress-nginx-with-protobuf-exporter/protobuf-exporter:v1.11.2@sha256:6d9235a9...":
      no match for platform in manifest: not found
    

    The controller image beside it (ghcr.io/cozystack/ingress-nginx-with-protobuf-exporter/controller) has arm64 and ran fine. The protobuf-exporter sidecar, referenced at packages/system/ingress-nginx/values.yaml:19, is amd64-only at both the tag and the digest, lives in a different namespace from the rest of the platform images, and has no in-tree Dockerfile.

    So it can't be fixed by PLATFORM, by a separate ARM pipeline, or by moving apps out-of-tree — it needs republishing multi-arch, vendoring into the repo, or dropping. It's a metrics sidecar and not in the request path, so dropping it was viable for my purposes, at the cost of ingress protobuf metrics.

    Might be worth an audit pass for other image references outside ghcr.io/cozystack/* before committing to a pipeline shape, since this class is invisible to any amount of build-system work.

    3. Three hardcoded --platform=linux/amd64 that bypass BUILDX_ARGS

    • packages/system/dashboard/Makefile:30 and :48
    • packages/system/metallb/Makefile:20

    packages/system/kubeovn-plunger/Makefile:8 calls docker buildx build without BUILDX_ARGS at all.

    These are bespoke buildx invocations that don't inherit the PLATFORM plumbing from #519, so they silently produce amd64 even when the rest of the build is told otherwise.


    On the pipeline question in your 1 May comment — I don't have an answer, but one observation from doing this by hand: the packages OCI artifact is assembled by core/installer as the last build unit, so any image reference fixed after that point doesn't reach the cluster at all. That ordering constraint seems relevant to whichever shape you pick; it bit me twice before I noticed.

    Also flagging in case it affects planning: the CNCF Community Infrastructure Lab is no longer accepting new applications, and Equinix Metal sunset on 30 June 2026. If the CNCF-sponsored ARM workers mentioned above were on that infrastructure, it may be worth confirming they're still available before planning around them.

    Happy to share the scripts that reproduce the macOS/Apple Silicon build if that's useful for the local-dev angle in #519 — they're rough, but they go from a clean machine to a converged cluster.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

area/buildIssues or PRs related to image build infrastructure, multi-arch supportepicA large development increment that brings definite value to Cozystack userskind/featureCategorizes issue or PR as related to a new featuretriage/acceptedIndicates an issue is ready to be actively worked on

Projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions