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ả:

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ả:

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.