@@ -80,85 +80,97 @@ A CO SHOULD be equipped to handle both centralized and headless plugins, as well
8080Several of these possibilities are illustrated in the following figures.
8181
8282``` 
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+ +-------------------------------------------------+ 
102107
103108Figure 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. 
106112``` 
107113
108114``` 
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+ +-------------------------------------------------+ 
124134
125135Figure 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. 
128139``` 
129140
130141``` 
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+ +-------------------------------------------------+ 
141153
142154Figure 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) .
145157``` 
146158
147159``` 
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+ +------------------------------------------------- + 
157169
158170Figure 4: Headless Plugin deployment, only the CO Node hosts run 
159171Plugins. 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 . 
162174``` 
163175
164176### Volume Lifecycle  
@@ -268,7 +280,13 @@ Each SP MUST provide:
268280
269281*  ** Node Plugin** : A gRPC endpoint serving CSI RPCs that MUST be run on the Node whereupon an SP-provisioned volume will be published.
270282*  ** 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 ) ).
272290
273291``` protobuf 
274292syntax = "proto3"; 
@@ -322,10 +340,11 @@ extend google.protobuf.ServiceOptions {
322340} 
323341``` 
324342
325- There are three  sets of RPCs:
343+ There are four  sets of RPCs:
326344
327- *  ** Identity Service** : Both the Node  Plugin  and the Controller  Plugin MUST implement this sets of RPCs.
345+ *  ** Identity Service** : Both the Controller  Plugin, the Group Controller Plugin  and the Node  Plugin MUST implement this sets of RPCs.
328346*  ** Controller Service** : The Controller Plugin MUST implement this sets of RPCs.
347+ *  ** Group Controller Service** : The GroupController Plugin MUST implement this sets of RPCs.
329348*  ** Node Service** : The Node Plugin MUST implement this sets of RPCs.
330349
331350``` protobuf 
0 commit comments