@@ -329,6 +329,30 @@ func createArangoSyncArgs(apiObject metav1.Object, spec api.DeploymentSpec, grou
329329 return args
330330}
331331
332+ func createExporterArgs (isSecure bool ) []string {
333+ tokenpath := filepath .Join (k8sutil .ExporterJWTVolumeMountDir , constants .SecretKeyToken )
334+ options := make ([]optionPair , 0 , 64 )
335+ options = append (options ,
336+ optionPair {"--arangodb.jwt-file" , tokenpath },
337+ optionPair {"--arangodb.endpoint" , "http://localhost:" + strconv .Itoa (k8sutil .ArangoPort )},
338+ )
339+ keyPath := filepath .Join (k8sutil .TLSKeyfileVolumeMountDir , constants .SecretTLSKeyfile )
340+ if isSecure {
341+ options = append (options ,
342+ optionPair {"--ssl.keyfile" , keyPath },
343+ )
344+ }
345+ args := make ([]string , 0 , 2 + len (options ))
346+ sort .Slice (options , func (i , j int ) bool {
347+ return options [i ].CompareTo (options [j ]) < 0
348+ })
349+ for _ , o := range options {
350+ args = append (args , o .Key + "=" + o .Value )
351+ }
352+
353+ return args
354+ }
355+
332356// createLivenessProbe creates configuration for a liveness probe of a server in the given group.
333357func (r * Resources ) createLivenessProbe (spec api.DeploymentSpec , group api.ServerGroup ) (* k8sutil.HTTPProbeConfig , error ) {
334358 groupspec := spec .GetServerGroupSpec (group )
@@ -497,6 +521,16 @@ func (r *Resources) createPodTolerations(group api.ServerGroup, groupSpec api.Se
497521 return tolerations
498522}
499523
524+ func createExporterLivenessProbe (isSecure bool ) * k8sutil.HTTPProbeConfig {
525+ probeCfg := & k8sutil.HTTPProbeConfig {
526+ LocalPath : "/" ,
527+ Port : k8sutil .ArangoExporterPort ,
528+ Secure : isSecure ,
529+ }
530+
531+ return probeCfg
532+ }
533+
500534// createPodForMember creates all Pods listed in member status
501535func (r * Resources ) createPodForMember (spec api.DeploymentSpec , memberID string , imageNotFoundOnce * sync.Once ) error {
502536 kubecli := r .context .GetKubeCli ()
@@ -604,12 +638,29 @@ func (r *Resources) createPodForMember(spec api.DeploymentSpec, memberID string,
604638 }
605639 }
606640
641+ var exporter * k8sutil.ArangodbExporterContainerConf
642+
643+ if spec .Metrics .IsEnabled () {
644+ if group .IsExportMetrics () {
645+ image := spec .GetImage ()
646+ if spec .Metrics .HasImage () {
647+ image = spec .Metrics .GetImage ()
648+ }
649+ exporter = & k8sutil.ArangodbExporterContainerConf {
650+ Args : createExporterArgs (spec .IsSecure ()),
651+ JWTTokenSecretName : spec .Metrics .GetJWTTokenSecretName (),
652+ LivenessProbe : createExporterLivenessProbe (spec .IsSecure ()),
653+ Image : image ,
654+ }
655+ }
656+ }
657+
607658 engine := spec .GetStorageEngine ().AsArangoArgument ()
608659 requireUUID := group == api .ServerGroupDBServers && m .IsInitialized
609660 finalizers := r .createPodFinalizers (group )
610661 if err := k8sutil .CreateArangodPod (kubecli , spec .IsDevelopment (), apiObject , role , m .ID , m .PodName , m .PersistentVolumeClaimName , imageInfo .ImageID , lifecycleImage , alpineImage , spec .GetImagePullPolicy (),
611662 engine , requireUUID , terminationGracePeriod , args , env , finalizers , livenessProbe , readinessProbe , tolerations , serviceAccountName , tlsKeyfileSecretName , rocksdbEncryptionSecretName ,
612- clusterJWTSecretName , groupSpec .GetNodeSelector (), groupSpec .PriorityClassName , groupSpec .Resources ); err != nil {
663+ clusterJWTSecretName , groupSpec .GetNodeSelector (), groupSpec .PriorityClassName , groupSpec .Resources , exporter ); err != nil {
613664 return maskAny (err )
614665 }
615666 log .Debug ().Str ("pod-name" , m .PodName ).Msg ("Created pod" )
0 commit comments