مجموعة Raspberry Pi¶
نظرة عامة¶
تستخدم BrainSAIT مجموعة Raspberry Pi للحوسبة الطرفية واختبار التطوير وقدرات المعالجة الموزعة. يغطي هذا المستند بنية المجموعة والتكوين وحالات الاستخدام.
بنية المجموعة¶
تكوين الأجهزة¶
العُقد: - 5x Raspberry Pi 4 (8GB RAM) - 1x Raspberry Pi كعقدة رئيسية - 4x Raspberry Pi كعُقد عاملة
التخزين: - 256GB NVMe لكل عقدة (USB) - تخزين NFS مشترك - Ceph موزع (اختياري)
الشبكة: - مفتاح Gigabit - VLAN مخصصة - تخصيص IP ثابت
مخطط المجموعة¶
graph TB
subgraph "العقدة الرئيسية"
M[Pi Master<br/>K3s Server]
end
subgraph "العُقد العاملة"
W1[Worker 1]
W2[Worker 2]
W3[Worker 3]
W4[Worker 4]
end
subgraph "التخزين"
NFS[NFS Server]
end
M --> W1
M --> W2
M --> W3
M --> W4
NFS --> M
NFS --> W1
NFS --> W2
NFS --> W3
NFS --> W4 حزمة البرمجيات¶
نظام التشغيل¶
- Ubuntu Server 22.04 LTS (64-bit)
- محسّن لـ ARM64
- تثبيت بسيط
Kubernetes (K3s)¶
# تثبيت K3s على العقدة الرئيسية
curl -sfL https://get.k3s.io | sh -
# الحصول على الرمز للعُقد العاملة
cat /var/lib/rancher/k3s/server/node-token
# ضم العُقد العاملة
curl -sfL https://get.k3s.io | K3S_URL=https://master:6443 \
K3S_TOKEN=<token> sh -
الخدمات الداعمة¶
- Docker/containerd
- Helm
- MetalLB (موازن الحمل)
- Longhorn (التخزين)
- Prometheus/Grafana (المراقبة)
حالات الاستخدام¶
بيئة التطوير¶
الغرض: التطوير والاختبار المحلي
القدرات: - تشغيل الحزمة الكاملة محلياً - اختبار نشر Kubernetes - اختبار خطوط CI/CD - اختبار التكامل
الحوسبة الطرفية¶
الغرض: معالجة البيانات على الحافة
القدرات: - استدلال النماذج محلياً - المعالجة المسبقة للبيانات - التخزين المؤقت والتجميع - العمل بدون اتصال
التدريب/العرض التوضيحي¶
الغرض: نظام عرض محمول
القدرات: - عروض مستقلة - بيئات التدريب - إثبات المفهوم - عروض تقديمية بدون اتصال
التكوين¶
إعداد الشبكة¶
# /etc/netplan/01-netcfg.yaml
network:
version: 2
ethernets:
eth0:
addresses:
- 192.168.1.10/24
gateway4: 192.168.1.1
nameservers:
addresses: [8.8.8.8, 8.8.4.4]
تكوين K3s¶
# /etc/rancher/k3s/config.yaml
cluster-init: true
tls-san:
- pi-master
- 192.168.1.10
disable:
- traefik
flannel-backend: vxlan
تكوين التخزين¶
# إعداد خادم NFS
apt install nfs-kernel-server
mkdir -p /exports/cluster
echo "/exports/cluster *(rw,sync,no_subtree_check)" >> /etc/exports
exportfs -a
أمثلة النشر¶
نشر التطبيق¶
apiVersion: apps/v1
kind: Deployment
metadata:
name: brainsait-api
spec:
replicas: 3
selector:
matchLabels:
app: brainsait-api
template:
metadata:
labels:
app: brainsait-api
spec:
containers:
- name: api
image: brainsait/api:latest
ports:
- containerPort: 8000
resources:
limits:
memory: "512Mi"
cpu: "500m"
اعتبارات خاصة بـ ARM¶
- استخدام صور ARM64
- تحسين استخدام الذاكرة
- مراعاة حدود المعالج
- الاختبار الشامل
المراقبة¶
إعداد Prometheus¶
# values.yaml لـ kube-prometheus-stack
prometheus:
prometheusSpec:
resources:
requests:
memory: 256Mi
retention: 7d
grafana:
resources:
requests:
memory: 128Mi
المقاييس الرئيسية¶
- المعالج/الذاكرة لكل عقدة
- معدل نقل الشبكة
- عمليات القرص
- حالة الـ Pods
- درجة الحرارة
تحسين الأداء¶
تحسينات نظام التشغيل¶
إدارة الذاكرة¶
تحسين الشبكة¶
# زيادة مخازن الشبكة
echo "net.core.rmem_max=16777216" >> /etc/sysctl.conf
echo "net.core.wmem_max=16777216" >> /etc/sysctl.conf
الصيانة¶
التحديثات¶
النسخ الاحتياطي¶
- لقطات etcd
- نسخ احتياطي للـ PV
- نسخ احتياطي للتكوين
المراقبة¶
- فحوصات صحة العُقد
- تنبيهات درجة الحرارة
- تنبيهات مساحة القرص
- مراقبة الشبكة
المستندات ذات الصلة¶
آخر تحديث: يناير 2025