Hướng dẫn deploy hệ thống multi-tier cho K8S

Pre-condition

  • Đã tạo k8s cluster.

  • Đã tải file kubeconfig .

  • Sở hữu domain đã set DNS về loadbalancer hoặc IP của ingress trong k8s cluster.

  • Có thông tin database và image của app frontend, backend.

  • Đã cài đặt kubectl.

Các bước thực hiên:

Bước 1. Tạo ConfigMaps

Tạo file configmap.yaml với nội dung:

apiVersion: v1
kind: ConfigMap
metadata:
  name: configmap
data:
  env: |
    {
      "baseApiUrl": "https://geo-backend.sunteco.cloud/geo/api"
    }

Tạo resource configmap trong k8s cluster:

k --kubeconfig=<path-to-kubeconfig-file>.yaml apply -f configmap.yaml

Kiểm tra tạo thành công:

k --kubeconfig=<path-to-kubeconfig-file>.yaml get Configmap

Kết quả:

Image

Bước 2. Tạo Service resource trong k8s cluster

Tạo file service.yaml với nội dung:

apiVersion: v1
kind: Service
metadata:
  name: fe-service
  labels:
    app: fe-app
spec:
  selector:
    app: fe-app
  ports:
    - protocol: TCP
      port: 80
      targetPort: 3000

Tạo resource:

k --kubeconfig=<path-to-kubeconfig-file>.yaml apply -f service.yaml

Kiểm tra tạo thành công:

k --kubeconfig=<path-to-kubeconfig-file>.yaml get service

Kết quả:

Image

Bước 3. Tạo frontend app

Tạo file frontend.yaml với nội dung:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: fe-app
spec:
  replicas: 1
  selector:
    matchLabels:
      app: fe-app
  template:
    metadata:
      labels:
        app: fe-app
    spec:
      containers:
        - name: fe-app
          image: binhdv37/geo-frontend:1
          ports:
            - containerPort: 3000
          env:
            - name: BE_SERVICE_URL
              value: "http://be-service"
          volumeMounts:
            - name: config-volume
              mountPath: /usr/share/nginx/html/env.json
              subPath: env.json
      volumes:
        - name: config-volume
          configMap:
            name: configmap
            items:
              - key: env
                path: env.json

Tạo resource:

k --kubeconfig=<path-to-kubeconfig-file>.yaml apply -f frontend.yaml

Kiểm tra tạo thành công:

k --kubeconfig=<path-to-kubeconfig-file>.yaml get pods

Bước 4. Tạo backend app

Tạo file backend.yaml với nội dung:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: be-app
spec:
  replicas: 1
  selector:
    matchLabels:
      app: be-app
  template:
    metadata:
      labels:
        app: be-app
    spec:
      containers:
        - name: be-app
          image: binhdv37/geo-backend:3
          ports:
            - containerPort: 8080
          env:
            - name: SPRING_DATASOURCE_URL
              value: jdbc:mysql://10.106.114.141:3306/support_geometry?autoreconnect=true
            - name: SPRINGT_DATASOURCE_USERNAME
              value: root
            - name: SPRING_DATASOURCE_PASSWORD
              value: mypassword
            - name: DB_HOST
              value: "10.106.114.141"
            - name: DB_PORT
              value: "3306"
            - name: DB_USERNAME
              value: "root"
            - name: DB_PASSWORD
              value: "mypassword"

Tạo resource:

k --kubeconfig=<path-to-kubeconfig-file>.yaml apply -f backend.yaml

Kiểm tra tạo thành công:

k --kubeconfig=<path-to-kubeconfig-file>.yaml get pods

Bước 5. Tạo ingress

Tạo file ingress.yaml với nội dung:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: fe-ingress
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
    - host: <your-domain>
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: fe-service
                port:
                  number: 80

Tạo resource:

k --kubeconfig=<path-to-kubeconfig-file>.yaml apply -f ingress.yaml

Kiểm tra tạo thành công:

k --kubeconfig=<path-to-kubeconfig-file>.yaml get ingress

Sau khi tạo xong ingress thì sẽ truy cập được ứng dụng thông qua domain của bạn. Hãy mở trình duyệt và truy cập.