-
Notifications
You must be signed in to change notification settings - Fork 715
Multi-platform clusters #163
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
Comments
The main issue is that flannel manifest has amd64 arch hard-coded into it:
I know there are some efforts to support multi platform images (also called "manifest" in docker) that will allow to download the proper image just using a common name, so there is no need to one manifest per arch... But it's a WIP. As a workaround: Modify the flannel manifest locally to match the arm64 arch and see what happens (should fail in the master node though...) |
Thanks for your answer ! I manually changed the flannel manifest to start one instance on the master node (adm64 with quay.io/coreos/flannel:v0.7.0-amd64) I find it weird that when I do a join from an arm-node to a amd64-master-node, no "kube-proxy" is started on the worker node, whereas when I repeat the same on a unique architecture platform (both on arm or both on amd64), a kube-proxy is always started on the joining worker node. Thx again for your help ! |
I'm afraid you'll hit that problem with every hard-coded image name that
doesn't support multiarch :/
…On Tue, Feb 14, 2017 at 12:20 PM, malaskim ***@***.***> wrote:
Thanks for your answer !
I manually changed the flannel manifest to start one instance on the
master node (adm64 with quay.io/coreos/flannel:v0.7.0-amd64)
and one on the worker (arm zith quay.io/coreos/flannel:v0.7.0-arm), but I
still have an error "Error Syncyng pod"
I find it weird that when I do a join from an arm-node to a
amd64-master-node, no "kube-proxy" is started on the worker node, whereas
when I repeat the same on a unique architecture platform (both on arm or
both on amd64), a kube-proxy is always started on the joining worker node.
Is it possible that there is a similar problem of hard-coding with the
kube-proxy service when trying to deploy on a cross-platform ??
Thx again for your help !
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub
<#163 (comment)>,
or mute the thread
<https://github.com/notifications/unsubscribe-auth/AAPB5aP0KBPnBn1om2sLks-tHot6Uz73ks5rcY4BgaJpZM4L_XWm>
.
--
Pinky: "Gee, Brain, what do you want to do tonight?"
The Brain: "The same thing we do every night, Pinky—try to take over the
world!"
.''`. Pienso, Luego Incordio
: :' :
`. `'
`- www.debian.org www.openstack.com
GPG Key: BC52FA6F
GPG fingerprint: 1904 7374 5A88 BF8D FFE8 44A0 DD0B A251 BC52 FA6F
|
Arf yes understandable.. ps: should I understand that this issue is related to this one #51, which should be solved in 1.6 version ? Sorry by advance if I'm mistaking, I'm discovering the github world.. |
Yeah! That's the one I was referring to. Time to check the progress....
…On Tue, Feb 14, 2017 at 4:09 PM, malaskim ***@***.***> wrote:
Arf yes understandable..
I can change manually the flannel one as I can directly specify the .yml
file, but for the kube-proxy one, it is automated in the join process of
kubeadm I guess..If you have any idea how I could change it even manually,
just to make it work..i'm buying :)
Thx!
ps: should I understand that this issue is related to this one #51
<#51>, which should be solved
in 1.6 version ? Sorry by advance if I'm mistaking, I'm discovering the
github world..
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub
<#163 (comment)>,
or mute the thread
<https://github.com/notifications/unsubscribe-auth/AAPB5eMKsL5iTbqMX-XtgjlwZ62bW1ynks5rccOsgaJpZM4L_XWm>
.
--
Pinky: "Gee, Brain, what do you want to do tonight?"
The Brain: "The same thing we do every night, Pinky—try to take over the
world!"
.''`. Pienso, Luego Incordio
: :' :
`. `'
`- www.debian.org www.openstack.com
GPG Key: BC52FA6F
GPG fingerprint: 1904 7374 5A88 BF8D FFE8 44A0 DD0B A251 BC52 FA6F
|
+1 Looks like support for this issue is pushed out of 1.6 version. Is there any update on this issue? If anyone has solved it manually, that works for me. |
Found a hack/workaround for this issue: Before running kubeadm join from node with different architecture, I pulled the correct docker image for the architecture and renamed (re-tagged) it to match the master's architecture. Then the kube-proxy container started fine. E.g., In my case, node is raspberry pi 3 (arm) and my master is x86 (amd64). I executed the following command on my node, before invoking kubeadm join: Hope this helps someone to keep going. Hoping for an official fix soon :) |
@sudhagarc Is the hack still working for you? The false tagging on Pi3 does not work for me as the proxy and weave net pods go into crashloopbackoff. For me, the master still download the original kube-proxy-amd64 image as the image id is different from the hacked arm image. UPDATE: It works, although a bit inconsistently. I was making a mistake in tagging. The amd64 version image has an underscore (_) in its tag while the arm version has a minus (-). |
I can summarize the problems and how I solved to have the multi-platform cluster:
So, to solve the multi-platform with kubeadm:
At the end I end up using |
Please see: https://github.com/luxas/kubeadm-workshop. Also see #51 that's tracking the multi-platform support for kubeadm |
I was able to make this work without needing a custom image for It's definitely a workaround, but I like being able to use the official images for |
Any updates to this I tried the above editing the
Server:
|
I circumvented this issue by deploying an additional daemonset for each architecture, taken from https://gist.github.com/ssplatt/3d2f68a42e619f88dbed3244ad447708 Make sure to change the version in the image matching your deployment. |
This is a known limitation and the current official solution is documented in the bootstrapping documentation for a single master cluster at [https://kubernetes.io/docs/setup/independent/create-cluster-kubeadm/#instructions] :
This will manifest itself for any non multiarch container image but Kubernetes provides the flexibility to work around the problem without a hack. You can find info on writing daemonsets below and reposting @drake7707 's gist link, which helps make the documentation more applicable to this context: https://gist.github.com/ssplatt/3d2f68a42e619f88dbed3244ad447708 A few ways to handle, but these are step-by-step instructions that I just performed for supporting both arm64 and amd64 using daemonsets and pre-populated labels:
So we basically replaced the existing kube-proxy daemonset based on the master's architecture with architecture-specific kube-proxy daemonsets. |
Couple of things I encountered after applying this in my v1.11.0 cluster:
|
Hi everyone,
I'm trying to set up a multi-platform cluster with a master node on Ubuntu (amd64), and some worker nodes on raspberry pi3 (arm, with hypriotOS)
I can get the cluster set up with the tutorial here (https://kubernetes.io/docs/getting-started-guides/kubeadm/, awesome work by the way!!)
However when I tried to start a container with
kubectl run hypriot --image=hypriot/rpi-busybox-httpd --replicas=1 --port=80
I got the following error : Error syncing pod, skipping: failed to "SetupNetwork" for "hypriot-1452852107-f11tt_default" with SetupNetworkError: "Failed to setup network for pod "hypriot-1452852107-f11tt_default(527e63f1-f1f4-11e6-b5e5-080027eb4e93)" using network plugins "cni": cni config unintialized; Skipping pod"
Whereas I've successfully started flannel on the master node with this command :
kubectl create -f https://rawgit.com/coreos/flannel/master/Documentation/kube-flannel.yml
All the services are running (dns, flannel,proxy etc...) on the master node
If I reproduce this set up with the master node on a raspberry Pi (then all the cluster is on arm), everything works :)
As suggested in the section Multi-platform clusters on https://porter.io/github.com/luxas/kubernetes-on-arm, I've also try to run the command for all the architecture but I got the following error :
Error from server (AlreadyExists): error when creating "STDIN": serviceaccounts "flannel" already exists
Error from server (AlreadyExists): error when creating "STDIN": configmaps "kube-flannel-cfg" already exists
Error from server (AlreadyExists): error when creating "STDIN": daemonsets.extensions "kube-flannel-ds" already exists
I also figured out that after running the "kubeadm join" command on one of my raspberry, there is no kube-proxy and kube-flannel created on the Rpi3 when the master node is amd64, whereas it is indeed created if the master node is on the same platform (i.e another Rpi3)
Looks like I'm missing something about the multi-architecture configuration here...if anyone has any idea ?
Thanks you for your help !
The text was updated successfully, but these errors were encountered: