preload-icon
Technology
Aug 29.2019

Deploying a Node.js app to the Google Kubernetes Engine (GKE)

Let us show you how quickly and easily you can deploy your app to Kubernetes on Google Kubernetes Engine (GKE).

Create a new Kubernetes cluster

Deploying a Node.js app to the Google Kubernetes Engine-create a new kubernetes clucter

Enter a name for your cluster, the location, the number of nodes and the machine type. Then click More Options.

Deploying a Node.js app to the Google Kubernetes Engine-center a name for your cluster

If you need to automatically add new nodes to the cluster, then click Enable autoscaling.

Deploying a Node.js app to the Google Kubernetes Engine-enable autoscaling

You can allow access to some APIs from the cluster. For example, I allow access to Google Cloud Storage (GCS).

Deploying a Node.js app to the Google Kubernetes Engine-GCS

After your cluster has been created, click Connect.

Deploying a Node.js app to the Google Kubernetes Engine-connect

Now you’ll see a Cloud Shell containing the command; press Enter to execute it and get GKE credentials. After that, you can execute any commands with kubectl.

For example, let’s check the nodes of a cluster.

Deploying a Node.js app to the Google Kubernetes Engine-the nodes

Push docker image to Google Container Registry

I’ll use my GitHub repo, which includes a simple Node.js app, Dockerfile, and deployment.yaml. I’ll enter all the following commands in Cloud Shell.

git clone https://github.com/sonufrienko/gke-simple-app
cd gke-simple-app

Replace [PROJECT_ID] in deployment.yaml with your GCP project ID.

Get credentials to Google Container Registry

gcloud auth configure-docker

Build and push the docker image to Google Container Registry

docker build -t gcr.io/[PROJECT_ID]/app:v1 .
docker push gcr.io/[PROJECT_ID]/app:v1

Deploy docker image to Kubernetes

A deployment YAML file contains two parts:

  • Deployment – describes the containers to be deployed
  • Service – will create a LoadBalancer to expose our containers to the internet

Deploying a Node.js app to the Google Kubernetes Engine-Create deployment and service.

Create deployment and service

kubectl apply -f deployment.yaml --record

Check the deployment process

kubectl get deployments

Check the pods (containers)

kubectl get pods

Check the service and copy the external IP address (LoadBalancer)

kubectl get services

Deploying a Node.js app to the Google Kubernetes Engine-IP address

Now, you can open this URL in your browser:

http://<EXTERNAL-IP>/encrypt?secret=abc&message=i-love-you

How to release a new version?

Push a new version of a docker image to the Container Registry, change the docker image version in deployment.yaml and then run this command to set desired deployment state:

kubectl apply -f deployment.yaml --record

How to rollback a new release?

kubectl rollout undo deployment/my-app-deployment

Useful tips

Check container logs

kubectl logs <POD NAME>

Go inside a container

kubectl exec -it <POD NAME> bash

Delete a whole deployment

kubectl delete deployment my-app-deployment

Set horizontal pod autoscaling policy for deployment

kubectl autoscale deployment <DEPLOYMENT_NAME> --max 6 --min 1 --cpu-percent 60

Check horizontal pod autoscaling policy (HorizontalPodAutoscaler object)

kubectl get hpa

Check pod Events to investigate issues with pod deployment, polling docker image, etc.

 

Leave a comment

Your Name:

Enter correct name

Email:

Enter correct email

Enter correct message

Check captcha field

HOW CAN WE HELP YOU?

We will get in touch with you within 24 business hours