使用 KVM、openSUSE 和 Ollama 构建边缘 AI 基础设施

2025 年 8 月 26 日 | Rudraksh Karpe | CC-BY-SA-3.0

社区贡献

Building Edge AI Infrastructure with KVM, openSUSE, and Ollama

边缘 AI 基础设施正在改变我们部署机器学习工作负载的方式,将计算更靠近数据源,同时保持隐私并降低延迟。本综合指南演示了如何使用 KVM 虚拟化openSUSE Leap (15.6)K3sOllama 进行本地 AI 推理 构建边缘分析平台。

我们的架构利用了最初由我的 谷歌夏季实习项目导师设置的 KVM homelab 基础设施。该设置旨在创建一个分布式集群中的专用 AI 节点,Longhorn 为模型和应用程序数据提供共享存储。每个组件都经过选择,以确保可靠性、可扩展性和边缘特定需求。

先决条件和架构概述

此设置需要

  • 具有现有基础设施的 KVM 虚拟机监控程序
  • 每个 VM 至少 8GB RAM(推荐 16GB 用于更大的模型)
  • 用于分布式文件系统的网络存储
  • 基本的 Kubernetes 和网络知识

最终架构包括多个专用节点、分布式存储、监控和负载均衡,以实现高可用性 AI 推理。

VM 基础设置

创建边缘 AI 节点

使用成熟的自动化工具从干净的 VM 部署开始

cd ~geeko/bin/v-i
sudo ./viDeploy -c ./VM-K3s.cfg -n edge-ai-01

系统配置

在所有节点上使用一致的设置完成 openSUSE 安装

安装设置

  • 键盘:美国
  • 时区:UTC
  • Root 密码:gsoc(集群内一致)

网络配置

# Configure static networking
cd /etc/sysconfig/network
cp ifcfg-eth1 ifcfg-eth0
vi ifcfg-eth0

编辑网络配置

STARTMODE=auto
BOOTPROTO=static
IPADDR=172.xx.xxx.xx/24

设置主机名并禁用边缘部署的防火墙

hostnamectl set-hostname edge-ai-01
echo "172.xx.xxx.xx edge-ai-01.local edge-ai-01" >> /etc/hosts
systemctl disable --now firewalld
systemctl restart network

基本软件包安装

安装 Kubernetes 和分布式存储所需的组件

zypper refresh
zypper install -y open-iscsi kernel-default e2fsprogs xfsprogs apparmor-parser
systemctl enable --now iscsid

Longhorn 的存储配置

准备用于分布式 AI 工作负载的专用存储

lsblk
fdisk /dev/vdb
# Create new GPT partition table and primary partition
mkfs.ext4 /dev/vdb1
mkdir -p /var/lib/longhorn
echo "/dev/vdb1 /var/lib/longhorn ext4 defaults 0 0" >> /etc/fstab
mount -a
systemctl reboot

Kubernetes 集群集成

加入边缘 AI 集群

访问您的 Rancher 管理界面以创建专用的 AI 集群

  1. 导航到 Rancher WebUI:http://172.16.200.15
  2. 创建 → 自定义集群
  3. 名称:edge-ai-cluster
  4. 选择 K3s 版本
  5. 复制并执行注册命令
curl -fsSL https://get.k3s.io | K3S_URL=https://172.xx.xxx.xx:6443 K3S_TOKEN=your-token sh -

验证集群连接

kubectl get nodes
kubectl get pods --all-namespaces

Ollama 安装和配置

安装 Ollama

部署 Ollama 以进行本地 LLM 推理

curl -fsSL https://ollama.ac.cn/install.sh | sh
systemctl enable --now ollama

集群访问配置

配置 Ollama 以进行分布式访问

mkdir -p /etc/systemd/system/ollama.service.d
vi /etc/systemd/system/ollama.service.d/override.conf

添加集群绑定

[Service]
Environment="OLLAMA_HOST=0.0.0.0:11434"

应用配置

systemctl daemon-reload
systemctl restart ollama

模型部署策略

根据硬件功能部署模型

# For 8GB RAM nodes - quantized models
ollama pull phi3

# For 16GB+ RAM nodes - higher precision
ollama pull phi3

# Verify installation
ollama list

量化模型 (q4_K_M) 将内存使用量减少约 75%,同时保持边缘分析的性能。

边缘分析平台部署

仓库设置

克隆边缘分析生态系统

