SUSE AI 使用随记

SUSE AI 是一个开放的生成式人工智能解决方案,主要包含以下组件:

  1. Ollama:简化本地设备上大型语言模型 (LLM) 安装和管理的平台。
  2. Open WebUI:Ollama LLM 运行程序的可扩展网络用户界面。
  3. Milvus:为生成式人工智能应用构建的向量数据库,性能损失最小。

部署参考链接:https://documentation.suse.com/suse-ai/1.0/html/AI-deployment-intro/index.html

安装前准备

安装 SUSE AI 前需要安装 cert-manager:

1
2
3
4
5
6
7
8
helm repo add jetstack https://charts.jetstack.io
helm repo update
helm install \
cert-manager jetstack/cert-manager \
--namespace cert-manager \
--create-namespace \
--version v1.15.3 \
--set crds.enabled=true

还需要安装中间件使用的存储,这里使用 local-path:

1
kubectl apply -f https://raw.githubusercontent.com/rancher/local-path-provisioner/v0.0.31/deploy/local-path-storage.yaml

其它安装前准备:

1
2
3
4
5
6
7
8
9
10
11
kubectl create namespace suse-private-ai

kubectl create secret docker-registry application-collection \
--docker-server=dp.apps.rancher.io \
--docker-username=APPCO_USERNAME \
--docker-password=APPCO_USER_TOKEN \
-n suse-private-ai

helm registry login dp.apps.rancher.io/charts \
-u APPCO_USERNAME \
-p APPCO_USER_TOKEN

安装 Milvus

准备 Milvus 配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
cat <<EOF > milvus_custom_overrides.yaml
global:
imagePullSecrets:
- application-collection
cluster:
enabled: True
standalone:
persistence:
persistentVolumeClaim:
storageClass: local-path
etcd:
replicaCount: 1
persistence:
storageClassName: local-path
minio:
mode: standalone
replicas: 1
rootUser: "admin"
rootPassword: "adminminio"
persistence:
storageClass: local-path
resources:
requests:
memory: 1024Mi
persistence:
enabled: true
storageClass: local-path
accessMode: ReadWriteOnce
size: 10Gi
kafka:
enabled: true
name: kafka
replicaCount: 3
controller:
statefulset:
replicas: 1
broker:
enabled: true
statefulset:
replicas: 1
cluster:
listeners:
client:
protocol: 'PLAINTEXT'
controller:
protocol: 'PLAINTEXT'
persistence:
enabled: true
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
storageClassName: "local-path"
# 可选配置
extraConfigFiles:
user.yaml: |+
trace:
exporter: jaeger
sampleFraction: 1
jaeger:
url: "http://opentelemetry-collector.observability.svc.cluster.local:14268/api/traces"
EOF

如需自定义镜像仓库:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
cat <<EOF > milvus_custom_overrides.yaml
image:
all:
registry: harbor.warnerchen.com
repository: appco/containers/milvus
cluster:
enabled: True
standalone:
persistence:
persistentVolumeClaim:
storageClass: local-path
etcd:
replicaCount: 1
persistence:
storageClassName: local-path
minio:
mode: standalone
replicas: 1
rootUser: "admin"
rootPassword: "adminminio"
persistence:
storageClass: local-path
resources:
requests:
memory: 1024Mi
persistence:
enabled: true
storageClass: local-path
accessMode: ReadWriteOnce
size: 10Gi
kafka:
enabled: true
name: kafka
replicaCount: 3
controller:
statefulset:
replicas: 1
broker:
enabled: true
statefulset:
replicas: 1
cluster:
listeners:
client:
protocol: 'PLAINTEXT'
controller:
protocol: 'PLAINTEXT'
persistence:
enabled: true
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
storageClassName: "local-path"
# 可选配置
extraConfigFiles:
user.yaml: |+
trace:
exporter: jaeger
sampleFraction: 1
jaeger:
url: "http://opentelemetry-collector.observability.svc.cluster.local:14268/api/traces"
EOF

安装 Milvus:

1
2
3
helm upgrade --install milvus oci://dp.apps.rancher.io/charts/milvus \
-n suse-private-ai \
--version 4.2.2 -f milvus_custom_overrides.yaml

安装 Ollama

准备 Ollama 配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
cat <<EOF > ollama_custom_overrides.yaml
global:
imagePullSecrets:
- application-collection
replicaCount: 1
runtimeClassName: "nvidia"
ingress:
enabled: false
defaultModel: "deepseek-r1:1.5b"
ollama:
models:
pull:
- "deepseek-r1:1.5b"
run:
- "deepseek-r1:1.5b"
gpu:
enabled: true
type: 'nvidia'
number: 1
persistentVolume:
enabled: true
storageClass: local-path
EOF

如需自定义镜像仓库:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
cat <<EOF > ollama_custom_overrides.yaml
image:
repository: appco/containers/ollama
registry: harbor.warnerchen.com
pullPolicy: IfNotPresent
replicaCount: 1
runtimeClassName: "nvidia"
ingress:
enabled: false
defaultModel: "deepseek-r1:1.5b"
ollama:
models:
pull:
- "deepseek-r1:1.5b"
run:
- "deepseek-r1:1.5b"
gpu:
enabled: true
type: 'nvidia'
number: 1
persistentVolume:
enabled: true
storageClass: local-path
EOF

安装 Ollama:

1
2
3
helm upgrade --install ollama oci://dp.apps.rancher.io/charts/ollama \
-n suse-private-ai \
--version 0.6.8 -f ollama_custom_overrides.yaml

