Installing GridGain 9 on Kubernetes using Helm Chart
This guide walks you through deploying a GridGain 9 cluster on Kubernetes using Kubernetes Helm Chart.
Prerequisites
-
Kubernetes cluster version 1.26 or more recent
-
Helm version 3 or more recent
-
PersistentVolume provisioner support in the persistence configuration
Installing Helm Chart
Step 1: Add the Helm Repository
First, add the Helm chart repository with the following commands:
helm repo add gridgain https://gridgain.github.io/helm-charts/
helm repo update
Step 2: Install the Helm Chart
Install the chart with the default configuration:
helm install my-release gridgain/gridgain9
This installs GridGain 9 on your Kubernetes cluster.
Configuring Installation
Customize Installation
To customize your installation, use --set flag to override individual settings or provide your own values.yaml file:
helm install my-release gridgain/gridgain -f values.yaml
Custom Configuration for GridGain
You can provide custom configuration for GridGain by passing configuration parameters in the values.yaml file.
# Make default config from file null to provide custom config as a plaintext
configMapsFromFile:
gridgain-config: null
configMaps:
gridgain-config:
name: gridgain-config.conf
path: /opt/gridgain/etc/gridgain-config.conf
subpath: gridgain-config.conf
# Provide any custom gg config below
content: |
ignite {
clientConnector {
connectTimeout=5000
idleTimeout=0
listenAddress=""
metricsEnabled=true
port="{{ .Values.services.headless.ports.rest }}"
sendServerExceptionStackTraceToClient=false
ssl {
ciphers=""
clientAuth=none
enabled=false
keyStore {
password=""
path=""
type=PKCS12
}
trustStore {
password=""
path=""
type=PKCS12
}
}
}
compute {
queueMaxSize=2147483647
statesLifetimeMillis=60000
threadPoolSize=10
threadPoolStopTimeoutMillis=10000
}
criticalWorkers {
livenessCheckInterval=200
maxAllowedLag=500
nettyThreadsHeartbeatInterval=100
}
deployment {
deploymentLocation=deployment
}
eviction {
checkInterval=60000
}
expiration {
batchSize=1000
checkInterval=600000
parallelismLevel=1
}
failureHandler {
handler {
ignoredFailureTypes=[
systemWorkerBlocked,
systemCriticalOperationTimeout
]
type=noop
}
}
network {
fileTransfer {
chunkSize=1048576
maxConcurrentRequests=4
responseTimeout=10000
threadPoolSize=8
}
inbound {
soBacklog=128
soKeepAlive=true
soLinger=0
soReuseAddr=true
tcpNoDelay=true
}
listenAddress=""
membership {
failurePingInterval=1000
membershipSyncInterval=30000
scaleCube {
failurePingRequestMembers=3
gossipInterval=200
gossipRepeatMult=3
membershipSuspicionMultiplier=5
metadataTimeout=3000
}
}
nodeFinder: {
netClusterNodes: [
# Kubernetes service to access the GridGain 9 cluster on the Kubernetes network
"{{ include "gridgain9.fullname" . }}-headless:{{ .Values.services.headless.ports.cluster }}"
]
}
outbound {
soKeepAlive=true
soLinger=0
tcpNoDelay=true
}
port="{{ .Values.services.headless.ports.cluster }}"
shutdownQuietPeriod=0
shutdownTimeout=15000
ssl {
ciphers=""
clientAuth=none
enabled=false
keyStore {
password=""
path=""
type=PKCS12
}
trustStore {
password=""
path=""
type=PKCS12
}
}
}
raft {
fsync=false
installSnapshotTimeout=300000
logStripesCount=4
logYieldStrategy=false
responseTimeout=3000
retryDelay=200
retryTimeout=10000
stripes=10
volatileRaft {
logStorageBudget {
name=unlimited
}
}
}
sql {
execution {
threadCount=4
}
nodeMemoryQuota="60%"
offloadingDataDir="sql_offloading"
offloadingDataLimit="0g"
planner {
threadCount=4
}
}
storage {
engines {
aimem {
pageSize=16384
}
aipersist {
checkpoint {
checkpointDelayMillis=200
checkpointThreads=4
compactionThreads=4
interval=180000
intervalDeviation=40
logReadLockThresholdTimeout=0
readLockTimeout=10000
useAsyncFileIoFactory=true
}
pageSize=16384
}
rocksdb {
flushDelayMillis=100
}
}
profiles=[
{
engine=aipersist
name=default
replacementMode=CLOCK
size=2147483648
}
]
}
system {
cmgPath=""
metastoragePath=""
partitionsBasePath=""
partitionsLogPath=""
}
}
Custom License
To install GridGain with a custom license, you can use the license key.
license:
# -- path inside GridGain container to mount the file with license
mountPath: /opt/gridgain/etc/license.conf
# -- Create secret from raw content passed
createSecret:
mountPath: /opt/gridgain/etc
# -- License raw content
content: |
ignite {
license {
content:"<Put your license here>"
}
}
Authentication Configuration
To configure authentication in GridGain 9, add the following block to your values.yaml file.
For detailed setup instructions, see the Authentication chapter in the GridGain documentation.
license:
# -- path inside GridGain container to mount the file with license
mountPath: /opt/gridgain/etc/license.conf
# -- Create secret from raw content passed
createSecret:
mountPath: /opt/gridgain/etc
# -- License raw content
content: |
ignite {
security {
enabled:true,
authentication.providers:[{
name:default,
type:basic,
users:[
{
username:ignite,
displayName:administrator,
password:ignite,
roles:["system"]
}
]
}]
}
license {
content:"<Put your license here>"
}
}
Volume Configuration
To configure persistent storage or attach custom volumes to GridGain, define the volume mounts and persistence settings in values.yaml.
persistence:
volumes:
persistence:
enabled: true
mountPath: /persistence
size: 8Gi
accessModes:
- ReadWriteOnce
# Make default config from file null to provide custom config as a plaintext
configMapsFromFile:
gridgain-config: null
configMaps:
gridgain-config:
name: gridgain-config.conf
path: /opt/gridgain/etc/gridgain-config.conf
subpath: gridgain-config.conf
# Provide any custom gg config below
content: |
ignite {
clientConnector {
connectTimeout=5000
idleTimeout=0
listenAddress=""
metricsEnabled=true
port="{{ .Values.services.headless.ports.rest }}"
sendServerExceptionStackTraceToClient=false
ssl {
ciphers=""
clientAuth=none
enabled=false
keyStore {
password=""
path=""
type=PKCS12
}
trustStore {
password=""
path=""
type=PKCS12
}
}
}
compute {
queueMaxSize=2147483647
statesLifetimeMillis=60000
threadPoolSize=10
threadPoolStopTimeoutMillis=10000
}
criticalWorkers {
livenessCheckInterval=200
maxAllowedLag=500
nettyThreadsHeartbeatInterval=100
}
deployment {
deploymentLocation=deployment
}
failureHandler {
handler {
ignoredFailureTypes=[
systemWorkerBlocked,
systemCriticalOperationTimeout
]
type=noop
}
}
network {
fileTransfer {
chunkSize=1048576
maxConcurrentRequests=4
responseTimeout=10000
threadPoolSize=8
}
inbound {
soBacklog=128
soKeepAlive=true
soLinger=0
soReuseAddr=true
tcpNoDelay=true
}
listenAddress=""
membership {
failurePingInterval=1000
membershipSyncInterval=30000
scaleCube {
failurePingRequestMembers=3
gossipInterval=200
gossipRepeatMult=3
membershipSuspicionMultiplier=5
metadataTimeout=3000
}
}
nodeFinder: {
netClusterNodes: [
# Kubernetes service to access the GridGain 9 cluster on the Kubernetes network
"{{ include "gridgain9.fullname" . }}-headless:{{ .Values.services.headless.ports.cluster }}"
]
}
outbound {
soKeepAlive=true
soLinger=0
tcpNoDelay=true
}
port="{{ .Values.services.headless.ports.cluster }}"
shutdownQuietPeriod=0
shutdownTimeout=15000
ssl {
ciphers=""
clientAuth=none
enabled=false
keyStore {
password=""
path=""
type=PKCS12
}
trustStore {
password=""
path=""
type=PKCS12
}
}
}
raft {
fsync=false
installSnapshotTimeout=300000
logStripesCount=4
logYieldStrategy=false
responseTimeout=3000
retryDelay=200
retryTimeout=10000
stripes=10
volatileRaft {
logStorageBudget {
name=unlimited
}
}
}
sql {
execution {
threadCount=4
}
nodeMemoryQuota="60%"
offloadingDataDir="sql_offloading"
offloadingDataLimit="0g"
planner {
threadCount=4
}
}
storage {
engines {
aimem {
pageSize=16384
}
aipersist {
checkpoint {
checkpointDelayMillis=200
checkpointThreads=4
compactionThreads=4
interval=180000
intervalDeviation=40
logReadLockThresholdTimeout=0
readLockTimeout=10000
useAsyncFileIoFactory=true
}
pageSize=16384
}
rocksdb {
flushDelayMillis=100
}
}
profiles=[
{
engine=aipersist
name=default
replacementMode=CLOCK
size=2147483648
}
]
}
system {
cmgPath=""
metastoragePath=""
partitionsBasePath=""
partitionsLogPath=""
}
}
Updating Installation
To update your GridGain installation with new configuration or values:
-
Modify the desired settings in your
values.yamlfile; -
Apply the changes using the Helm upgrade command:
helm upgrade my-release gridgain/gridgain9 -f values.yaml
Uninstalling GridGain
To remove the installation from your Kubernetes cluster, use the following command:
helm uninstall my-release
Limitations and Considerations
When running GridGain 9 in a Kubernetes environment, the node configuration becomes read-only and cannot be modified by using the gridgain9 node config update CLI command. This is by design, as node configuration is managed via Kubernetes resources.
Getting Help
For more information about available options and values, refer to the Helm chart documentation on Artifact Hub.
If you have questions or concerns, open an issue in our GitHub repository.
© 2025 GridGain Systems, Inc. All Rights Reserved. Privacy Policy | Legal Notices. GridGain® is a registered trademark of GridGain Systems, Inc.
Apache, Apache Ignite, the Apache feather and the Apache Ignite logo are either registered trademarks or trademarks of The Apache Software Foundation.