1 Introduction
In this tutorial, you use an Oracle Cloud Infrastructure account to set up a Kubernetes cluster. Then, you deploy a Node Express application to your cluster.
Key tasks include how to:
- Set up a Kubernetes cluster on OCI.
- Set up OCI CLI to access your cluster.
- Build a Node Express application and Docker Image.
- Push your image to OCIR.
- Deploy your Node.js Docker application to your cluster.
- Connect to your application from the internet.
For additional information, see:
2 Before You Begin
To successfully perform this tutorial, you must have the following:
Requirements
- For Container Registry, Kubernetes and Load Balancers:
- A paid Oracle Cloud Infrastructure account.
- See Signing Up for Oracle Cloud Infrastructure.
- For building applications and Docker images:
- One of the following local environments:
- A MacOS or Linux machine.
- A Windows machine with Linux support. For example:
- The following applications on your local environment:
- JDK 11 and set JAVA_HOME in .bashrc.
- Python 3.6.8+ and pip installer for Python 3
- Kubernetes Client 1.11.9+
- Apache Maven 3.0+
- Docker 19.0.3+
- Git 1.8+
- Node.js 10+
- One of the following local environments:
Note: If you don’t want to set up the required applications on your local environment, you can use Oracle Cloud Infrastructure Cloud Shell instead. The advantage of using Cloud Shell is all the required tools to manage your application are already installed and ready to use. Follow the steps in:
Kubernetes Using Cloud Shell: Deploy a Spring Boot Application
Get the Applications for Linux on OCI Free Tier
If you want to use an OCI Free Tier Linux compute instance to manage your deployment, the following sections provide information to get the required software installed.
Install a Linux Instance
Install a Linux VM with an Always Free compute shape, on Oracle Cloud
Infrastructure. You will need a machine with ssh
support to connect to your Linux
instance.
- To install
an Oracle Linux VM
- Follow sections 2 and 3.
- If you have a paid account, for section 2, choose your compute options based on your offerings.
- To connect to your instance, in section 4, follow steps 1-5.
- Skip the Apache instructions.
- To install
an Ubuntu VM
- Follow sections 2 and 3.
- If you have a paid account, for section 2, choose compute options based on your offerings.
- To connect to your instance, in section 4, follow steps 1-5.
- Skip the Apache instructions.
- To update the firewall settings, in section 4, perform step 8.
3 Install Node.js on your system.
First, you will run install commands. To install Node.js and NPM, run the following commands, using the appropriate system:
Oracle Linux:
sudo yum update
Set up the Yum repo for Node.js. Then install the nodejs
package.
sudo yum install -y oracle-nodejs-release-el7
sudo yum install -y nodejs
Ubuntu:
sudo apt update
Install the nodejs
and the npm
packages.
sudo apt install -y nodejs
sudo apt install -y npm
Verify the installation.
node -v
npm -v
4 Configure Firewall (Optional)
Note: If you want to do browser-based testing of your Node application, make port 3000 available on your Linux instance.
Oracle Linux:
sudo firewall-cmd --add-service=http --permanent
sudo firewall-cmd --add-service=https --permanent
sudo firewall-cmd --reload
Ubuntu Linux:
sudo iptables -I INPUT 6 -m state --state NEW -p tcp --dport 3000 -j ACCEPT
sudo netfilter-persistent save
5 Create an Ingress Rule for your VCN (Optional)
Follow these steps to select your VCN’s public subnet and add the ingress rule.
- Open the navigation menu and click Networking, and then click Virtual Cloud Networks.
- Select the VCN you created with your compute instance.
- With your new VCN displayed, click
<
your-subnet-name>
subnet link. The public subnet information is displayed with the Security Lists at the bottom of the page. A link to the Default Security List for your VCN is displayed. - Click the Default Security List link.
- The default Ingress Rules for your VCN are displayed.
- Click Add Ingress Rules.
- An Add Ingress Rules dialog is displayed.
-
Fill in the ingress rule with the following information:
Stateless: Checked Source Type: CIDR Source CIDR: 0.0.0.0/0 IP Protocol: TCP Source port range: (leave-blank) Destination Port Range: 3000 Description: Allow HTTP connections
- Click Add Ingress Rule.
Now HTTP connections are allowed. Your VCN is configured for Node Express.
You have successfully created an ingress rule that makes your instance available from the internet.
6 Install Python 3 and Pip 3
-
Verify your current installation.
python3 --version
-
For Python 3, run the following commands:
-
Oracle Linux:
sudo yum update sudo yum install -y python3
-
Ubuntu:
sudo apt update sudo apt install -y python3
-
-
Verify the pip installation for Python3.
pip3 -V
Example output if pip for Python3 is installed:
pip <version> from xxx/lib/python3.x/site-packages/pip (python 3.x)
-
To install Pip for Python 3, run the following commands:
-
Oracle Linux:
sudo yum update sudo yum install -y python3-pip
-
Ubuntu:
sudo apt update sudo apt install -y python3-pip
-
-
Verify the pip for Python 3 installation.
pip3 -V
7 Install Kubernetes Client
-
Verify your current installation:
kubectl version --client
If you have Kubernetes, then the version is
<major-version>.<minor-version>
. For example, for version 1.20, you get the following:version.Info{Major:"1", Minor:"20"...
- To install he
kubectl
client, refer to the following links: -
Verify the installation.
kubectl version --client
8 Install Docker
-
Verify your current installation:
docker -v
-
Oracle Linux
sudo yum install docker-engine sudo systemctl start docker sudo systemctl enable docker
Note: The last command enables Docker to start on reboots.
-
Ubuntu Linux
To install Docker on Ubuntu Linux, refer to the following link: Get Docker
-
-
Verify the installation.
docker -v
9 Prepare
Prepare your environment to create and deploy your application.
Check your Service Limits
- Log in to the Oracle Cloud Infrastructure Console.
- Open the navigation menu, and click Governance and Administration. Under Governance, click Limits, Quotas and Usage.
-
Find your service limit for Regions:
Filter for the following options:
- Service: Regions
- Scope: Tenancy
- Resource: Subscribed region count
- Compartment:
<tenancy-name>
(root)
Find service limit:
- Limit Name:
subscribed-region-count
- Service Limit: minimum 2
-
Find your available Compute core count for the VM.Standard.E3.Flex shape:
Filter for the following options:
- Service: Compute
- Scope:
<first-availability-domain>
. Example:EMlr:US-ASHBURN-AD-1
- Resource: Cores for Standard.E3.Flex and BM.Standard.E3.128 Instances
- Compartment:
<tenancy-name>
(root)
Find available core count:
- Limit Name:
standard-e3-core-ad-count
- Available: minimum 1
Repeat for Scope:
<second-availability-domain>
and<third-availability-domain>
. Each region must have at least one core available for this shape. -
Find out if you have 50 GB of Block Volume available:
Filter for the following options:
- Service: Block Volume
- Scope:
<first-availability-domain>
. Example:EMlr:US-ASHBURN-AD-1
- Resource Volume Size (GB)
- Compartment:
<tenancy-name>
(root)
Find available block volume storage:
- Limit Name:
total-storage-gb
- Available: minimum 50
Repeat for Scope:
<second-availability-domain>
and<third-availability-domain>
. Each region must have at least 50 GB of block volume available. -
Find out how many Flexible Load Balancers you have available:
Filter for the following options:
- Service: LBaaS
- Scope:
<your-region>
. Example:us-ashburn-1
- Resource:
<blank>
- Compartment:
<tenancy-name>
(root)
Find the number of available flexible load balancers:
- Limit Name:
lb-flexible-count
- Available: minimum 1
Note: This tutorial creates three compute instances with a VM.Standard.E3.Flex shape for the cluster nodes. To use another shape, filter for its core count. For example, for VM.Standard2.4, filter for Cores for Standard2 based VM and BM Instances and get the count.
For a list of all shapes, see VM Standard Shapes.
Note: This tutorial creates a load balancer with a flexible shape. To use another bandwidth, filter for its count, for example 100-Mbps bandwidth or 400-Mbps bandwidth.
Create an Authorization Token
- In the Console’s top navigation bar, click the Profile menu (your avatar).
- Click your username.
- Click Auth Tokens.
- Click Generate Token.
- Give it a description.
- Click Generate Token.
- Copy the token and save it.
- Click Close.
Note: Ensure that you save your token right after you create it. You have no access to it later.
Gather Required Information
- Collect the following credential information from the Oracle Cloud Infrastructure
Console.
- Tenancy name:
<tenancy-name>
- Click your Profile menu (your avatar) and find your
Tenancy:
<tenancy-name>
.
- Click your Profile menu (your avatar) and find your
Tenancy:
- Tenancy namespace:
<tenancy-namespace>
- Click your Profile menu (your avatar).
- Click Tenancy:
<tenancy-name>
. - Copy the value for Object Storage Namespace.
Note For some accounts, tenancy name and namespace differ. Ensure that you use namespace in this tutorial.
- Tenancy OCID:
<tenancy-ocid>
- Click your Profile menu (your avatar), then click
Tenancy:
<tenancy-name>
, and copy OCID.
- Click your Profile menu (your avatar), then click
Tenancy:
- Username:
<user-name>
- Click your Profile menu (your avatar).
- User OCID:
<user-ocid>
- Click your Profile menu (your avatar), then click User Settings, and copy OCID.
- Tenancy name:
-
Find your region information.
- Region:
<region-identifier>
- In the Console’s top navigation bar, find your region. Example: US East (Ashburn).
- Find your Region Identifier from the table in Regions and Availability Domains.
- Example:
us-ashburn-1
.
- Region Key:
<region-key>
- Find your Region Key from the table in Regions and Availability Domains.
- Example:
iad
- Region:
-
Copy your authentication token from Create an Authentication Token section.
Auth Token:
<auth-token>
10 Set up OCI Command Line Interface
Install a Python Virtual Environment and Wrapper
The Python virtualenv
creates a
folder that contains all the executables and libraries for your project.
The virtualenvwrapper
is an
extension to virtualenv
. It
provides a set of commands, which makes working with virtual environments much more
pleasant. It also places all your virtual environments in one place. The virtualenvwrapper
provides
tab-completion on environment names.
-
Install
virtualenv
.pip3 install --user virtualenv
-
Install
virtualenvwrapper
.pip3 install --user virtualenvwrapper
-
Find the location of the
virtualenvwrapper.sh
script.grep -R virtualenvwrapper.sh
Example paths:
Linux example: /home/ubuntu/.local/bin/virtualenvwrapper.sh MacOS example: /usr/local/bin/virtualenvwrapper.sh
-
Configure the virtual environment wrapper in
.bashrc
.sudo vi .bashrc
Append the following text.
# set up Python env export WORKON_HOME=~/envs export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3 export VIRTUALENVWRAPPER_VIRTUALENV_ARGS=' -p /usr/bin/python3 ' source <path-to-virtualenvwrapper.sh>
Replace
<path-to-virtualenvwrapper.sh>
with its value.Based on the location of Python3 binaries in your environment, update
/usr/bin/python3
to its correct location.Save the file.
-
Activate the commands in the current window.
source ~/.bashrc
Example output:
virtualenvwrapper.user_scripts creating /home/ubuntu/envs/premkproject virtualenvwrapper.user_scripts creating /home/ubuntu/envs/postmkproject virtualenvwrapper.user_scripts creating /home/ubuntu/envs/initialize virtualenvwrapper.user_scripts creating /home/ubuntu/envs/premkvirtualenv virtualenvwrapper.user_scripts creating /home/ubuntu/envs/postmkvirtualenv virtualenvwrapper.user_scripts creating /home/ubuntu/envs/prermvirtualenv virtualenvwrapper.user_scripts creating /home/ubuntu/envs/postrmvirtualenv virtualenvwrapper.user_scripts creating /home/ubuntu/envs/predeactivate virtualenvwrapper.user_scripts creating /home/ubuntu/envs/postdeactivate virtualenvwrapper.user_scripts creating /home/ubuntu/envs/preactivate virtualenvwrapper.user_scripts creating /home/ubuntu/envs/postactivate
Install OCI CLI
-
Start a virtual environment.
workon cli-app
-
Confirm that the name of your virtual environment,
cli-app
appears in the left of your command prompt.Example:
(cli-app) ubuntu@<ubuntu-instance-name>:~$
-
Install OCI CLI.
pip3 install oci-cli
-
Test the installation:
oci --version
If everything is set up correctly, you get the version.
oci --help
Configure the OCI CLI
-
Enter the following command in your virtual environment:
oci setup config
- Enter your answers from the Gather Required Information section:
- Location for your config [$HOME/.oci/config]:
<take-default>
- User OCID:
<user-ocid>
- Tenancy OCID:
<tenancy-ocid>
- Region (e.g. us-ashburn-1):
<region-identifier>
- Location for your config [$HOME/.oci/config]:
- Enter the following information to set up your OpenSSL API encryption keys:
- Generate a new API Signing RSA key pair? [Y/n]: Y
- Directory for your keys [$HOME/.oci]:
<take-default>
- Name for your key [oci_api_key]
<take-default>
-
Deactivate the virtual environment:
deactivate
The (cli-app)
prefix in your
environment is not displayed any more.
Note: Your private key is
oci_api_key.pem
and your public key isoci_api_key_public.pem
.
Add the Public Key to Your User Account.
-
Activate the
cli-app
environment:workon cli-app
-
Display the public key.
cat $HOME/.oci/oci_api_key_public.pem
-
Copy the public key.
-
Add the public key to your user account:
- Go to the Console.
- Click your Profile menu (your avatar), and then click User Settings.
- Click API Keys.
- Click Add API Key.
- Click Paste Public Key.
- Paste value from previous step, including the lines with
BEGIN PUBLIC KEY
andEND PUBLIC KEY
. - Click Add.
Note:
- Whenever you want to use the OCI CLI, activate it with:
workon cli-app
- When you change project names,
workon
deactivates your current working environment. This way, you can quickly switch between environments.
11 Set Up a Cluster
Install and configure management options for your Kubernetes cluster. Later, deploy your application to this cluster.
Add Compartment Policy
If your username is in the Administrators group, then skip this section. Otherwise, have your administrator add the following policy to your tenancy:
allow group <the-group-your-username-belongs> to manage compartments in tenancy
With this privilege, you can create a compartment for all the resources in your tutorial.
Steps to Add the Policy
- In the top navigation bar, open the Profile menu.
- Click your username.
- In the left pane, click Groups.
- In a notepad, copy the Group Name that your username belongs.
- Open the navigation menu and click Identity & Security. Under Identity, click Policies.
- Select your compartment from the Compartment drop-down.
- Click Create Policy.
- Fill in the following information:
- Name:
manage-compartments
- Description:
Allow the group <the-group-your-username-belongs> to list, create, update, delete and recover compartments in the tenancy.
- Compartment:
<your-tenancy>(root)
- Name:
- For Policy Builder, click Customize (Advanced).
- Paste in the following policy:
- allow group
<the-group-your-username-belongs>
to manage compartments in tenancy - Click Create.
Reference: The compartments
resource-type in Verbs
+ Resource-Type Combinations for IAM
12 Create a Compartment
Create a compartment for the resources that you create in this tutorial.
- Log in to the Oracle Cloud Infrastructure Console.
- Open the navigation menu and click Identity & Security. Under Identity, click Compartments.
- Click Create Compartment.
- Fill in the following information:
- Name:
<your-compartment-name>
- Description:
Compartment for <your-description>.
- Parent Compartment:
<your-tenancy>(root)
- Name:
- Click Create Compartment.
Reference: Create a compartment
13 Add Resource Policy
If your username is in the Administrators group, then skip this section. Otherwise, have your administrator add the following policy to your tenancy:
allow group <the-group-your-username-belongs> to manage all-resources in compartment <your-compartment-name>
With this privilege, you can manage all resources in your compartment, essentially giving you administrative rights in that compartment.
Steps to Add the Policy
- Open the navigation menu and click Identity & Security. Under Identity, click Policies.
- Select your compartment from the Compartment drop-down.
- Click Create Policy.
- Fill in the following information:
- Name:
manage-<your-compartment-name>-resources
- Description:
Allow users to list, create, update, and delete resources in <your-compartment-name>.
- Compartment:
<your-tenancy>(root)
- Name:
- For Policy Builder, select the following choices:
- Policy use cases:
Compartment Management
- Common policy templates:
Let compartment admins manage the compartment
- Groups:
<the-group-your-username-belongs>
- Location:
<your-tenancy>(root)
- Policy use cases:
- Click Create.
Reference: Common Policies
Create a Cluster with ‘Quick Create’
Create a cluster with default settings and new network resources through the ‘Quick Create’ workflow.
- Sign in to the Oracle Cloud Infrastructure Console.
- Open the navigation menu and click Developer Services. Under Containers & Artifacts, click Kubernetes Clusters (OKE).
- Click Create Cluster.
- Select Quick Create.
- Click Launch Workflow. The Create Cluster dialog is displayed.
- Fill in the following information.
- Name:
<your-cluster-name>
- Compartment:
<your-compartment-name>
- Kubernetes Version:
<take-default>
- Kubernetes API Endpoint: Public Endpoint The Kubernetes cluster is hosted in a public subnet with an auto-assigned public IP address.
- Kubernetes Worker Nodes: Private Workers The Kubernetes worker nodes are hosted in a private subnet.
- Shape:
VM.Standard.E3.Flex
- Number of Nodes: 3
- Specify a custom boot volume size: Clear the check box.
- Name:
- Click Next. All your choices are displayed. Review them to ensure that everything is configured correctly.
- Click Create Cluster. The services set up for your cluster are displayed.
- Click Close.
- Get a cup of coffee. It takes a few minutes for the cluster to be created. You have successfully created a Kubernetes cluster.
14 Set Up Local Access to Your Cluster
After you create a Kubernetes cluster, set up your local system to access the cluster.
- Sign in to the Oracle Cloud Infrastructure Console.
- Open the navigation menu and click Developer Services. Under Containers & Artifacts, click Kubernetes Clusters (OKE).
- Click the link to
<your-cluster>
. The information about your cluster is displayed. - Click Access Cluster.
- Click Local Access.
-
Follow the steps provided in the dialog. They are reprinted here for your reference.
Note: If you are not in your virtual environment, enter:
workon cli-app
before you runkubectl
commands.Check your
oci
CLI version.oci -v
Make your
.kube
directory if it doesn’t exist.mkdir -p $HOME/.kube
Create a kubeconfig file for your setup. Use the information from Access Your Cluster dialog.
oci ce cluster create-kubeconfig <use data from dialog>
Export the
KUBECONFIG
environment variable.export KUBECONFIG=$HOME/.kube/config
Note: If you want to have the environment variable start in a new shell, then add
export KUBECONFIG=$HOME/.kube/config
to your~/.bashrc
file. -
Test your cluster configuration with the following commands. List clusters:
kubectl get service
Get deployment details:
kubectl describe deployment
Get pods:
kubectl get pods
Note: Since no application is deployed, the last two commands produce: “No resources found in default namespace.”
Note: To look at a different cluster, specify a different config file on the command line. Example:
kubectl --kubeconfig=</path/to/config/file>
With your cluster access set up, you are now ready to prepare your application for deployment.
15 Build a Local Application
Build a local application and a Docker image for the application.
Create a Local Application
Create your Node.js application.
- Start an OCI CLI session.
-
Create a directory for your application.
mkdir node-hello-app cd node-hello-app
-
Create a
package.json
file.Create the file:
vi package.json
In the file, input the following text, update the optional author and repository fields and then save the file:
{ "name": "node-hello-app", "version": "1.0.0", "description": "Node Express Hello application", "author": "Example User <username@example.com>", "main": "app.js", "scripts": { "start": "node app.js" }, "repository": { "type": "git", "url": "git://github.com/username/repository.git" }, "dependencies": { "express": "^4.0.0" }, "license": "UPL-1.0" }
-
Install the NPM packages.
npm install
-
Create a “Hello, World!” application.
Create the file:
vi app.js
In the file, input the following text and save the file:
const express = require('express') const app = express() port = 3000 app.get('/', function (req, res) { res.send('<h1>Hello World from Node.js!</h1>') }) app.listen(port, function() { console.log('Hello World app listening on port ' + port); })
You have successfully set up your Node.js app.
16 Run the Local Application
-
Run your Node.js application.
node app.js
The Node Express server starts and displays:
Hello World app listening on port 3000
- Test the application using
curl
or your browser.-
To test with
curl
, enter:curl -X GET http://localhost:3000
-
To test with your browser, connect a browser window to:
http://<your-ip-address>:3000
(Optional).The app returns
<h1>Hello World from Node.js!</h1>
-
- Stop the running application.
Press Ctrl+C to stop your application in the terminal window you started with.
You have successfully created a Hello World application using Node.js and Express.
References:
- For detailed information on this example, see Getting Started with Express.
17 Build a Docker Image
Next, create a Docker image for your Node.js Express application.
-
Ensure you are in the
node-hello-app
directory. -
Build a Docker image.
docker build -t node-hello-app .
You get a success message.
[INFO] BUILD SUCCESS Successfully tagged node-hello-app:latest
-
Run the Docker image:
docker run --rm -p 3000:3000 node-hello-app:latest
-
Test the application.
curl -X GET http://localhost:3000
The app returns:
<h1>Hello World from Node.js!</h1>
-
Stop the running application.
Congratulations! You have successfully created a Node.js Express image.
18 Deploy Your Docker Image
Push your Node.js Express image to OCI Container Registry. Then use the image to deploy your application.
Create a Docker Repository
- Open the navigation menu and click Developer Services. Under Containers & Artifacts, click Container Registry.
- In the left navigation, select
<your-compartment-name>
. - Click Create Repository.
-
Create a private repository with your choice of repo name:
<repo-name> = <image-path-name>/<image-name>
Example:
node-apps/node-hello-app
You are now ready to push your local image to Container Registry.
Note: Before you can push a Docker image into a registry repository, the repository must exist in your compartment. If the repository does not exist, the Docker push command does not work correctly.
Note: The slash in a repository name does not represent a hierarchical directory structure. The optional
<image-path-name>
helps to organize your repositories.
19 Push Your Local Image
With your local Docker image created, push the image to the Container Registry.
Follow these steps.
- Open your OCI CLI session.
-
Log in to OCI Container Registry:
docker login <region-key>.ocir.io
You are prompted for your login name and password.
- Username:
<tenancy-namespace>/<user-name>
- Password:
<auth-token>
- Username:
-
List your local Docker images:
docker images
The Docker images on your system are displayed. Identify the image you created in the last section:
node-hello-app
-
Tag your local image with the URL for the registry plus the repo name, so you can push it to that repo.
docker tag <your-local-image> <repo-url>/<repo-name>
-
Replace
<repo-url>
with:<region-key>.ocir.io/<tenancy-namespace>/
-
Replace
<repo-name>
with:<image-folder-name>/<image-name>
from the Create a Docker Repository section. -
Here is an example after combining both:
docker tag node-hello-app iad.ocir.io/my-namespace/node-apps/node-hello-app
In this example, the components are:
- Repo URL:
iad.ocir.io/my-namespace/
- Repo name:
node-apps/node-hello-app
Note: OCI Container Registry now supports creating a registry repo in any compartment rather than only in the root compartment (tenancy). To push the image to the repo you created, combine the registry URL with the exact repo name. OCI Container Registry matches based on the unique repo name and pushes your image.
-
-
Check your Docker images to see if the image is copied.
docker images
- The tagged image has the same image ID as your local image.
- The tagged image name is:
<region-key>.ocir.io/<tenancy-namespace>/<image-path-name>/<image-name>
-
Push the image to Container Registry.
docker push <copied-image-name>:latest
Example:
docker push iad.ocir.io/my-namespace/node-apps/node-hello-app:latest
- Open the navigation menu and click Developer Services. Under Containers & Artifacts, click Container Registry.
Find your image in Container Registry after the push command is complete.
20 Deploy the Image
With your image in Container Registry, you can now deploy your image and app.
-
Create a registry secret for your application. This secret authenticates your image when you deploy it to your cluster.
To create your secret, fill in the information in this template .
kubectl create secret docker-registry ocirsecret --docker-server=<region-key>.ocir.io --docker-username='<tenancy-namespace>/<user-name>' --docker-password='<auth-token>' --docker-email='<email-address>'
After the command runs, you get a message similar to:
secret/ocirsecret created
. -
Verify that the secret is created. Issue the following command:
kubectl get secret ocirsecret --output=yaml
The output includes information about your secret in the yaml format.
-
Determine the host URL to your registry image using the following template:
<region-code>.ocir.io/<tenancy-namespace>/<repo-name>/<image-name>:<tag>
Example:
iad.ocir.io/my-namespace/node-apps/node-hello-app:latest
-
On your system, create a file called
node-app.yaml
with the following text:Replace the following place holders:
<your-image-url>
<your-secret-name>
apiVersion: apps/v1 kind: Deployment metadata: name: node-app spec: selector: matchLabels: app: app replicas: 3 template: metadata: labels: app: app spec: containers: - name: app image: <your-image-url> imagePullPolicy: Always ports: - name: app containerPort: 3000 protocol: TCP imagePullSecrets: - name: <your-secret-name> --- apiVersion: v1 kind: Service metadata: name: node-app-lb labels: app: app annotations: service.beta.kubernetes.io/oci-load-balancer-shape: "flexible" service.beta.kubernetes.io/oci-load-balancer-shape-flex-min: "10" service.beta.kubernetes.io/oci-load-balancer-shape-flex-max: "100" spec: type: LoadBalancer ports: - port: 3000 selector: app: app
-
Deploy your application with the following command.
kubectl create -f node-app.yaml
Output:
deployment.apps/node-app created service/node-app-lb created
Note: In the
node-app.yaml
file, the code after the dashes adds a flexible load balancer.
21 Test Your App
After you deploy your app, it might take the load balancer a few seconds to load.
-
Check if the load balancer is live:
kubectl get service
Repeat the command until load balancer is assigned an IP address.
Note: While waiting for the load balancer to deploy, you can check the status of your cluster with these commands:
- Get each pods status:
kubectl get pods
- Get app status:
kubectl get deployment
- Get each pods status:
-
Use the load balancer IP address to connect to your app in a browser:
http://<load-balancer-IP-address>:3000
The browser displays:
<h1>Hello World from Node.js!</h1>
-
Undeploy your application from the cluster. (Optional) To remove your application run this command:
kubectl delete -f node-app.yaml
Output:
deployment.apps/node-app deleted service "node-app-lb" deleted
Your application is now removed from your cluster.
22 What's Next
You have successfully created a Hello World application, deployed it to a Kubernetes cluster and made it accessible on the internet, using the Node Express framework.
Check out these sites to explore more information about development with Oracle products: