blob: d650bfe4ee07df92e9b28d753c277add2d85c2be [file] [log] [blame]
gioc9161872024-04-21 10:46:35 +04001# Default values for openproject.
2# This is a YAML-formatted file.
3# Declare variables to be passed into your templates.
4
5## Enable development mode.
6##
7## Set this to true if you want are working on the charts locally using
8## local clusters such as minikube or kind.
9##
10## This will set `OPENPROJECT_HTTPS` to `false` and avoid using volumes for
11## tmp folders as (permissions for) these don't work correctly in local clusters.
12develop: false
13
14global:
15 ## Credentials to fetch images from private registry.
16 ##
17 ## Ref: https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/
18 ##
19 ## imagePullSecrets:
20 ## - myRegistryKeySecretName
21 #
22 imagePullSecrets: []
23
24## Affinity for pod assignment.
25##
26## Ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity
27#
28affinity: {}
29
30## Define additional environment variables.
31##
32## You can get a list of all environment variables when executing:
33## "RAILS_ENV=production bundle exec rake setting:available_envs"
34##
35## environment:
36## OPENPROJECT_ATTACHMENT__MAX__SIZE: 5120
37#
38environment: {}
39
40## Provide a name to substitute for the full names of resources.
41#
42fullnameOverride: ""
43
44##
45# Override the cluster domain name used in templating
46clusterDomain: "cluster.local"
47
48## Define settings for wait-for-db init-container
49#
50initdb:
51 image:
52 ## Define docker registry address.
53 #
54 registry: "docker.io"
55
56 ## Define repository string.
57 #
58 repository: "postgres"
59
60 # Postgres version to use
61 tag: 13
62
63 ## Define a imagePullPolicy.
64 ##
65 ## Ref.: https://kubernetes.io/docs/concepts/containers/images/#image-pull-policy
66 ##
67 ## "IfNotPresent" => The image is pulled only if it is not already present locally.
68 ## "Always" => Every time the kubelet launches a container, the kubelet queries the container image registry to
69 ## resolve the name to an image digest. If the kubelet has a container image with that exact digest cached
70 ## locally, the kubelet uses its cached image; otherwise, the kubelet pulls the image with the resolved
71 ## digest, and uses that image to launch the container.
72 ## "Never" => The kubelet does not try fetching the image. If the image is somehow already present locally, the
73 ## kubelet attempts to start the container; otherwise, startup fails
74 #
75 imagePullPolicy: "Always"
76
77 resources:
78 limits:
79 memory: "200Mi"
80 requests:
81 memory: "200Mi"
82
83## Define and create Kubernetes Service.
84##
85## Ref.: https://kubernetes.io/docs/concepts/services-networking/ingress/
86#
87ingress:
88 ## Whether to enable session affinity or not. It is required by ingress.
89 #
90 enabled: true
91
92 ## Define the name of the ingress class.
93 ##
94 ## If left empty, the cluster default is used.
95 ## Set this if you need a specific class, for instance `nginx`.
96 #
97 ingressClassName:
98
99 ## Define custom ingress annotations:
100 ##
101 ## Example:
102 ## annotations:
103 ## nginx.ingress.kubernetes.io/rewrite-target: /
104 annotations: {}
105
106 ## Define the Fully Qualified Domain Name (FQDN) where OpenProject should be reachable.
107 #
108 host: "openproject.example.com"
109
110 ## Define the path for OpenProject on your host.
111 #
112 path: /
113
114 ## Each path in an Ingress is required to have a corresponding path type. Paths that do not include an explicit
115 ## pathType will fail validation. There are three supported path types:
116 ##
117 ## "ImplementationSpecific" => With this path type, matching is up to the IngressClass. Implementations can treat this
118 ## as a separate pathType or treat it identically to Prefix or Exact path types.
119 ## "Exact" => Matches the URL path exactly and with case sensitivity.
120 ## "Prefix" => Matches based on a URL path prefix split by /.
121 ##
122 ## Ref.: https://kubernetes.io/docs/concepts/services-networking/ingress/#path-types
123 #
124 pathType: "Prefix"
125
126 ## You can secure an Ingress by specifying a Secret that contains a TLS private key and certificate.
127 ##
128 ## Ref.: https://kubernetes.io/docs/concepts/services-networking/ingress/#tls
129 #
130 tls:
131 ## Whether to enable tls or not.
132 #
133 enabled: true
134
135 ## The name of the kubernetes secret which contains a TLS private key and certificate.
136 ## Hint: This secret is not created by this chart and must be provided.
137 ##
138 #
139 secretName: ""
140
141egress:
142 tls:
143 rootCA:
144 configMap: ""
145 fileName: ""
146
147## Define image setting
148#
149image:
150 ## Define docker registry address.
151 #
152 registry: "docker.io"
153
154 ## Define repository string.
155 #
156 repository: "openproject/community"
157
158 ## Define a imagePullPolicy.
159 ##
160 ## Ref.: https://kubernetes.io/docs/concepts/containers/images/#image-pull-policy
161 ##
162 ## "IfNotPresent" => The image is pulled only if it is not already present locally.
163 ## "Always" => Every time the kubelet launches a container, the kubelet queries the container image registry to
164 ## resolve the name to an image digest. If the kubelet has a container image with that exact digest cached
165 ## locally, the kubelet uses its cached image; otherwise, the kubelet pulls the image with the resolved
166 ## digest, and uses that image to launch the container.
167 ## "Never" => The kubelet does not try fetching the image. If the image is somehow already present locally, the
168 ## kubelet attempts to start the container; otherwise, startup fails
169 #
170 imagePullPolicy: "Always"
171
172 ## Define image tag.
173 ## For the helm chart, use the `-slim` variants as the all-in-one container is not compatible
174 ## with some of the options (non-root execution, password splitting, etc.) and is inefficient for using in helm
175 ## due to embedded a number of services.
176 tag: "13-slim"
177
178 ## Define image sha256 - mutual exclusive with image tag.
179 ## The sha256 has a higher precedence than
180 # sha256:
181
182## Credentials to fetch images from private registry.
183##
184## Ref: https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/
185##
186## imagePullSecrets:
187## - myRegistryKeySecretName
188#
189imagePullSecrets: []
190
191## Configure memcached settings.
192#
193memcached:
194 ## When set to true, a memcached will be deployed into current namespace, when false you have to provide your own
195 ## memcached instance.
196 #
197 bundled: true
198
199 global:
200 containerSecurityContext:
201 enabled: true
202 allowPrivilegeEscalation: false
203 capabilities:
204 drop:
205 - "ALL"
206 seccompProfile:
207 type: "RuntimeDefault"
208 readOnlyRootFilesystem: true
209 runAsNonRoot: true
210
211 ## When "bundled" is set to false, you need to define the memcached connection details.
212 #
213 connection:
214 host:
215 port:
216
217## String to partially override release name.
218#
219nameOverride: ""
220
221## Node labels for pod assignment.
222##
223## Ref: https://kubernetes.io/docs/user-guide/node-selection/
224#
225nodeSelector: {}
226
227## Deployment strategy
228##
229## Ref: https://kubernetes.io/docs/concepts/workloads/controllers/deployment/#strategy
230#
231strategy:
232 ## Re-create pod during deployments by default since a writable volume is mounted.
233 ## Should your cluster support WriteMany volumes, you can change this
234 ## to `RollingUpdate`.
235 type: "Recreate"
236
237# Define the workers to run, their queues, replicas, strategy, and resources
238workers:
239 default:
240 queues: ""
241 replicas: 1
242 strategy:
243 type: "Recreate"
244 resources:
245 requests:
246 memory: "512Mi"
247 cpu: "250m"
248 limits:
249 memory: "4Gi"
250 cpu: "4"
251
252## OpenProject related settings.
253##
254## Ref.: https://www.openproject.org/docs/installation-and-operations/configuration/environment/#supported-environment-variables
255#
256openproject:
257 ## Enable https in backend response.
258 #
259 https: true
260
261 ## Define the host, defaults to value of "ingress.host".
262 #
263 host:
264
265 ## Enable HSTS.
266 #
267 hsts: true
268
269 ## Define Cache settings.
270 #
271 cache:
272 store: "memcache"
273
274 extraEnvVarsSecret: ""
275
276 ## Define the language to seed the instance in
277 #
278 seed_locale: "en"
279
280 ##
281 # Let OpenProject run in a subdirectory,
282 # e.g., https://exameple.com/openproject
283 # specify with leading slash, but without trailing slash
284 # e.g., /openproject
285 railsRelativeUrlRoot:
286
287 ## Define admin user details
288 # only applicable on first installation
289 # Note: Only applicable for versions >= 13.0
290 admin_user:
291 password: "admin"
292 password_reset: "true"
293 name: "OpenProject Admin"
294 mail: "admin@example.net"
295
296 ## Define OpenID Connect providers
297 oidc:
298 enabled: false
299 provider: "Keycloak"
300 displayName: "Keycloak"
301 host: ""
302 identifier: ""
303 secret: ""
304 authorizationEndpoint: ""
305 tokenEndpoint: ""
306 userinfoEndpoint: ""
307 endSessionEndpoint: ""
308 scope: "[openid]"
309
310 # Optional attribute mappings from the id token
311 attribute_map: {}
312
313 ## To avoid having sensitive credentials in your values.yaml, the preferred way is to
314 ## use an existing secret containing the OIDC compatible access credentials.
315 ## Specify the name of this existing secret here.
316 existingSecret:
317
318 ## In case your secret does not use the default keys in the secret, you can adjust them here.
319 secretKeys:
320 identifier: "clientId"
321 secret: "clientSecret"
322
323 # Allows usage of sealed-secret for `identifier` and `secret` values.
324 # Special use case for use in setups where heml template `lookup` function is not available.
325 # Ref: https://github.com/argoproj/argo-cd/issues/5202
326 #
327 extraOidcSealedSecret:
328
329 ## Modify PostgreSQL statement timout.
330 ## Increase in case you get errors such as "ERROR: canceling statement due to statement timeout".
331 ##
332 ## Ref.: https://www.openproject.org/docs/installation-and-operations/configuration/environment/#postgresql-statement_timeout
333 #
334 postgresStatementTimeout: 120s
335
336 ## Whether or not to use ephemeral volumes for /app/tmp and /tmp.
337 ## Falls back to a sensible default if undefined.
338 #
339 useTmpVolumes:
340
341 ## customize the tmp storage mount sizes
342 tmpVolumesStorage: "5Gi"
343
344## Whether to allocate persistent volume disk for the data directory.
345## In case of node failure, the node data directory will still persist.
346##
347## Ref.: https://kubernetes.io/docs/concepts/storage/persistent-volumes/
348#
349persistence:
350 enabled: true
351
352 ## Define the volume access modes:
353 ##
354 ## "ReadWriteOnce" => The volume can be mounted as read-write by a single node. ReadWriteOnce access mode still can
355 ## allow multiple pods to access the volume when the pods are running on the same node.
356 ## "ReadOnlyMany" => The volume can be mounted as read-only by many nodes.
357 ## "ReadWriteMany" => The volume can be mounted as read-write by many nodes.
358 ## "ReadWriteOncePod" => The volume can be mounted as read-write by a single Pod. Use ReadWriteOncePod access mode if
359 ## you want to ensure that only one pod across whole cluster can read that PVC or write to it.
360 #
361 accessModes:
362 - "ReadWriteMany"
363
364 ## Define custom storage (PVC) annotations:
365 ##
366 annotations: {}
367
368 ## Define the volume size.
369 #
370 size: "1Gi"
371
372 ## Define the class of PV.
373 storageClassName:
374
375## Whether to use an S3-compatible object storage to store OpenProject attachments.
376## If this is enabled, files will NOT be stored in the mounted volume configured in `persistence` above.
377## The volume will not be used at all, so it `persistence.enabled` should be set to `false` in this case.
378##
379## Ref.: https://www.openproject.org/docs/installation-and-operations/configuration/#attachments-storage
380#
381s3:
382 enabled: false
383
384 auth:
385 # Provide the accessKeyId and secret in plain values
386 # We recommend to use the existing
387 Secret option instead
388 accessKeyId:
389 secretAccessKey:
390
391 ## To avoid having sensitive credentials in your values.yaml, the preferred way is to
392 ## use an existing secret containing the S3 compatible access credentials.
393 ## Specify the name of this existing secret here.
394 existingSecret:
395
396 ## In case your secret does not use the default keys in the secret, you can adjust them here.
397 secretKeys:
398 accessKeyId: "accessKeyId"
399 secretAccessKey: "secretAccessKey"
400
401 region:
402 bucketName:
403
404 ## Remove or leave empty to use default AWS S3 endpoint
405 #
406 endpoint:
407 host:
408 port:
409 pathStyle: false
410 signatureVersion: 4
411 useIamProfile: false
412 # Some providers do not properly support signature v4 streaming (e.g. Scaleway)
413 enableSignatureV4Streaming: true
414
415 ## If enabled, upload files directly to S3 from the browser instead of going through OpenProject.
416 ## May not be supported by providers other than AWS S3 itself.
417 ##
418 ## Ref.: https://www.openproject.org/docs/installation-and-operations/configuration/#direct-uploads
419 #
420 directUploads: true
421
422 ## You can always override these options via the environment, for instance:
423 ##
424 ## environment:
425 ## OPENPROJECT_FOG_CREDENTIALS_REGION: 'us-east-1'
426 ##
427 ## Ref.: https://www.openproject.org/docs/installation-and-operations/configuration/#attachments-storage
428
429## Define custom pod annotations.
430#
431podAnnotations: {}
432
433## Pod Security Context.
434##
435## We use the default value of `1000` for `fsGroup` since that
436## is the app user's group ID and if the user wants to be able to
437## write to `/var/openproject/assets` the mounted folder needs to
438## have a matching gid.
439##
440## Ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/
441#
442podSecurityContext:
443 enabled: true
444 fsGroup: 1000
445
446## Container security context using as a default best practice values
447## granting minimum privileges.
448##
449## Ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/
450#
451containerSecurityContext:
452 enabled: true
453 runAsUser: 1000
454 runAsGroup: 1000
455 allowPrivilegeEscalation: false
456 capabilities:
457 drop:
458 - "ALL"
459 seccompProfile:
460 type: "RuntimeDefault"
461 readOnlyRootFilesystem: true
462 runAsNonRoot: true
463
464## Configure PostgreSQL settings.
465#
466postgresql:
467 ## When set to true, a postgres server will be deployed into current namespace, when false you have to provide your
468 ## own database instance.
469 #
470 bundled: true
471
472 global:
473 containerSecurityContext:
474 enabled: true
475 allowPrivilegeEscalation: false
476 capabilities:
477 drop:
478 - "ALL"
479 seccompProfile:
480 type: "RuntimeDefault"
481 readOnlyRootFilesystem: true
482 runAsNonRoot: true
483
484 ## When "bundled" is set to false, you need to define the database connection details.
485 #
486 connection:
487 host:
488 port:
489
490 ## Database auth details.
491 #
492 auth:
493 ## To avoid having sensitive credentials in your values.yaml, the preferred way to provide a password
494 ## is to use an existing secret containing the PostgreSQL credentials.
495 ## Specify the name of this existing secret here.
496 ##
497 ## If neither an existing secret nor passwords are defined, a secret is generated automatically.
498 ##
499 ## The postgresql chart will create this secret (the name of which ends with `-postgresql` by default)
500 ## with generated user and admin passwords.
501 ## If you want to see the base64 encoded passwords you can output the secret like this:
502 ##
503 ## ```
504 ## kubectl get secret -n <namespace> openproject-postgresql -o yaml | grep password
505 ## ```
506 #
507 existingSecret: ""
508
509 ## In case your secret does not use the default keys in the secret, you can adjust them here.
510 ##
511 ## secretKeys:
512 ## adminPasswordKey: "postgres-password"
513 ## userPasswordKey: "password"
514
515 ## Database username.
516 #
517 username: "openproject"
518
519 ## Database name.
520 #
521 database: "openproject"
522
523 ## If you are not using a Kubernetes secret to store your postgresql credentials,
524 ## you can specify them here if you really must. Please handle with care!
525
526 ## Database password.
527 #
528 password: ""
529
530 ## Database root password.
531 #
532 postgresPassword: ""
533
534 ## When using the "bundled" postgresql chart, you can configure the storageClass and other settings similar to this
535 ## Ref: https://github.com/bitnami/charts/blob/main/bitnami/postgresql/values.yaml
536 #
537 # global:
538 # storageClass: my-storage-class-name
539
540## Configure liveness and readiness probes.
541##
542## Ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/
543#
544probes:
545 ## Configure liveness probe.
546 ##
547 ## If the liveness probe fails, the container will be restarted.
548 #
549 liveness:
550 ## Whether to enable liveness probes.
551 #
552 enabled: true
553
554 ## Number of seconds after the container has started before startup, liveness or readiness probes are initiated.
555 ## Defaults to 0 seconds. Minimum value is 0.
556 #
557 initialDelaySeconds: 120
558
559 ## Number of seconds after which the probe times out. Defaults to 1 second. Minimum value is 1.
560 #
561 timeoutSeconds: 3
562
563 ## How often (in seconds) to perform the probe. Default to 10 seconds. Minimum value is 1.
564 #
565 periodSeconds: 30
566
567 ## When a probe fails, Kubernetes will try failureThreshold times before giving up. Giving up in case of liveness
568 ## probe means restarting the container. In case of readiness probe the Pod will be marked Unready. Defaults to 3.
569 ## Minimum value is 1.
570 #
571 failureThreshold: 3
572
573 ## Minimum consecutive successes for the probe to be considered successful after having failed. Defaults to 1.
574 ## Must be 1 for liveness and startup Probes. Minimum value is 1.
575 #
576 successThreshold: 1
577
578 ## Configure readiness probe.
579 ##
580 ## If the readiness probe failes, no traffic will be routed to the container.
581 #
582 readiness:
583 ## Whether to enable liveness probes.
584 #
585 enabled: true
586
587 ## Number of seconds after the container has started before startup, liveness or readiness probes are initiated.
588 ## Defaults to 0 seconds. Minimum value is 0.
589 #
590 initialDelaySeconds: 30
591
592 ## Number of seconds after which the probe times out. Defaults to 1 second. Minimum value is 1.
593 #
594 timeoutSeconds: 3
595
596 ## How often (in seconds) to perform the probe. Default to 10 seconds. Minimum value is 1.
597 #
598 periodSeconds: 15
599
600 ## When a probe fails, Kubernetes will try failureThreshold times before giving up. Giving up in case of liveness
601 ## probe means restarting the container. In case of readiness probe the Pod will be marked Unready. Defaults to 3.
602 ## Minimum value is 1.
603 #
604 failureThreshold: 30
605
606 ## Minimum consecutive successes for the probe to be considered successful after having failed. Defaults to 1.
607 ## Must be 1 for liveness and startup Probes. Minimum value is 1.
608 #
609 successThreshold: 1
610
611## Number of OpenProject web process replicas.
612#
613replicaCount: 1
614
615## Number of OpenProject background worker process replicas.
616#
617backgroundReplicaCount: 1
618
619## Configure resource requests and limits.
620##
621## http://kubernetes.io/docs/user-guide/compute-resources/
622#
623resources:
624 requests:
625 memory: "512Mi"
626 cpu: "250m"
627 limits:
628 memory: "4Gi"
629 cpu: "4"
630
631## Define and create Kubernetes Service.
632##
633## Ref.: https://kubernetes.io/docs/concepts/services-networking/service
634#
635service:
636 ## Whether to enable session affinity or not. It is required by ingress.
637 #
638 enabled: true
639
640 ## Choose the kind of Service:
641 ##
642 ## "ClusterIP" => Exposes the Service on a cluster-internal IP. Choosing this value makes the Service only reachable
643 ## from within the cluster. This is the default that is used if you don't explicitly specify a type for
644 ## a Service.
645 ## "NodePort" => Exposes the Service on each Node's IP at a static port (the NodePort). To make the node port
646 ## available, Kubernetes sets up a cluster IP address, the same as if you had requested a Service of
647 ## type: ClusterIP.
648 ## "LoadBalancer" => Exposes the Service externally using a cloud provider's load balancer.
649 ##
650 ## Ref.: https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services-service-types
651 #
652 type: "ClusterIP"
653
654 ## Define the ports of Service.
655 ## You can set the port value to an arbitrary value, it will map the container port by name.
656 ##
657 ## Custom NodePort example:
658 ## ports:
659 ## http:
660 ## port: 8080
661 ## protocol: "TCP"
662 ## nodePort: "38080"
663 #
664 ports:
665 http:
666 containerPort: 8080
667 port: 8080
668 protocol: "TCP"
669
670 ## Configure session affinity for to hit the same backend for the period specified in `timeoutSeconds`.
671 ##
672 ## Ref.: https://kubernetes.io/docs/reference/networking/virtual-ips/#session-affinity
673 #
674 sessionAffinity:
675 ## Whether to enable session affinity or not.
676 #
677 enabled: false
678 ## The session duration in seconds.
679 #
680 timeoutSeconds: 10800
681
682## Define Service Accounts for Pods.
683##
684## Ref.: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/
685#
686serviceAccount:
687 ## Whether to create service account.
688 #
689 create: true
690
691 ## Define custom service account annotations.
692 #
693 annotations: {}
694
695# Options for the seeder job
696seederJob:
697 ## Define custom seeder job annotations.
698 #
699 annotations: {}
700
701## Tolerations for pod assignment.
702##
703## Ref: https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/
704#
705tolerations: []