-
Notifications
You must be signed in to change notification settings - Fork 4.9k
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 kvm on arm64 #9418
Comments
We don't have a kvm2 driver for arm64 yet, mostly because we don't have an ISO for arm64... Initially the only driver was "none", around the corner is "docker" and eventually maybe "kvm2"
I think the "-arm64" in etcd is a bug (?) and the storage-provisioner should be fixed by #9334 $ kubeadm config images list
k8s.gcr.io/kube-apiserver:v1.19.2
k8s.gcr.io/kube-controller-manager:v1.19.2
k8s.gcr.io/kube-scheduler:v1.19.2
k8s.gcr.io/kube-proxy:v1.19.2
k8s.gcr.io/pause:3.2
k8s.gcr.io/etcd:3.4.13-0
k8s.gcr.io/coredns:1.7.0 (no "etcd-arm64", just manifest) |
$ docker pull k8s.gcr.io/etcd-arm64:3.4.13-0
Error response from daemon: manifest for k8s.gcr.io/etcd-arm64:3.4.13-0 not found: manifest unknown: Failed to fetch "3.4.13-0" from request "/v2/etcd-arm64/manifests/3.4.13-0".
$ docker pull --platform linux/arm64 k8s.gcr.io/etcd:3.4.13-0
3.4.13-0: Pulling from etcd
4000adbbc3eb: Pull complete
c01a58061c3d: Pull complete
7e982895c1fc: Pull complete
3c187ad2b50e: Pull complete
aedf21830123: Pull complete
Digest: sha256:4ad90a11b55313b182afc186b9876c8e891531b8db4c9bf1541953021618d0e2
Status: Downloaded newer image for k8s.gcr.io/etcd:3.4.13-0
k8s.gcr.io/etcd:3.4.13-0
$ docker run k8s.gcr.io/etcd:3.4.13-0 etcd --version
running etcd on unsupported architecture "arm64" since ETCD_UNSUPPORTED_ARCH is set
etcd Version: 3.4.13
Git SHA: ae9734ed2
Go Version: go1.13.5
Go OS/Arch: linux/arm64 So I guess that they just stopped providing the "compatibility" image tags ? Now the individual architectures are only known by their digests in the manifest: {
"schemaVersion": 2,
"mediaType": "application/vnd.docker.distribution.manifest.list.v2+json",
"manifests": [
{
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
"size": 1372,
"digest": "sha256:bd4d2c9a19be8a492bc79df53eee199fd04b415e9993eb69f7718052602a147a",
"platform": {
"architecture": "amd64",
"os": "linux"
}
},
{
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
"size": 1372,
"digest": "sha256:4cadaf5f37998d038861c66215809eee8316c7604934e03dd86015a0f6704cd3",
"platform": {
"architecture": "arm",
"os": "linux"
}
},
{
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
"size": 1372,
"digest": "sha256:cab4dc43598ed9b5c6a524dfea1abf4772a5e164c330451e5ca2635a95675aa8",
"platform": {
"architecture": "arm64",
"os": "linux"
}
},
{
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
"size": 1373,
"digest": "sha256:03d9db03b83a5991ede76dd53e19a1e46e6bf3c498ae8ace2e1be8f3d1d03ad6",
"platform": {
"architecture": "ppc64le",
"os": "linux"
}
},
{
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
"size": 1372,
"digest": "sha256:dd9baad37b716232a737cd781cf65ceb9f7c541264cdde9ad3870d84e8644a49",
"platform": {
"architecture": "s390x",
"os": "linux"
}
}
]
} So we should stop adding the architecture, at least for later Kubernetes versions: func etcd(v semver.Version, mirror string) string {
needsArchSuffix := false
ancient := semver.MustParseRange("<1.12.0")
if ancient(v) {
needsArchSuffix = true
}
...
return path.Join(kubernetesRepo(mirror), "etcd"+archTag(needsArchSuffix)+ev)
} Unfortunately it is hardcoding "amd64" // archTag returns a CPU architecture suffix for images
func archTag(hasTag bool) string {
if runtime.GOARCH == "amd64" && !hasTag {
return ":"
}
return "-" + runtime.GOARCH + ":"
} |
This is related to not running any tests on other architectures, like We are also duplicating a fair share of the image lists in minikube, from kubeadm... kubernetes/kubernetes@14dbfdc "kubeadm: Drop arch suffixes" (this happened in 1.12) We fixed the kubernetes components [1] and coredns [2] earlier, but not etcd and pause: This change was new for kubernetes 1.19, that upgraded to etcd 3.4.13 (without -arm64) The previous etcd version (kubernetes 1.18 and earlier) still had both tags (also with arch): $ docker pull k8s.gcr.io/etcd-arm64:3.4.3-0
3.4.3-0: Pulling from etcd-arm64
9f9ba9541db2: Pull complete
6feb97f21dc3: Pull complete
de473e163c10: Pull complete
Digest: sha256:fbc0f8b4861d23c9989edf877df7ae2533083e98c05687eb22b00422b9825c2f
Status: Downloaded newer image for k8s.gcr.io/etcd-arm64:3.4.3-0
k8s.gcr.io/etcd-arm64:3.4.3-0
$ docker images k8s.gcr.io/etcd-arm64:3.4.3-0
REPOSITORY TAG IMAGE ID CREATED SIZE
k8s.gcr.io/etcd-arm64 3.4.3-0 ab707b0a0ea3 11 months ago 363MB
$ docker pull --platform=linux/arm64 k8s.gcr.io/etcd:3.4.3-0
3.4.3-0: Pulling from etcd
Digest: sha256:4afb99b4690b418ffc2ceb67e1a17376457e441c1f09ab55447f0aaf992fa646
Status: Downloaded newer image for k8s.gcr.io/etcd:3.4.3-0
k8s.gcr.io/etcd:3.4.3-0
$ docker images k8s.gcr.io/etcd:3.4.3-0
REPOSITORY TAG IMAGE ID CREATED SIZE
k8s.gcr.io/etcd 3.4.3-0 ab707b0a0ea3 11 months ago 363MB And "pause" still has both, since it has only been updated (at all) once. $ docker pull k8s.gcr.io/pause-arm64:3.2
3.2: Pulling from pause-arm64
Digest: sha256:31d3efd12022ffeffb3146bc10ae8beb890c80ed2f07363515580add7ed47636
Status: Downloaded newer image for k8s.gcr.io/pause-arm64:3.2
k8s.gcr.io/pause-arm64:3.2
$ docker pull --platform=linux/arm64 k8s.gcr.io/pause:3.2
3.2: Pulling from pause
Digest: sha256:927d98197ec1141a368550822d18fa1c60bdae27b78b0c004f705f548c07814f
Status: Image is up to date for k8s.gcr.io/pause:3.2
k8s.gcr.io/pause:3.2
$ docker images | grep pause
k8s.gcr.io/pause-arm64 3.2 2a060e2e7101 7 months ago 484kB
k8s.gcr.io/pause 3.2 2a060e2e7101 7 months ago 484kB But we shouldn't need to use the arch suffixes anywhere anymore (1.12+) |
better support for army64 is on our road map and we will be working on this for early 2021. |
There is #9228 for the new arm64 iso, no issue yet for building Most likely we need to add some "amd64" suffix somewhere in the existing iso and bin, like for minikube ? boot2docker.iso (minikube.iso) minikube-linux-amd64 There is no preload support either, but that should still work by loading the images from the normal cache. However, there is no architecture support in the current cache so it will only work for the "native" arch.
|
Added #9593 |
Issues go stale after 90d of inactivity. If this issue is safe to close now please do so with Send feedback to sig-contributor-experience at kubernetes/community. |
I'm going to close this issue as a dupe of the following, so that we can centralize the discussion around these things there:
|
Hi, I'm trying to run minikube v 1.13.1 on arm64 hardware and getting the following errors:
Steps to reproduce the issue:
It looks like it is failing to download
k8s.gcr.io/etcd-arm64:3.4.13-0
andgcr.io/k8s-minikube/storage-provisioner-arm64:v3
images.It looks like this is the same problem as #9060
I'm also getting the following in the error log:
Is there a
docker-machine-driver-kvm2
built for arm64 architectures?The text was updated successfully, but these errors were encountered: