Kubernetes Settings Guide (TFO v17 or newer)

Modified on Tue, Oct 20 at 3:27 PM


This document introduces a guide to setting up ThinkfreeOffice HelmChart which allows clients to modify container environments in various ways through configuration files.

 

1. Common

key

default value

explanation

nameOverride 

"" (= thinkfree-office) 

The product name that serves as the basis for the resource name.

fullnameOverride 

"" 

Replace the entire prefix above with this value.
 ex) tfo→ tfo-was,tfo-mongodb 

namespaceOverride 

"" 

The namespace where resources will be created.
 If empty helm -n, the namespace provided.

global.replicaCount 

1 

The default number of Pods for all components.
 If a specific value replicaCountexists for a component, that value takes precedence. 
Only 1 or 2 is allowed for brokers. 
In production environments, instead of increasing this value, specify it per component. 
ex) broker 2, was/filter/document/relay 2 or more, mongodb/redis/redisSentinel 3

global.storageClassCheck 

true 

During installation or upgrade , verify in advance whether the PVCs (mongodb, redis, and WAS persistence) created by the chart
storageClass can actually be generated. The StorageClass specified in must exist in the cluster, and drivers must be installed for cloud 
CSI- based StorageClasses (AWS EBS / EFS , GCE  PD
 , Azure Disk/File). If the conditions are not met, the installation stops with a message containing a solution instead of the Pod remaining in Pending. 
If the installation account does not have cluster-scoped permissions to look up StorageClass and CSIDriver, falsedisable them. Even if disabled , the must-have 
falsefor components with persistence enabled .storageClass

global.image.registry 

docker.io/thinkfree 

A registry/account prefix prepended to all component images.
 ex) Docker Hub docker.io/<account>
ex) 
ECR <account-id>.dkr.ecr.<region>.amazonaws.com

global.image.tag 

"" 

Image tag for all components.
 If left empty, use the chart's appVersion(value set with the image during release).

global.image.pullPolicy 

IfNotPresent 

Image pull policy.

global.image.pullSecrets 

[] 

A list of existing imagePullSecret names.
 Attaches to all Pods (apps, initContainers, startup jobs).

global.image.registryCredentials.enabled 

false 

chart <prefix>-registrycreates imagePullSecret() using the account information below and attaches it to all Pods.
server All / username/ passwordmust be present, and if even one is missing, the installation stops.

global.image.registryCredentials.server 

<https://index.docker.io/v1/> 

Registry server address.

global.image.registryCredentials.username / password / email 

"" 

Registry account.
 Do not leave the password (access token for Docker Hub) in the values ​​file; --setpass it instead.

global.image.busybox.registry / repository / tag 

"" / busybox / 1.36 

Utility image for initContainer waiting for other services to start (was → document-word/show, filter → broker-0).

serviceAccount.create 

true 

Whether to create a Service Account per component.
 If it is a cluster pre-created by the administrator, false.

serviceAccount.annotations 

{} 

ServiceAccount annotation.
 ex) 
IRSA eks.amazonaws.com/role-arn 

serviceAccount.automountServiceAccountToken 

true 

Whether to automatically mount the ServiceAccount token to the Pod.
 Since the document server's Hazelcast Kubernetes discovery uses this token, trueit is retained.

rbac.enabled 

true 

Creates the Role/RoleBinding required for document-word / document-show to find members of the same Service (refer to pods/endpoints/services/endpointslices).
 It binds only to the document ServiceAccount and is created only when it is part of that component clusterMode: true. 
Required for cluster mode.

global:
  image:
    registry: docker.io/<account>
    tag: ""                        # empty chart appVersion
    registryCredentials:
      enabled: true
      username: <account>
      password: <token>

2. startup

It is responsible for account creation, MongoDB ReplicaSet configuration, Redis replication/Sentinel registration, HancomAdmin.SETTINGlogging ADAPTER, and recording completion markers. 
All app Pods wait-for-initrun the same image as the initContainer and wait for the completion marker.

key

default value

Corresponding environment variables

explanation

startup.image.repository / registry / tag 

office-startup-server / (global) / (global) 

 

Overwrite startup image name and global value.

startup.initTimeout 

300 

INIT_TIMEOUT 

