You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: keps/sig-storage/1979-object-storage-support/README.md
+16-19Lines changed: 16 additions & 19 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -141,7 +141,7 @@ Since this is an entirely new feature, it is possible to implement this complete
141
141
- COSI Sidecar
142
142
- COSI Driver
143
143
144
-
1. The COSI ControllerManager is the central controller that validates, authorizes and binds COSI created buckets to BucketClaims. At least one active instance of ControllerManager should be present.
144
+
1. The COSI ControllerManager is the central controller that validates, authorizes and binds COSI created buckets to BucketClaims. Only one active instance of ControllerManager should be present.
145
145
2. The COSI Sidecar is the point of integration between COSI and drivers. All operations that require communication with the OSP is triggered by the Sidecar using gRPC calls to the driver. One active instance of Sidecar should be present **for each driver**.
146
146
3. The COSI driver communicates with the OSP to conduct Bucket related operations.
147
147
@@ -190,8 +190,8 @@ The BucketClaim is a claim to create a new Bucket. This resource can be used to
@@ -513,8 +513,6 @@ Similar to the BucketAccess for COSI created bucket, this BucketAccess should re
513
513
|-------------------------------|
514
514
```
515
515
516
-
Note that, as of the alpha version of COSI, there is no authorization mechanism to restrict users who can refer to buckets imported into COSI. In the future, access to imported buckets will also follow the namespace selector approach described [above](#sharing-buckets).
517
-
518
516
## Bucket deletion
519
517
520
518
- A Bucket created by COSI as a result of a BucketClaim can deleted by deleting the BucketClaim
@@ -543,7 +541,7 @@ If a Bucket is manually deleted by an admin, then a finalizer on the Bucket prev
543
541
544
542
Self service is easily possible with the current design as both the BucketRequest and BucketClaim resources are namespace scoped, and users need not have admin privileges to create, modify and delete them.
545
543
546
-
The only admin steps are creation of class objects(BucketClass, BucketAccessClass) and Bucket imports. The creatio of class object is no different from requiring a StorageClass for provisioning PVCs. It is a well-understood pattern among kubernetes users. Importing a Bucket requires special permissions because its lifecycle is not managed by COSI, and special care needs to be taken to prevent clones, accidental deletions and other mishaps (for instance, setting the deletion policy to Delete).
544
+
The only admin steps are creation of class objects(BucketClass, BucketAccessClass) and Bucket imports. The creation of a class object is no different from requiring a StorageClass for provisioning PVCs. It is a well-understood pattern among Kubernetes users. Importing a Bucket requires special permissions because its lifecycle is not managed by COSI, and special care needs to be taken to prevent clones, accidental deletions and other mishaps (for instance, setting the deletion policy to Delete).
547
545
548
546
## Mutating Buckets
549
547
@@ -580,7 +578,7 @@ Notes:
580
578
581
579
Resource to represent a Bucket in OSP. Buckets are cluster-scoped.
582
580
583
-
```yaml
581
+
```go
584
582
Bucket {
585
583
TypeMeta
586
584
ObjectMeta
@@ -641,7 +639,7 @@ Bucket {
641
639
642
640
A claim to create Bucket. BucketClaim is namespace-scoped
643
641
644
-
```yaml
642
+
```go
645
643
BucketClaim {
646
644
TypeMeta
647
645
ObjectMeta
@@ -680,7 +678,7 @@ BucketClaim {
680
678
681
679
Resouce for configuring common properties for multiple Buckets. BucketClass is cluster-scoped.
682
680
683
-
```yaml
681
+
```go
684
682
BucketClass {
685
683
TypeMeta
686
684
ObjectMeta
@@ -706,14 +704,13 @@ BucketClass {
706
704
707
705
A resource to access a Bucket. BucketAccess is namespace-scoped
708
706
709
-
```yaml
707
+
```go
710
708
BucketAccess {
711
709
TypeMeta
712
710
ObjectMeta
713
711
714
712
Spec BucketAccessSpec {
715
713
// BucketClaimName is the name of the BucketClaim.
716
-
// Exactly one of BucketClaimName or BucketName must be set.
717
714
BucketClaimName string
718
715
719
716
// Protocol is the name of the Protocol
@@ -735,7 +732,8 @@ BucketAccess {
735
732
736
733
// ServiceAccountName is the name of the serviceAccount that COSI will map
737
734
// to the OSP service account when IAM styled authentication is specified
738
-
ServiceAccountName string
735
+
// +optional
736
+
ServiceAccountName string
739
737
}
740
738
741
739
Status BucketAccessStatus {
@@ -751,9 +749,9 @@ BucketAccess {
751
749
752
750
## BucketAccessClass
753
751
754
-
Resoruce for configuring common properties for multiple BucketClaims. BucketAccessClass is a clustered resource
752
+
Resource for configuring common properties for multiple BucketClaims. BucketAccessClass is a clustered resource
755
753
756
-
```yaml
754
+
```go
757
755
BucketAccessClass {
758
756
TypeMeta
759
757
ObjectMeta
@@ -779,7 +777,7 @@ BucketAccessClass {
779
777
780
778
Resource mounted into pods containing information for applications to gain access to buckets.
781
779
782
-
```yaml
780
+
```go
783
781
BucketInfo {
784
782
TypeMeta
785
783
ObjectMeta
@@ -855,7 +853,7 @@ The returned `bucketID` should be a unique identifier for the bucket in the OSP.
855
853
856
854
#### DriverGrantBucketAccess
857
855
858
-
This gRPC call creates a set of access credentials for a bucket. This api must be idempotent. The input to this call is the id of the bucket, a set of opaque parameters and name of the account. This `accountName` field is used to ensure that multiple requests for the same BucketClaim do not result in multiple credentials.
856
+
This gRPC call creates a set of access credentials for a bucket. This api must be idempotent. The input to this call is the id of the bucket, a set of opaque parameters and name of the account. This `accountName` field is the concatenation of the characters ba (short for BucketAccess) and its UID. It is used as the idempotency key for requests to the drivers regarding a particular BA.
859
857
860
858
The returned `accountID` should be a unique identifier for the account in the OSP. This value could be the name of the account too. This value will be included in all subsequent calls to the driver for changes to the BucketAccess.
861
859
@@ -921,6 +919,7 @@ This gRPC call revokes access granted to a particular account.
921
919
- Develop unit test cases to demonstrate that the above mentioned use cases work correctly
922
920
923
921
## Alpha -\> Beta
922
+
- Consider using a typed configuration for Bucket properties (parameter fields in Bucket, BucketClass, BucketAccess, BucketAccessClass)
924
923
- Implement all COSI components to support agreed design.
925
924
- Design and implement support for sharing buckets across namespaces.
926
925
- Design and implement quotas/restrictions for Buckets and BucketAccess.
@@ -1209,13 +1208,11 @@ Yes, the following cluster scoped resources
1209
1208
1210
1209
- Bucket
1211
1210
- BucketClass
1212
-
- BucketAccess
1213
1211
- BucketAccessClass
1214
1212
1215
1213
and the following namespaced scoped resources
1216
1214
1217
-
- BucketRequest
1218
-
- BucketAccessRequest
1215
+
- BucketAccess
1219
1216
1220
1217
###### Will enabling / using this feature result in any new calls to the cloud provider?
0 commit comments