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 GridGain with new values, run the following 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
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.