Skip to content

Commit 0280dc4

Browse files
committed
refactor: make kube config optional on nas/oss node server
1 parent 964cc5a commit 0280dc4

File tree

21 files changed

+137
-130
lines changed

21 files changed

+137
-130
lines changed

main.go

Lines changed: 34 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"
@@ -48,6 +49,7 @@ import (
4849
"github.com/sirupsen/logrus"
4950
flag "github.com/spf13/pflag"
5051
"golang.org/x/sys/unix"
52+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
5153
"k8s.io/client-go/kubernetes"
5254
"k8s.io/component-base/logs"
5355
logsapi "k8s.io/component-base/logs/api/v1"
@@ -190,6 +192,8 @@ func main() {
190192
}
191193
}
192194

195+
csiCfg := getCSIPluginConfig()
196+
193197
for _, driverName := range driverNames {
194198
wg.Add(1)
195199
endPointName := replaceCsiEndpoint(driverName, *endpoint)
@@ -199,19 +203,19 @@ func main() {
199203
case TypePluginNAS:
200204
go func(endPoint string) {
201205
defer wg.Done()
202-
driver := nas.NewDriver(meta, endPoint, serviceType)
206+
driver := nas.NewDriver(meta, endPoint, serviceType, csiCfg)
203207
driver.Run()
204208
}(endPointName)
205209
case TypePluginOSS:
206210
go func(endPoint string) {
207211
defer wg.Done()
208-
driver := oss.NewDriver(endPoint, meta, serviceType)
212+
driver := oss.NewDriver(endPoint, meta, serviceType, csiCfg)
209213
driver.Run()
210214
}(endPointName)
211215
case TypePluginDISK:
212216
go func(endPoint string) {
213217
defer wg.Done()
214-
driver := disk.NewDriver(meta, endPoint, serviceType)
218+
driver := disk.NewDriver(meta, endPoint, serviceType, csiCfg)
215219
driver.Run()
216220
}(endPointName)
217221

@@ -296,3 +300,30 @@ func healthHandler(w http.ResponseWriter, r *http.Request) {
296300
message := "Liveness probe is OK, time:" + time.String()
297301
_, _ = w.Write([]byte(message))
298302
}
303+
304+
func getCSIPluginConfig() (config utils.Config) {
305+
cfg, err := options.GetRestConfig()
306+
if err != nil {
307+
klog.ErrorS(err, "error building kube config")
308+
return
309+
}
310+
311+
client, err := kubernetes.NewForConfig(cfg)
312+
if err != nil {
313+
if cfg != nil {
314+
klog.Fatal(err, "error building kube client")
315+
} else {
316+
klog.ErrorS(err, "error building kube client")
317+
return
318+
}
319+
}
320+
321+
cm, err := client.CoreV1().ConfigMaps("kube-system").Get(context.Background(), "csi-plugin", metav1.GetOptions{})
322+
if err != nil {
323+
klog.ErrorS(err, "failed to get config map csi-plugin")
324+
return
325+
}
326+
327+
config.ConfigMap = cm.Data
328+
return
329+
}

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: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import (
99
"time"
1010

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
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 == "" {

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, mounterutils.OssFsType)
56+
func NewFuseOssfs(csiCfg utils.Config, m metadata.MetadataProvider) ossfpm.OSSFuseMounterType {
57+
config := fpm.ExtractFuseContainerConfig(csiCfg, mounterutils.OssFsType)
5858

5959
// set default image
6060
ossfpm.SetDefaultImage(mounterutils.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
@@ -10,6 +10,7 @@ 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
"github.com/stretchr/testify/require"
1516
corev1 "k8s.io/api/core/v1"
@@ -102,7 +103,7 @@ func Test_buildAuthSpec_ossfs(t *testing.T) {
102103

103104
func TestPrecheckAuthConfig_ossfs(t *testing.T) {
104105
fakeMeta := metadata.NewMetadata()
105-
fakeOssfs := NewFuseOssfs(nil, fakeMeta)
106+
fakeOssfs := NewFuseOssfs(utils.Config{}, fakeMeta)
106107
tests := []struct {
107108
name string
108109
opts *ossfpm.Options
@@ -316,7 +317,7 @@ func TestMakeAuthConfig_ossfs(t *testing.T) {
316317
t.Setenv("CLUSTER_ID", "cluster-id")
317318
t.Setenv("ALIBABA_CLOUD_ACCOUNT_ID", "account-id")
318319
fakeMeta := metadata.NewMetadata()
319-
fakeOssfs := NewFuseOssfs(nil, fakeMeta)
320+
fakeOssfs := NewFuseOssfs(utils.Config{}, fakeMeta)
320321
tests := []struct {
321322
name string
322323
options *ossfpm.Options
@@ -597,7 +598,7 @@ func TestMakeMountOptions_ossfs(t *testing.T) {
597598
t.Run(tt.name, func(t *testing.T) {
598599
t.Setenv("REGION_ID", tt.region)
599600
fakeMeta := metadata.NewMetadata()
600-
fakeOssfs := NewFuseOssfs(nil, fakeMeta)
601+
fakeOssfs := NewFuseOssfs(utils.Config{}, fakeMeta)
601602
mountOptions, err := fakeOssfs.MakeMountOptions(tt.opts, fakeMeta)
602603
assert.Equal(t, tt.expectedError, err != nil)
603604
assert.ElementsMatch(t, tt.expected, mountOptions)
@@ -710,7 +711,7 @@ func TestGetAuthOpttions_ossfs(t *testing.T) {
710711

711712
func TestAddDefaultMountOptions_ossfs(t *testing.T) {
712713
fakeMeta := metadata.NewMetadata()
713-
fakeInter := NewFuseOssfs(nil, fakeMeta)
714+
fakeInter := NewFuseOssfs(utils.Config{}, fakeMeta)
714715
fakeOssfs, ok := fakeInter.(*fuseOssfs)
715716
if !ok {
716717
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, mounterutils.OssFs2Type)
42+
func NewFuseOssfs(csiCfg utils.Config, m metadata.MetadataProvider) ossfpm.OSSFuseMounterType {
43+
config := fpm.ExtractFuseContainerConfig(csiCfg, mounterutils.OssFs2Type)
4444
// set default image
4545
ossfpm.SetDefaultImage(mounterutils.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
@@ -11,6 +11,7 @@ import (
1111
fpm "github.com/kubernetes-sigs/alibaba-cloud-csi-driver/pkg/mounter/fuse_pod_manager"
1212
ossfpm "github.com/kubernetes-sigs/alibaba-cloud-csi-driver/pkg/mounter/fuse_pod_manager/oss"
1313
mounterutils "github.com/kubernetes-sigs/alibaba-cloud-csi-driver/pkg/mounter/utils"
14+
"github.com/kubernetes-sigs/alibaba-cloud-csi-driver/pkg/utils"
1415
"github.com/stretchr/testify/assert"
1516
"github.com/stretchr/testify/require"
1617
corev1 "k8s.io/api/core/v1"
@@ -19,7 +20,7 @@ import (
1920

2021
func TestPrecheckAuthConfig_ossfs2(t *testing.T) {
2122
fakeMeta := metadata.NewMetadata()
22-
fakeOssfs := NewFuseOssfs(nil, fakeMeta)
23+
fakeOssfs := NewFuseOssfs(utils.Config{}, fakeMeta)
2324
tests := []struct {
2425
name string
2526
opts *ossfpm.Options
@@ -156,7 +157,7 @@ func TestMakeAuthConfig_ossfs2(t *testing.T) {
156157
t.Setenv("CLUSTER_ID", "cluster-id")
157158
t.Setenv("ALIBABA_CLOUD_ACCOUNT_ID", "account-id")
158159
fakeMeta := metadata.NewMetadata()
159-
fakeOssfs := NewFuseOssfs(nil, fakeMeta)
160+
fakeOssfs := NewFuseOssfs(utils.Config{}, fakeMeta)
160161
tests := []struct {
161162
name string
162163
options *ossfpm.Options
@@ -371,7 +372,7 @@ func TestMakeMountOptions_ossfs2(t *testing.T) {
371372
t.Run(tt.name, func(t *testing.T) {
372373
t.Setenv("REGION_ID", tt.region)
373374
fakeMeta := metadata.NewMetadata()
374-
fakeOssfs := NewFuseOssfs(nil, fakeMeta)
375+
fakeOssfs := NewFuseOssfs(utils.Config{}, fakeMeta)
375376
opts, err := fakeOssfs.MakeMountOptions(tt.opts, fakeMeta)
376377
assert.Equal(t, tt.expectedError, err != nil)
377378
assert.Equal(t, tt.expected, opts)
@@ -381,7 +382,7 @@ func TestMakeMountOptions_ossfs2(t *testing.T) {
381382

382383
func TestAddDefaultMountOptions_ossfs2(t *testing.T) {
383384
fakeMeta := metadata.NewMetadata()
384-
fakeInter := NewFuseOssfs(nil, fakeMeta)
385+
fakeInter := NewFuseOssfs(utils.Config{}, fakeMeta)
385386
fakeOssfs, ok := fakeInter.(*fuseOssfs)
386387
if !ok {
387388
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
}

pkg/mounter/fuse_pod_manager/oss/registry_test.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77
"github.com/kubernetes-sigs/alibaba-cloud-csi-driver/pkg/mounter"
88
fpm "github.com/kubernetes-sigs/alibaba-cloud-csi-driver/pkg/mounter/fuse_pod_manager"
99
"github.com/kubernetes-sigs/alibaba-cloud-csi-driver/pkg/mounter/interceptors"
10+
"github.com/kubernetes-sigs/alibaba-cloud-csi-driver/pkg/utils"
1011
"github.com/stretchr/testify/assert"
1112
corev1 "k8s.io/api/core/v1"
1213
)
@@ -54,7 +55,7 @@ func TestGetFuseMounterInterceptors(t *testing.T) {
5455
func TestGetAllRegisteredFuseTypes(t *testing.T) {
5556
// Register a test factory
5657
testType := "test-fuse-type-3"
57-
testFactory := func(*corev1.ConfigMap, metadata.MetadataProvider) OSSFuseMounterType {
58+
testFactory := func(utils.Config, metadata.MetadataProvider) OSSFuseMounterType {
5859
return nil
5960
}
6061
RegisterFuseMounter(testType, testFactory)
@@ -75,13 +76,13 @@ func TestGetAllOSSFusePodManagers(t *testing.T) {
7576

7677
// Register a test factory that returns a valid mounter
7778
testType := "test-fuse-type-4"
78-
testFactory := func(*corev1.ConfigMap, metadata.MetadataProvider) OSSFuseMounterType {
79+
testFactory := func(utils.Config, metadata.MetadataProvider) OSSFuseMounterType {
7980
return &testFuseMounter{name: testType}
8081
}
8182
RegisterFuseMounter(testType, testFactory)
8283

8384
// Test with nil configmap and nil client (CSI agent mode)
84-
managers := GetAllOSSFusePodManagers(nil, fakeMeta, nil)
85+
managers := GetAllOSSFusePodManagers(utils.Config{}, fakeMeta, nil)
8586

8687
// Should have at least the test manager
8788
assert.GreaterOrEqual(t, len(managers), 1, "Should have at least 1 fuse pod manager")

0 commit comments

Comments
 (0)