diff --git a/metropolis/node/core/consensus/consensus.go b/metropolis/node/core/consensus/consensus.go
index f8861a7..12913bd 100644
--- a/metropolis/node/core/consensus/consensus.go
+++ b/metropolis/node/core/consensus/consensus.go
@@ -258,43 +258,6 @@
 		}
 	}
 
-	// If we're joining a cluster, make sure that our peers are actually DNS
-	// resolvable. This prevents us from immediately failing due to transient DNS
-	// issues.
-	if jc := s.config.JoinCluster; jc != nil {
-		supervisor.Logger(ctx).Infof("Waiting for initial peers to be DNS resolvable...")
-		startLogging := time.Now().Add(5 * time.Second)
-		for {
-			allOkay := true
-			shouldLog := time.Now().After(startLogging)
-			for _, node := range jc.ExistingNodes {
-				u, err := url.Parse(node.URL)
-				if err != nil {
-					// Just pretend this node is up. If the URL is really bad, etcd will complain
-					// more clearly than us. This shouldn't happen, anyway.
-					continue
-				}
-				host := u.Hostname()
-				if _, err := net.LookupIP(host); err == nil {
-					continue
-				}
-				if shouldLog {
-					supervisor.Logger(ctx).Errorf("Still can't resolve peer %s (%s): %v", node.Name, host, err)
-				}
-				allOkay = false
-			}
-			if allOkay {
-				supervisor.Logger(ctx).Infof("All peers resolvable, continuing startup.")
-				break
-			}
-
-			time.Sleep(100 * time.Millisecond)
-			if shouldLog {
-				startLogging = time.Now().Add(5 * time.Second)
-			}
-		}
-	}
-
 	// Start etcd ...
 	supervisor.Logger(ctx).Infof("Starting etcd...")
 	cfg := s.config.build(true)
diff --git a/metropolis/test/e2e/suites/ha/BUILD.bazel b/metropolis/test/e2e/suites/ha/BUILD.bazel
index a88d4f7..3d9c688 100644
--- a/metropolis/test/e2e/suites/ha/BUILD.bazel
+++ b/metropolis/test/e2e/suites/ha/BUILD.bazel
@@ -16,8 +16,6 @@
         "xTestImagesManifestPath": "$(rlocationpath //metropolis/test/e2e:testimages_manifest )",
     },
     deps = [
-        "//metropolis/node/core/curator/proto/api",
-        "//metropolis/proto/api",
         "//metropolis/test/launch",
         "//metropolis/test/localregistry",
         "//metropolis/test/util",
diff --git a/metropolis/test/e2e/suites/ha/run_test.go b/metropolis/test/e2e/suites/ha/run_test.go
index 7dcd228..f2f7cc2 100644
--- a/metropolis/test/e2e/suites/ha/run_test.go
+++ b/metropolis/test/e2e/suites/ha/run_test.go
@@ -13,9 +13,6 @@
 	"source.monogon.dev/metropolis/test/localregistry"
 	"source.monogon.dev/metropolis/test/util"
 	"source.monogon.dev/osbase/test/launch"
-
-	cpb "source.monogon.dev/metropolis/node/core/curator/proto/api"
-	apb "source.monogon.dev/metropolis/proto/api"
 )
 
 var (
@@ -108,47 +105,4 @@
 			return nil
 		})
 	}
-
-	// Test node role removal.
-	curC, err := cluster.CuratorClient()
-	if err != nil {
-		t.Fatalf("Could not get CuratorClient: %v", err)
-	}
-	mgmt := apb.NewManagementClient(curC)
-	cur := cpb.NewCuratorClient(curC)
-
-	util.MustTestEventual(t, "Remove KubernetesController role", ctx, 10*time.Second, func(ctx context.Context) error {
-		fa := false
-		_, err := mgmt.UpdateNodeRoles(ctx, &apb.UpdateNodeRolesRequest{
-			Node: &apb.UpdateNodeRolesRequest_Id{
-				Id: cluster.NodeIDs[0],
-			},
-			KubernetesController: &fa,
-		})
-		return err
-	})
-	util.MustTestEventual(t, "Remove ConsensusMember role", ctx, time.Minute, func(ctx context.Context) error {
-		fa := false
-		_, err := mgmt.UpdateNodeRoles(ctx, &apb.UpdateNodeRolesRequest{
-			Node: &apb.UpdateNodeRolesRequest_Id{
-				Id: cluster.NodeIDs[0],
-			},
-			ConsensusMember: &fa,
-		})
-		return err
-	})
-
-	// Test that removing the ConsensusMember role from a node removed the
-	// corresponding etcd member from the cluster.
-	var st *cpb.GetConsensusStatusResponse
-	util.MustTestEventual(t, "Get ConsensusStatus", ctx, time.Minute, func(ctx context.Context) error {
-		st, err = cur.GetConsensusStatus(ctx, &cpb.GetConsensusStatusRequest{})
-		return err
-	})
-
-	for _, member := range st.EtcdMember {
-		if member.Id == cluster.NodeIDs[0] {
-			t.Errorf("member still present in etcd")
-		}
-	}
 }