Total job timeout (seconds).
 From DB connection to completion marker recording. 
Increase this in slow environments.

startup.mongoshTimeout 

30 

MONGOSH_TIMEOUT 

DB CLI single call timeout (seconds).

startup.waitTimeout 

600 

INIT_TIMEOUT(wait mode)

wait-for-initThe initContainer wait time (in seconds) for the app Pod
 . If exceeded, the initContainer fails and the kubelet retries.

startup.backoffLimit 

3 

 

Number of retries on job failure.

startup.ttlSecondsAfterFinished 

86400 

 

Time (in seconds) until a completed job is automatically deleted.
null If this is the case, it is not deleted.

startup.labels / annotations 

{} 

 

Job metadata.
 ex) Argo CD hook annotation

startup.podAnnotations 

{} 

 

Job Pod annotation.

startup.resources 

requests 100m / 256Mi 

 

Job container resources.
 Refer to the guide for adjustment methods was.resources.

startup.nodeSelector / tolerations / affinity 

{}/[]/{} 

 

Job Pod deployment.

startup.settings 

{} 

TFO_SETTINGS_<key> 

HancomAdmin.SETTINGUser-defined item.
 The key is case-sensitive, and the "true"/ "false"string is stored as a boolean. 
ex)wasURI: "<https://office.example.com>" 

startup.aiProviderConfig 

{} 

TFO_SETTINGS_aiProviderConfig 

The provider settings for the AI ​​relay
apiKey must be in an encrypted format.

startup.adapters 

hostStorage local 1개 

TFO_ADAPTERS_<n>_* 

List of storage adapters.
type , namerequired. paramsEach key in becomes an adapter setting, and the keys differ depending on the adapter type (see example below for hostStorage·s3). 
It is updated based on name, and the startup job fails if a required key is missing. The default is a single hostStorage adapter pointing to 
the sample document directory contained in the WAS image . Since the list is replaced entirely rather than merged, you must rewrite all adapters to be retained (including ) when writing . To store actual documents regardless of the Pod's lifespan, attach a volume to that path using ./home/thinkfree/docslocal
adapters:local
was.persistence

startup.hostStorageAdapterEnabled 

true 

TFO_ADAPTER_HOST_STORAGE_ENABLED 

Whether to use the hostStorage type adapter.
false If enabled, skip all items (used to turn them off without removing them from the list) adapters.type: hostStorage

startup.license.base64 

"" 

LICENSE_FILE 

License file contents (base64).
 The chart creates and mounts the Secret, and the startup job registers it. 
ex)--set startup.license.base64="$(base64 -w0 thinkfree.license)" 

startup.license.existingSecret 

"" 

 

The existing Secret name containing the license.
base64 Use it instead.

startup.license.existingSecretKey 

thinkfree.license 

 

The key where the license file is stored within that Secret.

startup.extraEnv 

[] 

 

A list of environment variables added to the Job and all initContainers.wait-for-init

startup:
  initTimeout: 600
  settings:
    wasURI: "https://office.example.com"  # replace with external address
    someFlag: "true"
  aiProviderConfig:
    aiProvider: openai
    model: gpt-4o
    endpoint: https://api.openai.com/v1
    apiKey: "e$..."
  adapters:                                 # Since the entire list is replaced, be sure to include the default local adapter as well.
    - type: hostStorage
      name: local
      params:
        HOST_STORAGE_NAME: docs
        HOST_STORAGE_ROOT: /home/thinkfree/docs
    - type: s3
      name: bucket
      params:
        S3_ACCESS_KEY: "AKIA..."
        S3_SECRET_ACCESS_KEY: "..."
        S3_REGION: ap-northeast-2
        S3_BUCKET: my-bucket
        S3_PREFIX: office/
  license:
    existingSecret: tfo-license           # kubectl create secret generic tfo-license --from-file=thinkfree.license

When entering the license directly as a value:

helm upgrade thinkfree ./thinkfree-office -n thinkfree -f my-values.yaml \
  --set startup.license.base64="$(base64 -w0 thinkfree.license)"

3. was

key

default value

explanation

was.replicaCount 

(global) 

Pod count.
autoscaling.enabled: true It is ignored because it is managed by 
HPA .

