# Hướng dẫn deploy hệ thống multi-tier cho K8S ```{admonition} 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: ```yaml 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=.yaml apply -f configmap.yaml ``` Kiểm tra tạo thành công: ``` k --kubeconfig=.yaml get Configmap ``` Kết quả: ```{thumbnail} ../../../_static/img/ske/troubleshooting/huong-dan-deploy-he-thong-multitier-cho-k8s-1.png :width: 65% :alt: Image :align: center ``` ### **Bước 2. Tạo Service resource trong k8s cluster** Tạo file service.yaml với nội dung: ```yaml 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=.yaml apply -f service.yaml ``` Kiểm tra tạo thành công: ``` k --kubeconfig=.yaml get service ``` Kết quả:  ```{thumbnail} ../../../_static/img/ske/troubleshooting/huong-dan-deploy-he-thong-multitier-cho-k8s-2.png :width: 65% :alt: Image :align: center ``` ### **Bước 3. Tạo frontend app** Tạo file frontend.yaml với nội dung: ```yaml 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=.yaml apply -f frontend.yaml ``` Kiểm tra tạo thành công: ``` k --kubeconfig=.yaml get pods ``` ### **Bước 4. Tạo backend app** Tạo file backend.yaml với nội dung: ```yaml 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=.yaml apply -f backend.yaml ``` Kiểm tra tạo thành công: ``` k --kubeconfig=.yaml get pods ``` ### **Bước 5. Tạo ingress** Tạo file ingress.yaml với nội dung: ```yaml 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: http: paths: - path: / pathType: Prefix backend: service: name: fe-service port: number: 80 ``` Tạo resource: ``` k --kubeconfig=.yaml apply -f ingress.yaml ``` Kiểm tra tạo thành công: ``` k --kubeconfig=.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.