mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-10-21 22:49:31 +00:00
Merge pull request #74112 from pytimer/kubeadm-reset
kubeadm: Remove etcd members from the etcd cluster when reset the nodes
This commit is contained in:
@@ -81,6 +81,35 @@ func CheckLocalEtcdClusterStatus(client clientset.Interface, cfg *kubeadmapi.Clu
|
||||
return nil
|
||||
}
|
||||
|
||||
// RemoveStackedEtcdMemberFromCluster will remove a local etcd member from etcd cluster,
|
||||
// when reset the control plane node.
|
||||
func RemoveStackedEtcdMemberFromCluster(client clientset.Interface, cfg *kubeadmapi.InitConfiguration) error {
|
||||
// creates an etcd client that connects to all the local/stacked etcd members
|
||||
klog.V(1).Info("[etcd] creating etcd client that connects to etcd pods")
|
||||
etcdClient, err := etcdutil.NewFromCluster(client, cfg.CertificatesDir)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// notifies the other members of the etcd cluster about the removing member
|
||||
etcdPeerAddress := etcdutil.GetPeerURL(&cfg.LocalAPIEndpoint)
|
||||
|
||||
klog.V(2).Infof("[etcd] get the member id from peer: %s", etcdPeerAddress)
|
||||
id, err := etcdClient.GetMemberID(etcdPeerAddress)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
klog.V(1).Infof("[etcd] removing etcd member: %s, id: %d", etcdPeerAddress, id)
|
||||
members, err := etcdClient.RemoveMember(id)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
klog.V(1).Infof("[etcd] Updated etcd member list: %v", members)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// CreateStackedEtcdStaticPodManifestFile will write local etcd static pod manifest file
|
||||
// for an additional etcd member that is joining an existing local/stacked etcd cluster.
|
||||
// Other members of the etcd cluster will be notified of the joining node in beforehand as well.
|
||||
|
@@ -113,6 +113,14 @@ func (f fakeEtcdClient) AddMember(name string, peerAddrs string) ([]etcdutil.Mem
|
||||
return []etcdutil.Member{}, nil
|
||||
}
|
||||
|
||||
func (f fakeEtcdClient) GetMemberID(peerURL string) (uint64, error) {
|
||||
return 0, nil
|
||||
}
|
||||
|
||||
func (f fakeEtcdClient) RemoveMember(id uint64) ([]etcdutil.Member, error) {
|
||||
return []etcdutil.Member{}, nil
|
||||
}
|
||||
|
||||
func TestGetAvailableUpgrades(t *testing.T) {
|
||||
etcdClient := fakeEtcdClient{}
|
||||
tests := []struct {
|
||||
|
@@ -256,6 +256,14 @@ func (c fakeTLSEtcdClient) AddMember(name string, peerAddrs string) ([]etcdutil.
|
||||
return []etcdutil.Member{}, nil
|
||||
}
|
||||
|
||||
func (c fakeTLSEtcdClient) GetMemberID(peerURL string) (uint64, error) {
|
||||
return 0, nil
|
||||
}
|
||||
|
||||
func (c fakeTLSEtcdClient) RemoveMember(id uint64) ([]etcdutil.Member, error) {
|
||||
return []etcdutil.Member{}, nil
|
||||
}
|
||||
|
||||
type fakePodManifestEtcdClient struct{ ManifestDir, CertificatesDir string }
|
||||
|
||||
func (c fakePodManifestEtcdClient) ClusterAvailable() (bool, error) { return true, nil }
|
||||
@@ -297,6 +305,14 @@ func (c fakePodManifestEtcdClient) AddMember(name string, peerAddrs string) ([]e
|
||||
return []etcdutil.Member{}, nil
|
||||
}
|
||||
|
||||
func (c fakePodManifestEtcdClient) GetMemberID(peerURL string) (uint64, error) {
|
||||
return 0, nil
|
||||
}
|
||||
|
||||
func (c fakePodManifestEtcdClient) RemoveMember(id uint64) ([]etcdutil.Member, error) {
|
||||
return []etcdutil.Member{}, nil
|
||||
}
|
||||
|
||||
func TestStaticPodControlPlane(t *testing.T) {
|
||||
tests := []struct {
|
||||
description string
|
||||
|
Reference in New Issue
Block a user