Deploy NodeJS App ke Kubernetes & Docker

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 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

Leave a Reply

Your email address will not be published. Required fields are marked *