was.image.repository / registry / tag 

office-application-server / (global) / (global) 

Overwrite image name and global value.

was.service.type 

ClusterIP 

Service Type.
ClusterIP / NodePort/LoadBalancer 

was.service.port 

80 

Service port.
 The container port is always 8070.

was.service.nodePort 

"" 

type: NodePortPort to fix when (30000-32767).
 Automatically assigned if left blank.

was.service.annotations 

{} 

Service annotation.
 ex) AWS 
NLB option

was.relayAccess.target 

"" 

The default URL that the WAS calls the relay-server ( TFO_RELAY_ACCESS_TARGET).
 If left blank relay.enabled, the cluster's internal relay service address is automatically entered, and if the relay is turned off, the application's default value is used.

was.relayAccess.asyncRequestTimeoutMs 

"" 

Asynchronous request timeout (ms TFO_RELAY_ACCESS_ASYNC_REQUEST_TIMEOUT_MS).
 If empty, it is not passed and the application's default value is used. 
ex)600000 

was.relayAccess.streamCorePoolSize/streamMaxPoolSize 

""/"" 

Stream thread pool default/max size ( TFO_RELAY_ACCESS_STREAM_CORE_POOL_SIZE/ TFO_RELAY_ACCESS_STREAM_MAX_POOL_SIZE).
 ex) 32/64 

was.relayAccess.streamQueueCapacity 

"" 

Stream thread pool queue capacity ( TFO_RELAY_ACCESS_STREAM_QUEUE_CAPACITY).

was.nodeSelector / tolerations / affinity / podAnnotations 

 

Pod Deployment · Metadata.

was.podSecurityContext 

fsGroup: 1000, fsGroupChangePolicy: OnRootMismatch 

Since the Pod container runs as non-root (uid/gid 1000), securityContextit allows gid 1000 to use the newly created block volume ( EBS , etc.). Shared file systems like EFS and S3 ignore fsGroup, so the storage side determines the owner. ex) EFS StorageClass parameter / , S3 Mountpoint PV 's to
thinkfreewas.persistence

uid: "1000"gid: "1000"mountOptionsuid=1000,gid=1000,allow-other

was.readinessProbe.* 

enabled, 30/10/5/1/5 

Tomcat Port (8080) TCP Check.
 The values ​​are in order initialDelaySeconds/ periodSeconds/ timeoutSeconds/ successThreshold/ failureThreshold.

was.livenessProbe.path 

/cloud-office/ 

liveness HTTP path (port 8070).
 The default checks only this WAS instance. 
/cloud-office/hc.jspIf changed, it checks the status of Redis/MongoDB/document/filter as well, so the WAS restarts in the event of a dependent service failure.

was.livenessProbe.* 

enabled, 60/10/5/1/5 

For reference , the order of the values ​​is  readinessProbe .

was.resources 

requests 500m / 3Gi 

Container resource requests (limits if necessary).
 The default requests is the starting point based on the image default (JVM heap 2GB + metaspace 1GB), serves as the scheduling reservation amount, and is the basis for 
HPA utilization. Adjust it to suit your environment and add 
if necessary . To remove requests entirely , .limits
resources: { requests: { cpu: null, memory: null } }

was.autoscaling.enabled 

false 

HPA creation.
 When turned onreplicaCount, is ignored and the HPA determines the number of PodsbetweenminReplicas(1) andthe number of Pods to maintain normallyin ( greater than the replicaCount to be used without HPA )./(50/80) is the average usage %.maxReplicas
minReplicas
targetCPUtargetMemory

was.autoscaling.behavior 

{} 

HPA scaling rate (autoscaling/v2behavior ,scaleUp/scaleDown ).
 If left blank, chart default: increase 100% or 2 Pods/30s, decrease max 2 Pods/60s, stabilize both sides 300s.
If only one direction is entered, the rest maintains the default.

was.ingress.enabled 

false 

Create Ingress.
 Subkeys: ingressClassName, annotations, hosts(list), paths(list), pathType(default prefix), tls(standard Ingress tls array).

was.persistence.enabled 

false 

mountPathMount a single persistent volume shared by all WAS Pods
 . The chart creates 
a PVC <접두어>-was-data .

