@@ -276,13 +276,16 @@ func (c *Cluster) tolerations(tolerationsSpec *[]v1.Toleration) []v1.Toleration
276
276
}
277
277
}
278
278
279
- func (c * Cluster ) generatePodTemplate (resourceRequirements * v1.ResourceRequirements ,
279
+ func (c * Cluster ) generatePodTemplate (
280
+ resourceRequirements * v1.ResourceRequirements ,
281
+ resourceRequirementsScalyrSidecar * v1.ResourceRequirements ,
280
282
tolerationsSpec * []v1.Toleration ,
281
283
pgParameters * spec.PostgresqlParam ,
282
284
patroniParameters * spec.Patroni ,
283
285
cloneDescription * spec.CloneDescription ,
284
286
dockerImage * string ,
285
- customPodEnvVars map [string ]string ) * v1.PodTemplateSpec {
287
+ customPodEnvVars map [string ]string ,
288
+ ) * v1.PodTemplateSpec {
286
289
spiloConfiguration := c .generateSpiloJSONConfiguration (pgParameters , patroniParameters )
287
290
288
291
envVars := []v1.EnvVar {
@@ -391,6 +394,12 @@ func (c *Cluster) generatePodTemplate(resourceRequirements *v1.ResourceRequireme
391
394
if dockerImage != nil && * dockerImage != "" {
392
395
containerImage = * dockerImage
393
396
}
397
+ volumeMounts := []v1.VolumeMount {
398
+ {
399
+ Name : constants .DataVolumeName ,
400
+ MountPath : constants .PostgresDataMount , //TODO: fetch from manifest
401
+ },
402
+ }
394
403
container := v1.Container {
395
404
Name : c .containerName (),
396
405
Image : containerImage ,
@@ -410,13 +419,8 @@ func (c *Cluster) generatePodTemplate(resourceRequirements *v1.ResourceRequireme
410
419
Protocol : v1 .ProtocolTCP ,
411
420
},
412
421
},
413
- VolumeMounts : []v1.VolumeMount {
414
- {
415
- Name : constants .DataVolumeName ,
416
- MountPath : constants .PostgresDataMount , //TODO: fetch from manifesto
417
- },
418
- },
419
- Env : envVars ,
422
+ VolumeMounts : volumeMounts ,
423
+ Env : envVars ,
420
424
SecurityContext : & v1.SecurityContext {
421
425
Privileged : & privilegedMode ,
422
426
},
@@ -431,6 +435,33 @@ func (c *Cluster) generatePodTemplate(resourceRequirements *v1.ResourceRequireme
431
435
Tolerations : c .tolerations (tolerationsSpec ),
432
436
}
433
437
438
+ if c .OpConfig .ScalyrAPIKey != "" && c .OpConfig .ScalyrImage != "" {
439
+ podSpec .Containers = append (
440
+ podSpec .Containers ,
441
+ v1.Container {
442
+ Name : "scalyr-sidecar" ,
443
+ Image : c .OpConfig .ScalyrImage ,
444
+ ImagePullPolicy : v1 .PullIfNotPresent ,
445
+ Resources : * resourceRequirementsScalyrSidecar ,
446
+ VolumeMounts : volumeMounts ,
447
+ Env : []v1.EnvVar {
448
+ {
449
+ Name : "SCALYR_API_KEY" ,
450
+ Value : c .OpConfig .ScalyrAPIKey ,
451
+ },
452
+ {
453
+ Name : "SCALYR_SERVER_HOST" ,
454
+ Value : c .Name ,
455
+ },
456
+ {
457
+ Name : "SCALYR_SERVER_URL" ,
458
+ Value : c .OpConfig .ScalyrServerURL ,
459
+ },
460
+ },
461
+ },
462
+ )
463
+ }
464
+
434
465
template := v1.PodTemplateSpec {
435
466
ObjectMeta : metav1.ObjectMeta {
436
467
Labels : c .labelsSet (),
@@ -445,11 +476,35 @@ func (c *Cluster) generatePodTemplate(resourceRequirements *v1.ResourceRequireme
445
476
return & template
446
477
}
447
478
479
+ func makeResources (cpuRequest , memoryRequest , cpuLimit , memoryLimit string ) spec.Resources {
480
+ return spec.Resources {
481
+ ResourceRequest : spec.ResourceDescription {
482
+ CPU : cpuRequest ,
483
+ Memory : memoryRequest ,
484
+ },
485
+ ResourceLimits : spec.ResourceDescription {
486
+ CPU : cpuLimit ,
487
+ Memory : memoryLimit ,
488
+ },
489
+ }
490
+ }
491
+
448
492
func (c * Cluster ) generateStatefulSet (spec * spec.PostgresSpec ) (* v1beta1.StatefulSet , error ) {
449
493
resourceRequirements , err := c .resourceRequirements (spec .Resources )
450
494
if err != nil {
451
495
return nil , fmt .Errorf ("could not generate resource requirements: %v" , err )
452
496
}
497
+ resourceRequirementsScalyrSidecar , err := c .resourceRequirements (
498
+ makeResources (
499
+ c .OpConfig .ScalyrCPURequest ,
500
+ c .OpConfig .ScalyrMemoryRequest ,
501
+ c .OpConfig .ScalyrCPULimit ,
502
+ c .OpConfig .ScalyrMemoryLimit ,
503
+ ),
504
+ )
505
+ if err != nil {
506
+ return nil , fmt .Errorf ("could not generate Scalyr sidecar resource requirements: %v" , err )
507
+ }
453
508
var customPodEnvVars map [string ]string
454
509
if c .OpConfig .PodEnvironmentConfigMap != "" {
455
510
if cm , err := c .KubeClient .ConfigMaps (c .Namespace ).Get (c .OpConfig .PodEnvironmentConfigMap , metav1.GetOptions {}); err != nil {
@@ -458,7 +513,7 @@ func (c *Cluster) generateStatefulSet(spec *spec.PostgresSpec) (*v1beta1.Statefu
458
513
customPodEnvVars = cm .Data
459
514
}
460
515
}
461
- podTemplate := c .generatePodTemplate (resourceRequirements , & spec .Tolerations , & spec .PostgresqlParam , & spec .Patroni , & spec .Clone , & spec .DockerImage , customPodEnvVars )
516
+ podTemplate := c .generatePodTemplate (resourceRequirements , resourceRequirementsScalyrSidecar , & spec .Tolerations , & spec .PostgresqlParam , & spec .Patroni , & spec .Clone , & spec .DockerImage , customPodEnvVars )
462
517
volumeClaimTemplate , err := generatePersistentVolumeClaimTemplate (spec .Volume .Size , spec .Volume .StorageClass )
463
518
if err != nil {
464
519
return nil , fmt .Errorf ("could not generate volume claim template: %v" , err )
0 commit comments