Skip to content
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

Add support for building aarch64 ISO #13762

Merged
merged 136 commits into from
May 9, 2022

Conversation

sharifelgamal
Copy link
Collaborator

@sharifelgamal sharifelgamal commented Mar 9, 2022

This rather large PR adds the ability to build an arm64 buildroot ISO.
Specific changes include:

  • adding CHANGELOG to the ISO rootfs overlay
  • support for building ISO with UEFI bootloader (although the amd64 ISO remains BIOS for several reasons)
  • full refactor of the deploy/iso/minikube-iso subdirectories
    • adding the arch directory for all arch specific packages
    • templatizing Config.in so each arch can define it at build time
    • move board/coreos/minikube to board/minikube/<arch>
  • Make sure automation builds and recognizes both ISOs
  • Make sure minikube auto-selects ISO based on arch automatically

Closes #9228

Thanks for your patience everyone.

@k8s-ci-robot k8s-ci-robot added do-not-merge/work-in-progress Indicates that a PR should not merge because it is a work in progress. size/XXL Denotes a PR that changes 1000+ lines, ignoring generated files. cncf-cla: yes Indicates the PR's author has signed the CNCF CLA. labels Mar 9, 2022
@k8s-ci-robot k8s-ci-robot added the approved Indicates a PR has been approved by an approver from all required OWNERS files. label Mar 9, 2022
.github/workflows/update-k8s-versions.yml Outdated Show resolved Hide resolved
Makefile Show resolved Hide resolved
@sharifelgamal
Copy link
Collaborator Author

deep breath here we go

/ok-to-test

@k8s-ci-robot k8s-ci-robot added the ok-to-test Indicates a non-member PR verified by an org member that is safe to test. label May 6, 2022
@sharifelgamal sharifelgamal changed the title WIP: arm64 ISO work Add support for building aarch64 ISO May 6, 2022
@k8s-ci-robot k8s-ci-robot removed the do-not-merge/work-in-progress Indicates that a PR should not merge because it is a work in progress. label May 6, 2022
@medyagh medyagh self-requested a review May 6, 2022 23:01
@minikube-pr-bot
Copy link

kvm2 driver with docker runtime

+----------------+----------+---------------------+
|    COMMAND     | MINIKUBE | MINIKUBE (PR 13762) |
+----------------+----------+---------------------+
| minikube start | 50.8s    | 51.1s               |
| enable ingress | 28.7s    | 29.7s               |
+----------------+----------+---------------------+

Times for minikube start: 52.0s 50.5s 50.6s 49.7s 51.3s
Times for minikube (PR 13762) start: 51.8s 51.2s 50.8s 50.8s 51.1s

Times for minikube ingress: 26.0s 30.1s 30.0s 29.0s 28.6s
Times for minikube (PR 13762) ingress: 28.6s 30.1s 30.1s 29.5s 30.1s

docker driver with docker runtime

+----------------+----------+---------------------+
|    COMMAND     | MINIKUBE | MINIKUBE (PR 13762) |
+----------------+----------+---------------------+
| minikube start | 24.6s    | 24.7s               |
| enable ingress | 23.1s    | 23.0s               |
+----------------+----------+---------------------+

Times for minikube start: 26.0s 24.7s 23.9s 24.5s 23.7s
Times for minikube (PR 13762) start: 24.5s 24.4s 24.1s 25.7s 25.0s

Times for minikube ingress: 24.4s 22.9s 23.9s 22.4s 21.9s
Times for minikube (PR 13762) ingress: 22.9s 23.9s 23.9s 21.9s 22.4s

docker driver with containerd runtime

+----------------+----------+---------------------+
|    COMMAND     | MINIKUBE | MINIKUBE (PR 13762) |
+----------------+----------+---------------------+
| minikube start | 39.3s    | 39.8s               |
| enable ingress | 20.8s    | 21.7s               |
+----------------+----------+---------------------+

Times for minikube start: 32.9s 40.3s 43.9s 39.8s 39.7s
Times for minikube (PR 13762) start: 39.2s 39.8s 43.7s 32.7s 43.7s

