...
- init-container
Init containers are exactly like regular containers, except:
- Init containers always run to completion.
- Each init container must complete successfully before the next one starts.
Since our application container would not be running the before the init-container so we cant invoke any endpoint to create a resource and we dont want to go with DB related script(SQL) to create a resource (insert a row in the database) so I am not exploring this further for this use case. - k8s hooks
- postStart hook : It runsonly once and if it fails the container is unable to start. No provision to restart / retry. Events in Spring
We can use the ApplicationReadyEvent which is published when the application is ready to service requests.
We can listen to this event , which is thrown by the SpringApplication itself and then execute some code (which is creating a dataspace in our scenario)
ExampleCode Block language java title ApplicationReadyEvent @EventListener(ApplicationReadyEvent.class) public void initializeNcmp() { log.info("Initializing NCMP when the ApplicationReadyEvent is received"); try { cpsAdminService.createDataspace("NCMP-CmHandle-Operational-Data"); } catch (final AlreadyDefinedException ex) { log.info("Already defined : {} ", ex.getMessage()); } catch (final Exception ex) { log.warn("Failed to create dataspace, cause : {}", ex.getMessage()); } }
- Sidecar container
- Wait for the readiness check of the main container to pass and then execute the script to create a dataspace.
- Looks like we are unable to wait for the other container readiness check and then execute the command. (Connection Refused ) - need more analysis on this.
- If we are unable to wait for the main container to start then dont go ahead with this approach (as all the containers run in parallel)
Summary
Sr No. | Approach | Analysis | Comments |
---|---|---|---|
1 | init-container | Would require dependency on SQL (as app container doesn't come up until this point) | |
2 | k8s-hooks | PostStart hook : executed once, if failed we cant retry. | |
3 | Events in Spring | Application specific solution. We can listen the event and trigger the action. | |
4 | Sidecar Container | Both container runs in parallel (if we cant establish relationship i.e sidecar container wait for main container to start then difficult to execute command on a non ready container) |
References
...