Apache Ignite on your Kubernetes Cluster Part 4: Deployment explained
Previously we saw the Ignite configuration that comes with the Kubernetes installation.
The default configuration does not have persistence enabled so we won’t focus on any storage classes provided by the helm chart.
The default installation uses a stateful set. You can find more information on a stateful set on the Kubernetes documentation.
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | > kubectl get statefulset ignite-cache -o yaml apiVersion: apps /v1 kind: StatefulSet metadata: creationTimestamp: 2020-04-09T12:29:04Z generation: 1 labels: app.kubernetes.io /instance : ignite-cache app.kubernetes.io /managed-by : Helm app.kubernetes.io /name : ignite helm.sh /chart : ignite-1.0.1 name: ignite-cache namespace: default resourceVersion: "281390" selfLink: /apis/apps/v1/namespaces/default/statefulsets/ignite-cache uid: fcaa7bef-84cd-4e7c-aa33-a4312a1d47a9 spec: podManagementPolicy: OrderedReady replicas: 2 revisionHistoryLimit: 10 selector: matchLabels: app: ignite-cache serviceName: ignite-cache template: metadata: creationTimestamp: null labels: app: ignite-cache spec: containers: - env : - name: IGNITE_QUIET value: "false" - name: JVM_OPTS value: -Djava.net.preferIPv4Stack= true - name: OPTION_LIBS value: ignite-kubernetes,ignite-rest-http image: apacheignite /ignite :2.7.6 imagePullPolicy: IfNotPresent name: ignite ports: - containerPort: 11211 protocol: TCP - containerPort: 47100 protocol: TCP - containerPort: 47500 protocol: TCP - containerPort: 49112 protocol: TCP - containerPort: 10800 protocol: TCP - containerPort: 8080 protocol: TCP - containerPort: 10900 protocol: TCP resources: {} terminationMessagePath: /dev/termination-log terminationMessagePolicy: File volumeMounts: - mountPath: /opt/ignite/apache-ignite/config name: config-volume dnsPolicy: ClusterFirst restartPolicy: Always schedulerName: default-scheduler securityContext: {} serviceAccount: ignite-cache serviceAccountName: ignite-cache terminationGracePeriodSeconds: 30 volumes: - configMap: defaultMode: 420 items: - key: ignite-config.xml path: default-config.xml name: ignite-cache-configmap name: config-volume updateStrategy: rollingUpdate: partition: 0 type : RollingUpdate status: replicas: 0 |
As you can see the Ingite configuration has been mounted through the configmap. Also you can see that this pod will use a specific service account.
Through the environment variables certain libraries are enabled which provide more features on the Ignite cluster. Also the ports needed for the communication and various protocols are being specified.
The last step is the service. All the ignite nodes shall be load balancer behind the Kubernetes service.
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | > kubectl get svc ignite-cache -o yaml apiVersion: v1 kind: Service metadata: creationTimestamp: 2020-04-09T12:29:04Z labels: app: ignite-cache name: ignite-cache namespace: default resourceVersion: "281389" selfLink: /api/v1/namespaces/default/services/ignite-cache uid: 5be68e28-a57c-4cb5-b610-b708bff80da7 spec: clusterIP: None ports: - name: jdbc port: 11211 protocol: TCP targetPort: 11211 - name: spi-communication port: 47100 protocol: TCP targetPort: 47100 - name: spi-discovery port: 47500 protocol: TCP targetPort: 47500 - name: jmx port: 49112 protocol: TCP targetPort: 49112 - name: sql port: 10800 protocol: TCP targetPort: 10800 - name: rest port: 8080 protocol: TCP targetPort: 8080 - name: thin-clients port: 10900 protocol: TCP targetPort: 10900 selector: app: ignite-cache sessionAffinity: None type : ClusterIP status: loadBalancer: {} |
Whether you add a new node or you add an ignite client node your ignite cluster shall be reached through this Kubernetes service. Apart from, that based on the Kubernetes services you can make this cache public or internal.
Published on Java Code Geeks with permission by Emmanouil Gkatziouras, partner at our JCG program. See the original article here: Apache Ignite on your Kubernetes Cluster Part 4: Deployment explained Opinions expressed by Java Code Geeks contributors are their own. |