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:
- Docker (ubuntu 22.04)
- minikube install di local (ubuntu 22.04)
Topology / conectp pada gambar dibawah ini :

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

Step 2 – Push to container registry
- Image push to docker hub, cara nya ada di link berikut ini : https://igunawan.com/cara-membuat-docker-image-upload-ke-docker-hub/

Step 3 – Create Kubernetes Deployment, Services, ingress
Membuat 3 file manifests didalam folder aplikasi kita
deployment.ymlUntuk 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.ymlService 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.ymlExpose 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

- Service & clusterIP

- 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

Selamat mencoba

Admin website igunawan.com, System Administrator, DevOps Engineer
