先创建一个PV用于存储
jsvi open-webui-pv.yaml
ymlapiVersion: v1
kind: PersistentVolume
metadata:
name: open-webui-pv # PV 名称,需与后续绑定逻辑对应
spec:
capacity:
storage: 10Gi # 容量必须与 PVC 请求的 10Gi 一致
accessModes:
- ReadWriteOnce # 访问模式必须与 PVC 的 ReadWriteOnce 一致
hostPath:
path: /data/open-webui # 节点上的本地目录(需在目标节点手动创建)
type: DirectoryOrCreate # 若目录不存在,自动创建
storageClassName: "" # 存储类必须与 PVC 一致(空,表示不使用存储类)
persistentVolumeReclaimPolicy: Delete # PVC 删除后,自动删除 PV(避免残留 Released 状态)
# 可选:限制 PV 只能被特定节点使用(若需要固定节点,取消注释并修改节点名称)
# nodeAffinity:
# required:
# nodeSelectorTerms:
# - matchExpressions:
# - key: kubernetes.io/hostname
# operator: In
# values:
# - k8s-node01 # 替换为你的目标节点名称(如 k8s-node01)
然后每个节点都创建好存放的目录
jsmkdir -p /data/open-webui
然后启动
jskubectl apply -f open-webui-pv.yaml
再写一个open-webui.yaml
jsvi open-webui.yaml
jsapiVersion: v1
kind: PersistentVolume
metadata:
name: open-webui-pv # PV 名称,需与后续绑定逻辑对应
spec:
capacity:
storage: 10Gi # 容量必须与 PVC 请求的 10Gi 一致
accessModes:
- ReadWriteOnce # 访问模式必须与 PVC 的 ReadWriteOnce 一致
hostPath:
path: /data/open-webui # 节点上的本地目录(需在目标节点手动创建)
type: DirectoryOrCreate # 若目录不存在,自动创建
storageClassName: "" # 存储类必须与 PVC 一致(空,表示不使用存储类)
persistentVolumeReclaimPolicy: Delete # PVC 删除后,自动删除 PV(避免残留 Released 状态)
# 可选:限制 PV 只能被特定节点使用(若需要固定节点,取消注释并修改节点名称)
# nodeAffinity:
# required:
# nodeSelectorTerms:
# - matchExpressions:
# - key: kubernetes.io/hostname
# operator: In
# values:
# - k8s-node01 # 替换为你的目标节点名称(如 k8s-node01)
[root@k8s-master01 openwebAI]#
[root@k8s-master01 openwebAI]# cat open-webui.yaml
# 持久化存储声明(不变)
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: open-webui-data
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
storageClassName: ""
---
# Deployment(更新资源配置)
apiVersion: apps/v1
kind: Deployment
metadata:
name: open-webui
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
env:
- name: OLLAMA_BASE_URL
value: "http://192.168.201.120:11434"
# 资源配置:最少2核4G,最多4核8G(核心修改)
resources:
requests: # 启动时至少分配的资源(保证基础运行)
cpu: 2000m # 2核(1核=1000m)
memory: 2Gi # 4G内存(1Gi≈1G)
limits: # 最多能使用的资源(避免占用过多)
cpu: 3000m # 4核
memory: 4Gi # 8G内存
volumeMounts:
- name: data-volume
mountPath: /app/backend/data
volumes:
- name: data-volume
persistentVolumeClaim:
claimName: open-webui-data
---
# Service(不变)
apiVersion: v1
kind: Service
metadata:
name: open-webui-service
spec:
selector:
app: open-webui
type: NodePort
ports:
- port: 8080
targetPort: 8080
nodePort: 30000
启动
jskubectl apply -f open-webui.yaml
这时就分配到该节点运行了,用该节点的IP+service暴露的端口号30000进行访问


本文作者:松轩(^U^)
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!