was.persistence.existingClaim 

"" 

An existing PVC name.
 If specified, the chart does not create 
a PVC and storageClass/accessMode/size/annotations/retainOnDelete is ignored.

was.persistence.storageClass / size / annotations 

"" / 10Gi / {} 

StorageClass, size, and annotations to create a PVC
existingClaim . Required if not presentstorageClass(the cluster's default StorageClass is not used, and installation stops if empty).
The size applies only to the initial creation; to increase it,allowVolumeExpansiona StorageClass with this enabled is required.

was.persistence.accessMode 

ReadWriteMany 

PVC access mode.
 Since Pods on different nodes and AZs need to access the same volume, the default isReadWriteMany

was.persistence.retainOnDelete 

true 

helm uninstall Whether to retain the PVC and data created by the chart
true . If true, it is retained and reattached upon reinstallation with the same release name (delete manually if not needed). If false, the PVC
false is removed along with the release , and StorageClass's reclaimPolicy determines whether to erase the disk as well.

was.persistence.mountPath / subPath / readOnly 

/home/thinkfree/docs / "" / false 

Mount location inside the container.
subPath If provided, only that directory of the volume is mounted.

was.extraVolumes / extraVolumeMounts 

[] 

was.persistenceIt can be used with additional volumes (when more ConfigMap, emptyDir, PVC are needed) .

was.extraEnv 

[] 

Additional environment variables.

was:
  replicaCount: 2
  autoscaling:
    enabled: false
  service:
    type: ClusterIP
    port: 80
  relayAccess:
    asyncRequestTimeoutMs: 600000
    streamCorePoolSize: 32
    streamMaxPoolSize: 64
    streamQueueCapacity: 0
  resources:
    requests: { cpu: "1", memory: 3Gi }
    limits:   { memory: 4Gi }
  ingress:
    enabled: true
    ingressClassName: alb
    annotations:
      alb.ingress.kubernetes.io/scheme: internet-facing
      alb.ingress.kubernetes.io/healthcheck-path: /cloud-office/hc.jsp
    hosts: [office.example.com]
    paths: ["/"]
    pathType: Prefix
    tls:
      - hosts: [office.example.com]
        secretName: office-tls
  persistence:
    enabled: true
    storageClass: efs-sc                   # EFS: Shared by WAS Pods across multiple nodes and AZs
    accessMode: ReadWriteMany
    size: 50Gi
    mountPath: /home/thinkfree/docs        # hostStorage adapter HOST_STORAGE_ROOT
  # When using an existing PVC (e.g., a static PV that attaches an S3 bucket via the Mountpoint CSI driver):
  # persistence: { enabled: true, existingClaim: office-docs, mountPath: /home/thinkfree/docs }

4. broker

Only 1 or 2replicaCount are allowed for the Active/Standby structure (otherwise installation fails). pod-0 is the master (8888 listen), and pod-1 is the standby.

key

default value

explanation

broker.replicaCount 

(global) 

Number of Pods.
 1 or 2. 
global.replicaCountIf it is 3 or more, it must be overwritten here.

broker.image.repository / registry / tag 

office-filter-server-broker / (global) / (global) 

Overwrite image name and global value.

broker.nodeSelector / tolerations / affinity / podAnnotations 

 

Pod Deployment · Metadata.

broker.readinessProbe.*/livenessProbe.* 

10/10/5/1/5, 60/10/5/1/5 

Pod-0 is checked for port 8888. Since
 the standby does not open the port until promoted, it is checked for the existence of the broker process.

broker.resources 

requests 200m / 512Mi 

Container resources.
 Refer to the guide for adjustment methods was.resources.

broker.extraEnv 

[] 

Additional environment variables.

broker:
  replicaCount: 2
  resources:
    requests: { cpu: 500m, memory: 1Gi }

5. filter

key

default value

explanation

filter.replicaCount 

(global)

Number of Pods. Ignored when using 
HPA .

filter.image.repository / registry / tag 

office-filter-server/ (global) / (global)

Overwrite image name and global value.

filter.nodeSelector / tolerations / affinity / podAnnotations 

 

Pod Deployment · Metadata.

filter.resources 

requests 500m / 1Gi 

Container resources.
 Since the transformation engine uses a lot of CPU, increase the CPU usage according to the load.

filter.autoscaling.* 

disabled, 1/3, 50/80, behavior {} 

HPA settings.

filter.extraVolumes / extraVolumeMounts / extraEnv 

[] 

Additional volumes and environment variables.

filter:
  autoscaling:
    enabled: true
    minReplicas: 2
    maxReplicas: 6
    targetCPU: "60"
    targetMemory: ""        #Exclude the metric if the value is empty

6. document (word / show)

document.word.*and document.show.*have the same key.

key

default value

explanation

document.<x>.replicaCount 

(global)

Number of Pods. Ignored when using 
HPA .

document.<x>.image.repository / registry / tag 

office-document-server-word / office-document-server-show, (global), (global) 

Overwrite image name and global value.

document.<x>.clusterMode 

true 

Hazelcast cluster mode ( DOCUMENT_<X>_CLUSTER_MODE).
 Find members of the same Service using the Kubernetes API ( rbac.enabledrequired). 
If there are 2 or more Pods or if 
HPA is used, truemaintain . 
falseIf , a single instance.

document.<x>.nodeSelector / tolerations / affinity / podAnnotations 

 

Pod Deployment · Metadata.

document.<x>.readinessProbe.*/livenessProbe.* 

20/10/5/1/5, 60/10/5/1/5 

HTTP inspection.
 word /write/hc, show /hc.

document.<x>.resources 

requests 500m / 2560Mi 

Container resources.
 Based on JVM heap 2GB + metaspace 1GB.

document.<x>.autoscaling.* 

disabled, 1/3, 50/80 

HPA settings ( was.autoscalingsee reference).
behavior.scaleDown The default is filled with 1 Pod/60s and Stabilization 300s.
Since Hazelcast keeps only one partition backup, members must be removed one at a time to preserve data.
Scale-out is automatic joining, so there is no limit.

document.<x>.javaToolOptions 

-Dhazelcast.shutdownhook.policy=GRACEFUL 

Read directly by the JVM  JAVA_TOOL_OPTIONS.
 The default setting causes Hazelcast to move its partition to an remaining member before shutting down when the Pod terminates. If omitted, it will simply terminate, potentially resulting in data loss. 
Other -Dflags may be added. 
Leaving it blank leaves it unconfigured.

document.<x>.terminationGracePeriodSeconds 

120 

Pod termination grace period (seconds).
 Used for moving the partition above and removing the Service endpoint. 
The k8s default is 30.

document.<x>.extraEnv 

[] 

Additional environment variables.

document:
  word:
    replicaCount: 3
    autoscaling: { enabled: false }
    resources:
      requests: { cpu: "1", memory: 2500Mi }
  show:
    replicaCount: 3
    autoscaling: { enabled: false }

7. relay

The provider configuration startup.aiProviderConfigreads from the 
relay.server.*`/ / /` written by the startup job. It corresponds one-to-one with the container's environment variables, and only keys with values are passed (empty values retain the built-in default).relay.sse.*relay.async.*relay.jvmOptsRELAY_*""

key

default value

Corresponding environment variables

explanation

relay.enabled 

true 

 

Whether to use relay.
false If enabled, no relay resources are created (no AI relay function).

relay.replicaCount 

(global) 

 

Number of Pods. Ignored when using 
HPA .

relay.image.repository / registry / tag 

office-relay-server / (global) / (global) 

 

Overwrite image name and global value.

relay.server.host 

"" 

RELAY_SERVER_HOST 

Bind address.
 If left blank, the default image 0.0.0.0.

relay.server.port 

8787 

RELAY_SERVER_PORT 

Receive port.
 It is always forwarded, and the Service and probe also use this port.

relay.server.path 

"" 

RELAY_SERVER_PATH 

Relay endpoint default path.
 ex)/ai-agent/relay 

