DEV Community

Cover image for Kubernetes for Java Developers - Deploy Application
Sandro Giacomozzi
Sandro Giacomozzi

Posted on • Edited on

Kubernetes for Java Developers - Deploy Application

Hello Java Dev

This is the third part of the series Kubernetes for Java Developers. Before continue, check the first and second part.

In this tutorial, we learn about to building and run application inside a kubernetes cluster.

At this point, we have a Java application running in docker that uses a mysql database running on docker too.

Prepare the environment for the big moment

Check if you have the necessary tools before continue.

Just check:

make --version

minikube version

kubectl version

vboxmanage --version

If you don't have one of the tools above, please go to part one, follow the instructions and return here.

Or just type:

make check

The command above needs to be executed in the root of the project. Please clone it if you don't have it yet:

https://github.com/sandrogiacom/java-kubernetes

Prepare demo application

Go to java-kubernetes directory and type make to see all make options.

Create minikube machine

make k-setup starts minikube, enable ingress and create namespace "dev-to".

Create kubernetes resources

Check kubernetes folder with subdirectories app and mysql.

app-configmap.yaml

  • Application configurations with environment variables.
apiVersion: v1
kind: ConfigMap
metadata:
  name: myapp
  namespace: dev-to
data:
  DATABASE_SERVER_NAME: "mysql"
  DATABASE_USER_NAME: "myapp"
  DATABASE_USER_PASSWORD: "myapp_pwd"
Enter fullscreen mode Exit fullscreen mode

app-deployment.yaml

  • Deployment creates one replicated pod. For more information please check documentation.
apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp
  namespace: dev-to
  labels:
    app: myapp
spec:
  selector:
    matchLabels:
      app: myapp
  template:
      metadata:
        labels:
          app: myapp
      spec:
        containers:
          - name: myapp
            image: java-k8s:latest
            imagePullPolicy: Never
            ports:
              - containerPort: 8080
                name: http
            envFrom:
              - configMapRef:
                  name: myapp
Enter fullscreen mode Exit fullscreen mode

The important part here is the template that defines the name of docker image, http port and source of environment variables.

app-service.yaml

  • An abstract way to expose an application running on a set of Pods as a network service.
kind: Service
apiVersion: v1
metadata:
  name: myapp
  namespace: dev-to
spec:
  selector:
    app: myapp
  type: NodePort
  ports:
    - protocol: TCP
      port: 8080
      targetPort: 8080
Enter fullscreen mode Exit fullscreen mode

In mysql folder, we have only deployment and service files, because environment variables are in the same file.

Deploy database

make k-deploy-db create mysql deployment and service.

Check if the service is running:

kubectl get pods -n dev-to

Access database in localhost:

kubectl port-forward -n dev-to <pod_name> 3306:3306

Build application and docker image

make k-build-app build app and create docker image inside minikube machine.

make k-deploy-app deploy app on cluster.

Check if services is running:

kubectl get pods -n dev-to

Check app url

Minikube gives you the host and port to which you will access.

Type:
minikube -p dev.to service -n dev-to myapp --url

Address below will be different for you!

http://192.168.99.133:30343

curl -X GET http://192.168.99.133:30343/persons

To open app directly in web browser:
minikube -p dev.to service -n dev-to myapp

Conclusion

In this part, we learned about how to build and deploy application inside a local kubernetes cluster.

In the next part, we will see how to debug our application and some good practices for microservices.

See you soon!

Bonus

Create all in one step

To create world, just copy and paste command below on terminal. Make sure that you are in the root of the project.

make k-all

Top comments (0)