Skip to content
This repository has been archived by the owner on Apr 2, 2019. It is now read-only.

pires/apache-ignite-discovery-kubernetes

Repository files navigation

apache-ignite-discovery-kubernetes

Apache Ignite discovery for Kubernetes.

1. Requirements

  • Kubernetes cluster with DNS integration enabled

If you want to build the plug-in yourself, you’ll need:

  • Java compiler able to compile Java 7 code

  • Maven 3.3.x or newer

2. Usage

First, declare the following in your project’s pom.xml:

<dependency>
    <groupId>com.github.pires</groupId>
    <artifactId>apache-ignite-discovery-kubernetes</artifactId>
    <version>1.0_1</version>
</dependency>

Now, let’s configure Apache Ignite discovery based on the following service descriptor:

apiVersion: v1
kind: Service
metadata:
  name: MY-SERVICE
  labels:
    component: my-svc
spec:
  selector:
    component: my-svc
  clusterIP: None
  ports:
  - name: MY-CONTAINER-PORT
    port: 47500
    protocol: TCP

2.1. XML

<?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 id="ignite.cfg" class="org.apache.ignite.configuration.IgniteConfiguration">

        <!-- other properties -->

        <property name="discoverySpi">
            <bean class="org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi">
                <property name="ipFinder">
                    <bean class="com.github.pires.ignite.kubernetes.KubernetesPodIpFinder">
                        <!-- Headless service name that exposes Ignite cluster, embedded or not. -->
                        <!-- See http://kubernetes.io/docs/user-guide/services/#headless-services -->
                        <property name="serviceName" value="MY-SERVICE"/>
                        <property name="containerPortName" value="MY-CONTAINER-PORT"/>
                    </bean>
                </property>
            </bean>
        </property>

        <!-- other properties -->

    </bean>
</beans>

2.2. Java

// ...

// Headless service name that exposes Ignite cluster, embedded or not.
// See http://kubernetes.io/docs/user-guide/services/#headless-services
final String serviceName = "MY-SERVICE";
final String containerPortName = "MY-CONTAINER-PORT";

final KubernetesPodIpFinder podIpFinder = new KubernetesPodIpFinder();
podIpFinder.setContainerPortName(containerPortName);
podIpFinder.setServiceName(serviceName);

final TcpDiscoverySpi discovery = new TcpDiscoverySpi();
discovery.setIpFinder(podIpFinder);

final IgniteConfiguration igniteConfig = new IgniteConfiguration();
igniteConfig.setDiscoverySpi(discovery);

Ignition.start(igniteConfig);

// ...