relay.server.healthPath 

"" 

RELAY_SERVER_HEALTH_PATH 

Health check path.
 Also used as a probe path (if empty /health).

relay.server.corsOrigin 

"" 

RELAY_SERVER_CORS_ORIGIN 

CORS allowed origin.
ex)"*" 

relay.server.bodyLimitBytes 

"" 

RELAY_SERVER_BODY_LIMIT_BYTES 

Request body size limit (bytes).
 ex)209715200 

relay.sse.maxConcurrentStreams 

"" 

RELAY_SSE_MAX_CONCURRENT_STREAMS 

Maximum number of concurrent SSE streams.
 ex)64 

relay.async.requestTimeoutMs 

"" 

RELAY_ASYNC_REQUEST_TIMEOUT_MS 

Asynchronous request timeout (ms).
 ex)600000 

relay.jvmOpts 

"" 

RELAY_JVM_OPTS 

JVM options. Replaces the entire 
image default heap options ( ).-Xms256m -Xmx512m ...

relay.service.port / annotations 

""/{} 

 

ClusterIP Service port and annotation.
 If you free the port, server.port.

relay.nodeSelector / tolerations / affinity / podAnnotations 

 

 

Pod Deployment · Metadata.

relay.readinessProbe.path 

"" 

 

Readiness test path.

relay.readinessProbe.*/livenessProbe.* 

20/10/5/1/5, 60/10/5/1/5 

 

HTTP GET health path inspection.

relay.resources 

requests 200m / 768Mi 

 

Container resources.
 Based on a default heap of 512MB.

relay.autoscaling.* 

disabled, 1/3, 50/80, behavior {} 

 

HPA settings.

relay.extraVolumes / extraVolumeMounts / extraEnv 

[] 

 

Additional volumes and environment variables.

relay:
  server:
    path: /ai-agent/relay
    corsOrigin: "*"
    bodyLimitBytes: 209715200
  sse:
    maxConcurrentStreams: 64
  async:
    requestTimeoutMs: 600000
  autoscaling:
    enabled: false
  resources:
    requests: { cpu: 200m, memory: 768Mi }

8. redis

The embedded Redis launches the official image as a StatefulSet and uses the / valkey/valkeyincluded in the chart . If so, it uses external Redis.valkey.confsentinel.conf
enabled: false

key

default value

Corresponding environment variables

explanation

redis.enabled 

true 

USE_EXTERNAL_REDIS 

Whether to use embedded Redis. If so, it uses the external Redis 
falseinstead of creating a StatefulSet .external.*

redis.external.hosts 

"" 

REDIS_HOSTS 

External Redis  host:port comma list.
enabled: false Required when. 
enabled: trueIf written, installation stops.

redis.external.sentinelHosts 

"" 

REDIS_SENTINEL_HOSTS 

External Sentinel  host:port comma list.
 If written, it attaches in Sentinel mode.

redis.replicaCount 

(global)

 

Number of members.
 1 = single, 2 or more = master + replica. It is required 
for automatic failover ; without it, the replica is just a copy.redisSentinel.enabled

redis.image.registry / repository / tag 

"" / valkey/valkey / 8.1.8 

 


global.image.registryDownload from Docker Hub regardless of the official Valkey image path .

redis.service.port 

6379 

 

headless Service port.

redis.service.annotations 

{} 

 

Service annotation.

redis.nodeSelector / tolerations / affinity / podAnnotations 

 

 

Pod Deployment · Metadata.

redis.readinessProbe.*/livenessProbe.* 

5/10/5/1/5, 30/10/10/1/6 

 

valkey-cli ping test. 

redis.resources 

requests 100m / 256Mi 

 

Container resources.
 Increase memory to match the size of in-memory data.

redis.persistence.enabled 

false 

 

