Skip to content

Commit 7b3f56b

Browse files
authored
Merge pull request #694 from andyzhangx/runOnControlPlane
feat: add runOnControlPlane in chart config
2 parents 2832df4 + ce77c0a commit 7b3f56b

File tree

9 files changed

+82
-10
lines changed

9 files changed

+82
-10
lines changed

Makefile

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,6 @@ e2e-bootstrap: install-helm
8989
docker pull $(IMAGE_TAG) || make blob-container push
9090
helm install blob-csi-driver ./charts/latest/blob-csi-driver --namespace kube-system --wait --timeout=15m -v=5 --debug \
9191
--set controller.replicas=1 \
92-
--set controller.runOnMaster=true \
9392
--set cloud=$(CLOUD) \
9493
$(E2E_HELM_OPTIONS)
9594

charts/README.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,7 @@
66
### Tips
77
- configure with [blobfuse-proxy](../deploy/blobfuse-proxy) to make blobfuse mount still available after driver restart
88
- specify `node.enableBlobfuseProxy=true` together with [blobfuse-proxy](../deploy/blobfuse-proxy)
9-
- make controller only run on master node: `--set controller.runOnMaster=true`
10-
- enable `fsGroupPolicy` on a k8s 1.20+ cluster: `--set feature.enableFSGroupPolicy=true`
9+
- run controller on control plane node: `--set controller.runOnControlPlane=true`
1110
- set replica of controller as `1`: `--set controller.replicas=1`
1211
- specify different cloud config secret for the driver:
1312
- `--set controller.cloudConfigSecretName`
@@ -92,11 +91,12 @@ The following table lists the configurable parameters of the latest Azure Blob S
9291
| `controller.cloudConfigSecretName` | cloud config secret name of controller driver | `azure-cloud-provider`
9392
| `controller.cloudConfigSecretNamespace` | cloud config secret namespace of controller driver | `kube-system`
9493
| `controller.allowEmptyCloudConfig` | Whether allow running controller driver without cloud config | `true`
95-
| `controller.replicas` | the replicas of csi-blob-controller | `2` |
94+
| `controller.replicas` | replica number of csi-blob-controller | `2` |
9695
| `controller.hostNetwork` | `hostNetwork` setting on controller driver(could be disabled if controller does not depend on MSI setting) | `true` | `true`, `false`
9796
| `controller.metricsPort` | metrics port of csi-blob-controller | `29634` |
9897
| `controller.livenessProbe.healthPort ` | health check port for liveness probe | `29632` |
99-
| `controller.runOnMaster` | run controller on master node | `true` |
98+
| `controller.runOnMaster` | run controller on master node | `false` |
99+
| `controller.runOnControlPlane` | run controller on control plane node |`false` |
100100
| `controller.logLevel` | controller driver log level | `5` |
101101
| `controller.resources.csiProvisioner.limits.memory` | csi-provisioner memory limits | 100Mi |
102102
| `controller.resources.csiProvisioner.requests.cpu` | csi-provisioner cpu requests | 10m |
26 Bytes
Binary file not shown.

charts/latest/blob-csi-driver/templates/csi-blob-controller.yaml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,9 @@ spec:
4040
{{- if .Values.controller.runOnMaster}}
4141
node-role.kubernetes.io/master: ""
4242
{{- end}}
43+
{{- if .Values.controller.runOnControlPlane}}
44+
node-role.kubernetes.io/control-plane: ""
45+
{{- end}}
4346
{{- with .Values.controller.nodeSelector }}
4447
{{ toYaml . | indent 8 }}
4548
{{- end }}

charts/latest/blob-csi-driver/values.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ controller:
6464
healthPort: 29632
6565
replicas: 2
6666
runOnMaster: false
67+
runOnControlPlane: false
6768
logLevel: 5
6869
resources:
6970
csiProvisioner:

pkg/blob/blob.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -803,3 +803,18 @@ func createStorageAccountSecret(account, key string) map[string]string {
803803
secret[defaultSecretAccountKey] = key
804804
return secret
805805
}
806+
807+
// setKeyValueInMap set key/value pair in map
808+
// key in the map is case insensitive, if key already exists, overwrite existing value
809+
func setKeyValueInMap(m map[string]string, key, value string) {
810+
if m == nil {
811+
return
812+
}
813+
for k := range m {
814+
if strings.EqualFold(k, key) {
815+
m[k] = value
816+
return
817+
}
818+
}
819+
m[key] = value
820+
}

