-
Notifications
You must be signed in to change notification settings - Fork 3.2k
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
feat: Updated arm64 support patch #2491
Conversation
Hi @alexec ! I think this version of patch should work well. Please kindly take another look and review it again. You can also reproduce this patch to verify it on your machine before merging it. An important thing I noticed is that when you setup everything, you have to make sure that the An example (I used tag
If any problems happen, please let me know how you produced that and I will update this PR based on your comments. Thanks very much! |
Codecov Report
@@ Coverage Diff @@
## master #2491 +/- ##
=========================================
Coverage ? 11.36%
=========================================
Files ? 74
Lines ? 31114
Branches ? 0
=========================================
Hits ? 3537
Misses ? 27102
Partials ? 475 Continue to review full report at Codecov.
|
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.
Still seeing following error:
standard_init_linux.go:211: exec user process caused "exec format error"
How to reproduce:
make controller-image cli-image
and deploy them.
Hi @whynowy , is this error happens on x86_64 or on arm64? |
x86_64 |
It is very weird because this error is caused by the image architecture doesnt fit machine architecture, and from After
Re-deploy by
|
Hi @whynowy , tried on another x86_64 machine with same method I proposed above, also didnt find the error...I think the only thing might be useful now for our discussion is uploading my settings of cluster as follows: OS: Ubuntu 18.04.3 LTS (GNU/Linux 4.15.0-72-generic x86_64) k8s: v1.14.9 on both master and worker, container networking cni is flannel. docker: I tried both v18.09.7 and v19.03.2, no differences. Golang: go 1.14.1. |
Makefile
Outdated
|
||
.PHONY: controller-image | ||
controller-image: dist/controller-image | ||
|
||
dist/controller-image: dist/workflow-controller-linux-amd64 | ||
dist/controller-image: dist/workflow-controller-$(GOOS)-$(GOARCH) |
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.
Why to change this?
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.
I personally think this change will provide enabling multi-arch image, without harming existing code structure. Reasons given as follows:
On amd64 (x86_64) machines, building target dist/controller-image
will still give us x86_64 docker images.
On arm64 (aarch64) machines, this change, together with the changes in Dockerfile and Dockerfile.dev, will enable us to build arm64 container images.
After this, if we have above two images, by adding a new docker manifest, we can make our dockehub image multiarch.
We don't go to a x86_64 OS to build the images for workflow-controller and argo-server. |
Ahhhh that is the reason! Right, now I understand. I think based on my comments above, now I should add a conditional to make the Makefile produce images as we desired. Probably adding a new variable to accept commandline variables, therefore we can produce docker images for different architectures, or just delete my architecture changes in Dockerfile, WDYT? Which one do you prefer? |
Well, this changes the release strategy - providing multiple arch images for workflow-controller and argo-server. I'd leave it to @alexec . |
Thanks for your answer! Well, I think whether these multiarch images are really needed can be firstly discussed by the community, personally I would prefer that way, as a lot of k8s and edge based project, such as kubeflow, used argo, and a multiarch image release will make this project fits multiple machines (at least k8s supports arm and it will be cool to have argo run on arm too :P) Anyway if this is not needed, I would remove my changes related to the mutiarch image support, just leave the building of the arm64 binary code. |
Change-Id: Ibdd92dc3a9105d01b6642cd246672b14ee1cfacd Signed-off-by: Henry Wang <[email protected]>
Updated code again in order to:
|
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.
This LGTM.
Thanks!
Resubmit the arm64 support patch. I think everything should work perfectly now.
Fixes: #2080
Here are the test process and test logs in (really) detail:
(Also upload this patch in a single file for reproducing: 0001-Updated-arm64-support-patch.zip)
Test process:
Logs in building process:
Then I modified the
test/e2e/manifests/postgres.yaml
Line#426 and Line#512 on the master node toIfNotPresent
to avoidContainer image "argoproj/argocli:latest" is not present with pull policy of Never
error in deployment and also avoid pulling images from dockerhub.Then running:
Outputs should be similar to:
and the kubernetes cluster with argo can be correctly set:
Signed-off-by: Henry Wang <[email protected]>