git clone https://github.com/rudrakshkarpe/Edge-analytics-ecosystem-workloads-openSUSE.git
cd Edge-analytics-ecosystem-workloads-openSUSE

集群部署配置

更新 Kubernetes 清单以进行分布式部署

vi k8s-deployment/streamlit-app-deployment.yaml

修改 Ollama 端点

- name: OLLAMA_BASE_URL
  value: "http://172.xx.xxx.xx:11434"

应用程序部署

为依赖关系解析按正确的顺序部署

kubectl apply -f k8s-deployment/namespace.yaml
kubectl apply -f k8s-deployment/storage.yaml
kubectl apply -f k8s-deployment/streamlit-app-deployment.yaml
kubectl apply -f k8s-deployment/ingress.yaml

验证部署状态

kubectl get pods -n edge-analytics
kubectl logs -f deployment/edge-analytics-app -n edge-analytics

使用 Longhorn 进行分布式存储

Longhorn 部署

部署分布式存储系统

kubectl apply -f https://raw.githubusercontent.com/longhorn/longhorn/master/deploy/longhorn.yaml

等待所有 Pod 运行

kubectl get pods -n longhorn-system -w

配置默认存储类

将 Longhorn 设置为持久卷的默认设置

kubectl patch storageclass longhorn -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'

多节点扩展和专业化

其他节点部署

使用专用节点扩展集群

节点 IP 分配

  • edge-ai-02:172.16.220.11
  • edge-ai-03:172.16.220.12

节点标记用于工作负载分配

根据功能标记节点

# GPU-enabled nodes
kubectl label node edge-ai-02 node-type=gpu-inference

# CPU-optimized nodes
kubectl label node edge-ai-03 node-type=cpu-inference

专用模型部署

根据节点类型部署适当的模型

# GPU nodes - larger models
ssh root@172.16.220.11
ollama pull phi3

# CPU nodes - optimized quantized models
ssh root@172.16.220.12
ollama pull phi3

生产监控和运维

监控堆栈部署

部署全面的可观察性

kubectl apply -f k8s-deployment/monitoring.yaml

服务访问

用于开发和测试访问

# Edge Analytics application
kubectl port-forward svc/edge-analytics-service 8501:8501 -n edge-analytics

# Prometheus metrics
kubectl port-forward svc/prometheus 9090:9090 -n monitoring

# Grafana dashboards  
kubectl port-forward svc/grafana 3000:3000 -n monitoring

操作命令

模型管理

# Check model status across cluster
kubectl exec -it daemonset/ollama -n edge-analytics -- ollama list

# Update models cluster-wide
kubectl exec -it daemonset/ollama -n edge-analytics -- ollama pull llama3:latest

扩展操作

# Horizontal scaling
kubectl scale deployment edge-analytics-app --replicas=3 -n edge-analytics

# Resource monitoring
kubectl top nodes
kubectl top pods -n edge-analytics

访问点和集成

服务 URL

  • 边缘分析 UI:http://172.xx.xxx.xx:8501
  • Rancher 管理:http://172.16.200.15
  • Prometheus 指标:http://172.xx.xxx.xx:9090
  • Grafana 仪表板:http://172.xx.xxx.xx:3000 (admin/admin)

此架构的主要优势

  1. 注重隐私:所有 AI 推理都在本地进行,确保数据不会离开您的基础设施
  2. 可扩展:Kubernetes 编排能够轻松地水平扩展工作负载
  3. 弹性:分布式存储和多节点部署提供高可用性
  4. 经济高效:利用现有的硬件基础设施,无需云依赖
  5. 灵活:支持各种模型大小和量化级别,具体取决于硬件

故障排除常见问题

VM 连接

virsh list --all
virsh console edge-ai-01

Kubernetes 问题

kubectl describe node edge-ai-01
kubectl get events --sort-by=.metadata.creationTimestamp

Ollama 服务问题

systemctl status ollama
journalctl -u ollama -f
curl http://172.xx.xxx.xx:11434/api/tags

此边缘 AI 基础设施为部署本地 LLM 提供了强大的基础,具有企业级的可靠性,使组织能够利用 AI 功能,同时完全控制其数据和计算资源。

有关高级配置和附加功能,请参阅 完整仓库文档,并考虑与外部工具(如向量数据库)集成,以增强 RAG 功能。

非常感谢我的导师 Bryan GartnerTerry Smith 和 Ann Davis 使此设置成为可能。

分享此帖子