Rook - یک فروشگاه داده سلف سرویس برای Kubernetes

Rook - یک فروشگاه داده سلف سرویس برای Kubernetes

در 29 ژانویه، کمیته فنی CNCF (بنیاد محاسبات بومی ابری)، سازمانی که پشت کوبرنتس، پرومتئوس و سایر محصولات منبع باز از دنیای کانتینرها و بومی ابر قرار دارد، اعلام کرد در مورد پذیرش پروژه رخ به صفوف آنها فرصتی عالی برای آشنایی با این "ارکستراتور ذخیره سازی توزیع شده در Kubernetes".

چه نوع روکی؟

رخ نرم افزاری است که در Go نوشته شده است (توزیع شده توسط تحت مجوز رایگان آپاچی 2.0)، طراحی شده برای ارائه انبارهای داده با عملکردهای خودکار که آنها را می سازد. خود مدیریتی، خود مقیاسی و خود درمانی. برای انجام این کار، Rook (برای ذخیره‌های داده‌ای که در محیط Kubernetes استفاده می‌شود) را خودکار می‌کند: استقرار، راه‌اندازی، پیکربندی، تأمین، مقیاس‌بندی، به‌روزرسانی، مهاجرت، بازیابی فاجعه، نظارت و مدیریت منابع.

این پروژه در مرحله آلفا قرار دارد و در سازماندهی سیستم ذخیره سازی توزیع شده Ceph در خوشه های Kubernetes تخصص دارد. نویسندگان همچنین برنامه هایی را برای پشتیبانی از سیستم های ذخیره سازی دیگر اعلام کرده اند، اما در نسخه های بعدی این اتفاق نخواهد افتاد.

قطعات و دستگاه فنی

کار Rook در داخل Kubernetes بر اساس یک اپراتور خاص است (ما در مورد Kubernetes Operators بیشتر نوشتیم این مقاله)، که پیکربندی ذخیره سازی را خودکار می کند و نظارت بر آن را پیاده سازی می کند.

بنابراین، اپراتور روک به نظر می‌رسد محفظه‌ای است که شامل همه چیز لازم برای استقرار و نگهداری بعدی مخزن است. مسئولیت های اپراتور عبارتند از:

  • ایجاد یک DaemonSet برای دیمون های ذخیره سازی Ceph (ceph-osd) با یک خوشه RADOS ساده؛
  • ایجاد غلاف برای نظارت Ceph (از جانب ceph-mon، بررسی وضعیت خوشه؛ برای حد نصاب، در اکثر موارد سه نسخه مستقر می شود و اگر هر یک از آنها سقوط کند، نسخه جدید افزایش می یابد);
  • مدیریت CRD (تعاریف منابع سفارشی) برای خودش خوشه, استخرهای ذخیره سازی, فروشگاه های اشیا (مجموعه ای از منابع و خدمات برای ارائه درخواست های HTTP که PUT/GET را روی اشیاء انجام می دهند - با S3 و Swift API سازگار هستند)و سیستم های فایل;
  • آماده سازی غلاف ها برای راه اندازی تمام خدمات لازم؛
  • ایجاد عوامل روک

عوامل روک توسط غلاف های جداگانه ای که در هر گره Kubernetes مستقر شده اند نشان داده می شوند. هدف عامل پیکربندی افزونه است FlexVolume، که از حجم های ذخیره سازی در Kubernetes پشتیبانی می کند. عامل عملیات ذخیره سازی را اجرا می کند: دستگاه های ذخیره سازی شبکه را متصل می کند، حجم ها را نصب می کند، سیستم فایل را فرمت می کند و غیره.

Rook - یک فروشگاه داده سلف سرویس برای Kubernetes
مکان و نقش اجزای Rook در طرح کلی خوشه Kubernetes

Rook سه نوع ذخیره سازی را ارائه می دهد:

  1. مسدود کردن (مسدود کردن, StorageClass) - ذخیره سازی را روی یک آتشدان نصب می کند.
  2. هدف - شی (شیء, ObjectStore) - در داخل و خارج از خوشه Kubernetes (از طریق S3 API) موجود است.
  3. سیستم فایل مشترک (سیستم فایل مشترک, Filesystem) یک سیستم فایل است که می تواند برای خواندن و نوشتن از چندین pod نصب شود.

اجزای داخلی Rook عبارتند از:

  • مونس - غلاف برای نظارت بر Ceph (با ceph-mon قبلا ذکر شده)؛
  • OSD ها - غلاف با دیمون های ceph-osd (شیطان های ذخیره سازی اشیاء)؛
  • M.G.R. - غلاف با یک دیو ceph-mgr (Ceph Manager)، که قابلیت های نظارتی و رابط های اضافی را برای سیستم های خارجی (نظارت/کنترل) فراهم می کند.
  • RGW (اختیاری) - غلاف با ذخیره سازی اشیاء؛
  • MDS (اختیاری) - غلاف با سیستم فایل مشترک

Rook - یک فروشگاه داده سلف سرویس برای Kubernetes

همه دیمون های Rook (Mons، OSD، MGR، RGW، MDS) در یک باینری منفرد کامپایل می شوند.rook) در حال اجرا در یک ظرف.

برای معرفی کوتاه پروژه Rook، این کوتاه (12 اسلاید) نیز ممکن است مفید باشد. ارائه از بسام تببارا (CTO در Quantum Corp).

عملیات Rook

اپراتور Rook به طور کامل از Kubernetes نسخه 1.6 و بالاتر پشتیبانی می کند (و تا حدی، نسخه قدیمی K8s - 1.5.2). خود نصب в ساده ترین سناریو به نظر می رسد این:

