@@ -80,85 +80,97 @@ A CO SHOULD be equipped to handle both centralized and headless plugins, as well
80
80
Several of these possibilities are illustrated in the following figures.
81
81
82
82
```
83
- CO "Master" Host
84
- +-------------------------------------------+
85
- | |
86
- | +------------+ +------------+ |
87
- | | CO | gRPC | Controller | |
88
- | | +-----------> Plugin | |
89
- | +------------+ +------------+ |
90
- | |
91
- +-------------------------------------------+
92
-
93
- CO "Node" Host(s)
94
- +-------------------------------------------+
95
- | |
96
- | +------------+ +------------+ |
97
- | | CO | gRPC | Node | |
98
- | | +-----------> Plugin | |
99
- | +------------+ +------------+ |
100
- | |
101
- +-------------------------------------------+
83
+ CO "Master" Host
84
+ +-------------------------------------------------+
85
+ | |
86
+ | +------------+ +------------------+ |
87
+ | | CO | gRPC | Controller | |
88
+ | | +--+--------> Plugin | |
89
+ | +------------+ | +------------------+ |
90
+ | | |
91
+ | | +------------------+ |
92
+ | | | Group Controller | |
93
+ | +--------> Plugin | |
94
+ | +------------------+ |
95
+ | |
96
+ +-------------------------------------------------+
97
+
98
+ CO "Node" Host(s)
99
+ +-------------------------------------------------+
100
+ | |
101
+ | +------------+ +------------------+ |
102
+ | | CO | gRPC | Node | |
103
+ | | +-----------> Plugin | |
104
+ | +------------+ +------------------+ |
105
+ | |
106
+ +-------------------------------------------------+
102
107
103
108
Figure 1: The Plugin runs on all nodes in the cluster: a centralized
104
- Controller Plugin is available on the CO master host and the Node
105
- Plugin is available on all of the CO Nodes.
109
+ Controller Plugin and Group Controller Plugin (Optional) are available
110
+ on the CO master host and the Node Plugin is available on all of the
111
+ CO Nodes.
106
112
```
107
113
108
114
```
109
- CO "Node" Host(s)
110
- +-------------------------------------------+
111
- | |
112
- | +------------+ +------------+ |
113
- | | CO | gRPC | Controller | |
114
- | | +--+--------> Plugin | |
115
- | +------------+ | +------------+ |
116
- | | |
117
- | | |
118
- | | +------------+ |
119
- | | | Node | |
120
- | +--------> Plugin | |
121
- | +------------+ |
122
- | |
123
- +-------------------------------------------+
115
+ CO "Node" Host(s)
116
+ +-------------------------------------------------+
117
+ | |
118
+ | +------------------+ |
119
+ | | Node | |
120
+ | +--------> Plugin | |
121
+ | | +------------------+ |
122
+ | | |
123
+ | +------------+ | +------------------+ |
124
+ | | CO | |gRPC | Controller | |
125
+ | | +-----------> Plugin | |
126
+ | +------------+ | +------------------+ |
127
+ | | |
128
+ | | +------------------+ |
129
+ | | | Group Controller | |
130
+ | +--------> Plugin | |
131
+ | +------------------+ |
132
+ | |
133
+ +-------------------------------------------------+
124
134
125
135
Figure 2: Headless Plugin deployment, only the CO Node hosts run
126
- Plugins. Separate, split-component Plugins supply the Controller
127
- Service and the Node Service respectively.
136
+ Plugins. Separate, split-component Plugins supply the Node Service,
137
+ the Controller Service and the Group Controller Service (Optional)
138
+ respectively.
128
139
```
129
140
130
141
```
131
- CO "Node" Host(s)
132
- +-------------------------------------------+
133
- | |
134
- | +------------+ +------------+ |
135
- | | CO | gRPC | Controller | |
136
- | | +-----------> Node | |
137
- | +------------+ | Plugin | |
138
- | +------------+ |
139
- | |
140
- +-------------------------------------------+
142
+ CO "Node" Host(s)
143
+ +-------------------------------------------------+
144
+ | |
145
+ | +------------------+ |
146
+ | +------------+ | Node | |
147
+ | | CO | gRPC | Controller | |
148
+ | | +-----------> Group Controller | |
149
+ | +------------+ | Plugin | |
150
+ | +------------------+ |
151
+ | |
152
+ +-------------------------------------------------+
141
153
142
154
Figure 3: Headless Plugin deployment, only the CO Node hosts run
143
- Plugins. A unified Plugin component supplies both the Controller
144
- Service and Node Service.
155
+ Plugins. A unified Plugin component supplies both the Node Service,
156
+ the Controller Service and the Group Controller Service (Optional) .
145
157
```
146
158
147
159
```
148
- CO "Node" Host(s)
149
- +-------------------------------------------+
150
- | |
151
- | +------------+ +------------+ |
152
- | | CO | gRPC | Node | |
153
- | | +-----------> Plugin | |
154
- | +------------+ +------------+ |
155
- | |
156
- +-------------------------------------------+
160
+ CO "Node" Host(s)
161
+ +------------------------------------------------- +
162
+ | |
163
+ | +------------+ +------------------ + |
164
+ | | CO | gRPC | Node | |
165
+ | | +-----------> Plugin | |
166
+ | +------------+ +------------------ + |
167
+ | |
168
+ +------------------------------------------------- +
157
169
158
170
Figure 4: Headless Plugin deployment, only the CO Node hosts run
159
171
Plugins. A Node-only Plugin component supplies only the Node Service.
160
- Its GetPluginCapabilities RPC does not report the CONTROLLER_SERVICE
161
- capability.
172
+ Its GetPluginCapabilities RPC does not report both the CONTROLLER_SERVICE
173
+ capability and the GROUP_CONTROLLER_SERVICE capability .
162
174
```
163
175
164
176
### Volume Lifecycle
@@ -268,7 +280,13 @@ Each SP MUST provide:
268
280
269
281
* ** Node Plugin** : A gRPC endpoint serving CSI RPCs that MUST be run on the Node whereupon an SP-provisioned volume will be published.
270
282
* ** Controller Plugin** : A gRPC endpoint serving CSI RPCs that MAY be run anywhere.
271
- * In some circumstances a single gRPC endpoint MAY serve all CSI RPCs (see Figure 3 in [ Architecture] ( #architecture ) ).
283
+
284
+ Each SP MAY provide:
285
+
286
+ - ** Group Controller Plugin** : A gRPC endpoint serving CSI RPCs that MAY be run anywhere.
287
+
288
+
289
+ In some circumstances a single gRPC endpoint MAY serve all CSI RPCs (see Figure 3 in [ Architecture] ( #architecture ) ).
272
290
273
291
``` protobuf
274
292
syntax = "proto3";
@@ -322,10 +340,11 @@ extend google.protobuf.ServiceOptions {
322
340
}
323
341
```
324
342
325
- There are three sets of RPCs:
343
+ There are four sets of RPCs:
326
344
327
- * ** Identity Service** : Both the Node Plugin and the Controller Plugin MUST implement this sets of RPCs.
345
+ * ** Identity Service** : Both the Node Plugin, the Controller Plugin and the Group Controller Plugin MUST implement this sets of RPCs.
328
346
* ** Controller Service** : The Controller Plugin MUST implement this sets of RPCs.
347
+ * ** Group Controller Service** : The GroupController Plugin MUST implement this sets of RPCs.
329
348
* ** Node Service** : The Node Plugin MUST implement this sets of RPCs.
330
349
331
350
``` protobuf
0 commit comments