+1

[CI-CD] Triển khai Ứng dụng trên Nginx với Kubernetes Engine

Tiếp nối với bài hôm trước Triển khai Ứng dụng lên Kubernetes Engine của Google Cloud Platform thì hôm nay mình sẽ giới thiệu cách để sử dụng thêm Nginx 😋 🚀

Repository để các bạn có thể kéo về tham khảo: Kubernetes-Nginx-CI-CD-Template

Cấu hình nginx

Đầu tiên, để sử dụng Nginx, chúng ta cần tạo file nginx.conf để cấu hình hoạt động. Dưới đây là một ví dụ cấu hình cơ bản để lắng nghe trên cổng 80 và chuyển hướng từ service nodejs-service:

events {}

http {
  server {
    listen 80;

    location / {
      proxy_pass http://nodejs-service;
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
    }
  }
}

Sau đó, tạo Dockerfile để build image Nginx và copy file nginx.conf vào image:

FROM nginx:latest

COPY nginx/nginx.conf /etc/nginx/nginx.conf

Build image nginx và push lên google container registry

Như vậy là mình đã cấu hình xong để triển khai Nginx. Tiếp theo, thêm lệnh vào GitHub workflow để build image và đẩy lên GCR:

- name: Build and push Nginx Docker image
        run: |
          docker build -t gcr.io/${{ secrets.GCP_PROJECT_ID }}/nginx-app:latest -f nginx/Dockerfile .
          docker push gcr.io/${{ secrets.GCP_PROJECT_ID }}/nginx-app:latest

Tạo file config k8s

Sau khi image được đẩy lên GCR, chúng ta tạo file cấu hình để deploy lên Kubernetes. Dưới đây là file nginx-deployment.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
        - name: nginx
          image: gcr.io/cdtest-406103/nginx-app:latest
          ports:
            - containerPort: 80

Trong đó

  • Deployment: Mô tả cách Kubernetes sẽ chạy ứng dụng.
  • replicas: Số lượng bản sao của ứng dụng Nginx sẽ chạy, ở đây là 2 bản sao.
  • selector: Chỉ định Pods nào sẽ được triển khai, dựa trên labels.
  • template: Định dạng cho các Pods mới.
  • containers: Cài đặt container.
  • image: Image của Nginx sẽ được sử dụng.
  • ports: Cổng mà Nginx sẽ lắng nghe yêu cầu, ở đây là cổng 80.

File nginx-service.yaml để cấu hình service:

apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  selector:
    app: nginx
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
  type: LoadBalancer

Trong đó:

  • Service: Định nghĩa cách truy cập vào ứng dụng.
  • selector: Xác định các Pods mà Service sẽ định tuyến yêu cầu đến, dựa trên labels.
  • ports: Cấu hình cổng mà Service sẽ lắng nghe yêu cầu và cổng mà Pods sẽ sử dụng để xử lý các yêu cầu, ở đây đều là cổng 80.

Apply file config vào github action để tiến hành deploy

Trong github workflow sẽ cần apply 2 file config mình vừa tạo ở bước trên để tiến hành deploy k8s, bạn thêm dòng này vào github workflow nha

- name: Apply Nginx Deployment
        run: |
          kubectl apply -f k8s/nginx-deployment.yaml
          kubectl apply -f k8s/nginx-service.yaml

Như vậy đã xong quá trình deploy lên k8s sử dụng nodejs, các bạn có thắc mắc cứ comment bên dưới nha 🥰


All Rights Reserved

Viblo
Let's register a Viblo Account to get more interesting posts.