Skip to content

Commit bb9183d

Browse files
authored
log and data volume separate (#82)
* log and data volume separate * update graphd volume name
1 parent 8b18198 commit bb9183d

8 files changed

+335
-124
lines changed

apis/apps/v1alpha1/nebulacluster_common.go

+11-15
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,14 @@ func getConfigKey(componentType string) string {
154154
return fmt.Sprintf("nebula-%s.conf", componentType)
155155
}
156156

157+
func logVolume(componentType string) string {
158+
return componentType + "-log"
159+
}
160+
161+
func dataVolume(componentType string) string {
162+
return componentType + "-data"
163+
}
164+
157165
func parseStorageRequest(res corev1.ResourceList) (corev1.ResourceRequirements, error) {
158166
if res == nil {
159167
return corev1.ResourceRequirements{}, nil
@@ -277,10 +285,9 @@ func generateStatefulSet(c NebulaClusterComponentter, cm *corev1.ConfigMap, enab
277285
}
278286
}
279287

280-
scName, storageRes := c.GetStorageClass(), c.GetStorageResources()
281-
storageRequest, err := parseStorageRequest(storageRes.Requests)
288+
volumeClaim, err := c.GenerateVolumeClaim()
282289
if err != nil {
283-
return nil, fmt.Errorf("cannot parse storage request for %s, error: %v", err, componentType)
290+
return nil, err
284291
}
285292

286293
replicas := c.GetReplicas()
@@ -309,18 +316,7 @@ func generateStatefulSet(c NebulaClusterComponentter, cm *corev1.ConfigMap, enab
309316
Partition: &replicas,
310317
},
311318
},
312-
VolumeClaimTemplates: []corev1.PersistentVolumeClaim{
313-
{
314-
ObjectMeta: metav1.ObjectMeta{
315-
Name: componentType,
316-
},
317-
Spec: corev1.PersistentVolumeClaimSpec{
318-
AccessModes: []corev1.PersistentVolumeAccessMode{corev1.ReadWriteOnce},
319-
Resources: storageRequest,
320-
StorageClassName: scName,
321-
},
322-
},
323-
},
319+
VolumeClaimTemplates: volumeClaim,
324320
},
325321
}
326322

apis/apps/v1alpha1/nebulacluster_componentter.go

