Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Bootstrap Companions in Kubernetes Environments (aixigo#156)
Bootstrap Companions in Kubernetes Environments This commit introduces the configuration `bootstrapping.containers` which provides a way to parse the configuration of application wide companions because the current available configuration of companions if quite limiting (Current backends, Docker and Kubernetes, offer way more options than the PREvant configuration object allows). For example, PREvant was limited to self-contained applications where each microservice only relies on interactions via network API calls (REST, database connections, messaging, etc.) With this commit PREvant is now able to deploy application companions that are more powerful than the PREvant configuration in Kubernetes backends. If `bootstrapping.containers` is defined, PREvant will start one or more containers on the infrastructure backend that are expected to generate Kubernetes manifests as output on standard out (stdout) that will be parsed by PREvant and supported are: - roles and role bindings - config maps and secrets - service accounts - persistent volume claims - services - pods, deployments, stateful sets, and jobs Then before deploying these manifests PREvant merges all objects with the objects generated from the HTTP request payload. Thus you can add or overwrite configurations. For example, you can change the image used or an environment variable. If you overwrite any configuration the companion will be turned into an instance (as PREvant did before). Ingresses won't be deployed if the bootstrap container outputs one of these. Instead they will be parsed and if they use the ingress class `nginx` they will be transformed into Traefik ingresses and middlewares so that the microservices will be available via web interface. This approach make aixigo#143 obsolete and fixes aixigo#123 and contributes to aixigo#146. This commit also ensures that there are less requests to the Kubernetes API, improving the performance.
- Loading branch information