הגדרת Ceph RBD למכונות וירטואליות

דיסקי VM מקומיים הקשורים למארח הופכים כל העתקה להעתקת נתונים ארוכה. אנו מגדירים Ceph RBD, אחסון בלוקים שהופך דיסקים לנגישים מכל שרת באשכול ומאפשר העברת VM ללא השבתה. הצוות שלנו מספק פרויקט סוהר, מהגדרת pool ואימות ועד אינטגרציה עם KVM/QEMU ו-Kubernetes, תוך הבטחת פעילות אמינה ותמיכה מתמשכת.

היכולות שלנו:

שאלות נפוצות

העבודות האחרונות

  • פיתוח אפליקציית ווב עבור FEEDME
    פיתוח אפליקציית ווב עבור FEEDME
    1359
  • פיתוח חנות מקוונת לחברת FURNORO
    פיתוח חנות מקוונת לחברת FURNORO
    1330
  • עיצוב לוגו לחברת B2B Advance
    עיצוב לוגו לחברת B2B Advance
    776
  • פיתוח אפליקציית ווב עבור Enviok
    פיתוח אפליקציית ווב עבור Enviok
    1077
  • פיתוח לוגו חברת AIDER
    פיתוח לוגו חברת AIDER
    1022
  • פיתוח CRM עבור Chasseurs
    פיתוח CRM עבור Chasseurs
    1113

הגדרת 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%. צרו קשר לייעוץ—נעריך את הפרויקט שלכם תוך יום אחד.