/
remove.go
84 lines (73 loc) · 2.45 KB
/
remove.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
package core
import (
"context"
"github.com/zdnscloud/zke/core/pki"
"github.com/zdnscloud/zke/core/services"
"github.com/zdnscloud/zke/pkg/hosts"
"github.com/zdnscloud/zke/pkg/k8s"
"github.com/zdnscloud/zke/pkg/log"
"github.com/zdnscloud/zke/types"
"github.com/zdnscloud/cement/errgroup"
)
func (c *Cluster) ClusterRemove(ctx context.Context) error {
if err := c.CleanupNodes(ctx); err != nil {
return err
}
c.CleanupFiles(ctx)
return nil
}
func cleanUpHosts(ctx context.Context, cpHosts, workerHosts, etcdHosts, edgeHosts []*hosts.Host, cleanerImage, storageCleanerImage string, prsMap map[string]types.PrivateRegistry, externalEtcd bool, clusterCIDR string) error {
uniqueHosts := hosts.GetUniqueHostList(cpHosts, workerHosts, etcdHosts, edgeHosts)
_, err := errgroup.Batch(uniqueHosts, func(h interface{}) (interface{}, error) {
runHost := h.(*hosts.Host)
return nil, runHost.CleanUpAll(ctx, cleanerImage, storageCleanerImage, prsMap, externalEtcd, clusterCIDR)
})
return err
}
func (c *Cluster) CleanupNodes(ctx context.Context) error {
externalEtcd := false
if len(c.Core.Etcd.ExternalURLs) > 0 {
externalEtcd = true
}
// Remove Worker Plane
if err := services.RemoveWorkerPlane(ctx, c.WorkerHosts, true); err != nil {
return err
}
// Remove Contol Plane
if err := services.RemoveControlPlane(ctx, c.ControlPlaneHosts, true); err != nil {
return err
}
// Remove Etcd Plane
if !externalEtcd {
if err := services.RemoveEtcdPlane(ctx, c.EtcdHosts, true); err != nil {
return err
}
}
// Clean up all hosts
return cleanUpHosts(ctx, c.ControlPlaneHosts, c.WorkerHosts, c.EtcdHosts, c.EdgeHosts, c.Image.Alpine, c.Image.ZKERemover, c.PrivateRegistriesMap, externalEtcd, c.Option.ClusterCidr)
}
func (c *Cluster) CleanupFiles(ctx context.Context) error {
pki.RemoveAdminConfig(ctx, pki.KubeAdminConfigName)
removeStateFile(ctx, pki.StateFileName)
return nil
}
func (c *Cluster) RemoveOldNodes(ctx context.Context) error {
nodeList, err := k8s.GetNodeList(c.KubeClient)
if err != nil {
return err
}
uniqueHosts := hosts.GetUniqueHostList(c.EtcdHosts, c.ControlPlaneHosts, c.WorkerHosts, c.EdgeHosts)
for _, node := range nodeList.Items {
if k8s.IsNodeReady(node) {
continue
}
host := &hosts.Host{}
host.NodeName = node.Name
if !hosts.IsNodeInList(host, uniqueHosts) {
if err := k8s.DeleteNode(c.KubeClient, node.Name, ""); err != nil {
log.Warnf(ctx, "Failed to delete old node [%s] from kubernetes")
}
}
}
return nil
}