Skip to content

Commit c8d6f9e

Browse files
committed
refactor: make kube config optional on nas/oss node server
1 parent 00bbd1a commit c8d6f9e

File tree

21 files changed

+146
-138
lines changed

21 files changed

+146
-138
lines changed

main.go

Lines changed: 35 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ limitations under the License.
1717
package main
1818

1919
import (
20+
"context"
2021
"fmt"
2122
"net/http"
2223
_ "net/http/pprof"
@@ -27,6 +28,8 @@ import (
2728
"sync"
2829
"time"
2930

31+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
32+
3033
sts20150401 "github.com/alibabacloud-go/sts-20150401/v2/client"
3134
alicred_old "github.com/aliyun/credentials-go/credentials"
3235
"github.com/kubernetes-sigs/alibaba-cloud-csi-driver/pkg/bmcpfs"
@@ -179,6 +182,8 @@ func main() {
179182
}
180183
}
181184

185+
csiCfg := getCSIPluginConfig()
186+
182187
for _, driverName := range driverNames {
183188
wg.Add(1)
184189
endPointName := replaceCsiEndpoint(driverName, *endpoint)
@@ -188,19 +193,19 @@ func main() {
188193
case TypePluginNAS:
189194
go func(endPoint string) {
190195
defer wg.Done()
191-
driver := nas.NewDriver(meta, endPoint, serviceType)
196+
driver := nas.NewDriver(meta, endPoint, serviceType, csiCfg)
192197
driver.Run()
193198
}(endPointName)
194199
case TypePluginOSS:
195200
go func(endPoint string) {
196201
defer wg.Done()
197-
driver := oss.NewDriver(endPoint, meta, serviceType)
202+
driver := oss.NewDriver(endPoint, meta, serviceType, csiCfg)
198203
driver.Run()
199204
}(endPointName)
200205
case TypePluginDISK:
201206
go func(endPoint string) {
202207
defer wg.Done()
203-
driver := disk.NewDriver(meta, endPoint, serviceType)
208+
driver := disk.NewDriver(meta, endPoint, serviceType, csiCfg)
204209
driver.Run()
205210
}(endPointName)
206211

@@ -285,3 +290,30 @@ func healthHandler(w http.ResponseWriter, r *http.Request) {
285290
message := "Liveness probe is OK, time:" + time.String()
286291
_, _ = w.Write([]byte(message))
287292
}
293+
294+
func getCSIPluginConfig() (config utils.Config) {
295+
cfg, err := options.GetRestConfig()
296+
if err != nil {
297+
klog.ErrorS(err, "error building kube config")
298+
return
299+
}
300+
301+
client, err := kubernetes.NewForConfig(cfg)
302+
if err != nil {
303+
if cfg != nil {
304+
klog.Fatal(err, "error building kube client")
305+
} else {
306+
klog.ErrorS(err, "error building kube client")
307+
return
308+
}
309+
}
310+
311+
cm, err := client.CoreV1().ConfigMaps("kube-system").Get(context.Background(), "csi-plugin", metav1.GetOptions{})
312+
if err != nil {
313+
klog.ErrorS(err, "failed to get config map csi-plugin")
314+
return
315+
}
316+
317+
config.ConfigMap = cm.Data
318+
return
319+
}

pkg/disk/disk.go

Lines changed: 3 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@ import (
3737
"github.com/kubernetes-sigs/alibaba-cloud-csi-driver/pkg/utils"
3838
"github.com/kubernetes-sigs/alibaba-cloud-csi-driver/pkg/version"
3939
v1 "k8s.io/api/core/v1"
40-
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
4140
"k8s.io/apimachinery/pkg/util/sets"
4241
"k8s.io/client-go/kubernetes"
4342
"k8s.io/klog/v2"
@@ -106,13 +105,12 @@ func initDriver() {
106105
}
107106

108107
// NewDriver create the identity/node/controller server and disk driver
109-
func NewDriver(m metadata.MetadataProvider, endpoint string, serviceType utils.ServiceType) *DISK {
108+
func NewDriver(m metadata.MetadataProvider, endpoint string, serviceType utils.ServiceType, csiCfg utils.Config) *DISK {
110109
initDriver()
111110
tmpdisk := &DISK{}
112111
tmpdisk.endpoint = endpoint
113112

114-
// Config Global vars
115-
csiCfg := GlobalConfigSet(m)
113+
GlobalConfigSet(m, csiCfg)
116114

117115
if serviceType&utils.Node != 0 {
118116
GlobalConfigVar.NodeID = metadata.MustGet(m, metadata.InstanceID)
@@ -158,9 +156,7 @@ func (disk *DISK) Run() {
158156
}
159157

160158
// GlobalConfigSet set Global Config
161-
func GlobalConfigSet(m metadata.MetadataProvider) utils.Config {
162-
configMapName := "csi-plugin"
163-
159+
func GlobalConfigSet(m metadata.MetadataProvider, csiCfg utils.Config) {
164160
// Global Configs Set
165161
cfg, err := options.GetRestConfig()
166162
if err != nil {
@@ -179,14 +175,6 @@ func GlobalConfigSet(m metadata.MetadataProvider) utils.Config {
179175
klog.Fatalf("Error building kubernetes snapclientset: %s", err.Error())
180176
}
181177

182-
csiCfg := utils.Config{}
183-
configMap, err := kubeClient.CoreV1().ConfigMaps("kube-system").Get(context.Background(), configMapName, metav1.GetOptions{})
184-
if err != nil {
185-
klog.Infof("Not found configmap named as csi-plugin under kube-system, with: %v", err)
186-
} else {
187-
csiCfg.ConfigMap = configMap.Data
188-
}
189-
190178
// Env variables
191179
avmfe := os.Getenv("ADDON_VM_FATAL_EVENTS")
192180
fatalEvents := []string{}
@@ -247,7 +235,6 @@ func GlobalConfigSet(m metadata.MetadataProvider) utils.Config {
247235
GlobalConfigVar.DetachBeforeDelete,
248236
GlobalConfigVar.ClusterID,
249237
)
250-
return csiCfg
251238
}
252239

253240
func newBatcher(fromNode bool) (waitstatus.StatusWaiter[ecs.Disk], batcher.Batcher[ecs.Disk]) {

pkg/mounter/fuse_pod_manager/fuse_pod_manager.go

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@ import (
88
"strings"
99
"time"
1010

11-
"github.com/kubernetes-sigs/alibaba-cloud-csi-driver/pkg/mounter/utils"
11+
mounterutils "github.com/kubernetes-sigs/alibaba-cloud-csi-driver/pkg/mounter/utils"
12+
"github.com/kubernetes-sigs/alibaba-cloud-csi-driver/pkg/utils"
1213
corev1 "k8s.io/api/core/v1"
1314
apiserrors "k8s.io/apimachinery/pkg/api/errors"
1415
"k8s.io/apimachinery/pkg/api/resource"
@@ -101,14 +102,11 @@ type FuseContainerConfig struct {
101102
Extra map[string]string
102103
}
103104

104-
func ExtractFuseContainerConfig(configmap *corev1.ConfigMap, name string) (config FuseContainerConfig) {
105+
func ExtractFuseContainerConfig(csiCfg utils.Config, name string) (config FuseContainerConfig) {
105106
config.Resources.Requests = make(corev1.ResourceList)
106107
config.Resources.Limits = make(corev1.ResourceList)
107108

108-
if configmap == nil {
109-
return
110-
}
111-
content := configmap.Data["fuse-"+name]
109+
content := csiCfg.Get("fuse-"+name, "OSS_FUSE_"+strings.ToUpper(name), "")
112110
for _, line := range strings.Split(content, "\n") {
113111
line = strings.TrimSpace(line)
114112
if line == "" {
@@ -150,7 +148,7 @@ func ExtractFuseContainerConfig(configmap *corev1.ConfigMap, name string) (confi
150148
invalid = true
151149
break
152150
}
153-
err = utils.ValidateAnnotations(annotations)
151+
err = mounterutils.ValidateAnnotations(annotations)
154152
if err != nil {
155153
invalid = true
156154
break
@@ -163,7 +161,7 @@ func ExtractFuseContainerConfig(configmap *corev1.ConfigMap, name string) (confi
163161
invalid = true
164162
break
165163
}
166-
err = utils.ValidateLabels(labels)
164+
err = mounterutils.ValidateLabels(labels)
167165
if err != nil {
168166
invalid = true
169167
break
@@ -206,15 +204,15 @@ func NewFusePodManager(fuseType FuseMounterType, client kubernetes.Interface) *F
206204

207205
func (fpm *FusePodManager) labelsAndListOptionsFor(c *FusePodContext, target string) (map[string]string, metav1.ListOptions) {
208206
labels := map[string]string{
209-
FuseVolumeIdLabelKey: utils.ComputeVolumeIdLabelVal(c.VolumeId),
207+
FuseVolumeIdLabelKey: mounterutils.ComputeVolumeIdLabelVal(c.VolumeId),
210208
}
211209
// ControllerUnPublish cannot get fuseType info,
212210
// so FuseTypeLabelKey cannot used as a label for Delete
213211
if c.FuseType != "" {
214212
labels[FuseTypeLabelKey] = c.FuseType
215213
}
216214
if target != "" {
217-
labels[FuseMountPathHashLabelKey] = utils.ComputeMountPathHash(target)
215+
labels[FuseMountPathHashLabelKey] = mounterutils.ComputeMountPathHash(target)
218216
}
219217
listOptions := metav1.ListOptions{
220218
FieldSelector: fields.OneTermEqualSelector("spec.nodeName", c.NodeName).String(),

pkg/mounter/fuse_pod_manager/fuse_pod_manager_test.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"testing"
55
"time"
66

7+
"github.com/kubernetes-sigs/alibaba-cloud-csi-driver/pkg/utils"
78
"github.com/stretchr/testify/assert"
89
"github.com/stretchr/testify/require"
910
corev1 "k8s.io/api/core/v1"
@@ -17,8 +18,8 @@ import (
1718
)
1819

1920
func Test_ExtractFuseContainerConfig(t *testing.T) {
20-
configmap := &corev1.ConfigMap{
21-
Data: map[string]string{
21+
csiCfg := utils.Config{
22+
ConfigMap: map[string]string{
2223
"fuse-ossfs": `
2324
image=ossfs:latest
2425
cpu-request=100m
@@ -32,7 +33,7 @@ func Test_ExtractFuseContainerConfig(t *testing.T) {
3233
`,
3334
},
3435
}
35-
config := ExtractFuseContainerConfig(configmap, "ossfs")
36+
config := ExtractFuseContainerConfig(csiCfg, "ossfs")
3637
expected := FuseContainerConfig{
3738
Resources: corev1.ResourceRequirements{
3839
Limits: corev1.ResourceList{

pkg/mounter/fuse_pod_manager/oss/ossfs/manager.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,8 @@ var ossfsDbglevels = map[string]string{
5353
fpm.DebugLevelFatal: "crit",
5454
}
5555

56-
func NewFuseOssfs(configmap *corev1.ConfigMap, m metadata.MetadataProvider) ossfpm.OSSFuseMounterType {
57-
config := fpm.ExtractFuseContainerConfig(configmap, ossfpm.OssFsType)
56+
func NewFuseOssfs(csiCfg utils.Config, m metadata.MetadataProvider) ossfpm.OSSFuseMounterType {
57+
config := fpm.ExtractFuseContainerConfig(csiCfg, ossfpm.OssFsType)
5858

5959
// set default image
6060
ossfpm.SetDefaultImage(ossfpm.OssFsType, m, &config)

pkg/mounter/fuse_pod_manager/oss/ossfs/manager_test.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import (
99
fpm "github.com/kubernetes-sigs/alibaba-cloud-csi-driver/pkg/mounter/fuse_pod_manager"
1010
ossfpm "github.com/kubernetes-sigs/alibaba-cloud-csi-driver/pkg/mounter/fuse_pod_manager/oss"
1111
mounterutils "github.com/kubernetes-sigs/alibaba-cloud-csi-driver/pkg/mounter/utils"
12+
"github.com/kubernetes-sigs/alibaba-cloud-csi-driver/pkg/utils"
1213
"github.com/stretchr/testify/assert"
1314
"github.com/stretchr/testify/require"
1415
corev1 "k8s.io/api/core/v1"
@@ -101,7 +102,7 @@ func Test_buildAuthSpec_ossfs(t *testing.T) {
101102

102103
func TestPrecheckAuthConfig_ossfs(t *testing.T) {
103104
fakeMeta := metadata.NewMetadata()
104-
fakeOssfs := NewFuseOssfs(nil, fakeMeta)
105+
fakeOssfs := NewFuseOssfs(utils.Config{}, fakeMeta)
105106
tests := []struct {
106107
name string
107108
opts *ossfpm.Options
@@ -246,7 +247,7 @@ func TestMakeAuthConfig_ossfs(t *testing.T) {
246247
t.Setenv("CLUSTER_ID", "cluster-id")
247248
t.Setenv("ALIBABA_CLOUD_ACCOUNT_ID", "account-id")
248249
fakeMeta := metadata.NewMetadata()
249-
fakeOssfs := NewFuseOssfs(nil, fakeMeta)
250+
fakeOssfs := NewFuseOssfs(utils.Config{}, fakeMeta)
250251
tests := []struct {
251252
name string
252253
options *ossfpm.Options
@@ -483,7 +484,7 @@ func TestMakeMountOptions_ossfs(t *testing.T) {
483484
t.Run(tt.name, func(t *testing.T) {
484485
t.Setenv("REGION_ID", tt.region)
485486
fakeMeta := metadata.NewMetadata()
486-
fakeOssfs := NewFuseOssfs(nil, fakeMeta)
487+
fakeOssfs := NewFuseOssfs(utils.Config{}, fakeMeta)
487488
mountOptions, err := fakeOssfs.MakeMountOptions(tt.opts, fakeMeta)
488489
assert.Equal(t, tt.expectedError, err != nil)
489490
assert.ElementsMatch(t, tt.expected, mountOptions)
@@ -577,7 +578,7 @@ func TestGetAuthOpttions_ossfs(t *testing.T) {
577578

578579
func TestAddDefaultMountOptions_ossfs(t *testing.T) {
579580
fakeMeta := metadata.NewMetadata()
580-
fakeInter := NewFuseOssfs(nil, fakeMeta)
581+
fakeInter := NewFuseOssfs(utils.Config{}, fakeMeta)
581582
fakeOssfs, ok := fakeInter.(*fuseOssfs)
582583
if !ok {
583584
t.Fatalf("failed to cast to fuseOssfs")

pkg/mounter/fuse_pod_manager/oss/ossfs2/manager.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,8 @@ var ossfs2Dbglevels = map[string]string{
3939
fpm.DebugLevelInfo: "info",
4040
}
4141

42-
func NewFuseOssfs(configmap *corev1.ConfigMap, m metadata.MetadataProvider) ossfpm.OSSFuseMounterType {
43-
config := fpm.ExtractFuseContainerConfig(configmap, ossfpm.OssFs2Type)
42+
func NewFuseOssfs(csiCfg utils.Config, m metadata.MetadataProvider) ossfpm.OSSFuseMounterType {
43+
config := fpm.ExtractFuseContainerConfig(csiCfg, ossfpm.OssFs2Type)
4444
// set default image
4545
ossfpm.SetDefaultImage(ossfpm.OssFs2Type, m, &config)
4646
// set default memory request

pkg/mounter/fuse_pod_manager/oss/ossfs2/manager_test.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,15 @@ import (
1010
fpm "github.com/kubernetes-sigs/alibaba-cloud-csi-driver/pkg/mounter/fuse_pod_manager"
1111
ossfpm "github.com/kubernetes-sigs/alibaba-cloud-csi-driver/pkg/mounter/fuse_pod_manager/oss"
1212
mounterutils "github.com/kubernetes-sigs/alibaba-cloud-csi-driver/pkg/mounter/utils"
13+
"github.com/kubernetes-sigs/alibaba-cloud-csi-driver/pkg/utils"
1314
"github.com/stretchr/testify/assert"
1415
corev1 "k8s.io/api/core/v1"
1516
"k8s.io/utils/ptr"
1617
)
1718

1819
func TestPrecheckAuthConfig_ossfs2(t *testing.T) {
1920
fakeMeta := metadata.NewMetadata()
20-
fakeOssfs := NewFuseOssfs(nil, fakeMeta)
21+
fakeOssfs := NewFuseOssfs(utils.Config{}, fakeMeta)
2122
tests := []struct {
2223
name string
2324
opts *ossfpm.Options
@@ -103,7 +104,7 @@ func TestMakeAuthConfig_ossfs2(t *testing.T) {
103104
t.Setenv("CLUSTER_ID", "cluster-id")
104105
t.Setenv("ALIBABA_CLOUD_ACCOUNT_ID", "account-id")
105106
fakeMeta := metadata.NewMetadata()
106-
fakeOssfs := NewFuseOssfs(nil, fakeMeta)
107+
fakeOssfs := NewFuseOssfs(utils.Config{}, fakeMeta)
107108
tests := []struct {
108109
name string
109110
options *ossfpm.Options
@@ -288,7 +289,7 @@ func TestMakeMountOptions_ossfs2(t *testing.T) {
288289
t.Run(tt.name, func(t *testing.T) {
289290
t.Setenv("REGION_ID", tt.region)
290291
fakeMeta := metadata.NewMetadata()
291-
fakeOssfs := NewFuseOssfs(nil, fakeMeta)
292+
fakeOssfs := NewFuseOssfs(utils.Config{}, fakeMeta)
292293
opts, err := fakeOssfs.MakeMountOptions(tt.opts, fakeMeta)
293294
assert.Equal(t, tt.expectedError, err != nil)
294295
assert.Equal(t, tt.expected, opts)
@@ -298,7 +299,7 @@ func TestMakeMountOptions_ossfs2(t *testing.T) {
298299

299300
func TestAddDefaultMountOptions_ossfs2(t *testing.T) {
300301
fakeMeta := metadata.NewMetadata()
301-
fakeInter := NewFuseOssfs(nil, fakeMeta)
302+
fakeInter := NewFuseOssfs(utils.Config{}, fakeMeta)
302303
fakeOssfs, ok := fakeInter.(*fuseOssfs)
303304
if !ok {
304305
t.Fatalf("failed to cast to fuseOssfs")

pkg/mounter/fuse_pod_manager/oss/registry.go

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,18 @@ package oss
33
import (
44
"github.com/kubernetes-sigs/alibaba-cloud-csi-driver/pkg/cloud/metadata"
55
"github.com/kubernetes-sigs/alibaba-cloud-csi-driver/pkg/mounter"
6-
corev1 "k8s.io/api/core/v1"
6+
"github.com/kubernetes-sigs/alibaba-cloud-csi-driver/pkg/utils"
77
"k8s.io/client-go/kubernetes"
88
)
99

1010
var (
11-
fstypeToFactory = map[string]func(*corev1.ConfigMap, metadata.MetadataProvider) OSSFuseMounterType{}
11+
fstypeToFactory = map[string]func(utils.Config, metadata.MetadataProvider) OSSFuseMounterType{}
1212
fstypeToPath = map[string]string{}
1313
fstypeToInterceptors = map[string][]mounter.MountInterceptor{}
1414
)
1515

1616
// RegisterFuseMounter registers a fuse mounter factory for a given fstype
17-
func RegisterFuseMounter(fstype string, factory func(*corev1.ConfigMap, metadata.MetadataProvider) OSSFuseMounterType) {
17+
func RegisterFuseMounter(fstype string, factory func(utils.Config, metadata.MetadataProvider) OSSFuseMounterType) {
1818
fstypeToFactory[fstype] = factory
1919
}
2020

@@ -50,12 +50,12 @@ func GetFuseMountInterceptors(fstype string) ([]mounter.MountInterceptor, bool)
5050
}
5151

5252
// GetFuseMounter returns a fuse mounter instance for the given fstype
53-
func GetFuseMounter(fstype string, configmap *corev1.ConfigMap, m metadata.MetadataProvider) (OSSFuseMounterType, error) {
53+
func GetFuseMounter(fstype string, csiCfg utils.Config, m metadata.MetadataProvider) (OSSFuseMounterType, error) {
5454
factory, ok := fstypeToFactory[fstype]
5555
if !ok {
5656
return nil, &UnsupportedFstypeError{Fstype: fstype}
5757
}
58-
return factory(configmap, m), nil
58+
return factory(csiCfg, m), nil
5959
}
6060

6161
// GetAllRegisteredFuseTypes returns all registered fuse types
@@ -70,10 +70,10 @@ func GetAllRegisteredFuseTypes() []string {
7070
// GetAllOSSFusePodManagers creates a map of all registered OSS fuse pod managers
7171
// configmap can be nil if not available (e.g., in CSI agent mode)
7272
// client can be nil if not needed (e.g., in CSI agent mode)
73-
func GetAllOSSFusePodManagers(configmap *corev1.ConfigMap, m metadata.MetadataProvider, client kubernetes.Interface) map[string]*OSSFusePodManager {
73+
func GetAllOSSFusePodManagers(csiCfg utils.Config, m metadata.MetadataProvider, client kubernetes.Interface) map[string]*OSSFusePodManager {
7474
fusePodManagers := make(map[string]*OSSFusePodManager, len(fstypeToFactory))
7575
for fstype, factory := range fstypeToFactory {
76-
fusePodManagers[fstype] = NewOSSFusePodManager(factory(configmap, m), client)
76+
fusePodManagers[fstype] = NewOSSFusePodManager(factory(csiCfg, m), client)
7777
}
7878
return fusePodManagers
7979
}

0 commit comments

Comments
 (0)