Nhảy tới nội dung

open-webui

Xem mã nguồn hạ tầng, bài sau đây sẽ hướng dẫn triển khai một ứng dụng chạy bằng docker-compose.yaml lên microk8s cụ thể là open-webui.

thumbnail

Tạo vùng lưu trữ

Đọc docker-compose.yaml có thể thấy chúng ta cần định nghĩa một volumes để lưu trữ /app/backend/data.

Như vậy cần yêu cầu một vùng lưu trữ từ microk8s, dưới đây là ví dụ với kích thước 1Gi

Trong mã nguồn hạ tầng tạo ./microk8s/open-webui/volume.yaml:

---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: open-webui-pvc
labels:
app: open-webui
namespace: ocopee
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi

Nhớ tên là name: open-webui-pvc trong namespace: ocopee nhé!

Triển khai lệnh tạo này lên microk8s thông qua .gitlab-ci.yml ta thêm dòng:

open_webui_volume:
stage: volume
tags:
- microk8s
script:
- microk8s kubectl apply -f ./microk8s/open-webui/volume.yaml
rules:
- if: ($CI_COMMIT_BRANCH == "development" || $CI_COMMIT_BRANCH == "main")
changes:
- microk8s/open-webui/volume.yaml

Mở cổng vào

Trong microk8s thì cổng độc lập với ứng dụng và hoàn toàn có thể mở trước hoặc sau. Ta thêm dòng sau vào ./microk8s/service.yaml

---
apiVersion: v1
kind: Service
metadata:
name: open-webui-svc
labels:
app: open-webui
namespace: ocopee
spec:
type: NodePort
selector:
app: open-webui
ports:
- protocol: TCP
nodePort: 30014
port: 80
targetPort: 8080

cổng 30014 sẽ được mở ra trên toàn bộ các node trong cụm microk8s để thông vào ứng dụng. Trong khi ứng dụng có thể được phân phối vào chạy trên một trong những node.

Chạy ứng dụng

Theo docker-compose.yaml thì ta cũng lấy ra được tên image: ghcr.io/open-webui/open-webui:main. Cấu hình sau đây liên kết vùng lưu trữ open-webui-pvc vào cục bộ ứng dụng /app/backend/data

piVersion: apps/v1
kind: Deployment
metadata:
name: open-webui
labels:
app: open-webui
namespace: ocopee
spec:
replicas: 1
selector:
matchLabels:
app: open-webui
template:
metadata:
labels:
app: open-webui
spec:
containers:
- name: open-webui
image: ghcr.io/open-webui/open-webui:main
ports:
- containerPort: 8080
resources:
requests:
cpu: "500m"
memory: "500Mi"
limits:
cpu: "1000m"
memory: "1Gi"
env:
- name: OLLAMA_BASE_URL
value: "https://ollama.ocopee.com"
tty: true
volumeMounts:
- name: open-webui-persistent-storage
mountPath: /app/backend/data
volumes:
- name: open-webui-persistent-storage
persistentVolumeClaim:
claimName: open-webui-pvc

Mình để đường dẫn tới ollama là https://ollama.ocopee.com Sử dụng .gitab-ci.yaml để đẩy cấu hình này lên cụm microk8s, chúng ta thêm:

open_webui_deployment:
stage: deployment
tags:
- microk8s
script:
- microk8s kubectl apply -f ./microk8s/open-webui/deployment.yaml
rules:
- if: ($CI_COMMIT_BRANCH == "development" || $CI_COMMIT_BRANCH == "main")
changes:
- microk8s/open-webui/deployment.yaml

Xem toàn bộ thay đổi tại

gitlab-ci.yml sẽ trông như thế này.

pipeline

Gắng tên miền

Kiểm tra ứng dụng đã chạy hay chưa bằng cách gọi trong mạng nội bộ ocopee

curl 192.168.1.157:30014

Vì lý do bảo mật, mình chỉ hướng dẫn sơ qua trong bài viết.

  1. Sao chép bất kỳ một subdomain *.ocopee.com trong t150/nginx/sites-availabes/
  2. Sửa đổi và trỏ đến cụm microk8s tương tự k8s.ocopee.com
  3. Đẩy lên nhánh main của mã nguồn hạ tầng và đợi kết quả.

Xem kết quả