Installing GridGain on Kubernetes using Helm Chart
Following is a step-by-step guide for deploying a GridGain 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
Step 1: Add the Helm Repository
To dd add the Helm chart repository, run the following commands:
helm repo add gridgain https://gridgain.github.io/helm-charts/
helm repo update
Step 2: Install the Helm Chart
To install the chart with the default configuration, use the following command:
helm install my-release gridgain/gridgain
This installs GridGain on your Kubernetes cluster.
Step 3 (Optional): Customize Your Installation
You can customize the installation by providing a custom values.yaml
file or using the --set
options. Here is an example of providing custom values:
helm install my-release gridgain/gridgain -f values.yaml
Following are two common customizations.
3.1. 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 in plain text.
configMapsFromFile:
default-config: null
configMaps:
default-config:
name: default-config.xml
path: /opt/gridgain/config/default-config.xml
subpath: default-config.xml
# Provide a custom GridGain config.
content: |
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean class="org.apache.ignite.configuration.IgniteConfiguration">
<property name="discoverySpi">
<bean class="org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi">
<property name="ipFinder">
<bean class="org.apache.ignite.spi.discovery.tcp.ipfinder.kubernetes.TcpDiscoveryKubernetesIpFinder">
<property name="namespace" value="{{ .Release.Namespace }}"/>
<property name="serviceName" value="{{ include "gridgain.fullname" . }}-headless"/>
</bean>
</property>
</bean>
</property>
<property name="dataStorageConfiguration">
<bean class="org.apache.ignite.configuration.DataStorageConfiguration">
<property name="defaultDataRegionConfiguration">
<bean class="org.apache.ignite.configuration.DataRegionConfiguration">
<property name="persistenceEnabled" value="true"/>
</bean>
</property>
</bean>
</property>
</bean>
</beans>
3.2. Custom License
To install GridGain with a custom license, you can use the license
key.
license:
mountPath: /opt/gridgain/gridgain-license.xml
createSecret:
mountPath: /opt/gridgain/gridgain-license.xml
# Paste your license content below
content: |
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
</gridgain-license>
3.3. Authentication Configuration
To configure authentication for GridGain, specify the auth
section in the values.yaml
file. Authentication may include usernames, passwords, and permissions.
auth:
enabled: true
users:
server:
name: server1
password: password1
permissions: "{defaultAllow:true}"
client:
name: client2
password: password2
permissions: "{defaultAllow:false, {cache:'*',permissions:['CACHE_READ']}}"
user:
name: user3
password: password3
permissions: "{defaultAllow:true}"
3.4. Volume Configuration
To configure persistent storage or attach custom volumes to GridGain, define the volume mounts and persistence settings in values.yaml
.
persistence:
volumes:
wal:
enabled: true
mountPath: /wal
size: 8Gi
accessModes:
- ReadWriteOnce
persistence:
enabled: true
mountPath: /persistence
size: 8Gi
accessModes:
- ReadWriteOnce
snapshot:
enabled: true
mountPath: /snapshots
size: 8Gi
accessModes:
- ReadWriteOnce
# Make default config from file null to provide custom config in plain text.
configMapsFromFile:
default-config: null
configMaps:
default-config:
name: default-config.xml
path: /opt/gridgain/config/default-config.xml
subpath: default-config.xml
# Configure snapshots and wal.
content: |
<?xml version="1.0" encoding="UTF-8"?>
<!--
Copyright (C) GridGain Systems. All Rights Reserved.
_________ _____ __________________ _____
__ ____/___________(_)______ /__ ____/______ ____(_)_______
_ / __ __ ___/__ / _ __ / _ / __ _ __ `/__ / __ __ \
/ /_/ / _ / _ / / /_/ / / /_/ / / /_/ / _ / _ / / /
\____/ /_/ /_/ \_,__/ \____/ \__,_/ /_/ /_/ /_/
-->
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util.xsd">
<bean class="org.apache.ignite.configuration.IgniteConfiguration">
<property name="authenticationEnabled" value="false"/>
<property name="failureDetectionTimeout" value="10000"/>
<property name="clientFailureDetectionTimeout" value="10000"/>
<property name="networkTimeout" value="10000"/>
<property name="gridLogger">
<bean class="org.apache.ignite.logger.log4j2.Log4J2Logger">
<constructor-arg type="java.lang.String" value="/opt/gridgain/config/ignite-log4j2.xml"/>
</bean>
</property>
<property name="communicationSpi">
<bean class="org.apache.ignite.spi.communication.tcp.TcpCommunicationSpi">
<!-- Sets socket write timeout for TCP connection. -->
<property name="socketWriteTimeout" value="10000"/>
<property name="messageQueueLimit" value="1024"/>
</bean>
</property>
<property name="discoverySpi">
<bean class="org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi">
<property name="ipFinder">
<!--
Enables Kubernetes IP finder and setting custom namespace and service names.
-->
<bean class="org.apache.ignite.spi.discovery.tcp.ipfinder.kubernetes.TcpDiscoveryKubernetesIpFinder">
<property name="namespace" value="{{ .Release.Namespace }}"/>
<property name="serviceName" value="{{ include "gridgain.fullname" . }}-headless"/>
</bean>
</property>
</bean>
</property>
<property name="transactionConfiguration">
<bean class="org.apache.ignite.configuration.TransactionConfiguration">
<property name="txTimeoutOnPartitionMapExchange" value="#{60L * 1000L}"/>
<property name="DefaultTxTimeout" value="20000"/>
</bean>
</property>
<property name="dataStorageConfiguration">
<bean class="org.apache.ignite.configuration.DataStorageConfiguration">
<property name="metricsEnabled" value="true"/>
<property name="storagePath" value="/persistence/db"/>
<!--property name="walMode" value="${wal_mode}"/-->
<property name="walPath" value="/wal"/>
<property name="walArchivePath" value="/wal"/>
<property name="walSegmentSize" value="#{512L * 1024 * 1024}"/>
<property name="maxWalArchiveSize" value="#{5L * 1024 * 1024 * 1024}"/>
<!-- Enable write throttling. -->
<property name="writeThrottlingEnabled" value="true"/>
<property name="defaultDataRegionConfiguration">
<bean class="org.apache.ignite.configuration.DataRegionConfiguration">
<property name="initialSize" value="#{1024L * 1024L * 1024L}"/>
<property name="maxSize" value="#{1600L * 1024L * 1024L}"/>
<property name="metricsEnabled" value="true"/>
<property name="persistenceEnabled" value="true"/>
</bean>
</property>
<property name="dataRegionConfigurations">
<list>
<bean class="org.apache.ignite.configuration.DataRegionConfiguration">
<property name="name" value="in-memory"/>
<property name="initialSize" value="#{10L * 1024 * 1024}"/>
<property name="maxSize" value="#{1024L * 1024L * 1024L}"/>
<property name="metricsEnabled" value="true"/>
</bean>
</list>
</property>
</bean>
</property>
<property name="pluginConfigurations">
<bean class="org.gridgain.grid.configuration.GridGainConfiguration">
<property name="rollingUpdatesEnabled" value="true"/>
<property name="snapshotConfiguration">
<bean class="org.gridgain.grid.configuration.SnapshotConfiguration">
<property name="snapshotsPath" value="/snapshots"/>
</bean>
</property>
</bean>
</property>
<property name="eventStorageSpi">
<bean class="org.apache.ignite.spi.eventstorage.memory.MemoryEventStorageSpi">
</bean>
</property>
<property name="workDirectory" value="/persistence/work"/>
<property name="userAttributes">
<map>
<entry key="IGNITE_CLUSTER_NAME" value="{{ include "gridgain.fullname" . }}.{{ .Release.Namespace }}"/>
</map>
</property>
</bean>
</beans>
Updating Your Installation
To update GridGain with new values, run the following command:
helm upgrade my-release gridgain/gridgain -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.
© 2024 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.