1.) start with the managers first: set node to drain, wait until all swarm service tasks on the node are drained, update engine version, wait until the updated node is shown as rechable in docker node ls, set node to active, continue with next manager node, then continue with the worker nodes one by one.
2.) Sadly I have no idea wether a version jump from 17.x to 20.x works, a jump from 18.x to 20.x definitly works and was the “normal case” as a stable 19.x never was released. To be sure, you can backup the swarm state in order to have a desaster recovery point.
Many thanks for clarifying!
I will go with upgrading from 17.x to 18.x first, as swarm should work with mixed versions 17.x and 18.x, and from 18.x jump to 20.x. I will also check how to backup the swarm state.