Build, Deploy Express Nodejs App với Docker Image, Kubernetes và Gitlab Registry

I, Đôi chút về Kubernetes

Kubernetes: là dịch vụ điều phối container. Được phát triển bởi Google và tặng lại cho Tổ chức Điện toán đám mây CNCF. Kubernetes hiện là nguồn mở. Có lợi thế là tận dụng nhiều năm kinh nghiệm trong quản lý container của Google. Đó là một hệ thống toàn diện để tự động hóa việc triển khai, lập lịch và nhân rộng các ứng dụng được đóng gói và hỗ trợ nhiều công cụ container hóa như Docker.

Nếu các bạn đã tìm hiểu về docker và hiểu rõ về khái niệm docker container. Thì Kubernetes cũng tương tự như thế, nó cũng nhân rộng và quản lý các ứng dụng container.

Để tìm hiểu chi tiết về các khái niệm Pods, Node hay Image Registry, Api bạn có thể đọc thêm tại: Cùng tìm hiểu về Kubernetes Architecture

II, Build, Deploy Express Nodejs App với Docker Image, Kubernetes và Gitlab Registry

1. Cài đặt Kubernetes Client:

  • Chúng ta sử dụng command kubectl để chạy các commands của Kubernetes clusters Cài đặt kubectl binary với curl trên Linux Tải về phiên bản mới nhất với câu lệnh:
curl -LO https://storage.googleapis.com/kubernetes-release/release/`curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt`/bin/linux/amd64/kubectl

Để tải về phiên bản cụ thể, hãy thay thế phần $(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt) trong câu lệnh với một phiên bản cụ thể.

Ví dụ như, để tải về phiên bản v1.20.0 trên Linux, hãy nhập như sau:

curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.20.0/bin/linux/amd64/kubectl

Tạo kubectl binary thực thi.

chmod +x ./kubectl

Đưa bản binary vào biến môi trường PATH của bạn.

sudo mv ./kubectl /usr/local/bin/kubectl

Kiểm tra chắc chắn rằng phiên bản bạn cài là mới nhất:

kubectl version

Cài đặt với OS khác tham khảo tại: Cài đặt và cấu hình kubectl

2. Tạo Express Node.js app

Tạo Node.js app

  • Bạn mở command line lên vào gõ:
    mkdir node-server
  • Sau đó tạo liên kết đến npm
    npm init
  • Tạo file index.js, .env.example
    touch index.js env.example

Và đây là nội dung của file index.js

const express = require('express');
const dotenv = require('dotenv');
dotenv.config();
var cors = require('cors')
const app = express();
app.use(cors());

app.get('/', async (req, res) => {
   console.log('Hello world');
});

app.listen(process.env.PORT);

Tạo file .env

    cp .env.example .env

Các bạn chạy thử app sẽ thấy:

Để deploy image lên Registry gitlab tham khảo tại: Deploy Node.js app đơn giản với Docker và Gitlab Registry

3. Kubernetes

Tạo file deployment.yaml

apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: node-server-deployment
spec:
  replicas: 3
  template:
    metadata:
      labels: # labels to select/identify the deployment
        app: node-app
    spec:     # pod spec                  
      containers: 
      - name: node-server 
        image: registry.gitlab.com/web-sale/node-server:master
        ports:
        - containerPort: 3000

Và sau đó run command:

kubectl create -f deployment.yaml --save-config

Để xem các deployment đã chạy dùng lệnh:

kubectl get deployments

Xem các pods đang chạy:

kubectl get pods

Hoặc bạn có thể chạy riêng từng lệnh như sau:

  • Kiểm tra các worker nodes: kubectl get nodes
  • Tạo một deployment:
kubectl create deployment --image registry.gitlab.com/web-sale/node-server:master node-app
  • Scale up to 3 replicas:
kubectl scale deployment node-app --replicas 3
  • Expose deployment với port:
kubectl expose deployment node-app --port 3000

III. Tạm kết

Hy vọng sau bài viết các bạn đã có thể Build, Deploy Express Nodejs App với Docker Image, Kubernetes và Gitlab Registry. Rất mong được sự góp ý của các bạn


All Rights Reserved