安装 Open WebUI

准备 Open WebUI 配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
cat <<EOF > owui_custom_overrides.yaml
global:
imagePullSecrets:
- application-collection
ollamaUrls:
- http://ollama.suse-private-ai.svc.cluster.local:11434
persistence:
enabled: true
storageClass: local-path
ollama:
enabled: false
pipelines:
enabled: false
ingress:
enabled: true
class: "nginx"
annotations:
nginx.ingress.kubernetes.io/ssl-redirect: "true"
host: suse-ai-open-webui.warnerchen.com
tls: true
extraEnvVars:
- name: DEFAULT_MODELS
value: "deepseek-r1:1.5b"
- name: DEFAULT_USER_ROLE
value: "user"
- name: WEBUI_NAME
value: "SUSE AI"
- name: GLOBAL_LOG_LEVEL
value: INFO
- name: RAG_EMBEDDING_MODEL
value: "sentence-transformers/all-MiniLM-L6-v2"
- name: VECTOR_DB
value: "milvus"
- name: MILVUS_URI
value: http://milvus.suse-private-ai.svc.cluster.local:19530
- name: INSTALL_NLTK_DATASETS
value: "true"
# 可选配置
- name: ENABLE_OTEL
value: "true"
- name: OTEL_EXPORTER_OTLP_ENDPOINT
value: http://opentelemetry-collector.observability.svc.cluster.local:4317
EOF

如需自定义镜像仓库:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
cat <<EOF > owui_custom_overrides.yaml
image:
registry: harbor.warnerchen.com
repository: appco/containers/open-webui
pullPolicy: IfNotPresent
ollamaUrls:
- http://ollama.suse-private-ai.svc.cluster.local:11434
persistence:
enabled: true
storageClass: local-path
ollama:
enabled: false
pipelines:
enabled: false
ingress:
enabled: true
class: "nginx"
annotations:
nginx.ingress.kubernetes.io/ssl-redirect: "true"
host: suse-ai-open-webui.warnerchen.com
tls: true
extraEnvVars:
- name: DEFAULT_MODELS
value: "deepseek-r1:1.5b"
- name: DEFAULT_USER_ROLE
value: "user"
- name: WEBUI_NAME
value: "SUSE AI"
- name: GLOBAL_LOG_LEVEL
value: INFO
- name: RAG_EMBEDDING_MODEL
value: "sentence-transformers/all-MiniLM-L6-v2"
- name: VECTOR_DB
value: "milvus"
- name: MILVUS_URI
value: http://milvus.suse-private-ai.svc.cluster.local:19530
- name: INSTALL_NLTK_DATASETS
value: "true"
# 可选配置
- name: ENABLE_OTEL
value: "true"
- name: OTEL_EXPORTER_OTLP_ENDPOINT
value: http://opentelemetry-collector.observability.svc.cluster.local:4317
EOF

安装 Open WebUI:

1
2
3
helm upgrade --install open-webui oci://dp.apps.rancher.io/charts/open-webui \
-n suse-private-ai \
--version 0.6.9 -f owui_custom_overrides.yaml

等待所有 Pod 正常运行:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
root@suse-o11y-01:~# helm -n suse-private-ai ls
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
milvus suse-private-ai 1 2025-08-12 10:15:32.150413955 +0800 CST deployed milvus-4.2.2 2.4.6
ollama suse-private-ai 1 2025-08-12 11:34:18.24052066 +0800 CST deployed ollama-1.16.0 0.6.8
open-webui suse-private-ai 2 2025-08-12 15:48:17.10667584 +0800 CST deployed open-webui-6.13.0 0.6.9

root@suse-o11y-01:~# kubectl -n suse-private-ai get pod
NAME READY STATUS RESTARTS AGE
milvus-datacoord-d46f8c674-67m2v 1/1 Running 2 (2d8h ago) 2d8h
milvus-datanode-58664f8c67-4ms2s 1/1 Running 2 (2d8h ago) 2d8h
milvus-etcd-0 1/1 Running 0 2d8h
milvus-indexcoord-849df85749-tvt2s 1/1 Running 0 2d8h
milvus-indexnode-7bbb6bd84-znpb6 1/1 Running 1 (2d8h ago) 2d8h
milvus-kafka-broker-0 1/1 Running 0 2d8h
milvus-kafka-controller-0 1/1 Running 0 2d8h
milvus-minio-7f9f9b4d76-949cr 1/1 Running 0 2d8h
milvus-proxy-57c54df4d5-ggcnk 1/1 Running 2 (2d8h ago) 2d8h
milvus-querycoord-85845fcf56-kt7h5 1/1 Running 2 (2d8h ago) 2d8h
milvus-querynode-67fff4f47d-82482 1/1 Running 2 (2d8h ago) 2d8h
milvus-rootcoord-bd7958978-ssrmz 1/1 Running 2 (2d8h ago) 2d8h
ollama-85cf4f777b-r9nkv 1/1 Running 0 79m
open-webui-0 1/1 Running 0 2m45s
open-webui-redis-7c65fd96bb-67n6s 1/1 Running 0 2d6h

访问 Open WebUI:

选择模型进行对话:

可以看到 Ollama 调用 GPU:

Author

Warner Chen

Posted on

2025-02-19

Updated on

2025-08-14

Licensed under

You need to set install_url to use ShareThis. Please set it in _config.yml.
You forgot to set the business or currency_code for Paypal. Please set it in _config.yml.

Comments

You forgot to set the shortname for Disqus. Please set it in _config.yml.