Installing on Kubernetes
You can install GridGain 9 and run a GridGain cluster on Kubernetes cluster. This section describes all the necessary steps, as well as provides the configurations and manifests that you can copy and paste into your environment.
Prerequisites
-
GridGain 9.0.5 or more recent
-
Access to a running Kubernetes cluster
-
kubectl
installed and configured to interact with your Kubernetes cluster -
A namespace exists for GridGain 9 to be deployed.
Installation Steps
Create ConfigMaps
-
Create the GridGain configuration file and get a license. The minimum node configuration is as follows:
gridgain-config.conf{ ignite: { network: { # GridGain 9 node port port: 3344, nodeFinder: { netClusterNodes: [ # Kubernetes service to access the GridGain 9 cluster on the Kubernetes network "gridgain-svc-headless:3344" ] } } } }
-
Place your license content in the
license.conf
file. -
Create the ConfigMap object for GridGain configuration:
kubectl create configmap gridgain-config -n <namespace> --from-file=gridgain-config.conf
-
Create the ConfigMap object for the GridGain license:
kubectl create configmap gridgain-license -n <namespace> --from-file=license.conf
Replace
<namespace>
with the name of the namespace where you want to deploy GridGain.
Deploy the Service
-
Prepare the
service.yaml
for service deployment:service.yamlapiVersion: v1 kind: Service metadata: # The name must be equal to netClusterNodes. name: gridgain-svc-headless # Place your namespace name here. namespace: <namespace> spec: clusterIP: None internalTrafficPolicy: Cluster ipFamilies: - IPv4 ipFamilyPolicy: SingleStack ports: - name: management port: 10300 protocol: TCP targetPort: 10300 - name: rest port: 10800 protocol: TCP targetPort: 10800 - name: cluster port: 3344 protocol: TCP targetPort: 3344 selector: # Must be equal to the label set for pods. app: gridgain # Include not-yet-ready nodes. publishNotReadyAddresses: True sessionAffinity: None type: ClusterIP
-
Apply the
service.yaml
file to set up the service:kubectl apply -f service.yaml
Deploy the StatefulSet
-
Prepare the
statefulset.yaml
file for StatefulSet deployment:statefulset.yamlapiVersion: apps/v1 kind: StatefulSet metadata: # The cluster name. name: gridgain-cluster # Place your namespace name. namespace: <namespace> spec: # The initial number of pods to be started by Kubernetes. replicas: 2 # Kubernetes service to access the GridGain 9 cluster on the Kubernetes network. serviceName: gridgain-svc-headless selector: matchLabels: app: gridgain template: metadata: labels: app: gridgain spec: terminationGracePeriodSeconds: 60000 containers: # Custom pod name. - name: gridgain-node # Limits and requests for the GridGain container. resources: limits: cpu: "4" memory: 4Gi requests: cpu: "4" memory: 4Gi env: # Must be specified to ensure that GridGain 9 cluster replicas are visible to each other. - name: GRIDGAIN_NODE_NAME valueFrom: fieldRef: fieldPath: metadata.name # GridGain 9 working directory. - name: GRIDGAIN_WORK_DIR value: /gg9-work # GridGains Docker image and it's version. image: gridgain/gridgain9:9.0.5 ports: - containerPort: 10300 - containerPort: 10800 - containerPort: 3344 volumeMounts: # The config will be placed at this path in the container. - mountPath: /opt/gridgain/etc/gridgain-config.conf name: config-vol subPath: gridgain-config.conf # The license will be placed at this path in the container. - mountPath: /opt/gridgain/etc/license.conf name: license-vol subPath: license.conf # GridGain 9 working directory. - mountPath: /gg9-work name: persistence volumes: - name: config-vol configMap: name: gridgain-config - name: license-vol configMap: name: gridgain-license volumeClaimTemplates: - apiVersion: v1 kind: PersistentVolumeClaim metadata: name: persistence spec: accessModes: - ReadWriteOnce resources: requests: storage: 10Gi # Provide enough space for your application data. volumeMode: Filesystem
-
Apply the
statefulset.yaml
file to deploy the main components of GridGain 9:kubectl apply -f statefulset.yaml
Wait for Pods to Start
-
Monitor the status of the pods:
kubectl get pods -n <namespace> -w
-
Ensure that all pods'
STATUS
isRunning
before proceeding.
Deploy the Job
-
Prepare the
job.yaml
file for deploying the job:job.yamlapiVersion: batch/v1 kind: Job metadata: name: cluster-init # Place your namespace name here. namespace: <namespace> spec: template: spec: containers: # Command to init the cluster. URL and host must be the name of the service you created before. Port is 10300 as the management port. - args: - -ec - | apt update && apt-get install -y bind9-host GG_NODES=$(host -tsrv _cluster._tcp.gridgain-svc-headless | grep 'SRV record' | awk '{print $8}' | awk -F. '{print $1}' | paste -sd ',') /opt/gridgain9cli/bin/gridgain9 cluster init --name=gridgain --metastorage-group $GG_NODES --url=http://gridgain-svc-headless:10300 --config-files=/opt/gridgain/etc/license.conf command: - /bin/sh # Specify the Docker image with the GridGain 9 CLI and its version. image: gridgain/gridgain9:9.0.5 imagePullPolicy: IfNotPresent name: cluster-init resources: {} volumeMounts: # The license required to be mounted to cluster-init job. - mountPath: /opt/gridgain/etc/license.conf name: license-vol subPath: license.conf restartPolicy: Never terminationGracePeriodSeconds: 120 volumes: - name: license-vol configMap: name: gridgain-license
-
Apply the
job.yaml
file to complete installation.kubectl apply -f job.yaml
Installation Verification
-
Check the status of all resources in your namespace:
kubectl get all -n <namespace>
-
Ensure that all components are running as expected, without errors, and that the initialization job is in the
Completed
status. -
Verify that your cluster is initialized and running.
kubectl exec -it gridgain-cluster-0 bash -n <namespace> /opt/gridgain9cli/bin/gridgain9 cluster status
The command output must include the name of your cluster and the number of nodes. The status must be
ACTIVE
.
Installation Troubleshooting
If any issues occur during the installation:
-
Check the logs of specific pods:
kubectl logs <pod-name> -n <namespace>
-
Review events in the namespace:
kubectl get events -n <namespace>
© 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.