Skip to content

Commit 7f7d911

Browse files
committed
Multiple COSI driver support in k8s cluster
add support for multiple cosi drivers in k8s cluster by introducing driver-prefix option. Fixes: #27 Signed-off-by: Jiffin Tony Thottan <thottanjiffin@gmail.com>
1 parent e1f4ab2 commit 7f7d911

File tree

7 files changed

+33
-59
lines changed

7 files changed

+33
-59
lines changed

README.md

+7
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,13 @@ An example for awscli pods can be found at `examples/awscliapppod.yaml`. Credent
116116

117117
1. Handle access policies for Bucket Access Request
118118

119+
## Configuration Options
120+
121+
| Option | Default value | Description |
122+
| ------------------------- | -------------------------------------- | -------------------------------------------------------------------|
123+
| `--driver-address` | `unix:///var/lib/cosi/cosi.sock` | COSI driver address, must be a UNIX socket |
124+
| `--driver-prefix` | _empty_ | prefix added before name, e.g, `<prefix>.ceph.objectstorage.k8s.io`|
125+
119126
## Integration with Rook
120127

121128
The ceph cosi driver integrates with [Rook](https://rook.io/) from v1.12 onwards to provide object storage for Kubernetes applications. More details can be found [here](https://rook.io/docs/rook/v1.12/Storage-Configuration/Object-Storage-RGW/cosi/).

cmd/ceph-cosi-driver/cmd.go

+11-46
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,10 @@ package main
1818

1919
import (
2020
"context"
21+
"errors"
2122
"flag"
22-
"strings"
2323

2424
"github.com/ceph/cosi-driver-ceph/pkg/driver"
25-
"github.com/spf13/cobra"
26-
"github.com/spf13/pflag"
27-
"github.com/spf13/viper"
2825
"k8s.io/klog/v2"
2926

3027
"sigs.k8s.io/container-object-storage-interface-provisioner-sidecar/pkg/provisioner"
@@ -33,57 +30,25 @@ import (
3330
const provisionerName = "ceph.objectstorage.k8s.io"
3431

3532
var (
36-
driverAddress = "unix:///var/lib/cosi/cosi.sock"
37-
AccessKey = ""
38-
SecretKey = ""
39-
Endpoint = ""
33+
driverAddress = flag.String("driver-address", "unix:///var/lib/cosi/cosi.sock", "driver address for socket")
34+
driverPrefix = flag.String("driver-prefix", "", "prefix for cosi driver, e.g. <prefix>.ceph.objectstorage.k8s.io")
4035
)
4136

42-
var cmd = &cobra.Command{
43-
Use: "ceph-cosi-driver",
44-
Short: "Kubernetes COSI driver for Ceph RGW",
45-
SilenceErrors: true,
46-
SilenceUsage: true,
47-
RunE: func(cmd *cobra.Command, args []string) error {
48-
return run(cmd.Context(), args)
49-
},
50-
DisableFlagsInUseLine: true,
51-
}
52-
5337
func init() {
54-
viper.AutomaticEnv()
55-
viper.SetEnvKeyReplacer(strings.NewReplacer("-", "_"))
56-
57-
flag.Set("alsologtostderr", "true")
58-
kflags := flag.NewFlagSet("klog", flag.ExitOnError)
59-
klog.InitFlags(kflags)
60-
61-
persistentFlags := cmd.PersistentFlags()
62-
persistentFlags.AddGoFlagSet(kflags)
63-
64-
stringFlag := persistentFlags.StringVarP
65-
66-
stringFlag(&driverAddress,
67-
"driver-addr",
68-
"d",
69-
driverAddress,
70-
"path to unix domain socket where driver should listen")
71-
72-
viper.BindPFlags(cmd.PersistentFlags())
73-
cmd.PersistentFlags().VisitAll(func(f *pflag.Flag) {
74-
if viper.IsSet(f.Name) && viper.GetString(f.Name) != "" {
75-
cmd.PersistentFlags().Set(f.Name, viper.GetString(f.Name))
76-
}
77-
})
38+
klog.InitFlags(nil)
7839
}
7940

80-
func run(ctx context.Context, args []string) error {
81-
identityServer, bucketProvisioner, err := driver.NewDriver(ctx, provisionerName)
41+
func run(ctx context.Context) error {
42+
if *driverPrefix == "" {
43+
return errors.New("driver prefix is missing for ceph cosi driver deployment")
44+
}
45+
driverName := *driverPrefix + "." + provisionerName
46+
identityServer, bucketProvisioner, err := driver.NewDriver(ctx, driverName)
8247
if err != nil {
8348
return err
8449
}
8550

86-
server, err := provisioner.NewDefaultCOSIProvisionerServer(driverAddress,
51+
server, err := provisioner.NewDefaultCOSIProvisionerServer(*driverAddress,
8752
identityServer,
8853
bucketProvisioner)
8954
if err != nil {

cmd/ceph-cosi-driver/main.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ func main() {
4242
os.Exit(1)
4343
}()
4444

45-
if err := cmd.ExecuteContext(ctx); err != nil {
45+
if err := run(ctx); err != nil {
4646
klog.ErrorS(err, "Exiting on error")
4747
}
4848
}

examples/bucketaccessclass.yaml

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@ kind: BucketAccessClass
22
apiVersion: objectstorage.k8s.io/v1alpha1
33
metadata:
44
name: sample-bac
5-
driverName: ceph.objectstorage.k8s.io
5+
driverName: cosi.ceph.objectstorage.k8s.io
66
authenticationType: KEY
77
parameters:
8-
objectStoreUserSecretName: rook-ceph-object-user-my-store-my-user
8+
objectStoreUserSecretName: rook-ceph-object-user-my-store-cosi
99
objectStoreUserSecretNamespace: rook-ceph

examples/bucketclass.yaml

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@ kind: BucketClass
22
apiVersion: objectstorage.k8s.io/v1alpha1
33
metadata:
44
name: sample-bcc
5-
driverName: ceph.objectstorage.k8s.io
5+
driverName: cosi.ceph.objectstorage.k8s.io
66
deletionPolicy: Delete
77
parameters:
8-
objectStoreUserSecretName: rook-ceph-object-user-my-store-my-user
8+
objectStoreUserSecretName: rook-ceph-object-user-my-store-cosi
99
objectStoreUserSecretNamespace: rook-ceph

pkg/driver/driver.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -23,13 +23,13 @@ import (
2323
cosispec "sigs.k8s.io/container-object-storage-interface-spec"
2424
)
2525

26-
func NewDriver(ctx context.Context, provisionerName string) (cosispec.IdentityServer, cosispec.ProvisionerServer, error) {
27-
provisionerServer, err := NewProvisionerServer(provisionerName)
26+
func NewDriver(ctx context.Context, driverName string) (cosispec.IdentityServer, cosispec.ProvisionerServer, error) {
27+
provisionerServer, err := NewProvisionerServer(driverName)
2828
if err != nil {
2929
klog.Fatal(err, "failed to create provisioner server")
3030
return nil, nil, err
3131
}
32-
identityServer, err := NewIdentityServer(provisionerName)
32+
identityServer, err := NewIdentityServer(driverName)
3333
if err != nil {
3434
klog.Fatal(err, "failed to create provisioner server")
3535
return nil, nil, err

resources/deployment.yaml

+7-5
Original file line numberDiff line numberDiff line change
@@ -39,19 +39,21 @@ spec:
3939
- name: ceph-cosi-driver
4040
image: $(CEPH_IMAGE_ORG)/ceph-cosi-driver:$(CEPH_IMAGE_VERSION)
4141
imagePullPolicy: IfNotPresent
42+
args:
43+
- "--driver-prefix=cosi"
4244
volumeMounts:
4345
- mountPath: /var/lib/cosi
4446
name: socket
45-
- name: objectstorage-provisioner-sidecar
46-
image: gcr.io/k8s-staging-sig-storage/objectstorage-sidecar/objectstorage-sidecar:v20221117-v0.1.0-22-g0e67387
47-
imagePullPolicy: IfNotPresent
48-
args:
49-
- "--v=5"
5047
env:
5148
- name: POD_NAMESPACE
5249
valueFrom:
5350
fieldRef:
5451
fieldPath: metadata.namespace
52+
- name: objectstorage-provisioner-sidecar
53+
image: gcr.io/k8s-staging-sig-storage/objectstorage-sidecar/objectstorage-sidecar:v20221117-v0.1.0-22-g0e67387
54+
imagePullPolicy: IfNotPresent
55+
args:
56+
- "--v=5"
5557
volumeMounts:
5658
- mountPath: /var/lib/cosi
5759
name: socket

0 commit comments

Comments
 (0)