cd cluster/examples/kubernetes
kubectl create -f rook-operator.yaml
kubectl create -f rook-cluster.yaml

علاوه بر این، اپراتور Rook آماده شده است نمودار هلم، که به لطف آن نصب می تواند به صورت زیر انجام شود:

helm repo add rook-alpha https://charts.rook.io/alpha
helm install rook-alpha/rook

مقدار کمی موجود است گزینه های راه اندازی (به عنوان مثال، می توانید پشتیبانی را غیرفعال کنید RBAC، اگر از این ویژگی در خوشه شما استفاده نمی شود)، که به آنها منتقل می شود helm install از طریق پارامتر --set key=value[,key=value] (یا در یک فایل YAML جداگانه ذخیره کنید و از طریق -f values.yaml).

پس از نصب اپراتور Rook و راه اندازی pod ها با عوامل آن، تنها چیزی که باقی می ماند این است که خود خوشه Rook را ایجاد کنیم که ساده ترین پیکربندی آن به این صورت است (rook-cluster.yaml):

apiVersion: v1
kind: Namespace
metadata:
  name: rook
---
apiVersion: rook.io/v1alpha1
kind: Cluster
metadata:
  name: rook
  namespace: rook
spec:
  dataDirHostPath: /var/lib/rook
  storage:
    useAllNodes: true
    useAllDevices: false
    storeConfig:
      storeType: bluestore
      databaseSizeMB: 1024
      journalSizeMB: 1024

یادداشت: باید به صفت توجه ویژه شود dataDirHostPath، که مقدار صحیح آن برای ذخیره خوشه پس از راه اندازی مجدد ضروری است. برای مواردی که از آن به عنوان یک مکان ذخیره سازی دائمی برای داده های Rook در میزبان های Kubernetes استفاده می شود، نویسندگان توصیه می کنند حداقل 5 گیگابایت فضای دیسک رایگان در این فهرست داشته باشید.

تنها چیزی که باقی می ماند این است که در واقع خوشه را از پیکربندی ایجاد کنید و مطمئن شوید که غلاف ها در خوشه (در فضای نام) ایجاد شده اند rook):

kubectl create -f rook-cluster.yaml
kubectl -n rook get pod
NAME                              READY     STATUS    RESTARTS   AGE
rook-api-1511082791-7qs0m         1/1       Running   0          5m
rook-ceph-mgr0-1279756402-wc4vt   1/1       Running   0          5m
rook-ceph-mon0-jflt5              1/1       Running   0          6m
rook-ceph-mon1-wkc8p              1/1       Running   0          6m
rook-ceph-mon2-p31dj              1/1       Running   0          6m
rook-ceph-osd-0h6nb               1/1       Running   0          5m

ارتقا دهید خوشه Rook (تا نسخه جدید) رویه‌ای است که در این مرحله نیاز به به‌روزرسانی متوالی همه اجزای آن در یک توالی خاص دارد و تنها پس از اطمینان از اینکه نصب Rook فعلی کاملاً "سالم" است می‌توانید آن را شروع کنید. حالت. دستورالعمل های گام به گام دقیق با استفاده از مثال به روز رسانی Rook نسخه 0.5.0 به 0.5.1 را می توان در مستندات پروژه.

نوامبر گذشته در وبلاگ روک منتشر شد مقایسه بهره وری با EBS نتایج آن قابل توجه است و به طور خلاصه به شرح زیر است:

Rook - یک فروشگاه داده سلف سرویس برای Kubernetes
Rook - یک فروشگاه داده سلف سرویس برای Kubernetes

چشم انداز

وضعیت فعلی Rook آلفا است و آخرین نسخه اصلی تا به امروز است نسخه 0.6، منتشر شده در نوامبر 2017 (اصلاح فعلی - v0.6.2 - در 14 دسامبر منتشر شد). قبلاً در نیمه اول سال 2018، نسخه‌های بالغ‌تر عرضه می‌شوند: بتا و پایدار (به طور رسمی برای استفاده در تولید آماده است).

طبق نقشه راه این پروژه، توسعه دهندگان چشم اندازی دقیق برای توسعه Rook حداقل در دو نسخه بعدی دارند: 0.7 (آمادگی آن در ردیاب GitHub است. تخمین زده به عنوان 60٪ و 0.8. از جمله تغییرات مورد انتظار می توان به انتقال پشتیبانی از Ceph Block و Ceph Object به وضعیت نسخه بتا، ارائه پویا حجم برای CephFS، سیستم ثبت پیشرفته، به روز رسانی کلاستر خودکار، پشتیبانی از عکس های فوری برای حجم ها اشاره کرد.

گرفتن روک به شماره پروژه های CNCF (تا کنون در مراحل بسیار اولیه - "سطح آغازین" - همتراز با پیوند دهنده и CoreDNS) نوعی تضمین افزایش علاقه به محصول است. این که چگونه در دنیای برنامه های ابری جای پای خود را به دست خواهد آورد، پس از انتشار نسخه های پایدار واضح تر خواهد شد، که مطمئناً آزمایش کنندگان و کاربران جدیدی را به Rook خواهد آورد.

PS

در وبلاگ ما نیز بخوانید:

منبع: www.habr.com

خرید هاست قابل اعتماد برای سایت های دارای حفاظت DDoS، سرورهای VPS VDS 🔥 خرید هاستینگ معتبر با محافظت در برابر حملات DDoS، سرورهای VPS و VDS | ProHoster