Times for minikube ingress: 19.0s 22.4s 17.9s 22.4s 22.4s
Times for minikube (PR 13762) ingress: 31.9s 22.4s 18.4s 17.9s 17.9s

@medyagh
Copy link
Member

medyagh commented May 7, 2022

omg ! Am I dreaming ? KVM and Hyperkit Tests are Green on this ISO PR ! this is one of the biggest works delivered in minikube in years ! Thank you for taking this to the finish line

@sharifelgamal
Copy link
Collaborator Author

ok-to-build-iso

@minikube-pr-bot
Copy link

These are the flake rates of all failed tests.

Environment Failed Tests Flake Rate (%)
Docker_macOS TestFunctional/parallel/ImageCommands/ImageListTable (gopogh) 1.06 (chart)
Docker_Linux_containerd TestNetworkPlugins/group/auto/DNS (gopogh) 17.33 (chart)
Docker_Linux_containerd TestAddons/Setup (gopogh) 24.76 (chart)
Docker_Linux_containerd TestIngressAddonLegacy/serial/ValidateIngressAddonActivation (gopogh) 24.76 (chart)
Docker_Linux_containerd TestIngressAddonLegacy/StartLegacyK8sCluster (gopogh) 24.76 (chart)
Docker_Linux_containerd TestJSONOutput/start/Audit (gopogh) 24.76 (chart)
Docker_Linux_containerd TestJSONOutput/start/Command (gopogh) 24.76 (chart)
Docker_Linux_containerd TestMultiNode/serial/AddNode (gopogh) 24.76 (chart)
Docker_Linux_containerd TestMultiNode/serial/DeleteNode (gopogh) 24.76 (chart)
Docker_Linux_containerd TestMultiNode/serial/FreshStart2Nodes (gopogh) 24.76 (chart)
Docker_Linux_containerd TestMultiNode/serial/ProfileList (gopogh) 24.76 (chart)
Docker_Linux_containerd TestMultiNode/serial/RestartKeepsNodes (gopogh) 24.76 (chart)
Docker_Linux_containerd TestMultiNode/serial/RestartMultiNode (gopogh) 24.76 (chart)
Docker_Linux_containerd TestMultiNode/serial/StartAfterStop (gopogh) 24.76 (chart)
Docker_Linux_containerd TestMultiNode/serial/StopNode (gopogh) 24.76 (chart)
Docker_Linux_containerd TestPreload (gopogh) 24.76 (chart)
Docker_Linux_containerd TestOffline (gopogh) 27.62 (chart)
Docker_Linux_containerd TestPause/serial/Start (gopogh) 27.62 (chart)
Docker_Linux_containerd TestFunctional/parallel/MountCmd/any-port (gopogh) 38.10 (chart)
Docker_Linux_containerd TestFunctional/parallel/MySQL (gopogh) 38.10 (chart)
Docker_Linux_containerd TestFunctional/parallel/PersistentVolumeClaim (gopogh) 38.10 (chart)
Docker_Linux_containerd TestFunctional/parallel/ServiceCmd (gopogh) 38.10 (chart)
Docker_Linux_containerd TestFunctional/parallel/ServiceCmdConnect (gopogh) 38.10 (chart)
Docker_Linux_containerd TestFunctional/parallel/TunnelCmd/serial/AccessDirect (gopogh) 38.10 (chart)
Docker_Linux_containerd TestFunctional/parallel/TunnelCmd/serial/WaitService/Setup (gopogh) 38.10 (chart)
Docker_Linux_containerd TestFunctional/serial/ExtraConfig (gopogh) 38.10 (chart)
Docker_Linux_containerd TestFunctional/serial/SoftStart (gopogh) 38.10 (chart)
Docker_Linux_containerd TestFunctional/serial/StartWithProxy (gopogh) 38.10 (chart)
Docker_Linux_containerd TestMultiNode/serial/DeployApp2Nodes (gopogh) 38.10 (chart)
Docker_Linux_containerd TestMultiNode/serial/PingHostFrom2Pods (gopogh) 38.10 (chart)
More tests... Continued...

Too many tests failed - See test logs for more details.

To see the flake rates of all tests by environment, click here.

@minikube-pr-bot
Copy link