diff --git a/metropolis/test/e2e/suites/ha_cold/BUILD.bazel b/metropolis/test/e2e/suites/ha_cold/BUILD.bazel
index c2cfa0d..2ace798 100644
--- a/metropolis/test/e2e/suites/ha_cold/BUILD.bazel
+++ b/metropolis/test/e2e/suites/ha_cold/BUILD.bazel
@@ -15,6 +15,8 @@
         "resources:ram:7000",
     ],
     deps = [
+        "//metropolis/node/core/curator/proto/api",
+        "//metropolis/proto/api",
         "//metropolis/proto/common",
         "//metropolis/test/launch",
         "//metropolis/test/util",
diff --git a/metropolis/test/e2e/suites/ha_cold/run_test.go b/metropolis/test/e2e/suites/ha_cold/run_test.go
index 419d290..6a5c6e8 100644
--- a/metropolis/test/e2e/suites/ha_cold/run_test.go
+++ b/metropolis/test/e2e/suites/ha_cold/run_test.go
@@ -10,6 +10,8 @@
 	"source.monogon.dev/metropolis/test/util"
 	"source.monogon.dev/osbase/test/launch"
 
+	ipb "source.monogon.dev/metropolis/node/core/curator/proto/api"
+	apb "source.monogon.dev/metropolis/proto/api"
 	cpb "source.monogon.dev/metropolis/proto/common"
 )
 
@@ -83,4 +85,74 @@
 	}
 	// Check if the cluster comes back up.
 	util.TestEventual(t, "Heartbeat test successful", ctx, 60*time.Second, cluster.AllNodesHealthy)
+
+	// Test node role removal.
+	curC, err := cluster.CuratorClient()
+	if err != nil {
+		t.Fatalf("Could not get CuratorClient: %v", err)
+	}
+	mgmt := apb.NewManagementClient(curC)
+	cur := ipb.NewCuratorClient(curC)
+
+	util.MustTestEventual(t, "Remove KubernetesController role", ctx, 10*time.Second, func(ctx context.Context) error {
+		fa := false
+		_, err := mgmt.UpdateNodeRoles(ctx, &apb.UpdateNodeRolesRequest{
+			Node: &apb.UpdateNodeRolesRequest_Id{
+				Id: cluster.NodeIDs[0],
+			},
+			KubernetesController: &fa,
+		})
+		return err
+	})
+	util.MustTestEventual(t, "Remove ConsensusMember role", ctx, time.Minute, func(ctx context.Context) error {
+		fa := false
+		_, err := mgmt.UpdateNodeRoles(ctx, &apb.UpdateNodeRolesRequest{
+			Node: &apb.UpdateNodeRolesRequest_Id{
+				Id: cluster.NodeIDs[0],
+			},
+			ConsensusMember: &fa,
+		})
+		return err
+	})
+
+	// Test that removing the ConsensusMember role from a node removed the
+	// corresponding etcd member from the cluster.
+	var st *ipb.GetConsensusStatusResponse
+	util.MustTestEventual(t, "Get ConsensusStatus", ctx, time.Minute, func(ctx context.Context) error {
+		st, err = cur.GetConsensusStatus(ctx, &ipb.GetConsensusStatusRequest{})
+		return err
+	})
+
+	for _, member := range st.EtcdMember {
+		if member.Id == cluster.NodeIDs[0] {
+			t.Errorf("member still present in etcd")
+		}
+	}
+
+	// Test that that the cluster still works after deleting the first node and
+	// restarting the remaining nodes.
+	util.MustTestEventual(t, "Delete first node", ctx, 10*time.Second, func(ctx context.Context) error {
+		_, err := mgmt.DeleteNode(ctx, &apb.DeleteNodeRequest{
+			Node: &apb.DeleteNodeRequest_Id{
+				Id: cluster.NodeIDs[0],
+			},
+			SafetyBypassNotDecommissioned: &apb.DeleteNodeRequest_SafetyBypassNotDecommissioned{},
+		})
+		return err
+	})
+
+	// Shut every remaining node down.
+	for i := 1; i < clusterOptions.NumNodes; i++ {
+		if err := cluster.ShutdownNode(i); err != nil {
+			t.Fatalf("Could not shutdown node %d", i)
+		}
+	}
+	// Start every remaining node back up.
+	for i := 1; i < clusterOptions.NumNodes; i++ {
+		if err := cluster.StartNode(i); err != nil {
+			t.Fatalf("Could not shutdown node %d", i)
+		}
+	}
+	// Check if the cluster comes back up.
+	util.TestEventual(t, "Heartbeat test successful", ctx, 60*time.Second, cluster.AllNodesHealthy)
 }