pkg/blob/blob_test.go

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -950,3 +950,57 @@ func TestCreateStorageAccountSecret(t *testing.T) {
950950
t.Errorf("Expected account name(%s), Actual account name(%s); Expected account key(%s), Actual account key(%s)", "TestAccountName", result[defaultSecretAccountName], "TestAccountKey", result[defaultSecretAccountKey])
951951
}
952952
}
953+
954+
func TestSetKeyValueInMap(t *testing.T) {
955+
tests := []struct {
956+
desc string
957+
m map[string]string
958+
key string
959+
value string
960+
expected map[string]string
961+
}{
962+
{
963+
desc: "nil map",
964+
key: "key",
965+
value: "value",
966+
},
967+
{
968+
desc: "empty map",
969+
m: map[string]string{},
970+
key: "key",
971+
value: "value",
972+
expected: map[string]string{"key": "value"},
973+
},
974+
{
975+
desc: "non-empty map",
976+
m: map[string]string{"k": "v"},
977+
key: "key",
978+
value: "value",
979+
expected: map[string]string{
980+
"k": "v",
981+
"key": "value",
982+
},
983+
},
984+
{
985+
desc: "same key already exists",
986+
m: map[string]string{"subDir": "value2"},
987+
key: "subDir",
988+
value: "value",
989+
expected: map[string]string{"subDir": "value"},
990+
},
991+
{
992+
desc: "case insentive key already exists",
993+
m: map[string]string{"subDir": "value2"},
994+
key: "subdir",
995+
value: "value",
996+
expected: map[string]string{"subDir": "value"},
997+
},
998+
}
999+
1000+
for _, test := range tests {
1001+
setKeyValueInMap(test.m, test.key, test.value)
1002+
if !reflect.DeepEqual(test.m, test.expected) {
1003+
t.Errorf("test[%s]: unexpected output: %v, expected result: %v", test.desc, test.m, test.expected)
1004+
}
1005+
}
1006+
}

pkg/blob/controllerserver.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -296,7 +296,7 @@ func (d *Driver) CreateVolume(ctx context.Context, req *csi.CreateVolumeRequest)
296296
validContainerName = containerNamePrefix + "-" + volName
297297
}
298298
validContainerName = getValidContainerName(validContainerName, protocol)
299-
parameters[containerNameField] = validContainerName
299+
setKeyValueInMap(parameters, containerNameField, validContainerName)
300300
}
301301

302302
var volumeID string
@@ -343,7 +343,7 @@ func (d *Driver) CreateVolume(ctx context.Context, req *csi.CreateVolumeRequest)
343343

344344
isOperationSucceeded = true
345345
// reset secretNamespace field in VolumeContext
346-
parameters[secretNamespaceField] = secretNamespace
346+
setKeyValueInMap(parameters, secretNamespaceField, secretNamespace)
347347
return &csi.CreateVolumeResponse{
348348
Volume: &csi.Volume{
349349
VolumeId: volumeID,

pkg/blob/nodeserver.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -76,11 +76,11 @@ func (d *Driver) NodePublishVolume(ctx context.Context, req *csi.NodePublishVolu
7676
context := req.GetVolumeContext()
7777
if context != nil {
7878
if strings.EqualFold(context[ephemeralField], trueValue) {
79-
context[secretNamespaceField] = context[podNamespaceField]
79+
setKeyValueInMap(context, secretNamespaceField, context[podNamespaceField])
8080
if !d.allowInlineVolumeKeyAccessWithIdentity {
8181
// only get storage account from secret
82-
context[getAccountKeyFromSecretField] = trueValue
83-
context[storageAccountField] = ""
82+
setKeyValueInMap(context, getAccountKeyFromSecretField, trueValue)
83+
setKeyValueInMap(context, storageAccountField, "")
8484
}
8585
klog.V(2).Infof("NodePublishVolume: ephemeral volume(%s) mount on %s, VolumeContext: %v", volumeID, target, context)
8686
_, err := d.NodeStageVolume(ctx, &csi.NodeStageVolumeRequest{

0 commit comments

Comments
 (0)