Chuyển tới nội dung

Triển khai ecommerce trên gke

1. Chuẩn bị môi trường

Get code về máy tính. Edit config file thay thế tonytechlab.com bằng domain của bạn bằng notepad ++

Trong notepad ++ ta chọn File  > Open Folder as Workspace sau đó mở tới  folder dự án và bấm Control + F sau đó chọn File in file

Thay thế domain của bạn vào ở đây tôi thay đổi thành diendo.name.vn

Phần database, trong file my.cnf chỉnh sửa bind-address = 0.0.0.0

Trong source backend, sửa file C:\Project\Fullstack-Ecommerce-Web-GKE\02-backend_spring-boot-rest-api\src\main\resources\application.properties

jdbc:mysql://db-backend.diendo.name.vn:3306/full-stack-ecommerce

Sau khi sửa các thông tin, ta nén lại và up lên server cài rancher (Đây cũng là server cài sẵn docker để build các images cần thiết cho web app)

Sau khi upload code lên server, tạo thư mục project, copy file nẽn của code vào thư mục project và tiến hành giải nén

2. Đóng gói image và đưa lên docker hub

Đóng gói các images:

beobeo/ecommerce-gke-db:v1
beobeo/ecommerce-gke-frontend:v1
beobeo/ecommerce-gke-backend:v1

2.1 Đóng gói image MariaDB

cd ~$HOME/projects/01-starter-files_db-scripts/
sudo docker build -t beobeo/ecommerce-gke-db:v1 .

2.2 Build image Backend

cd ~$HOME/projects/02-backend_spring-boot-rest-api
sudo docker build -t beobeo/ecommerce-gke-backend:v1 .

2.3 Build image FrontEnd

cd ~$HOME/projects/03-frontend_angular-ecommerce
sudo docker build -t beobeo/ecommerce-gke-backend:v1 .

2.4 Push image lên dockerhub

docker login -u beobeo
sudo docker push beobeo/ecommerce-gke-db:v1
sudo docker push beobeo/ecommerce-gke-frontend:v1
sudo docker push beobeo/ecommerce-gke-backend:v1

3. Setup ecommerce

3.1 Setup database server

– Tạo docker container ecommerce-db bằng cách trên docker host trên GKE chạy lệnh bên dưới. Trong case của Tony mình tận dụng server rancher làm ecommerce-db luôn:

sudo docker run -d --name mariadb  \
-v /data/mysql:/var/lib/mysql  \
-p 3306:3306 beobeo/ecommerce-gke-db:v1

Mở port 3306 trên host cài mariadb GKE

Truy cập vào container mariadb

docker exec -it mariadb /bin/bash

Kiểm tra kết quả

3.2 Triển khai Full stack trên GKE

Gộp các file Deploymnet.yml, ClusterIP.yml, Ingress.yml và một file Deployment.yml (có nội dung như sau)

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: ecommerce-frontend-selector
  name: ecommerce-frontend-deployment
  namespace: beobeo-ecommerce
spec:
  progressDeadlineSeconds: 600
  replicas: 2
  revisionHistoryLimit: 11
  selector:
    matchLabels:
      app: ecommerce-frontend-selector
  strategy:
    rollingUpdate:
      maxSurge: 25%
      maxUnavailable: 25%
    type: RollingUpdate
  template:
    metadata:
      labels:
        app: ecommerce-frontend-selector
      namespace: beobeo-ecommerce
    spec:
      containers:
        - image: beobeo/ecommerce-gke-frontend:v1
          imagePullPolicy: Always
          name: ecommerce-frontend
          ports:
            - containerPort: 80
              name: tcp
              protocol: TCP

---
apiVersion: v1
kind: Service
metadata:
  name: ecommerce-frontend-clusterip
  namespace: beobeo-ecommerce
spec:
  internalTrafficPolicy: Cluster
  ipFamilies:
    - IPv4
  ipFamilyPolicy: SingleStack
  ports:
    - name: tcp
      port: 80
      protocol: TCP
      targetPort: 80
  selector:
    app: ecommerce-frontend-selector
  sessionAffinity: None
  type: ClusterIP
 
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ecommerce-frontend-ingress
  namespace: beobeo-ecommerce
spec:
  ingressClassName: nginx
  rules:
    - host: ecommerce.diendo.name.vn
      http:
        paths:
          - backend:
              service:
                name: ecommerce-frontend-clusterip
                port:
                  number: 80
            path: /
            pathType: Prefix
---
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: ecommerce-backend-selector
  name: ecommerce-backend-deployment
  namespace: beobeo-ecommerce
spec:
  progressDeadlineSeconds: 600
  replicas: 2
  revisionHistoryLimit: 11
  selector:
    matchLabels:
      app: ecommerce-backend-selector
  strategy:
    rollingUpdate:
      maxSurge: 25%
      maxUnavailable: 25%
    type: RollingUpdate
  template:
    metadata:
      labels:
        app: ecommerce-backend-selector
      namespace: beobeo-ecommerce
    spec:
      containers:
        - image: beobeo/ecommerce-gke-backend:v1
          imagePullPolicy: Always
          name: ecommerce-backend
          ports:
            - containerPort: 8080
              name: tcp
              protocol: TCP

---
apiVersion: v1
kind: Service
metadata:
  name: ecommerce-backend-clusterip
  namespace: beobeo-ecommerce
spec:
  internalTrafficPolicy: Cluster
  ipFamilies:
    - IPv4
  ipFamilyPolicy: SingleStack
  ports:
    - name: tcp
      port: 8080
      protocol: TCP
      targetPort: 8080
  selector:
    app: ecommerce-backend-selector
  sessionAffinity: None
  type: ClusterIP
 
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ecommerce-backend-ingress
  namespace: beobeo-ecommerce
spec:
  ingressClassName: nginx
  rules:
    - host: api-ecommerce.diendo.name.vn
      http:
        paths:
          - backend:
              service:
                name: ecommerce-backend-clusterip
                port:
                  number: 8080
            path: /
            pathType: Prefix

4. Triển khai hệ thống bằng rancher

Tạo project và namespace

Chọn project namespace sau đó Import file Deployment.yml đã tạo ở trên

– Trên cụm GKE ta tiến hành lấy IP Public của loadbalangcer bằng lệnh:

kubectl get ingress -A

Lấy được IP của Loadbalancer trỏ domain về đúng IP

Kết quả:

Liên hệ