Kubernetes deployment
This chart bootstraps an Dossier Organizer on a Kubernetes cluster using the Helm package manager.
Dossier Organizer is a scalable web based solution for viewing and structuring documents, and other media. The structure and relations between elements can be configured freely to match your needs. Fusion provides various features to modify paged documents without altering the original data.
As you can see, the chart provisions four deployments (subchart names in brackets):
- Dossier Organizer backend ("organizer")
- jadice web viewer ("viewer")
Sample configuration
Prior to installing the Helm chart, you need to provide some required parameters. A minimal values.yaml with these required parameters looks like this:
my-values.yaml
##
# Global configuration to be used by all sub components
##
global:
imageRegistry: "registry.jadice.com" # Global Docker image registry
# Two external ingress configuration have defined for your organizer application.
urls:
fusion:
externalUrl: https://my-dossier-organizer.com
viewer:
externalUrl: https://my-dossier-organizer-viewer.com
##
# Secrets for sensitive information:
# -> to use encrypted 'sealed-secrets' see: https://github.com/bitnami-labs/sealed-secrets
##
secrets:
useSealedSecrets: true
## Secrets for the DB to store fusion collections in. (this section depends on the configured DB - default is MariaDB)
db:
username: "***"
password: "***"
rootPassword: "***"
replicationPassword: "***"
# Depending on your configuration of secrets.useSealedSecrets this config has to be configured differently.
# If you don't use sealed secrets the registry credentials can be put here in the fields 'server', 'username' and
# 'password'.
# If you use sealed secrets you have to create a docker config JSON string, seal it and put it in the
# 'dockerconfigjson' field.
imageRegistry:
# Option 1:
server: "***"
username: "***"
password: "***"
# Option 2:
dockerconfigjson: "***"
##
# Organizer specific configuration
##
organizer:
ingress:
# insert your ingress config here.
resources:
# insert your resources config here.
# These settings are dependent on the configuration of your OAuth provider. The credentials have to be created beforehand.
oauth:
enabled: true
clientId: "***"
scope: "***"
issuer: "***"
appIdUri: "***"
redirectUrl: "***"
##
# Viewer specific configuration
##
viewer:
ingress:
# insert your ingress config here.
resources:
# insert your resources config here.
Install the helm chart with your values applied:
$ helm repo add levigo https://artifacts.jadice.com/repository/helm-charts/ --username <username> --password <password>
$ helm upgrade --install --namespace my-namespace --values my-values.yaml my-release levigo/fusion-dossier-organizer
Prerequisites
Kubernetes
- Kubernetes 1.14+
- Helm 3.1.0+
- (optional but recommended: sealed secrets )
Container Image Access
Because the images used in this chart are from a private container registry, you need to have access to the container
registry registry.jadice.com
or access to a proxy of the same registry.
Information on how to provide login credentials as a secret can be found here: image pull secrets.
All the deployments have an individual configurable registry or image name and tag. If the images are not provided directly through the jadice registry you can configure the these settings through:
# Global override for all images
global.imageRegistry: registry.jadice.com
#individual overrides for all images
organizer:
image:
name: fusion-output-organizer
registry: registry.jadice.com
pullPolicy: IfNotPresent
tag: ""
initContainer:
repository: flyway/flyway
registry: registry.jadice.com
pullPolicy: IfNotPresent
tag: ""
viewer:
image:
repository: neverpile-fusion-jwt-viewer
registry: registry.jadice.com
pullPolicy: IfNotPresent
tag: ""
Installing the Chart
To install the chart with the release name my-release
from levigo helm repository:
$ helm repo add levigo https://artifacts.jadice.com/repository/helm-charts/ --username <username> --password <password>
$ helm install --namespace my-namespace --values my-values.yaml my-release levigo/fusion-dossier-organizer
The command deploys fusion-dossier-organizer on the Kubernetes cluster in the default configuration. The configuration section lists the parameters that can be configured during installation.
Uninstalling the Chart
To uninstall/delete the my-release
deployment:
$ helm delete my-release
The command removes all the Kubernetes components associated with the chart and deletes the release.
Configuration
The following tables lists the configurable parameters of the fusion-dossier-organizer chart and their default values.
Universal service settings
Let's start with universal settings for Kubernetes. These can be applied to every service in the values file.
The <service>
placeholder has to be replaced with a deployed kubernetes service alias like organizer
, viewer
, etc.
these Aliases can be found in the chart.yaml
and as prefix in the values file.
Parameter | Description |
---|---|
<service>.resources.requests.cpu | CPU units for the service to be allocated initially. |
<service>.resources.requests.memory | Memory size for the service to be allocated initially. |
<service>.resources.limits.cpu | Maximum CPU units that can be used by the service. |
<service>.resources.limits.memory | Maximum Memory size that can be used by the service. |
<service>.ingress.enabled | Enable / Disable the ingress for a service. In order for this service to work, user access is needed, hence some kind of access for an operator has to be provided. |
<service>.ingress.annotations | Additional annotations for configuring the ingress. |
<service>.ingress.hosts | The hostname of the service and eventual path rewrites. |
<service>.ingress.tls | For configuring the corresponding TLS secrets of the previously defined hostnames. |
<service>.ingress.ingressClassName | The ingress class name. |
<service>.management.endpoints.web.exposure.include | Set which endpoints are exposed. |
<service>.management.prometheus.metrics.export.enabled | Export prometheus metrics. |
<service>.management.jmx.metrics.export.enabled | Export JMX metrics. |
<service>.startupProbe.initialDelaySeconds | Initial delay of the startup probe in seconds. |
<service>.startupProbe.periodSeconds | Time between requests for the startup probe in seconds. |
<service>.startupProbe.timeoutSeconds | Maximum response time for the startup probe in seconds. |
<service>.startupProbe.successThreshold | How often a startup probe has to succeed for the pod to be considered healthy. |
<service>.startupProbe.failureThreshold | How often a startup probe is allowed to fail before the pod is considered unhealthy. |
<service>.livenessProbe.initialDelaySeconds | Initial delay of the liveness probe in seconds. |
<service>.livenessProbe.periodSeconds | Time between requests for the liveness probe in seconds. |
<service>.livenessProbe.timeoutSeconds | Maximum response time for the liveness probe in seconds. |
<service>.livenessProbe.successThreshold | How often a liveness probe has to succeed for the pod to be considered healthy. |
<service>.livenessProbe.failureThreshold | How often a liveness probe is allowed to fail before the pod is considered unhealthy. |
<service>.readinessProbe.initialDelaySeconds | Initial delay of the readiness probe in seconds. |
<service>.readinessProbe.periodSeconds | Time between requests for the readiness probe in seconds. |
<service>.readinessProbe.timeoutSeconds | Maximum response time for the readiness probe in seconds. |
<service>.readinessProbe.successThreshold | How often a readiness probe has to succeed for the pod to be considered healthy. |
<service>.readinessProbe.failureThreshold | How often a readiness probe is allowed to fail before the pod is considered unhealthy. |
<service>.securityContext | Contains general security information for an individual pod depending on your environment5 |
<service>.podSecurityContext | Contains security information for an individual pod depending on your environment5 |
<service>.affinity | Configuration for service pod affinity6 |
<service>.nodeSelector | Configuration for service pod node selection6 |
<service>.tolerations | Configuration for service pod tolerations6 |
Secrets
The chart also supports the use of Sealed Secrets instead of regular Kubernetes secrets. Sealed Secret values can also be specified directly in the Helm values.yaml
.
Simply set secrets.useSealedSecrets
to true
and use the encrypted values for all parameters in the section "secrets".
For further information on how to encrypt secrets see table in the Sealed Secrets section.
Existing Secrets
Instead of automatically creating secrets within the Dossier Organizer deployment Helm chart you can replace these secrets with existing Kubernetes secrets created and maintained manually or by other systems.
Configuring Existing Secrets
To use an existing secret, you need to specify the name of the secret in the values.yaml
file under the secrets
section.
The name of the secret can be chosen freely but the key within the secrets have to follow our definition seen in the Sealed Secrets table
Here is an example configuration:
secrets:
imageRegistry:
existingSecret: "registry-secret"
db:
existingSecret: "database-secret"
sba:
existingSecret: "sba-secret"
loader:
existingSecret: "loader-auth-secret"
s3:
existingSecret: "s3-secret"
token:
existingSecret: "token-secret"
saveNotification:
existingSecret: "save-notification-auth-secret"
exportNotification:
existingSecret: "export-notification-auth-secret"