הגדרת Ceph RBD (התקן בלוק) למכונות וירטואליות
תארו לעצמכם: אתם צריכים בדחיפות להעביר מכונה וירטואלית לשרת אחר עקב תקלת חומרה. אם הדיסק מקומי, אתם ממתינים להעתקת qcow2 דרך הרשת. בניסיון שלנו, אנו נתקלים בכאב הזה כל הזמן ומציעים פתרון—Ceph RBD.
Ceph RBD (RADOS Block Device) הם דיסקי בלוק המאוחסנים לא על החומרה המקומית של מארח הווירטואליזציה, אלא באשכול Ceph. מכונה וירטואלית על KVM/QEMU עובדת עם דיסק RBD בדיוק כמו עם qcow2 רגיל על SSD מקומי, אך הדיסק נגיש מכל מארח באשכול ומשוכפל על פני צמתי Ceph.
מקרה השימוש העיקרי הוא העברה חיה של מכונות וירטואליות. אין דיסק מקומי להעברה. virsh migrate עובד ללא העתקת נתונים: ה-VM פשוט מופעלת מחדש על מארח אחר, וממשיכה לעבוד עם אותם נתונים ב-Ceph. אנו מבטיחים SLA לזמן העברה של < 1 שנייה עם רשת מוגדרת כראוי.
למה RBD עדיף על אחסון מקומי
אחסון מקומי (qcow2) פשוט יותר, אך הוא קושר את ה-VM למארח ספציפי ודורש העתקת נתונים במהלך העברה. RBD מוסיף 10-20% חביון (לא מורגש על NVMe) אך מספק:
- העברה חיה ללא השבתה
- צילומי מצב מיידיים ושכפולים מצילומי מצב (CoW)
- שכפול (size=3 כברירת מחדל)
- הרחבת דיסק ללא עצירת ה-VM
- אינטגרציה עם Kubernetes דרך CSI
המהנדסים שלנו עם ניסיון של 10+ שנים פרסו RBD לפרויקטים החל מ-10 ועד 500 מכונות וירטואליות.
דרישות מוקדמות: Pool ואימות
נניח שאשכול Ceph כבר רץ. צרו pool ייעודי לדיסקי VM והגדירו שכפול:
ceph osd pool create vms 0 0 replicated rbd
pool init vms
ceph osd pool set vms size 3
ceph osd pool set vms min_size 2
ceph osd pool set vms pg_autoscale_mode on
צרו משתמש Ceph נפרד עבור QEMU עם ההרשאות המינימליות הנדרשות. עקרון ההרשאות המינימליות: ללקוח libvirt יש גישה רק ל-pool של ceph osd pool create vms 0 0 replicated rbd pool init vms ceph osd pool set vms size 3 ceph osd pool set vms min_size 2 ceph osd pool set vms pg_autoscale_mode on , לא ל-keyring של vms.
ceph auth get-or-create client.libvirt \
mon 'profile rbd' \
osd 'profile rbd pool=vms' \
-o /etc/ceph/ceph.client.libvirt.keyring איך לשלב Ceph RBD עם KVM/QEMU?
צרו תמונת RBD עבור המכונה הווירטואלית והפעילו תכונות נדרשות (layering, exclusive-lock, object-map, fast-diff, deep-flatten):
rbd create vms/vm-webserver-01 --size 102400
rbd feature enable vms/vm-webserver-01 exclusive-lock
rbd feature enable vms/vm-webserver-01 object-map
rbd feature enable vms/vm-webserver-01 fast-diff
rbd feature enable vms/vm-webserver-01 deep-flattenהגדרת דיסק ב-XML של libvirt (admin):
<disk type='network' device='disk'>
<driver name='qemu' type='raw' cache='writeback' discard='unmap'/>
<auth username='libvirt'>
<secret type='ceph' uuid='9bbd7a99-7512-4dc2-a443-8a0bec3e2acf'/>
</auth>
<source protocol='rbd' name='vms/vm-webserver-01'>
<host name='192.168.20.1' port='6789'/>
<host name='192.168.20.2' port='6789'/>
<host name='192.168.20.3' port='6789'/>
</source>
<target dev='vda' bus='virtio'/>
</disk>ה-secret של libvirt נוצר ממפתח המשתמש client.libvirt. הפרטים מושמטים—הם בתיעוד הרשמי של QEMU.
Persistent Volumes של Kubernetes דרך Ceph CSI
עבור Kubernetes, דיסקי RBD מסופקים דרך ceph auth get-or-create client.libvirt \ mon 'profile rbd' \ osd 'profile rbd pool=vms' \ -o /etc/ceph/ceph.client.libvirt.keyring —דרייבר ה-CSI הרשמי. התקנה דרך Helm:
helm repo add ceph-csi https://ceph.github.io/csi-charts
helm repo update
helm install ceph-csi-rbd ceph-csi/ceph-csi-rbd \
--namespace ceph-csi \
--create-namespace \
--values ceph-csi-rbd-values.yamlדוגמה ל-rbd create vms/vm-webserver-01 --size 102400 rbd feature enable vms/vm-webserver-01 exclusive-lock rbd feature enable vms/vm-webserver-01 object-map rbd feature enable vms/vm-webserver-01 fast-diff rbd feature enable vms/vm-webserver-01 deep-flatten :
---
csiConfig:
- clusterID: "ваш-ceph-cluster-id"
monitors:
- "192.168.20.1:6789"
- "192.168.20.2:6789"
- "192.168.20.3:6789"
storageClass:
create: true
name: ceph-rbd
clusterID: "ваш-ceph-cluster-id"
pool: vms
imageFeatures: layering,exclusive-lock,object-map,fast-diff,deep-flatten
reclaimPolicy: Delete
allowVolumeExpansion: true
secret:
create: true
name: ceph-csi-rbd-secret
userID: kubernetes
userKey: "ваш-base64-ключ"
PVC נוצר תוך שניות—תמונת RBD נוצרת ב-Ceph, מעוצבת ומור�בת על צומת. תצורה זו מאיצה את פריסת האפליקציות פי 3.
צילומי מצב RBD: עותקי VM מיידיים
צילומי מצב הם יתרון מרכזי של RBD. צילום מצב עקבי של דיסק VM ללא עצירת ה-VM (אם קיים guest agent):
rbd snap create vms/vm-webserver-01@snap-before-upgrade שכפול מצילום מצב (copy-on-write)—יצירה מיידית, ללא שטח נוסף עד לכתיבה:
rbd snap protect vms/vm-webserver-01@snap-before-upgrade
rbd clone vms/vm-webserver-01@snap-before-upgrade vms/vm-webserver-02
rbd flatten vms/vm-webserver-02 # для независимости ניטור ביצועי RBD
ceph osd pool stats vms rbd perf image iostat --pool vms ceph osd perf עבור Prometheus, מדדי RBD זמינים דרך ceph_exporter. מדדים מרכזיים: virsh edit vm-webserver-01, <disk type='network' device='disk'> <driver name='qemu' type='raw' cache='writeback' discard='unmap'/> <auth username='libvirt'> <secret type='ceph' uuid='9bbd7a99-7512-4dc2-a443-8a0bec3e2acf'/> </auth> <source protocol='rbd' name='vms/vm-webserver-01'> <host name='192.168.20.1' port='6789'/> <host name='192.168.20.2' port='6789'/> <host name='192.168.20.3' port='6789'/> </source> <target dev='vda' bus='virtio'/> </disk> , ceph-csi-rbd. אנו ממליצים על לוח מחוונים של Grafana עם מזהה 5336.
בעיות נפוצות
פעולות איטיות על OSD במהלך עומס עבודה פעיל של דיסק VM. בדקו את helm repo add ceph-csi https://ceph.github.io/csi-charts helm repo update helm install ceph-csi-rbd ceph-csi/ceph-csi-rbd \ --namespace ceph-csi \ --create-namespace \ --values ceph-csi-rbd-values.yaml —ייתכן שתראו פעולות תקועות. נגרם לעיתים קרובות על ידי חומת אש או אי-התאמת MTU בין רשת האשכול לרשת הציבורית.
ה-VM לא מצליחה להתחיל: rbd: cannot open image, No such file or directory. ודאו הרשאות: ceph-csi-rbd-values.yaml כ-client.libvirt. נגרם לעיתים קרובות על ידי keyring שגוי או תעודת אימות שפגה.
צילום מצב מקפיא כתיבות VM למספר שניות. זה נורמלי עם csiConfig: - clusterID: "ваш-ceph-cluster-id" monitors: - "192.168.20.1:6789" - "192.168.20.2:6789" - "192.168.20.3:6789" storageClass: create: true name: ceph-rbd clusterID: "ваш-ceph-cluster-id" pool: vms imageFeatures: layering,exclusive-lock,object-map,fast-diff,deep-flatten reclaimPolicy: Delete allowVolumeExpansion: true secret: create: true name: ceph-csi-rbd-secret userID: kubernetes userKey: "ваш-base64-ключ" דרך QEMU guest agent. ללא ה-agent, צילום המצב אינו עקבי; אפליקציות בתוך ה-VM עשויות לראות נתונים פגומים לאחר שחזור.
מה כלול בעבודה שלנו
| שלב | תוצאה |
|---|---|
| ביקורת תשתית Ceph קיימת והיפרביזורים | המלצות לאופטימיזציה, תוכנית העברה |
| עיצוב pool, הגדרות שכפול ו-pg_autoscaler | תצורת pool עם size=3 |
| יצירת משתמשים ו-secrets עבור KVM ו-Kubernetes | קבצי keyring, libvirt secrets, csi-secret |
| אינטגרציה עם KVM/QEMU: מעבר VMs ל-RBD | העברה ל-RBD ללא השבתה |
| אינטגרציה עם Kubernetes: StorageClass, PVC, צילומי מצב | ceph-csi עובד, PVCs לבדיקה |
| ניטור ו-runbook | לוח מחוונים של Grafana, תיעוד תגובה לאירועים |
| הדרכת צוות | סדנה של שעתיים, סרטונים, רשימות בדיקה |
לוחות זמנים ועלות
| תרחיש | זמן |
|---|---|
| אינטגרציית KVM/QEMU, פעולות בסיסיות | 2-3 ימים |
| + Kubernetes CSI, StorageClass, צילומי מצב | 3-5 ימים |
| + ניטור, runbook, הדרכת צוות | +1-2 ימים |
העלות מחושבת באופן אישי לאחר ביקורת תשתית. המהנדסים שלנו מחזיקים בהסמכות Red Hat Ceph; אנו מבטיחים SLA של 99.9%. צרו קשר לייעוץ—נעריך את הפרויקט שלכם תוך יום אחד.