Stores RDB snapshots in member-specific PVCs . The default is emptyDir : used for session and cache purposes; if replica + Sentinel is enabled, recreated Pods are synchronized back from the master. Enable this if you are on a single node or want to retain data even after a full restart (pod-0's snapshot serves as the reference during a full restart). Only data remains in the PVC , and configuration files are newly created at every startup./data/dump.rdb


redis.persistence.storageClass / accessMode / size / annotations 

"" / ReadWriteOnce / 8Gi / {} 

 

StorageClass, access mode, size, and annotation to create the PVC
enabled: true . MandatorystorageClass(the cluster's default StorageClass is not used, and installation stops if empty).
 The PVC size is not reflected even if only the value is changed after creation (StatefulSet constraint).

redis.persistence.retentionPolicy.whenDeleted / whenScaled 

Retain/Retain 

 

PVC handling method during scale-in
Retain . If , 
the PVC and data remain, and are reattached if reinstalled with the same release name (delete manually if not needed). If , the PVC
Delete is deleted along with the Pod , and the StorageClass's reclaimPolicy determines whether to delete it from the disk as well.

redis.extraVolumes / extraVolumeMounts / extraEnv 

[] 

 

Additional volumes and environment variables.

redis.auth.password 

(Unspecified → cloudoffice)

REDIS_PASSWORD 

Redis password (built-in requirepass, external Redis authentication).
 The default value is for testing purposes, so change it in a production environment. 
/ & @ \\Characters cannot be used.

redis:
  replicaCount: 3
  auth:
    password: "Str0ngPass"
  affinity:
    podAntiAffinity:
      preferredDuringSchedulingIgnoredDuringExecution:
        - weight: 100
          podAffinityTerm:
            topologyKey: kubernetes.io/hostname
            labelSelector:
              matchLabels: { app: thinkfree-office-redis }

9. redisSentinel

redis.enabled: trueIt is created only when... If Sentinel is present, the app attaches to Redis in Sentinel mode.

key

default value

Corresponding environment variables

explanation

redisSentinel.enabled 

true 

 

Whether to use Sentinel.
false If so, the app attaches directly to Redis pod-0 (no automatic failover).

redisSentinel.replicaCount 

(global) 

 

Sentinel count.
 For actual failover, an odd number of 3 or more.

redisSentinel.image.* 

(redis.image) 

 

Sentinel image.
 If empty redis.image, use .

redisSentinel.service.port/annotations 

26379/{} 

 

Headless Service Ports and Annotations

redisSentinel.quorum 

"" 

REDIS_SENTINEL_QUORUM 

Number of Sentinels required for failover consensus.
 If left empty floor(replicaCount/2)+1.

redisSentinel.nodeSelector / tolerations / affinity / podAnnotations 

 

 

Pod Deployment · Metadata.

redisSentinel.readinessProbe.*/livenessProbe.* 

5/10/5/1/5, 30/10/10/1/6 

 

valkey-cli pingtest.

redisSentinel.resources / extraVolumes / extraVolumeMounts / extraEnv 

requests 50m / 64Mi, [] 

 

Container resources and additional volumes/environment variables.

redisSentinel.auth.masterName 

(Unspecified → mymaster)

REDIS_SENTINEL_MASTER_NAME 

The master name managed by Sentinel.

redisSentinel:
  replicaCount: 3
  quorum: "2"

10. mongodb

The embedded MongoDB is an official mongoimage StatefulSet, and all members appear as ReplicaSet members. 
replicaCount: 1It is configured as a single-member ReplicaSet, and when expanded, the next startup Job( helm upgrade) joins the new member (shrinking is done rs.removemanually afterwards). 
enabled: falseIf so, use external MongoDB.

key

default value

Corresponding environment variables

explanation

key

default value

Corresponding environment variables

explanation

mongodb.enabled 

true 

USE_EXTERNAL_MONGODB 

Whether to use embedded MongoDB. If so, use external MongoDB 
falsewithout StatefulSet .external.*

mongodb.external.hosts 

"" 

MONGODB_HOSTS 

External MongoDB  host:port comma-separated list.
 If it is an existing ReplicaSet, list all members. 
enabled: falseRequired when. 
enabled: trueIf written, installation stops.

mongodb.external.replicaSetName 

"" 

MONGODB_REPLICASET_NAME 

External ReplicaSet name.
 If it differs from the actual name, the startup job fails.

mongodb.replicaCount 

(global)

 

Number of members.

mongodb.image.registry / repository / tag 

"" / mongo / 7.0.28 

 


global.image.registryDownload from Docker Hub regardless of the official mongo image path .

mongodb.service.port/annotations 

27017/{} 

 

Headless Service Ports and Annotations

mongodb.nodeSelector / tolerations / affinity / podAnnotations 

 

 

Pod Deployment · Metadata.

mongodb.readinessProbe.*/livenessProbe.* 

10/10/5/1/6, 60/20/10/1/6 

 

27017 Port TCP Check. 

mongodb.resources 

requests 250m / 1Gi 

 

Container resources.
 Upload according to data size, such as WiredTiger cache.

mongodb.persistence.enabled 

false 

 

MongoDB data storage method.
false (Default) is emptyDir. Test installation: It starts without storage configuration on any cluster, but data disappears when the Pod is recreated. This is notified at the top of the instructions immediately after installation. 
For production environments, true(per-member 
PVC ) + storageClassmandatory. 
Changing this value in an already installed release helm upgradeis rejected: helm uninstallit is reinstalled afterwards, and test data is not moved.

mongodb.persistence.storageClass 

"" 

 

The StorageClass name to create the volume ( kubectl get storageclass).
enabled: true Required if empty. 
The cluster default StorageClass is not used, and installation stops if empty.

mongodb.persistence.accessMode / size / annotations 

ReadWriteOnce / 20Gi / {} 

 

PVC access mode, size, and annotations. 
The PVC size is not reflected even if only the value is changed after creation (StatefulSet constraint).

mongodb.persistence.retentionPolicy.whenDeleted/whenScaled 

Retain/Retain 

 

PVC handling method during scale-in
Retain . If , 
the PVC and data remain, and are reattached if reinstalled with the same release name (delete manually if not needed). If , the PVC
Delete is deleted along with the Pod , and the StorageClass's reclaimPolicy determines whether to delete it from the disk as well.

mongodb.extraVolumes / extraVolumeMounts / extraEnv 

[] 

 

Additional volumes and environment variables.

mongodb.auth.rootDB / rootUsername / rootPassword 

admin / root / weboffice 

MONGODB_ROOT_* 

Root account.
 For internal databases, create a root account using this value. 
For external databases, enter an existing account with admin privileges. 
The default password is for testing purposes, so change it in a production environment.

mongodb.auth.adminDB / adminUsername / adminPassword 

HancomAdmin / hancomAdmin / hancom123 

MONGODB_ADMIN_* 

Management DB account (dbOwner).
 The default password is for testing purposes, so change it in the production environment.

mongodb.auth.wordDB / wordUsername / wordPassword 

WriteDocDb / webWrite / hancom123 

MONGODB_WORD_* 

Accounts by product.

mongodb.auth.cellDB / cellUsername / cellPassword 

CalcDocDb / webCalc / hancom123 

MONGODB_CELL_* 

Accounts by product.

mongodb.auth.showDB / showUsername / showPassword 

ShowDocDb / webShow / hancom123 

MONGODB_SHOW_* 

Accounts by product.

mongodb.auth.fileDB / fileUsername / filePassword 

WebOfficeFileDb / webOfficeResource / hancom123 

MONGODB_FILE_* 

File storage (GridFS) account.

mongodb.replicaSet.name 

wo-hancom-mongo-repl 

MONGODB_REPLICASET_NAME 

Built-in ReplicaSet name.

mongodb.replicaSet.keyFile 

"" 

 

Contents of the keyFile for member-to-member authentication.
 If left empty, the already installed key is retained; if absent, the primary key included in the chart is used. 
Since the primary key is visible to anyone who receives the chart, a custom-made key is used in a production environment.

mongodb.replicaSet.existingSecret 

"" 

 

The name of an existing Secret containing the keyFile.
 If specified, the chart does not create a Secret.

mongodb.replicaSet.existingSecretKey 

mongodb.key 

 

The key where the keyFile is stored within that Secret.

mongodb.adminIps 

"" 

MONGODB_ADMIN_IPS 

Allowed IPs for administrator page access.
 Leave blank to allow all.

mongodb:
  replicaCount: 3
  persistence:
    enabled: true                            # Operation: Required (defaults to an emptyDir test installation)
    storageClass: gp3
    size: 100Gi
  auth:
    rootPassword: "R00tPass"
    adminPassword: "Adm1nPass"
  replicaSet:
    existingSecret: tfo-mongodb-keyfile
  adminIps: "10.0.0.0/8"

Was this article helpful?

That’s Great!

Thank you for your feedback

Sorry! We couldn't be helpful

Thank you for your feedback

Let us know how can we improve this article!

Select at least one of the reasons
CAPTCHA verification is required.

Feedback sent

We appreciate your effort and will try to fix the article