Introduction

Pada artikel kali ini saya akan membahas tentang bagaimana cara men-deploy apllikasi nodejs ke kubernetes & Docker, metode yang digunakan containerize dan serverless, latar belakang hal ini saya pelajari, supaya aplikasi yang di build dapat berjalan stable, scallingya lebih mudah, self healing dan juga serverless, yang dimana metode seperti ini sedang banyak digunakan oleh perusahaan-perusahaan di bidang technology khususnya.

Disini saya menggunakan requirement sebagai berikut:

Topology / conectp pada gambar dibawah ini :

Workflow

Adapun langkah-langkahnya saya bagi menjadi empat untuk Deploynya sebagai berikut:

Step 1 – Dockerize & build images app

Pull dahulu aplikasi berikut : https://github.com/gunawan-d/nodejs1-kube.git

Kemudian sesuaikan dan buat 

Dockerfile
 pada folder tersebut dengan denpendecies yang digunakan sebagai berikut

FROM node:14.20.1-alpine
WORKDIR /usr/src/app
COPY package.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD [ "node", "index.js" ]

  • Build 
    Dockerfile
docker build -t nama-image .
  • Run Container & test access
docker run --name app -p 3000:3000 image
  • Test access aplikasi
app from Docker

Step 2 – Push to container registry

  • Image push to docker hub, cara nya ada di link berikut ini : https://blog.vcompcenter.com/2023/04/membuat-docker-image-upload-ke-docker.html 
image app

Step 3 – Create Kubernetes Deployment, Services, ingress

Membuat 3 file manifests didalam folder aplikasi kita

  • deployment.yml
     Untuk membuat pod/container dimanage oleh Cluster Kubernetes
apiVersion: apps/v1
kind: Deployment
metadata:
name: nodeapp-deployment
namespace: dev
labels:
app: nodeapp
spec:
replicas: 1
selector:
matchLabels:
app: nodeapp
template:
metadata:
labels:
app: nodeapp
spec:
containers:
- name: nodeserver
image: user-dockerhub/namaimage:version
ports:
- containerPort: 3000

masuk ke kubeconfig minikube : 

kubectl apply -f deployment -n namespace

Check pod : 

kubectl get pod -n namespace

  • service.yml
     Service dari Pod dengan membuat Cluster pada Kube
apiVersion: v1
kind: Service
metadata:
name: nodeapp-service
spec:
selector:
app: nodeapp
ports:
- protocol: TCP
port: 5000
targetPort: 3000

Execute perinta berikut : 

kubectl apply -f service -n namespace

Check Service : 

kubectl get svc -n namespace

  • ingress.yml
     Expose aplikasi to domain

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: nodeapp-ingress
namespace: dev
spec:
rules:
- host: nodeappinfo.devops
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: nodeapp-service
port:
number: 3000

Check Ingress : 

kubectl get ingress -n namespace

Step 4 – Deploy Your App to Kubernetes & test

  • Pod
pod

  • Service & clusterIP
svc
  • ingress
ingress

Karena disini kita menggunakan local environment maka kita harus menambahkan hosts dummy supaya bisa diakses

/etc/hosts

192.168.49.2 nodeappinfo.devops

  • Testing access menggunaka LENS/IP

  • Testing access menggunakan domain local
nodeappinfo.devops

Selamat mencoba