-
Notifications
You must be signed in to change notification settings - Fork 225
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
Support NetAPP trident on ARM architecture #732
Comments
I would also like to see support for ARM as well as other architectures. |
Trident can be built from source to work on the ARM architecture and is known to work. We will keep this issue open and update it once Trident officially supports ARM architecture. |
I have tried following steps to build the trident image from the source for ARM
After building and pushing the images to our registry, tested them by creating a new daemon set for arm servers with new images. The trident pod is coming up fine. Normal SuccessfulAttachVolume 20s attachdetach-controller AttachVolume.Attach succeeded for volume "pvc-*" These are errors from trident container: level=error msg="could not read transactions" error="Unable to find key" Any quick pointers on what the issue might be or if something is missed? |
The trident error messages are sometimes occurring during startup and node discovery, (ie not too concerning if Trident pods are Running.) |
Is there any timeline by which Trident will provide ARM support? |
You're clearly using an x86 executable. As mentioned here you need to replace all amd64 base with arm64 base images. Which is easy to check with docker image inspect after the images have been built (or downloaded if you get them from elsewhere).
^ This (the second image inspect) is also why I eliminate trident-autosupport from deployment (by using custom deployment YAML) - as I said in the blog post it won't impact anything but it can't work so no need to install it on ARM64 workers. If you have a test environment where you can use untrusted images, try to pull my older image from Docker Hub and use custom deploy to deploy it. I've been using Trident on ARM64 for close to 18 months now, on my home ARM64 cluster. |
Hi @khatrig and @andymain72, We are looking into how to best qualify ARM support in Trident. We do not have a timeline for when this support might be available at this time. |
@scaleoutsean I followed the steps from here and tried a build, but the arch is still showing up as amd64. Steps I followed:
$ docker image inspect 7dfa4ef9c642 | grep Arch Not sure if there is a prerequisite I am missing before the build. |
@vveeregandha are you building on x86_64 or ARM64 (natively)? On x86_64 you need a functioning cross-patform build toolkit. Secondly, have you got that suggestion in the steps to hard-code ARM64 into the Dockerfiles? I did that for all Dockerfiles in Trident source tree: $ find . -name "Dockerfile"
./contrib/docker/plugin/Dockerfile
./operator/Dockerfile
./Dockerfile
$ cat Dockerfile
# FROM gcr.io/distroless/static:a9b705d9ff06e9c60f6ceb2d2ef99dab084c17c0
# replace the above with something like this:
FROM gcr.io/distroless/static:latest-arm64 (Note: it goes without saying, for best effect you should use the same version, but for And then for offline install you need to pull an ARM64 version of 3rd party images (depending on your version, see the Trident docs; for old docs here's an example for v21.01). I used to build on ARM64, but now I've tried on x86_64. I've downloaded the source, replaced Dockerfiles as per above, and built (without sean@scaleoutSean /tmp/trident-21.01.1 uname -a
Linux scaleoutSean 5.15.0-43-generic #46~20.04.1-Ubuntu SMP Thu Jul 14 15:20:17 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
sean@scaleoutSean /tmp/trident-21.01.1 GOOS=linux GOARCH=arm64 make trident_build
fatal: not a git repository (or any of the parent directories): .git
Unable to find image 'golang:1.14' locally
1.14: Pulling from library/golang
0ecb575e629c: Pull complete
7467d1831b69: Pull complete
feab2c490a3c: Pull complete
f15a0f46f8c3: Pull complete
1517911a35d7: Pull complete
48bbd1746d63: Pull complete
944903612fdd: Pull complete
Digest: sha256:1a7173b5b9a3af3e29a5837e0b2027e1c438fd1b83bbee8f221355087ad416d6
Status: Downloaded newer image for golang:1.14
go: downloading k8s.io/client-go v0.20.1
go: downloading github.com/google/uuid v1.1.4
go: downloading github.com/container-storage-interface/spec v1.3.0
go: downloading github.com/cenkalti/backoff v2.2.1+incompatible
go: downloading github.com/mitchellh/hashstructure/v2 v2.0.1
go: downloading k8s.io/apimachinery v0.20.1
go: downloading github.com/RoaringBitmap/roaring v0.5.5
go: downloading github.com/cenkalti/backoff/v4 v4.1.0
go: downloading github.com/golang/protobuf v1.4.3
go: downloading google.golang.org/grpc v1.34.1
go: downloading github.com/Azure/azure-sdk-for-go v50.0.0+incompatible
go: downloading github.com/Azure/go-autorest v14.2.0+incompatible
go: downloading github.com/Azure/go-autorest/autorest v0.11.15
go: downloading github.com/sirupsen/logrus v1.7.0
go: downloading k8s.io/api v0.20.1
go: downloading github.com/mitchellh/copystructure v1.0.0
go: downloading github.com/gogo/protobuf v1.3.1
go: downloading github.com/google/gofuzz v1.1.0
go: downloading google.golang.org/genproto v0.0.0-20201110150050-8816d57aaa9a
go: downloading github.com/prometheus/client_golang v1.9.0
go: downloading github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e
go: downloading sigs.k8s.io/structured-merge-diff/v4 v4.0.2
go: downloading k8s.io/klog/v2 v2.4.0
go: downloading golang.org/x/sys v0.0.0-20210112091331-59c308dcf3cc
go: downloading google.golang.org/protobuf v1.25.0
go: downloading golang.org/x/net v0.0.0-20201110031124-69a78807bb2b
go: downloading golang.org/x/oauth2 v0.0.0-20210112200429-01de73cf58bd
go: downloading github.com/Azure/go-autorest/tracing v0.6.0
go: downloading gopkg.in/inf.v0 v0.9.1
go: downloading github.com/Azure/go-autorest/logger v0.2.0
go: downloading github.com/Azure/go-autorest/autorest/adal v0.9.8
go: downloading k8s.io/kube-openapi v0.0.0-20201113171705-d219536bb9fd
go: downloading github.com/json-iterator/go v1.1.10
go: downloading github.com/go-logr/logr v0.2.0
go: downloading github.com/ghodss/yaml v1.0.1-0.20190212211648-25d852aebe32
go: downloading golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad
go: downloading gopkg.in/yaml.v2 v2.3.0
go: downloading github.com/mitchellh/reflectwalk v1.0.0
go: downloading github.com/gorilla/mux v1.8.0
go: downloading k8s.io/utils v0.0.0-20201110183641-67b214c5f920
go: downloading github.com/zcalusic/sysinfo v0.0.0-20201228191146-22fe1fd10b0f
go: downloading github.com/davecgh/go-spew v1.1.1
go: downloading cloud.google.com/go v0.65.0
go: downloading github.com/imdario/mergo v0.3.5
go: downloading golang.org/x/text v0.3.4
go: downloading github.com/prometheus/client_model v0.2.0
go: downloading github.com/Azure/go-autorest/autorest/azure/auth v0.5.5
go: downloading github.com/Azure/go-autorest/autorest/date v0.3.0
go: downloading github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd
go: downloading golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e
go: downloading github.com/prometheus/common v0.15.0
go: downloading github.com/vishvananda/netlink v1.1.0
go: downloading github.com/googleapis/gnostic v0.4.1
go: downloading github.com/Azure/go-autorest/autorest/azure/cli v0.4.2
go: downloading github.com/docker/go-plugins-helpers v0.0.0-20200102110956-c9a8a2d92ccc
go: downloading github.com/form3tech-oss/jwt-go v3.2.2+incompatible
go: downloading github.com/vishvananda/netns v0.0.0-20191106174202-0a2b9b5464df
go: downloading github.com/cespare/xxhash v1.1.0
go: downloading github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369
go: downloading github.com/prometheus/procfs v0.2.0
go: downloading github.com/cespare/xxhash/v2 v2.1.1
go: downloading github.com/hashicorp/golang-lru v0.5.1
go: downloading golang.org/x/term v0.0.0-20201117132131-f5c789dd3221
go: downloading github.com/spf13/pflag v1.0.5
go: downloading github.com/modern-go/reflect2 v1.0.1
go: downloading github.com/dimchansky/utfbom v1.1.0
go: downloading github.com/google/go-cmp v0.5.4
go: downloading sigs.k8s.io/yaml v1.2.0
go: downloading k8s.io/apiextensions-apiserver v0.20.1
go: downloading github.com/beorn7/perks v1.0.1
go: downloading github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96
go: downloading github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e
go: downloading github.com/evanphx/json-patch v4.9.0+incompatible
go: downloading github.com/pkg/errors v0.9.1
go: downloading github.com/mitchellh/go-homedir v1.1.0
go: downloading github.com/docker/go-connections v0.4.0
go: downloading github.com/Azure/go-autorest/autorest/to v0.4.0
go: downloading github.com/Azure/go-autorest/autorest/validation v0.3.1
go: downloading github.com/tinylib/msgp v1.1.0
go: downloading github.com/glycerine/go-unsnap-stream v0.0.0-20181221182339-f9677308dec2
go: downloading github.com/golang/snappy v0.0.1
go: downloading github.com/philhofer/fwd v1.0.0
fatal: not a git repository (or any of the parent directories): .git
go: downloading github.com/olekukonko/tablewriter v0.0.4
go: downloading github.com/dustin/go-humanize v1.0.0
go: downloading github.com/spf13/cobra v1.1.1
go: downloading github.com/go-logfmt/logfmt v0.5.0
go: downloading github.com/mattn/go-runewidth v0.0.7
fatal: not a git repository (or any of the parent directories): .git
cp /tmp/trident-21.01.1/bin/trident_orchestrator /tmp/trident-21.01.1/bin/tridentctl .
chwrap/make-tarball.sh /tmp/trident-21.01.1/bin/chwrap chwrap.tar
docker build --build-arg PORT=8000 --build-arg BIN=trident_orchestrator --build-arg CLI_BIN=tridentctl --build-arg K8S="" -t trident:21.01.1-custom --rm .
[+] Building 4.1s (9/9) FINISHED
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 592B 0.0s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [internal] load metadata for gcr.io/distroless/static:latest-arm64 1.6s
=> [1/4] FROM gcr.io/distroless/static:latest-arm64@sha256:98beb44a80e05bded5076a1c57d4866f09f5ae34eb3337f5edc588cb 0.6s
=> => resolve gcr.io/distroless/static:latest-arm64@sha256:98beb44a80e05bded5076a1c57d4866f09f5ae34eb3337f5edc588cb 0.0s
=> => sha256:98beb44a80e05bded5076a1c57d4866f09f5ae34eb3337f5edc588cb2f1d4122 426B / 426B 0.0s
=> => sha256:66be18d6c7f33f53d1886789be832c9d6de5fcea3d0237a3f9d5799db61c89ea 462B / 462B 0.0s
=> => sha256:a6f41b961ab0c6744fe9133b4fc2df373903f18ee5bf90f4ca00ff1a8c989173 801.01kB / 801.01kB 0.4s
=> => extracting sha256:a6f41b961ab0c6744fe9133b4fc2df373903f18ee5bf90f4ca00ff1a8c989173 0.2s
=> [internal] load build context 0.5s
=> => transferring context: 83.34MB 0.5s
=> [2/4] COPY trident_orchestrator / 0.1s
=> [3/4] COPY tridentctl /bin/ 0.8s
=> [4/4] ADD chwrap.tar / 0.2s
=> exporting to image 0.4s
=> => exporting layers 0.4s
=> => writing image sha256:0f9b6d4c6afcc6f66c4a488291430ef1986dabfd8f2f1904a6e4e5697c7ab3db 0.0s
=> => naming to docker.io/library/trident:21.01.1-custom 0.0s
rm trident_orchestrator tridentctl
sean@scaleoutSean /tmp/trident-21.01.1 docker images | grep trident
trident 21.01.1-custom 0f9b6d4c6afc 10 seconds ago 85.7MB
scaleoutsean/trident-arm64 v22.01.0-custom cc27cecc98e2 5 months ago 169MB
k1:5000/trident v22.01.0-custom cc27cecc98e2 5 months ago 169MB
sean@scaleoutSean /tmp/trident-21.01.1 docker inspect 0f9b6d4c6afc | grep Arch
"Architecture": "arm64",
|
With the Trident v23.04 release, the ARM64 architecture is now supported. |
@gnarl I could not find v23.04 in releases. I could only see [v23.01.1] as the latest. When is this expected to be released? |
23.04 == April 2023. So very soon! |
That's great. Thanks. |
Describe the solution you'd like
NetApp Trident doesn't support ARM architecture today. This is a big limitation in choosing Netapp trident as a CSI solution as most kubernetes CSI providers today support ARM.
Describe alternatives you've considered
Most alternative CSI providers support ARM today.
Additional context
https://scaleoutsean.github.io/2021/02/24/netapp-trident-on-arm64.html
The text was updated successfully, but these errors were encountered: