راه‌اندازی Rook Ceph بر روی کوبرنتیز

rook on ceph and kubernetes
rook on ceph and kubernetes


در راه‌اندازی و نگه‌داری کلاسترهای on premise همیشه یکی از دغدغه‌های مدیر سیستم‌ها و توسعه‌دهندگان، داشتن فضای ذخیره‌سازی‌ای بوده که هم قابل اطمینان باشه هم اون پرفورمنس خوبی که مد نظرشونه رو فراهم کنه. برای رفع این نیاز، راه‌کارهای خیلی متوعی ارائه شده برای مثال OpenEBS یا GlusterFS و البته موضوع مورد بحث ما، Rook!

به طور خلاصه کاری که Rook برای شما انجام می‌ده اینه که حافظه توزیع شده خامی که روی نودهای کلاستر قابل شناساییه رو به یک سرویس ذخیره‌سازی تبدیل می‌کنه که بار مدیریت، اشکال‌یابی و scaling رو به شکل زیادی از دوش شما بر می‌داره.


پیش‌نیازها

برای گام به گام پیش رفتن با من فقط نیازه یه کلاستر کوبرنتیز با دسترسی ادمین و توانای اضافه کردن بلاک استوریج به نودهای کلاستر خودتون رو داشته باشید؛ درباره تفاوت‌های Block Storage و Object Storage در دانش‌نامه عمومی ابر آروان صحبت شده است.

فرض می‌کنم شما هم مثل ما کلاستر کوبرنتیز خودتون روی سرویس IaaS راه‌اندازی کردید.

  • در اولین قدم باید در بخش فضای ابرکی به تعداد نودهای کلاستر خود فضای ابری بسازید و با گزینه اتصال به ابرک اون‌ها رو به ابرک‌ها وصل کنید؛ البته توجه داشته باشید فقط برای نودهایی نیازه فضای ابری بسازید که پادهای rook قراره روی اون‌ها schedule بشه، برای مثال اگر کلاستر شما در کل ۵ نود داره ولی فقط ۲ نود از اون‌ها قراره worker باشه و بقیه فقط control-plane شما هستند، فقط باید به نودهای worker فضای ابری متصل کنید.

حالا می‌بینید که اگر روی ابرک‌ها دستور lsblk را بگیرید فضای ذخیره‌سازی جدیدی به نام‌های vdb یا vdc (بسته به استفاده شما از فضاهای ابری دیگر به ترتیب نام‌گذاری می‌شود) روی ابرک قابل دسترسی است.

lsblk
lsblk

هیچ‌نیازی به فرمت‌کردن این فضا یا ایجاد mount point برای آن نیست، این‌کار را rook بطور خودکار برای ما انجام می‌ده.

خب! می‌ریم سراغ نصب rook

  • اول مخزن گیت روک که حاوی مانیفست‌های نصب آن روی کوبرنتیز است رو کلون می‌کنیم
git clone --single-branch -b release-1.7 https://github.com/rook/rook.git
  • به مسیر زیر برید و چهار مانیفست زیر رو پشت سر هم دپلوی کنید
cd rook/cluster/examples/kubernetes/ceph

# deploy...
kubectl create -f crds.yaml -f common.yaml -f operator.yaml
kubectl create -f cluster.y
  • بهتره در این مرحله بررسی کنیم و ببینیم پادها به درستی کار می‌کنند یا نه؛ البته ممکنه برای دانلود اولیه ایمیج‌های روک دقایقی این فرایند طول بکشه پس منتظر بمونید همه پاد‌ها به حالت Running در بیان!
kubectl -n rook-ceph get pod
  • حتی اگه استوریج شما آماده استفاده باشه، بدون ریسورس storageclass امکان استفاده ازش وجود نداره، پس با دپلوی کردن این مانیفست از مخزن گیتی که کلون کردیم این‌کار رو انجام می‌دیم
kubectl apply -f ./csi/rbd/storageclass.yaml

حالا اگه همین‌طور که در تصویر می‌بینید تمام پادها بدون مشکل درحال اجرا بود و کلاستر ceph بدون مشکل راه‌ندازی و provision شد شما باید بتونید فقط با افزودن storageclass: rook-ceph-block به pvcهای خود از فضای ابری مدیریت شده توسط rook استفاده کنید.

تست و بنچمارک

برای تست کارایی و پرفورمنس rook از مانیفست‌های زیر و ایمیج sotoaster/dbench استفاده می‌کنیم، و دوتا ریسورس هم نیاز داریم یک pvc که روی rook دپلوی می‌کنیم و یک job که وظیفه انجام بنچمارک‌های مختلف روی این pvc رو انجام می‌ده.

PersistentVolumeClaim

kind: PersistentVolumeClaim
apiVersion: v1
    metadata:
name: dbench-rook
spec:
    storageClassName: rook-ceph-block
    accessModes:
        - ReadWriteOnce
    resources:
        requests:
            storage: 5Gi

Job

apiVersion: batch/v1
kind: Job
metadata:
  name: dbench-rook
spec:
  template:
    spec:
      containers:
      - name: dbench-rook
        image: sotoaster/dbench:latest
        imagePullPolicy: IfNotPresent
        env:
          - name: DBENCH_MOUNTPOINT
            value: /data
          - name: FIO_SIZE
            value: 1G
        volumeMounts:
        - name: dbench-pv-rook
          mountPath: /data
      restartPolicy: Never
      volumes:
      - name: dbench-pv-rook
        persistentVolumeClaim:
          claimName: dbench-rook
  backoffLimit: 4


حالا با استفاده از دستور kubectl logs و سپس نام پاد در حال اجرا می‌توان مراحل بنچمارک را مشاهده کرد. در انتهای بنچمارک یک نمای کلی از پرفورمنس زیرساخت ذخیره‌سازی شما، نشان داده می‌شه که به این صورت خواهد بود:

==================
= Dbench Summary =
==================

Random Read/Write IOPS: 1738/473. BW: 121MiB/s / 42.1MiB/s
Average Latency (usec) Read/Write: 6237.10/47.07
Sequential Read/Write: 135MiB/s / 81.8MiB/s
Mixed Random Read/Write IOPS: 798/266


استفاده از rook بسیار راحته و خیلی از دردسرهای مدیریت block storage رو برای ما کم می‌کنه، امیدوارم شما هم بتوانید به راحتی از این ابزار استفاده کنید.


لینک‌های مفید

https://vitobotta.com/2019/08/06/kubernetes-storage-openebs-rook-longhorn-storageos-robin-portworx/