Getting Started on Okteto Cloud with Java

Okteto Cloud gives you free access to secure Kubernetes namespaces, fully integrated with remote development capabilities. Develop your Kubernetes applications in Okteto Cloud and forget about slow and tedious local development forever.

This tutorial will show you how to create an account in Okteto Cloud and how to develop a Java sample application.

Prerequisites

Step 1: Deploy the Java Sample App

Get a local version of the Java Sample App by executing the following commands:

Gradle

$ git clone https://github.com/okteto/java-gradle-getting-started
$ cd java-gradle-getting-started

Maven

$ git clone https://github.com/okteto/java-maven-getting-started
$ cd java-maven-getting-started

The k8s.yml file contains the Kubernetes manifests of the Java Sample App. Deploy a dev version of the application by executing:

$ kubectl apply -f k8s.yml
deployment.apps "hello-world" created
service "hello-world" created

Open your browser and go to the URL of the application. You can get the URL by logging into Okteto Cloud and clicking on the application's endpoint:

Did you notice that you are accessing your application through an HTTPs endpoint? This is because Okteto Cloud will automatically create them for you when you deploy your application. Cool no ๐Ÿ˜Ž?

Step 2: Start your remote development environment

We are going to use the dev version of the Java Sample App we just deployed as our remote development environment. To do that, run the following command:

$ okteto up
โœ“ Development environment activated
โœ“ Files synchronized
Namespace: cindy
Name: hello-world
Forward: 8080 -> 8080
8088 -> 8088
...

The okteto up command starts a remote development environment, which means:

  • The Java Sample App container is updated with the Docker image okteto/hello-world:java-maven-dev or okteto/hello-world:java-gradle-dev, depending on the git repo you have cloned. This image contains the required dev tools to build, test, debug and run a Java application. This image contains the required dev tools to build, test, debug and run a Java application. Check the maven and gradle Dockerfiles to see how they are generated.
  • A file synchronization service is created to keep your changes up-to-date between your local filesystem and your application pods.
  • Container ports 8080 (the application) and 8088 (the debugger) are forwarded to localhost.

All of this (and more) can be customized via the okteto.yml manifest file. You can also use the file .stignore to skip files from file synchronization. This is useful to avoid synchronizing build artifacts or git metadata.

The first time you run the application, Maven/Gradle will compile your application. Wait for this process to finish. Go back to the browser, and reload the page to test that your application is running.

Step 3: Develop directly in Okteto Cloud

Open src/main/java/com/okteto/helloworld/RestHelloWorld.java in your favorite local IDE and modify the response message on line 11 to be Hello world from Okteto!. Save your changes.

package com.okteto.helloworld;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class RestHelloWorld {
@GetMapping("/")
public String sayHello() {
return "Hello world from Okteto!";
}
}

Your IDE will auto compile only the necessary *.class files which will be synchronized by Okteto to your application in Okteto Cloud. Take a look at the remote shell and notice how the changes are detected by Spring Boot and automatically hot reloaded.

To enable Spring Boot hot reloads the Java Sample App imports the spring-boot-devtools dependency.

Go back to the browser and reload the page. Your code changes were instantly applied. No commit, build or push required ๐Ÿ˜Ž!

Step 4: Debug directly in Okteto Cloud

Okteto enables you to debug your applications directly from your favorite IDE. Let's take a look at how that works in Eclipse, one of the most popular IDEs for Java development.

To enable debugging the Java Sample App defines the following JVM arguments in the Gradle/Maven configuration files: -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8088

Open the Debug configuration dialog, add a new Remote Java Application debug configuration, and point it to localhost:8088:

Click the Debug button to start a debugging session. Add a breakpoint on src/main/java/es/okteto/helloworld/RestHelloWorld.java, line 11. Go back to the browser, and reload the page. The execution will halt at your breakpoint. You can then inspect the request, the available variables, etc...

Your code is executing in Okteto Cloud, but you can debug it from your local machine without any extra services or tools. Pretty cool no? ๐Ÿ˜‰

Step 5: Redeploy the Java Sample App

Once you are happy with your changes, exit your development environment with ctrl + c.

If you want to keep your changes running, execute the following command in your local shell:

$ okteto push
i Running your build in Okteto Cloud
[+] Building 16.0s (16/16)
...
โœ“ Source code pushed to the development environment 'hello-world'

okteto push automatically builds a new image tag using the Okteto Build Service, pushes it to the Okteto Registry and redeploys your application with the new image tag ๐Ÿ’ฅ!

Alternatively, you can also rollback the Java Sample App to its original state (the one before running okteto up) by executing:

$ okteto down
โœ“ Development environment deactivated

Next steps

Congratulations, you just developed your first Kubernetes application in Okteto Cloud ๐Ÿš€.

Okteto lets you develop your applications directly in Kubernetes. This way you can:

  • Reduce local setup and eliminate integration issues by developing the same way your application runs in production
  • Test your application as fast as you type code, without typing either docker or kubectl in your inner loop cycle
  • No more CPU cycles wasted in your machine. Hardware and network just limited by the power of the cloud

Okteto uses the okteto.yml file to determine the name of your development environment, the docker image to use and where to upload your code. Check the Okteto manifest docs to customize your development environments with your own dev tools, images, and dependencies to adapt Okteto to your own application.

Find more advanced samples with Okteto in this repository or join our #okteto channel in the Kubernetes community Slack to make questions or share your feedback.