+1-2
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,6 @@ type NebulaClusterComponentter interface {
3636
GetConfig() map[string]string
3737
GetConfigMapKey() string
3838
GetResources() *corev1.ResourceRequirements
39-
GetStorageClass() *string
40-
GetStorageResources() *corev1.ResourceRequirements
4139
GetPodEnvVars() []corev1.EnvVar
4240
GetPodAnnotations() map[string]string
4341
GetPodLabels() map[string]string
@@ -58,6 +56,7 @@ type NebulaClusterComponentter interface {
5856
GenerateContainerPorts() []corev1.ContainerPort
5957
GenerateVolumeMounts() []corev1.VolumeMount
6058
GenerateVolumes() []corev1.Volume
59+
GenerateVolumeClaim() ([]corev1.PersistentVolumeClaim, error)
6160
GenerateWorkload(gvk schema.GroupVersionKind, cm *corev1.ConfigMap, enableEvenPodsSpread bool) (*unstructured.Unstructured, error)
6261
GenerateService() *corev1.Service
6362
GenerateConfigMap() *corev1.ConfigMap

apis/apps/v1alpha1/nebulacluster_graphd.go

+33-7
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,10 @@ limitations under the License.
1717
package v1alpha1
1818

1919
import (
20+
"fmt"
21+
2022
corev1 "k8s.io/api/core/v1"
23+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2124
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
2225
"k8s.io/apimachinery/pkg/runtime/schema"
2326

@@ -75,16 +78,16 @@ func (c *graphdComponent) GetResources() *corev1.ResourceRequirements {
7578
return getResources(c.nc.Spec.Graphd.Resources)
7679
}
7780

78-
func (c *graphdComponent) GetStorageClass() *string {
79-
scName := c.nc.Spec.Graphd.StorageClaim.StorageClassName
81+
func (c *graphdComponent) GetLogStorageClass() *string {
82+
scName := c.nc.Spec.Graphd.LogVolumeClaim.StorageClassName
8083
if scName == nil || *scName == "" {
8184
return nil
8285
}
8386
return scName
8487
}
8588

86-
func (c *graphdComponent) GetStorageResources() *corev1.ResourceRequirements {
87-
return c.nc.Spec.Graphd.StorageClaim.Resources.DeepCopy()
89+
func (c *graphdComponent) GetLogStorageResources() *corev1.ResourceRequirements {
90+
return c.nc.Spec.Graphd.LogVolumeClaim.Resources.DeepCopy()
8891
}
8992

9093
func (c *graphdComponent) GetPodEnvVars() []corev1.EnvVar {
@@ -182,7 +185,7 @@ func (c *graphdComponent) GenerateVolumeMounts() []corev1.VolumeMount {
182185
componentType := c.Type().String()
183186
return []corev1.VolumeMount{
184187
{
185-
Name: componentType,
188+
Name: logVolume(componentType),
186189
MountPath: "/usr/local/nebula/logs",
187190
SubPath: "logs",
188191
},
@@ -193,16 +196,39 @@ func (c *graphdComponent) GenerateVolumes() []corev1.Volume {
193196
componentType := c.Type().String()
194197
return []corev1.Volume{
195198
{
196-
Name: componentType,
199+
Name: logVolume(componentType),
197200
VolumeSource: corev1.VolumeSource{
198201
PersistentVolumeClaim: &corev1.PersistentVolumeClaimVolumeSource{
199-
ClaimName: componentType,
202+
ClaimName: logVolume(componentType),
200203
},
201204
},
202205
},
203206
}
204207
}
205208

209+
func (c *graphdComponent) GenerateVolumeClaim() ([]corev1.PersistentVolumeClaim, error) {
210+
componentType := c.Type().String()
211+
logSC, logRes := c.GetLogStorageClass(), c.GetLogStorageResources()
212+
storageRequest, err := parseStorageRequest(logRes.Requests)
213+
if err != nil {
214+
return nil, fmt.Errorf("cannot parse storage request for %s, error: %v", componentType, err)
215+
}
216+
217+
claims := []corev1.PersistentVolumeClaim{
218+
{
219+
ObjectMeta: metav1.ObjectMeta{
220+
Name: logVolume(componentType),
221+
},
222+
Spec: corev1.PersistentVolumeClaimSpec{
223+
AccessModes: []corev1.PersistentVolumeAccessMode{corev1.ReadWriteOnce},
224+
Resources: storageRequest,
225+
StorageClassName: logSC,
226+
},
227+
},
228+
}
229+
return claims, nil
230+
}
231+
206232
func (c *graphdComponent) GenerateWorkload(
207233
gvk schema.GroupVersionKind,
208234
cm *corev1.ConfigMap,

apis/apps/v1alpha1/nebulacluster_metad.go

+70-8
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,10 @@ limitations under the License.
1717
package v1alpha1
1818

1919
import (
20+
"fmt"
21+
2022
corev1 "k8s.io/api/core/v1"
23+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2124
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
2225
"k8s.io/apimachinery/pkg/runtime/schema"
2326

@@ -75,16 +78,28 @@ func (c *metadComponent) GetResources() *corev1.ResourceRequirements {
7578
return getResources(c.nc.Spec.Metad.Resources)
7679
}
7780

78-
func (c *metadComponent) GetStorageClass() *string {
79-
scName := c.nc.Spec.Metad.StorageClaim.StorageClassName
81+
func (c *metadComponent) GetLogStorageClass() *string {
82+
scName := c.nc.Spec.Metad.LogVolumeClaim.StorageClassName
83+
if scName == nil || *scName == "" {
84+
return nil
85+
}
86+
return scName
87+
}
88+
89+
func (c *metadComponent) GetDataStorageClass() *string {
90+
scName := c.nc.Spec.Metad.DataVolumeClaim.StorageClassName
8091
if scName == nil || *scName == "" {
8192
return nil
8293
}
8394
return scName
8495
}
8596

86-
func (c *metadComponent) GetStorageResources() *corev1.ResourceRequirements {
87-
return c.nc.Spec.Metad.StorageClaim.Resources.DeepCopy()
97+
func (c *metadComponent) GetLogStorageResources() *corev1.ResourceRequirements {
98+
return c.nc.Spec.Metad.LogVolumeClaim.Resources.DeepCopy()
99+
}
100+
101+
func (c *metadComponent) GetDataStorageResources() *corev1.ResourceRequirements {
102+
return c.nc.Spec.Metad.DataVolumeClaim.Resources.DeepCopy()
88103
}
89104

90105
func (c *metadComponent) GetPodEnvVars() []corev1.EnvVar {
@@ -182,11 +197,11 @@ func (c *metadComponent) GenerateVolumeMounts() []corev1.VolumeMount {
182197
componentType := c.Type().String()
183198
return []corev1.VolumeMount{
184199
{
185-
Name: componentType,
200+
Name: logVolume(componentType),
186201
MountPath: "/usr/local/nebula/logs",
187202
SubPath: "logs",
188203
}, {
189-
Name: componentType,
204+
Name: dataVolume(componentType),
190205
MountPath: "/usr/local/nebula/data",
191206
SubPath: "data",
192207
},
@@ -197,16 +212,63 @@ func (c *metadComponent) GenerateVolumes() []corev1.Volume {
197212
componentType := c.Type().String()
198213
return []corev1.Volume{
199214
{
200-
Name: componentType,
215+
Name: logVolume(componentType),
216+
VolumeSource: corev1.VolumeSource{
217+
PersistentVolumeClaim: &corev1.PersistentVolumeClaimVolumeSource{
218+
ClaimName: logVolume(componentType),
219+
},
220+
},
221+
},
222+
{
223+
Name: dataVolume(componentType),
201224
VolumeSource: corev1.VolumeSource{
202225
PersistentVolumeClaim: &corev1.PersistentVolumeClaimVolumeSource{
203-
ClaimName: componentType,
226+
ClaimName: dataVolume(componentType),
204227
},
205228
},
206229
},
207230
}
208231
}
209232

233+
func (c *metadComponent) GenerateVolumeClaim() ([]corev1.PersistentVolumeClaim, error) {
234+
componentType := c.Type().String()
235+
logSC, logRes := c.GetLogStorageClass(), c.GetLogStorageResources()
236+
logReq, err := parseStorageRequest(logRes.Requests)
237+
if err != nil {
238+
return nil, fmt.Errorf("cannot parse storage request for %s log volume, error: %v", componentType, err)
239+
}
240+
241+
datSC, dataRes := c.GetDataStorageClass(), c.GetDataStorageResources()
242+
dataReq, err := parseStorageRequest(dataRes.Requests)
243+
if err != nil {
244+
return nil, fmt.Errorf("cannot parse storage request for %s data volume, error: %v", componentType, err)
245+
}
246+
247+
claims := []corev1.PersistentVolumeClaim{
248+
{
249+
ObjectMeta: metav1.ObjectMeta{
250+
Name: logVolume(componentType),
251+
},
252+
Spec: corev1.PersistentVolumeClaimSpec{
253+
AccessModes: []corev1.PersistentVolumeAccessMode{corev1.ReadWriteOnce},
254+
Resources: logReq,
255+
StorageClassName: logSC,
256+
},
257+
},
258+
{
259+
ObjectMeta: metav1.ObjectMeta{
260+
Name: dataVolume(componentType),
261+
},
262+
Spec: corev1.PersistentVolumeClaimSpec{
263+
AccessModes: []corev1.PersistentVolumeAccessMode{corev1.ReadWriteOnce},
264+
Resources: dataReq,
265+
StorageClassName: datSC,
266+
},
267+
},
268+
}
269+
return claims, nil
270+
}
271+
210272
func (c *metadComponent) GenerateWorkload(
211273
gvk schema.GroupVersionKind,
212274
cm *corev1.ConfigMap,

apis/apps/v1alpha1/nebulacluster_storaged.go

+70-8
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,10 @@ limitations under the License.
1717
package v1alpha1
1818

1919
import (
20+
"fmt"
21+
2022
corev1 "k8s.io/api/core/v1"
23+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2124
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
2225
"k8s.io/apimachinery/pkg/runtime/schema"
2326

@@ -77,16 +80,28 @@ func (c *storagedComponent) GetResources() *corev1.ResourceRequirements {
7780
return getResources(c.nc.Spec.Storaged.Resources)
7881
}
7982

80-
func (c *storagedComponent) GetStorageClass() *string {
81-
scName := c.nc.Spec.Storaged.StorageClaim.StorageClassName
83+
func (c *storagedComponent) GetLogStorageClass() *string {
84+
scName := c.nc.Spec.Storaged.LogVolumeClaim.StorageClassName
85+
if scName == nil || *scName == "" {
86+
return nil
87+
}
88+
return scName
89+
}
90+
91+
func (c *storagedComponent) GetDataStorageClass() *string {
92+
scName := c.nc.Spec.Storaged.LogVolumeClaim.StorageClassName
8293
if scName == nil || *scName == "" {
8394
return nil
8495
}
8596
return scName
8697
}
8798

88-
func (c *storagedComponent) GetStorageResources() *corev1.ResourceRequirements {
89-
return c.nc.Spec.Storaged.StorageClaim.Resources.DeepCopy()
99+
func (c *storagedComponent) GetLogStorageResources() *corev1.ResourceRequirements {
100+
return c.nc.Spec.Storaged.LogVolumeClaim.Resources.DeepCopy()
101+
}
102+
103+
func (c *storagedComponent) GetDataStorageResources() *corev1.ResourceRequirements {
104+
return c.nc.Spec.Storaged.LogVolumeClaim.Resources.DeepCopy()
90105
}
91106

92107
func (c *storagedComponent) GetPodEnvVars() []corev1.EnvVar {
@@ -188,11 +203,11 @@ func (c *storagedComponent) GenerateVolumeMounts() []corev1.VolumeMount {
188203
componentType := c.Type().String()
189204
return []corev1.VolumeMount{
190205
{
191-
Name: componentType,
206+
Name: logVolume(componentType),
192207
MountPath: "/usr/local/nebula/logs",
193208
SubPath: "logs",
194209
}, {
195-
Name: componentType,
210+
Name: dataVolume(componentType),
196211
MountPath: "/usr/local/nebula/data",
197212
SubPath: "data",
198213
},
@@ -203,16 +218,63 @@ func (c *storagedComponent) GenerateVolumes() []corev1.Volume {
203218
componentType := c.Type().String()
204219
return []corev1.Volume{
205220
{
206-
Name: componentType,
221+
Name: logVolume(componentType),
222+
VolumeSource: corev1.VolumeSource{
223+
PersistentVolumeClaim: &corev1.PersistentVolumeClaimVolumeSource{
224+
ClaimName: logVolume(componentType),
225+
},
226+
},
227+
},
228+
{
229+
Name: dataVolume(componentType),
207230
VolumeSource: corev1.VolumeSource{
208231
PersistentVolumeClaim: &corev1.PersistentVolumeClaimVolumeSource{
209-
ClaimName: componentType,
232+
ClaimName: dataVolume(componentType),
210233
},
211234
},
212235
},
213236
}
214237
}
215238

239+
func (c *storagedComponent) GenerateVolumeClaim() ([]corev1.PersistentVolumeClaim, error) {
240+
componentType := c.Type().String()
241+
logSC, logRes := c.GetLogStorageClass(), c.GetLogStorageResources()
242+
logReq, err := parseStorageRequest(logRes.Requests)
243+
if err != nil {
244+
return nil, fmt.Errorf("cannot parse storage request for %s log volume, error: %v", componentType, err)
245+
}
246+
247+
datSC, dataRes := c.GetDataStorageClass(), c.GetDataStorageResources()
248+
dataReq, err := parseStorageRequest(dataRes.Requests)
249+
if err != nil {
250+
return nil, fmt.Errorf("cannot parse storage request for %s data volume, error: %v", componentType, err)
251+
}
252+
253+
claims := []corev1.PersistentVolumeClaim{
254+
{
255+
ObjectMeta: metav1.ObjectMeta{
256+
Name: logVolume(componentType),
257+
},
258+
Spec: corev1.PersistentVolumeClaimSpec{
259+
AccessModes: []corev1.PersistentVolumeAccessMode{corev1.ReadWriteOnce},
260+
Resources: logReq,
261+
StorageClassName: logSC,
262+
},
263+
},
264+
{
265+
ObjectMeta: metav1.ObjectMeta{
266+
Name: dataVolume(componentType),
267+
},
268+
Spec: corev1.PersistentVolumeClaimSpec{
269+
AccessModes: []corev1.PersistentVolumeAccessMode{corev1.ReadWriteOnce},
270+
Resources: dataReq,
271+
StorageClassName: datSC,
272+
},
273+
},
274+
}
275+
return claims, nil
276+
}
277+
216278
func (c *storagedComponent) GenerateWorkload(
217279
gvk schema.GroupVersionKind,
218280
cm *corev1.ConfigMap,

0 commit comments

Comments
 (0)