kvm2 driver with docker runtime

+----------------+----------+---------------------+
|    COMMAND     | MINIKUBE | MINIKUBE (PR 13762) |
+----------------+----------+---------------------+
| minikube start | 51.9s    | 51.0s               |
| enable ingress | 28.0s    | 29.0s               |
+----------------+----------+---------------------+

Times for minikube start: 53.8s 51.4s 51.7s 51.2s 51.3s
Times for minikube (PR 13762) start: 51.0s 51.4s 51.0s 50.0s 51.4s

Times for minikube ingress: 25.1s 29.6s 30.1s 29.1s 26.1s
Times for minikube (PR 13762) ingress: 31.5s 30.5s 28.6s 28.5s 26.0s

docker driver with docker runtime

+----------------+----------+---------------------+
|    COMMAND     | MINIKUBE | MINIKUBE (PR 13762) |
+----------------+----------+---------------------+
| minikube start | 25.0s    | 24.0s               |
| enable ingress | 22.6s    | 23.7s               |
+----------------+----------+---------------------+

Times for minikube start: 27.9s 24.6s 23.7s 24.6s 24.2s
Times for minikube (PR 13762) start: 24.1s 23.9s 24.3s 23.4s 24.1s

Times for minikube ingress: 22.9s 24.4s 20.9s 21.9s 22.9s
Times for minikube (PR 13762) ingress: 22.4s 26.9s 22.9s 24.0s 22.4s

docker driver with containerd runtime

+----------------+----------+---------------------+
|    COMMAND     | MINIKUBE | MINIKUBE (PR 13762) |
+----------------+----------+---------------------+
| minikube start | 39.5s    | 38.5s               |
| enable ingress | 22.8s    | 27.3s               |
+----------------+----------+---------------------+

Times for minikube (PR 13762) start: 39.9s 40.0s 29.3s 39.8s 43.5s
Times for minikube start: 29.1s 38.8s 40.2s 44.8s 44.4s

Times for minikube ingress: 22.4s 22.4s 32.5s 18.4s 18.4s
Times for minikube (PR 13762) ingress: 21.9s 21.9s 22.4s 51.9s 18.4s

@minikube-bot
Copy link
Collaborator

Hi @sharifelgamal, building a new ISO failed.
See the logs at: https://storage.cloud.google.com/minikube-builds/logs/13762/66a8e87/iso_build.txt

@sharifelgamal
Copy link
Collaborator Author

ok-to-build-iso

@minikube-pr-bot
Copy link

These are the flake rates of all failed tests.

Environment Failed Tests Flake Rate (%)
Docker_Linux TestNoKubernetes/serial/StartNoArgs (gopogh) 3.26 (chart)
Docker_Linux_containerd TestPause/serial/Pause (gopogh) 10.39 (chart)
Docker_macOS TestStartStop/group/default-k8s-different-port/serial/AddonExistsAfterStop (gopogh) 44.68 (chart)
Docker_Windows TestForceSystemdFlag (gopogh) 52.53 (chart)
Docker_Linux_containerd TestNetworkPlugins/group/kindnet/Start (gopogh) 54.05 (chart)
Docker_Linux_containerd TestNetworkPlugins/group/calico/DNS (gopogh) 63.64 (chart)
Docker_macOS TestNetworkPlugins/group/calico/Start (gopogh) 65.79 (chart)
Docker_macOS TestNetworkPlugins/group/kubenet/DNS (gopogh) 66.67 (chart)
Docker_Windows TestStartStop/group/newest-cni/serial/Pause (gopogh) 67.35 (chart)
Docker_macOS TestNetworkPlugins/group/kindnet/Start (gopogh) 69.74 (chart)
Docker_macOS TestNetworkPlugins/group/bridge/DNS (gopogh) 73.91 (chart)
Docker_Linux_containerd TestNetworkPlugins/group/enable-default-cni/DNS (gopogh) 75.64 (chart)
Docker_macOS TestNetworkPlugins/group/enable-default-cni/DNS (gopogh) 77.36 (chart)
Docker_Linux_containerd TestNetworkPlugins/group/bridge/DNS (gopogh) 78.48 (chart)
Docker_macOS TestDownloadOnly/v1.16.0/preload-exists (gopogh) 98.98 (chart)
Docker_Windows TestFunctional/parallel/ServiceCmd (gopogh) 100.00 (chart)
Docker_Windows TestNetworkPlugins/group/cilium/Start (gopogh) 100.00 (chart)
Docker_Windows TestSkaffold (gopogh) 100.00 (chart)

