mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-27 13:37:30 +00:00
Merge pull request #37084 from kenan435/fail-fast-on-duplicate-node
Automatic merge from submit-queue (batch tested with PRs 38194, 37594, 38123, 37831, 37084) [kubeadm] Fail fast if there already is a node in the cluster with that name kubeadm Fail fast if there is another node with the same name already in the cluster. Fixes #36255 cc @kubernetes/sig-cluster-federation
This commit is contained in:
commit
87d907cafe
@ -145,6 +145,11 @@ func (j *Join) Run(out io.Writer) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
err = kubenode.CheckForNodeNameDuplicates(connectionDetails)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
kubeconfig, err := kubenode.PerformTLSBootstrap(connectionDetails)
|
kubeconfig, err := kubenode.PerformTLSBootstrap(connectionDetails)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
@ -21,6 +21,7 @@ go_library(
|
|||||||
deps = [
|
deps = [
|
||||||
"//cmd/kubeadm/app/apis/kubeadm:go_default_library",
|
"//cmd/kubeadm/app/apis/kubeadm:go_default_library",
|
||||||
"//cmd/kubeadm/app/util:go_default_library",
|
"//cmd/kubeadm/app/util:go_default_library",
|
||||||
|
"//pkg/api/v1:go_default_library",
|
||||||
"//pkg/apis/certificates:go_default_library",
|
"//pkg/apis/certificates:go_default_library",
|
||||||
"//pkg/client/clientset_generated/release_1_5:go_default_library",
|
"//pkg/client/clientset_generated/release_1_5:go_default_library",
|
||||||
"//pkg/client/clientset_generated/release_1_5/typed/certificates/v1alpha1:go_default_library",
|
"//pkg/client/clientset_generated/release_1_5/typed/certificates/v1alpha1:go_default_library",
|
||||||
|
@ -24,6 +24,7 @@ import (
|
|||||||
|
|
||||||
kubeadmapi "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm"
|
kubeadmapi "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm"
|
||||||
kubeadmutil "k8s.io/kubernetes/cmd/kubeadm/app/util"
|
kubeadmutil "k8s.io/kubernetes/cmd/kubeadm/app/util"
|
||||||
|
"k8s.io/kubernetes/pkg/api/v1"
|
||||||
"k8s.io/kubernetes/pkg/apis/certificates"
|
"k8s.io/kubernetes/pkg/apis/certificates"
|
||||||
clientset "k8s.io/kubernetes/pkg/client/clientset_generated/release_1_5"
|
clientset "k8s.io/kubernetes/pkg/client/clientset_generated/release_1_5"
|
||||||
certclient "k8s.io/kubernetes/pkg/client/clientset_generated/release_1_5/typed/certificates/v1alpha1"
|
certclient "k8s.io/kubernetes/pkg/client/clientset_generated/release_1_5/typed/certificates/v1alpha1"
|
||||||
@ -34,6 +35,7 @@ import (
|
|||||||
|
|
||||||
// ConnectionDetails represents a master API endpoint connection
|
// ConnectionDetails represents a master API endpoint connection
|
||||||
type ConnectionDetails struct {
|
type ConnectionDetails struct {
|
||||||
|
ClientSet *clientset.Clientset
|
||||||
CertClient *certclient.CertificatesV1alpha1Client
|
CertClient *certclient.CertificatesV1alpha1Client
|
||||||
Endpoint string
|
Endpoint string
|
||||||
CACert []byte
|
CACert []byte
|
||||||
@ -82,6 +84,7 @@ func EstablishMasterConnection(s *kubeadmapi.NodeConfiguration, clusterInfo *kub
|
|||||||
// connection established, stop all wait threads
|
// connection established, stop all wait threads
|
||||||
close(stopChan)
|
close(stopChan)
|
||||||
result <- &ConnectionDetails{
|
result <- &ConnectionDetails{
|
||||||
|
ClientSet: clientSet,
|
||||||
CertClient: clientSet.CertificatesV1alpha1Client,
|
CertClient: clientSet.CertificatesV1alpha1Client,
|
||||||
Endpoint: apiEndpoint,
|
Endpoint: apiEndpoint,
|
||||||
CACert: caCert,
|
CACert: caCert,
|
||||||
@ -124,6 +127,24 @@ func createClients(caCert []byte, endpoint, token string, nodeName types.NodeNam
|
|||||||
return clientSet, nil
|
return clientSet, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// check to see if there are other nodes in the cluster with identical node names.
|
||||||
|
func CheckForNodeNameDuplicates(connection *ConnectionDetails) error {
|
||||||
|
hostName, err := os.Hostname()
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("Failed to get node hostname [%v]", err)
|
||||||
|
}
|
||||||
|
nodeList, err := connection.ClientSet.Nodes().List(v1.ListOptions{})
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("Failed to list the nodes in the cluster: [%v]\n", err)
|
||||||
|
}
|
||||||
|
for _, node := range nodeList.Items {
|
||||||
|
if hostName == node.Name {
|
||||||
|
return fmt.Errorf("Node with name [%q] already exists.", node.Name)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
// checks the connection requirements for a specific API endpoint
|
// checks the connection requirements for a specific API endpoint
|
||||||
func checkAPIEndpoint(clientSet *clientset.Clientset, endpoint string) error {
|
func checkAPIEndpoint(clientSet *clientset.Clientset, endpoint string) error {
|
||||||
// check general connectivity
|
// check general connectivity
|
||||||
|
Loading…
Reference in New Issue
Block a user