@@ -19,14 +19,16 @@ package kubernetes
19
19
import (
20
20
"context"
21
21
"fmt"
22
-
23
- "github.com/labring/sealos/pkg/utils/iputils"
24
-
25
- ckubeadm "k8s.io/kubernetes/cmd/kubeadm/app/constants"
22
+ str "strings"
26
23
27
24
v1 "k8s.io/api/core/v1"
25
+ kerrors "k8s.io/apimachinery/pkg/api/errors"
28
26
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
29
27
clientset "k8s.io/client-go/kubernetes"
28
+ ckubeadm "k8s.io/kubernetes/cmd/kubeadm/app/constants"
29
+
30
+ "github.com/labring/sealos/pkg/utils/iputils"
31
+ "github.com/labring/sealos/pkg/utils/logger"
30
32
)
31
33
32
34
var (
@@ -76,6 +78,17 @@ func (ke *kubeExpansion) UpdateKubeadmConfig(ctx context.Context, clusterConfig
76
78
func (ke * kubeExpansion ) FetchKubeletConfig (ctx context.Context ) (string , error ) {
77
79
cm , err := ke .client .CoreV1 ().ConfigMaps (metav1 .NamespaceSystem ).Get (ctx , ckubeadm .KubeletBaseConfigurationConfigMap , metav1.GetOptions {})
78
80
if err != nil {
81
+ if kerrors .IsNotFound (err ) {
82
+ logger .Info ("cannot find configMap %q, try to detect older versions" , ckubeadm .KubeletBaseConfigurationConfigMap )
83
+ data , err := ke .fetchOldKubeletConfig (ctx )
84
+ if err != nil {
85
+ return "" , err
86
+ }
87
+ if err = ke .cloneOldKubeletConfig (ctx , data ); err != nil {
88
+ return "" , err
89
+ }
90
+ return data , nil
91
+ }
79
92
return "" , err
80
93
}
81
94
return cm .Data [ckubeadm .KubeletBaseConfigurationConfigMapKey ], nil
@@ -106,3 +119,28 @@ func (ke *kubeExpansion) FetchHostNameFromInternalIP(ctx context.Context, nodeIP
106
119
}
107
120
return "" , fmt .Errorf ("cannot find host with internal ip %v" , ip )
108
121
}
122
+
123
+ func (ke * kubeExpansion ) fetchOldKubeletConfig (ctx context.Context ) (string , error ) {
124
+ kubeletBaseConfigurationConfigMapPrefix := fmt .Sprintf ("%s-" , ckubeadm .KubeletBaseConfigurationConfigMap )
125
+ cms , err := ke .client .CoreV1 ().ConfigMaps (metav1 .NamespaceSystem ).List (ctx , metav1.ListOptions {})
126
+ if err != nil {
127
+ return "" , err
128
+ }
129
+ for _ , cm := range cms .Items {
130
+ if str .HasPrefix (cm .Name , kubeletBaseConfigurationConfigMapPrefix ) {
131
+ return cm .Data [ckubeadm .KubeletBaseConfigurationConfigMapKey ], nil
132
+ }
133
+ }
134
+ return "" , fmt .Errorf ("cannot find config map with prefix %q" , kubeletBaseConfigurationConfigMapPrefix )
135
+ }
136
+
137
+ func (ke * kubeExpansion ) cloneOldKubeletConfig (ctx context.Context , data string ) error {
138
+ cm := & v1.ConfigMap {Data : map [string ]string {}}
139
+ cm .Name = ckubeadm .KubeletBaseConfigurationConfigMap
140
+ cm .Data [ckubeadm .KubeletBaseConfigurationConfigMapKey ] = data
141
+ _ , err := ke .client .CoreV1 ().ConfigMaps (metav1 .NamespaceSystem ).Create (ctx , cm , metav1.CreateOptions {})
142
+ if err != nil {
143
+ return err
144
+ }
145
+ return nil
146
+ }
0 commit comments