Getting Started on Okteto Cloud with Node.js

Okteto Cloud gives you free access to sandboxed 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 Node.js sample applicatio.

Prerequisites

Step 1: Deploy the Node Sample App

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

1
2
$ git clone https://github.com/okteto/node-getting-started
$ cd node-getting-started

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

1
$ kubectl apply -f k8s.yml
1
2
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

You can also use Okteto Cloud to develop your applications directly in Kubernetes, avoiding dependencies on local installations and developing in a much more production-like environment. We are going to use the dev version of the Node Sample Application we just deployed as our remote development environment. To do that, run the following command:

1
$ okteto up
1
2
3
4
5
6
7
8
9
 ✓  Development environment activated
✓ Files synchronized
Namespace: cindy
Name: hello-world
Forward: 3000 -> 3000
9229 -> 9229

Welcome to your development environment. Happy coding!
okteto>

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

  • The Node Sample App container is updated with the docker image okteto/node:10. This image contains the required dev tools to build, test and run the Node Sample App.
  • A file synchronization service is created to keep your changes up-to-date between your local filesystem and your application pods.
  • Container ports 3000 (the application) and 9229 (the debugger) are forwarded to localhost.
  • A remote shell is started in your remote development environment. Build, test and run your application as if you were in your local machine.

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 binaries, build artifacts, git metadata or dependencies like node_modules.

To run the application in hot-reload mode, execute in the remote shell:

1
okteto> nodemon app.js
1
2
3
4
5
6
[nodemon] 2.0.2
[nodemon] to restart at any time, enter `rs`
[nodemon] watching dir(s): *.*
[nodemon] watching extensions: js,mjs,json
[nodemon] starting `node app.js`
Server running at http://0.0.0.0:3000/

Step 3: Develop directly in Okteto Cloud

Open the app.js file in your favorite local IDE and modify the response message on line 9 to be Hello world from the cluster!. Save your changes.

1
res.end(`Hello world from the cluster!`);

Okteto will synchronize your changes to your remote development environment. Take a look at the remote shell and notice how the changes are detected by nodemon automatically hot reloaded.

1
2
3
[nodemon] restarting due to changes...
[nodemon] starting `node app.js`
Server running at http://0.0.0.0:3000/

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 VS Code, one of the most popular IDEs for Node development.

Cancel the execution of nodemon app.js from the remote shell by pressing ctrl + c. Rerun your application in debug mode:

1
okteto> node --inspect-brk=0.0.0.0:9229 app.js
1
2
Debugger listening on ws://0.0.0.0:9229/73d8d793-b0c3-4310-86ee-3a42938a5df1
For help, see: https://nodejs.org/en/docs/inspector

Open the Debug extension and run the Connect to okteto debug configuration (or press the F5 shortcut):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
{
"version": "0.2.0",
"configurations": [
{
"name": "Connect to okteto",
"type": "node",
"request": "attach",
"address": "localhost",
"port": 9229,
"localRoot": "${workspaceFolder}",
"remoteRoot": "/src",
"skipFiles": [
"<node_internals>/**"
]
},
]
}

Add a breakpoint on app.js, line 9. 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…

Next steps

Congratulations, you just developed your first Kubernetes application in Okteto Cloud 🚀.

Okteto lets you develop your application while taking advantage of other services running 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.

Got questions? Join the conversation in our Kubernetes Slack channel! If you don’t have a Kubernetes slack account yet, sign up here. We’d love to hear from you.