Building and testing Kubernetes module

The instructions provide a guidance on how to build and test Ignite Kubernetes IP finder in Kubernetes environment.

To test the IP finder you have to build the whole Apache Ignite project, package the binary as a Docker image and feed the image to your kubernetes environment.

Building Apache Ignite

To assemble an Apache Ignite binary use instructions from DEVNOTES.txt file in the root of the repository.

Note, if you alter the build instruction somehow make sure to update the files under ‘config’ folder if needed.

Installing Docker and Minikube

Install Docker and Minikube for testing purpose in your development environment.

Once this is done, make sure that Minikube sees Docker images registered locally: eval $(minikube docker-env)

Start Minikube: minikube start

Assembling Apache Ignite Docker Image

Create a folder for all the files to be placed in the Docker image and copy the following there: - Apache Ignite binary in a zip form built at the step above. - Dockerfile from ignite-kubernetes/config/Dockerfile. - Ignite configuration with enabled Kubernetes IP finder from ignite-kubernetes/config/example-kube.xml. - The executable file that starts the Ignite node process from ignite-kubernetes/config/run.sh

To prepare the image, navigate to the folder and execute the following command: docker build -t ignite-kube:v1 --build-arg IGNITE_VERSION=2.10.0-SNAPSHOT .

Creating containerized Ignite pods and Ignite lookup service

Create the Kuberenetes role that provides access to endpoints of pods to provide communication between Ignite nodes: kubectl apply -f {path_to}/ignite-account-role.yaml

Create the Kubernetes service account to bind the role: kubectl apply -f {path_to}/ignite-service-account.yaml kubectl apply -f {path_to}/ignite-role-binding.yaml

Start the Kubernetes service that is used for IP addresses lookup. Use ignite-kubernetes/config/ignite-service.yaml: kubectl create -f {path_to}/ignite-service.yaml

Create and deploy Ignite pods using ignite-kubernetes/config/ignite-deployment.yaml configuration: kubectl create -f {path_to}/ignite-deployment.yaml

Make sure that the pods were deployed and running properly: kubectl get pod kubectl logs {pod name}

Increase or decrease number of Ignite pods checking that Kubernetes IP finder works as expected: kubectl scale --replicas=4 -f {path_to}/ignite-deployment.yaml

Docker Image Redeployment

If you need to redeploy the docker image after it gets updated and you prefer not to change the image version then delete a current Kubernetes Ignite deployment (don't delete the service): kubectl delete deployment ignite-cluster

After that you are free to build and deploy an updated docker image using the same commands as listed above.