To see the flake rates of all tests by environment, click here.

@minikube-bot
Copy link
Collaborator

Hi @sharifelgamal, we have updated your PR with the reference to newly built ISO. Pull the changes locally if you want to test with them or update your PR further.

@minikube-pr-bot
Copy link

kvm2 driver with docker runtime

+----------------+----------+---------------------+
|    COMMAND     | MINIKUBE | MINIKUBE (PR 13762) |
+----------------+----------+---------------------+
| minikube start | 51.3s    | 52.1s               |
| enable ingress | 29.4s    | 28.5s               |
+----------------+----------+---------------------+

Times for minikube start: 53.5s 50.7s 51.2s 49.7s 51.3s
Times for minikube (PR 13762) start: 51.1s 51.4s 51.7s 54.0s 52.4s

Times for minikube ingress: 30.5s 29.1s 30.0s 29.6s 28.1s
Times for minikube (PR 13762) ingress: 30.0s 28.5s 29.6s 27.1s 27.1s

docker driver with docker runtime

+----------------+----------+---------------------+
|    COMMAND     | MINIKUBE | MINIKUBE (PR 13762) |
+----------------+----------+---------------------+
| minikube start | 25.2s    | 23.7s               |
| enable ingress | 22.8s    | 22.8s               |
+----------------+----------+---------------------+

Times for minikube ingress: 23.9s 22.4s 22.4s 22.9s 22.4s
Times for minikube (PR 13762) ingress: 21.9s 22.9s 23.4s 22.9s 23.0s

Times for minikube start: 28.8s 24.6s 24.5s 24.0s 24.1s
Times for minikube (PR 13762) start: 23.5s 23.9s 23.9s 23.7s 23.5s

docker driver with containerd runtime

+----------------+----------+---------------------+
|    COMMAND     | MINIKUBE | MINIKUBE (PR 13762) |
+----------------+----------+---------------------+
| minikube start | 39.2s    | 36.8s               |
| enable ingress | 20.6s    | 23.0s               |
+----------------+----------+---------------------+

Times for minikube start: 32.5s 43.9s 40.4s 39.8s 39.4s
Times for minikube (PR 13762) start: 39.9s 32.0s 39.4s 28.8s 43.8s

Times for minikube ingress: 17.9s 17.9s 22.4s 22.4s 22.5s
Times for minikube (PR 13762) ingress: 22.4s 28.9s 23.4s 22.4s 17.9s

@minikube-pr-bot
Copy link

These are the flake rates of all failed tests.

Environment Failed Tests Flake Rate (%)
Docker_Linux TestNoKubernetes/serial/Start (gopogh) 1.05 (chart)
Docker_Linux_containerd TestNetworkPlugins/group/auto/Start (gopogh) 5.26 (chart)
Docker_Linux_containerd TestNetworkPlugins/group/cilium/Start (gopogh) 6.58 (chart)
Hyperkit_macOS TestFunctional/serial/ComponentHealth (gopogh) 8.33 (chart)
Docker_Linux_containerd TestAddons/parallel/Registry (gopogh) 17.28 (chart)
Hyper-V_Windows TestNetworkPlugins/group/flannel/Start (gopogh) 21.59 (chart)
Docker_Linux_containerd TestNetworkPlugins/group/custom-weave/Start (gopogh) 22.37 (chart)
Docker_Linux_containerd TestOffline (gopogh) 27.78 (chart)
Docker_Linux TestFunctional/serial/ComponentHealth (gopogh) 35.79 (chart)
Hyper-V_Windows TestNetworkPlugins/group/bridge/Start (gopogh) 36.36 (chart)
Docker_Linux_containerd TestFunctional/parallel/MountCmd/any-port (gopogh) 37.96 (chart)
Docker_Linux_containerd TestFunctional/parallel/MySQL (gopogh) 37.96 (chart)
Docker_Linux_containerd TestFunctional/parallel/PersistentVolumeClaim (gopogh) 37.96 (chart)
Docker_Linux_containerd TestFunctional/parallel/ServiceCmd (gopogh) 37.96 (chart)
Docker_Linux_containerd TestFunctional/parallel/ServiceCmdConnect (gopogh) 37.96 (chart)
Docker_Linux_containerd TestFunctional/parallel/TunnelCmd/serial/AccessDirect (gopogh) 37.96 (chart)
Docker_Linux_containerd TestFunctional/parallel/TunnelCmd/serial/WaitService/Setup (gopogh) 37.96 (chart)
Docker_Linux_containerd TestFunctional/serial/ExtraConfig (gopogh) 37.96 (chart)
Docker_Linux_containerd TestFunctional/serial/SoftStart (gopogh) 37.96 (chart)
Docker_Linux_containerd TestFunctional/serial/StartWithProxy (gopogh) 37.96 (chart)
Docker_Linux_containerd TestMultiNode/serial/DeployApp2Nodes (gopogh) 37.96 (chart)
Docker_Linux_containerd TestMultiNode/serial/PingHostFrom2Pods (gopogh) 37.96 (chart)
Docker_Linux_containerd TestFunctional/parallel/DashboardCmd (gopogh) 38.89 (chart)
Docker_Linux TestNetworkPlugins/group/false/DNS (gopogh) 40.00 (chart)
Hyper-V_Windows TestNetworkPlugins/group/kubenet/Start (gopogh) 44.32 (chart)
Docker_Windows TestAddons/Setup (gopogh) 49.50 (chart)
Docker_Windows TestFunctional/parallel/CertSync (gopogh) 49.50 (chart)
Docker_Windows TestFunctional/parallel/CpCmd (gopogh) 49.50 (chart)
Docker_Windows TestFunctional/parallel/DockerEnv/powershell (gopogh) 49.50 (chart)
Docker_Windows TestFunctional/parallel/FileSync (gopogh) 49.50 (chart)
More tests... Continued...

Too many tests failed - See test logs for more details.

To see the flake rates of all tests by environment, click here.

@afbjorklund
Copy link
Collaborator

afbjorklund commented May 7, 2022

I am not a big fan of duplicating the package directories, but I would also be happy to refactor this after it has been delivered...

There should only be one package directory (for each "external" project), and there is no need to add a template to Config.in

Each package already has a dependency on the arch, where needed.

depends on BR2_x86_64
depends on BR2_AARCH64

@sharifelgamal
Copy link
Collaborator Author

I am not a big fan of duplicating the package directories, but I would also be happy to refactor this after it has been delivered...

There should only be one package directory (for each "external" project), and there is no need to add a template to Config.in

Each package already has a dependency on the arch, where needed.

depends on BR2_x86_64 depends on BR2_AARCH64

yeah, this was my understanding as well, but i was having issues with arch's building the wrong packages, so i built this system to make sure it didn't happen while testing

@afbjorklund
Copy link
Collaborator

i built this system to make sure it didn't happen while testing

sounds reasonable, it can be changed later without affecting the pacakges... i.e. the end make is the same, either way.

the main annoyance was when having to translate from the OS arch to the Go arch, but that's more tedious than "hard"

@k8s-ci-robot
Copy link
Contributor

[APPROVALNOTIFIER] This PR is APPROVED

This pull-request has been approved by: medyagh, sharifelgamal

The full list of commands accepted by this bot can be found here.

The pull request process is described here

Needs approval from an approver in each of these files:
  • OWNERS [medyagh,sharifelgamal]

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@sharifelgamal sharifelgamal merged commit acb03c4 into kubernetes:master May 9, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
approved Indicates a PR has been approved by an approver from all required OWNERS files. cncf-cla: yes Indicates the PR's author has signed the CNCF CLA. ok-to-test Indicates a non-member PR verified by an org member that is safe to test. size/XXL Denotes a PR that changes 1000+ lines, ignoring generated files.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Build ISO minikube image for ARM (aarch64)
7 participants