نحوه نصب لانگ هورن روی کوبرنتیز #
مقدمه #
لانگهورن یک سیستم ذخیرهسازی بلوکی توزیعشدهی سبک و متنباز برای کوبرنتیز است که ذخیرهسازی پایدار را برای برنامههای دارای وضعیت در یک خوشه فراهم میکند. ولومهای لانگهورن، ذخیرهسازی بلوکی مقیاسپذیر و با دسترسی بالا را که به گرههای کارگر شما متصل است، با پشتیبانی از حالتهای دسترسی چندگانه در خوشه کوبرنتیز شما ارائه میدهند.
در یک خوشه کوبرنتیز، لانگهورن با اجزای اصلی زیر اجرا میشود:
- Longhorn UI: یک رابط وب گرافیکی که میتوانید برای مشاهده، ایجاد، مدیریت و پشتیبانگیری از ولومهای Longhorn در یک کلاستر Kubernetes از آن استفاده کنید.
- Longhorn Instance Manager: روی هر گره در خوشه Kubernetes اجرا میشود و عملکردهایی مانند تکثیر، اسنپشات، مدیریت نمونه، تشخیص خرابی گره و زمانبندی را فعال میکند.
- Longhorn Engine: جزء صفحه داده که دادهها را در کنترلر ذخیرهسازی اختصاصی روی هر دستگاه بلوکی میخواند و مینویسد. هر دستگاه Longhorn دارای یک نمونه موتور مربوطه است که دادهها را تکثیر میکند و پشتیبانگیری یا اسنپشاتهایی را روی چندین گره ایجاد میکند.
- Longhorn CSI (Container Storage Interface) Driver: Longhorn را به عنوان یک ارائه دهنده فضای ذخیرهسازی در یک کلاستر Kubernetes فعال میکند و عملیات مربوط به حجم را به اقدامات Longhorn ترجمه میکند. از مقدار
driver.longhorn.ioکه توسط منابعی مانند StorageClasses ارجاع داده میشود، برای مدیریت درخواستهای حجم استفاده میکند.
این مقاله نحوه استقرار Longhorn روی Kubernetes و ایجاد یک سیستم ذخیرهسازی توزیعشده که در دسترس منابع متعدد مانند Pods در کلاستر شما باشد را توضیح میدهد. همچنین از Volumeهای Longhorn در Negarnovin Object Storage پشتیبانگیری خواهید کرد تا بازیابی دادهها را فعال کنید یا Volumeهای جدید بازیابی فاجعه ایجاد کنید.
پیش نیاز ها #
قبل از اینکه شروع کنید:
- یک کلاستر Negarnovin Kubernetes Engine با حداقل
۳گره و۴ vCPUsدر هر گره مستقر کنید. - Negarnovin Object Storage را مستقر کنید و یک bucket
longhornجدید برای ذخیره پشتیبانهای volume خود ایجاد کنید. - یک سرور مجازی با سیستم عامل دبیان ایجاد کنید تا به عنوان ایستگاه کاری مدیریت خوشه استفاده شود.
- با استفاده از SSH و به عنوان یک کاربر غیر ریشه با امتیازات sudo به سرور دسترسی پیدا کنید.
- Kubectl را با پیکربندی VKE خود نصب و پیکربندی کنید تا به کلاستر روی سرور خود دسترسی داشته باشید.
نصب لانگهورن روی کوبرنتیز #
شما میتوانید Longhorn را با استفاده از مدیر بسته Helm یا Kubectl روی کلاستر Kubernetes خود نصب کنید. برای نصب آخرین نسخه سازگار با اکثر نسخههای کلاستر Kubernetes، از Kubectl برای مشخص کردن شماره نسخه هدف و تغییر هرگونه اطلاعات پیکربندی در کلاستر خود استفاده کنید. مراحل زیر را برای نصب آخرین نسخه Longhorn با استفاده از Kubectl دنبال کنید و تمام منابع کلاستر موجود را تأیید کنید.
- آخرین فایل انتشار Longhorn را با استفاده از
wgetدانلود کنید.console$ wget https://github.com/longhorn/longhorn/releases/download/v1.6.1/longhorn.yamlدستور بالا نسخه
۱.۶.۱,لانگهورن را دانلود میکند، برای تأیید آخرین نسخه جهت استقرار در کلاستر کوبرنتس خود، به مخزن رسمی گیتهاب پروژه مراجعه کنید. - فایلها را فهرست کنید و تأیید کنید که یک فایل
longhorn.yamlجدید در دایرکتوری کاری شما موجود است.console$ lsخروجی:
longhorn.yaml - با استفاده از آخرین فایل
longhorn.yaml، Longhorn را در کلاستر Kubernetes خود مستقر کنید.console$ kubectl apply -f longhorn.yamlوقتی نصب موفقیتآمیز باشد، خروجی شما باید مانند تصویر زیر باشد.
customresourcedefinition.apiextensions.k8s.io/systemrestores.longhorn.io created customresourcedefinition.apiextensions.k8s.io/volumes.longhorn.io created customresourcedefinition.apiextensions.k8s.io/volumeattachments.longhorn.io created clusterrole.rbac.authorization.k8s.io/longhorn-role created clusterrolebinding.rbac.authorization.k8s.io/longhorn-bind created clusterrolebinding.rbac.authorization.k8s.io/longhorn-support-bundle created service/longhorn-backend created service/longhorn-frontend created service/longhorn-conversion-webhook created service/longhorn-admission-webhook created service/longhorn-recovery-backend created service/longhorn-engine-manager created service/longhorn-replica-manager created daemonset.apps/longhorn-manager created deployment.apps/longhorn-driver-deployer created deployment.apps/longhorn-ui created - تمام منابع Longhorn مستقر در فضای نام جدید
longhorn-systemرا مشاهده کنید و تأیید کنید که آنها به درستی در خوشه شما اجرا میشوند.console$ kubectl get all -n longhorn-systemخروجی:
NAME READY STATUS RESTARTS AGE pod/csi-attacher-57689cc84b-tlzpb 1/1 Running 0 73s pod/longhorn-csi-plugin-lp562 3/3 Running 1 (15s ago) 73s pod/longhorn-ui-655b65f7f9-lgllp 1/1 Running 0 98s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/longhorn-admission-webhook ClusterIP 10.100.203.235 <none> 9502/TCP 103s service/longhorn-backend ClusterIP 10.110.4.220 <none> 9500/TCP 104s NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE daemonset.apps/engine-image-ei-5cefaf2b 3 3 3 3 3 <none> 84s daemonset.apps/longhorn-csi-plugin 3 3 3 3 3 <none> 74s daemonset.apps/longhorn-manager 3 3 3 3 3 <none> 100s NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/csi-attacher 3/3 3 3 74s deployment.apps/csi-provisioner 3/3 3 3 74s deployment.apps/csi-resizer 3/3 3 3 74s NAME DESIRED CURRENT READY AGE replicaset.apps/csi-attacher-57689cc84b 3 3 3 74s replicaset.apps/csi-provisioner-6c78dcb664 3 3 3 74s replicaset.apps/csi-resizer-7466f7b45f 3 3 3 74s - آخرین بسته Longhorn NFS را نصب کنید تا ایجاد Volumeهای ReadWriteMany (RWX) در کلاستر شما امکانپذیر شود.console
$ kubectl apply -f https://raw.githubusercontent.com/longhorn/longhorn/v1.6.1/deploy/prerequisite/longhorn-nfs-installation.yaml - تأیید کنید که غلافهای Longhorn NFS در کلاستر شما ایجاد و اجرا میشوند.console
$ kubectl get pods | grep longhorn-nfs-installation
خروجی:
longhorn-nfs-installation-2kd6d 1/1 Running 0 43s longhorn-nfs-installation-52kgg 1/1 Running 0 43s longhorn-nfs-installation-qsst9 1/1 Running 0 43s
ایجاد یک کلاس ذخیره سازی Longhorn #
Longhorn از کلاس ذخیرهسازی پیشفرض longhorn برای استقرار ولومها در کلاستر Kubernetes شما استفاده میکند. بسته به حجم کاری کلاستر خود، یک کلاس ذخیرهسازی جدید ایجاد کنید تا هنگام اعمال PVCهای جدید برای ارتباط با درایور Longhorn CSI و استقرار ولومهای جدید با استفاده از Longhorn manager از آن استفاده کنید. در بخشهای بعدی، کلاسهای ذخیرهسازی جداگانهای ایجاد کنید تا هنگام اتصال حالتهای دسترسی مختلف به PVCها در کلاستر خود از آنها استفاده کنید.
کلاس ذخیرهسازی فقط خواندنی و نوشتنی (RWO) #
ادعاهای حجم پایدار (PVC) از حالت دسترسی ReadWriteOnly (RWO) برای نصب یک حجم با امتیازات خواندن و نوشتن روی یک پاد در یک زمان استفاده میکنند. RWO از اشتراکگذاری حجم پشتیبانی نمیکند و همه امتیازات خواندن و نوشتن را به یک پاد در یک زمان محدود میکند. این برای برنامههایی که نیاز به سازگاری دادهها دارند، مانند پایگاههای دادهای که به طور مداوم دادهها را روی حجمهای مشترک مینویسند، مناسب است. برای ایجاد یک RWO StorageClass جدید برای استفاده در خوشه خود، مراحل زیر را دنبال کنید.
- با استفاده از یک ویرایشگر متن مانند Nano، یک فایل StorageClass جدید به نام
rwo-storageclass.yamlایجاد کنید.console$ nano rwo-storageclass.yaml - تنظیمات زیر را به فایل اضافه کنید.yaml
kind: StorageClass apiVersion: storage.k8s.io/v1 metadata: name: longhorn-prod provisioner: driver.longhorn.io allowVolumeExpansion: true parameters: numberOfReplicas: "۳" staleReplicaTimeout: "۲۸۸۰" # ۴۸ hours in minutes fromBackup: "" fsType: "ext4" reclaimPolicy: Retain
فایل را ذخیره کنید و ببندید.
پیکربندی فوق یک StorageClass
longhorn-prodقابل توسعه جدید با سیاست حفظ (retainpolicy) ایجاد میکند که یک فضای ذخیرهسازی را حتی در صورت حذف PVC مرتبط، فعال نگه میدارد. در پیکربندی:provisioner: درایور تأمینکنندهی فضای ذخیرهسازی پایدار (PV) را تنظیم میکند. مقدارdriver.longhorn.ioاز موتور مورد نیاز Longhorn برای استقرار و مدیریت فضاها استفاده میکند در حالی که مقداری مانندblock.csi.negarnovin.comفضاهای ذخیرهسازی پایدار (PV) را با Negarnovin Block Storage مستقر میکند که با Longhorn manager سازگار نیستند.allowVolumeExpansion: امکان تغییر ظرفیت درایوهای Longhorn را در یک کلاستر فراهم میکند. برای مثال، یک درایو۱۰ GBمیتواند بسته به نیاز شما تا۲۰ GBیا بیشتر افزایش یابد.numberOfReplicas: تعداد کپیهای درایو Longhorn را برای استقرار و اتصال به گرههای کلاستر شما تنظیم میکند.staleReplicaTimeout: یک مقدار time-out ایجاد میکند تا وقتی زمان فعالیت مشخص شده منقضی شد، یک درایو Longhorn را به عنوان غیرفعال علامتگذاری کند.staleReplicaTimeout: یک درایو Longhorn را از منبع پشتیبان شما مانند Negarnovin Object Storage بازیابی میکند.fsType: فرمت سیستم فایل ولوم Longhorn را تنظیم میکند.reclaimPolicy: اقدام مربوط به ولوم Longhorn را برای اعمال در هنگام حذف PVC یا PV مرتبط با کلاس مشخص میکند. ولومهای Longhorn از سیاستهای حذف و حفظ پشتیبانی میکنند.
- کلاس StorageClass را روی کلاستر خود اعمال کنید.console
$ kubectl apply -f rwo-storageclass.yaml - تمام StorageClasses را در کلاستر خود مشاهده کنید و تأیید کنید که کلاس RWO جدید شما در دسترس است.console
$ kubectl get storageclassخروجی:
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE longhorn (default) driver.longhorn.io Delete Immediate true 35m longhorn-prod driver.longhorn.io Retain Immediate true 4s negarnovin-block-storage block.csi.negarnovin.com Delete Immediate true 46m
کلاس ذخیره سازی ReadWriteMany (RWX) #
ReadWriteMany (RWX) به چندین Pod اجازه میدهد تا به طور همزمان یک Volume را با امتیازات خواندن و نوشتن در کلاستر Kubernetes شما Mount کنند. این ابزار از اشتراکگذاری Volume پشتیبانی میکند و به Podها امکان دسترسی به دادههای مشترک را میدهد که آن را برای اکثر برنامههای موجود در کلاستر شما مناسب میکند. مراحل زیر را برای ایجاد یک StorageClass جدید که میتوانید با PVCهای ReadWriteMany (RWX) در کلاستر خود استفاده کنید، دنبال کنید.
- یک فایل جدید StorageClass به نام
rwx-storageclass.yamlایجاد کنید.console$ nano rwx-storageclass.yaml - تنظیمات زیر را به فایل اضافه کنید.yaml
kind: StorageClass apiVersion: storage.k8s.io/v1 metadata: name: longhorn-rwx provisioner: driver.longhorn.io allowVolumeExpansion: true reclaimPolicy: Delete volumeBindingMode: Immediate parameters: numberOfReplicas: "۳" staleReplicaTimeout: "۲۸۸۰" fromBackup: "" fsType: "ext4" nfsOptions: "vers=4.2,noresvport,softerr,timeo=600,retrans=5,rw,hard" reclaimPolicy: Retain
فایل را ذخیره کنید و ببندید.
پیکربندی فوق یک کلاس ذخیرهسازی جدید ReadWriteMany (RWX)
longhorn-rwxایجاد میکند که از Longhorn NFS برای نصب پادهای مدیریت اشتراکی و فعال کردن امتیازات خواندن و نوشتن همزمان برای چندین پاد در کلاستر شما استفاده میکند.nfsOptionsتفاوت اصلی مشخصات است که گزینههای اضافی Longhorn NFS را هنگام ایجاد والیومهای ReadWriteMany (RWX) فعال میکند. - پیکربندی StorageClass را روی کلاستر Kubernetes خود اعمال کنید.console
$ kubectl apply -f rwx-storageclass.yaml - کلاس StorageClasses را مشاهده کنید و تأیید کنید که کلاس RWX جدید در دسترس است.console
$ kubectl get storageclassخروجی:
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE longhorn (default) driver.longhorn.io Delete Immediate true 36m longhorn-prod driver.longhorn.io Retain Immediate true 46s longhorn-rwx driver.longhorn.io Retain Immediate true 9s negarnovin-block-storage block.csi.negarnovin.com Delete Immediate true 47m
ایجاد درخواستهای حجمی مداوم (PVC) #
مدیر Longhorn به صورت پویا، هر زمان که درخواستهای جدید برای حجمهای پایدار (PVC) به StorageClass شما ارجاع دهند، حجمهای جدید Longhorn را به عنوان حجمهای پایدار (PV) ایجاد میکند. برای ایجاد PVCهای جدید با حالت دسترسی Read Write Once (RWO) یا Read Write Many (RWX) برای نصب به عنوان حجمهای ذخیرهسازی برای Podها در کلاستر خود، بخشهای زیر را دنبال کنید.
پی وی سی خواندنی و نوشتنی (RWO) #
- یک فایل پیکربندی منبع PVC جدید به نام
rwo-pvc.yamlایجاد کنید.console$ nano rwo-pvc.yaml - تنظیمات زیر را به فایل اضافه کنید.yaml
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: test-rwo spec: accessModes: - ReadWriteOnce storageClassName: longhorn-prod resources: requests: storage: 10Gi
فایل را ذخیره کنید و ببندید.
پیکربندی فوق یک PVC
test-rwoجدید ایجاد میکند که بهlonghorn-prodStorageClass ارجاع میدهد تا یک Volume۱۰ GBگیگابایتی Longhorn ایجاد کند، زمانی که PVC توسط یک Pod در کلاستر نصب شده باشد. - PVC را روی خوشه خود بمالید.console
$ kubectl apply -f rwo-pvc.yaml - تمام PVC های خوشه را مشاهده کنید و تأیید کنید که منبع جدید با وضعیت
Boundدر دسترس است.console$ kubectl get pvcخروجی:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE test-rwo Bound pvc-4026f8d2-873c-429b-8068-208b26a75692 10Gi RWO longhorn-prod <unset> 4sبر اساس خروجی بالا، وضعیت
Boundبه این معنی است که درخواست ذخیرهسازی PVC موفقیتآمیز بوده و یک پارتیشن Longhorn با نامpvc-4026f8d2-873c-429b-8068-208b26a75692با موفقیت ایجاد شده است. ستون CAPACITY شامل ظرفیت پارتیشن Longhorn است در حالی که ACCESS MODES شامل حالت دسترسی پشتیبانی شده توسط پارتیشن است. - تمام PV های موجود در کلاستر خود را مشاهده کنید و تأیید کنید که یک Volume جدید Longhorn در دسترس است.console
$ kubectl get pvخروجی:
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS VOLUMEATTRIBUTESCLASS REASON AGE pvc-4026f8d2-873c-429b-8068-208b26a75692 10Gi RWO Retain Bound default/test-rwo longhorn-prod <unset> 8sبر اساس خروجی فوق، یک ولوم جدید Longhorn با ظرفیت 10Gi و دسترسی RWO
pvc-4026f8d2-873c-429b-8068-208b26a75692در دسترس است.شما یک PVC از نوع ReadWriteOnce در کلاستر خود ایجاد کرده و یک ولوم جدید Longhorn را آماده کردهاید. بر اساس پیکربندی، Podها در کلاستر شما میتوانند PVC را به عنوان یک ولوم ذخیرهسازی نصب کنند، اما فقط یک Pod میتواند همزمان دادهها را روی ولوم Longhorn نصب، خوانده و بنویسد.
خواندن، نوشتن و تعداد زیاد (RWX) PVC #
- یک فایل منبع RWX PVC جدید به نام
rwx-pvc.yamlایجاد کنید.console$ nano rwx-pvc.yaml - تنظیمات زیر را به فایل اضافه کنید.yaml
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: rwx-pvc spec: accessModes: - ReadWriteMany storageClassName: longhorn-rwx resources: requests: storage: 20Gi
فایل را ذخیره کنید و ببندید.
پیکربندی فوق یک ReadWriteMany (RWX) PVC
rwx-pvcایجاد میکند که بهlonghorn-rwxStorageClass ارجاع میدهد تا یک ولوم جدید۲۰ GBLonghorn را هنگام نصب PVC به عنوان ولوم ذخیرهسازی توسط یک Pod فراهم کند. - منبع را به کلاستر خود اعمال کنید.console
$ kubectl apply -f rwx-pvc.yaml - تمام PVC های موجود در کلاستر خود را مشاهده کنید و تأیید کنید که PVC جدید RWX با وضعیت
Boundدر دسترس است.console$ kubectl get pvcخروجی:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE rwx-pvc Bound pvc-509f254e-255d-4aee-bdc1-8c10c6cc49f5 20Gi RWX longhorn-rwx <unset> 7s test-rwo Bound pvc-4026f8d2-873c-429b-8068-208b26a75692 10Gi RWO longhorn-prod <unset> 3m10s - تمام PV های موجود در کلاستر خود را مشاهده کنید و تأیید کنید که یک Volume جدید Longhorn در دسترس است.console
$ kubectl get pvخروجی:
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS VOLUMEATTRIBUTESCLASS REASON AGE pvc-4026f8d2-873c-429b-8068-208b26a75692 10Gi RWO Retain Bound default/test-rwo longhorn-prod <unset> 3m31s pvc-509f254e-255d-4aee-bdc1-8c10c6cc49f5 20Gi RWX Retain Bound default/rwx-pvc longhorn-rwx <unset> 28sشما یک PVC از نوع ReadWriteMany (RWX) در کلاستر خود ایجاد کردهاید. تمام Podهایی که PVC را به عنوان Storage Volume نصب میکنند، میتوانند همزمان دادهها را در Longhorn Volume در کلاستر Kubernetes شما بخوانند و بنویسند.
ادعاهای حجم پایدار (PVC) را آزمایش کنید #
برای آزمایش حالتهای دسترسی ReadWriteOnce (RWO) و ReadWriteMany (RWX) خود، با نصب PVC های مربوطه به عنوان حجمهای ذخیرهسازی، Pod های نمونه برنامه را در خوشه خود مستقر کنید. بخشهای زیر را دنبال کنید تا Pod های جدیدی ایجاد کنید که به PVC های شما ارجاع میدهند و تأیید کنید که حجمهای جدید Longhorn در خوشه شما ایجاد میشوند.
یک بار خواندن و نوشتن (RWO) #
برای ایجاد یک Nginx Pod جدید که فایلهای برنامه وب را با استفاده از دایرکتوری /usr/nginx/ و با استفاده از ReadWriteOnce PVC شما به عنوان درایو ذخیرهسازی میخواند و مینویسد، مراحل زیر را دنبال کنید.
- یک فایل منبع Pod جدید
nginx-rwo-pod.yamlایجاد کنید.console$ nano nginx-rwo-pod.yaml - تنظیمات زیر را به فایل اضافه کنید.yaml
apiVersion: v1 kind: Pod metadata: name: nginx-webserver spec: containers: - name: rwo-container image: nginx:latest volumeMounts: - name: rwo-volume mountPath: /data volumes: - name: rwo-volume persistentVolumeClaim: claimName: test-rwo
فایل را ذخیره کرده و ببندید.
پیکربندی فوق یک Pod جدید
nginx-webserverایجاد میکند که محتوا را از PVC یکبار خواندنی-نوشتنی که در دایرکتوری/usr/share/nginx/htmlدرون کانتینر برنامه قرار دارد، ارائه میدهد. - منبع را در کلاستر Kubernetes خود اعمال کنید.console
$ kubectl apply -f nginx-rwo-pod.yaml - تمام Pod های موجود در کلاستر خود را مشاهده کنید و تأیید کنید که یک Pod جدید
nginx-webserverدر حال اجرا است.console$ kubectl get podsخروجی:
NAME READY STATUS RESTARTS AGE nginx-webserver 1/1 Running 0 41s - با استفاده از Kubectl به محیط غلاف Nginx دسترسی پیدا کنید.console
$ kubectl exec -it nginx-webserver -- /bin/bash
دستور
-- /bin/bashپوسته Bash را در محیط pod با پشتیبانی از دستورات و ابزارهای رایج لینوکس فعال میکند. هنگامی که دستور فوق با موفقیت اجرا شود، محیط ترمینال شما باید به پوسته زیر تغییر کند..consoleroot@nginx-webserver:/# - یک پیکربندی HTML جدید بنویسید تا با استفاده از ابزار echo، محتوای پیشفرض فایل
/usr/share/nginx/html/index.htmlرا جایگزین کند.console$ echo "<html><body><h1> Hello World! Nginx Writes to the RWO Longhorn Volume </h1></body></html>" > /usr/share/nginx/html/index.html
- دسترسی به آدرس IP
۱۲۷.۰.۰.۱در Nginx localhost را با استفاده از Curl آزمایش کنید.console$ curl ۱۲۷.۰.۰.۱
تأیید کنید که محتوای صفحه وب
Hello Worldسلام دنیا شما در خروجی مشابه تصویر زیر نمایش داده میشود.html<html><body><h1> Hello World! Nginx Writes to the RWO Longhorn Volume </h1></body></html>
بر اساس خروجی بالا، پاد
nginx-webserverدسترسی خواندن و نوشتن به والیوم ReadWriteOnce Longhorn که با دایرکتوری/usr/share/nginx/htmlمانت شده است را دارد. با این حال، فقط یک پاد میتواند همزمان حافظه را بخواند یا بنویسد.بر اساس پیکربندی حافظه، پادهای دیگر ممکن است بتوانند PVC را با امتیازات فقط خواندنی مانت کنند، اما نمیتوانند همزمان با برنامه
nginx-webserverفایلها را بنویسند. - از محیط Nginx Pod خارج شوید.console
# exit
خواندن، نوشتن و تعداد زیاد (RWX) #
حالت دسترسی Read Write Many (RWX) برای برنامههای خوشهای با رابطهای ارتباطی front-end و back-end مناسب است. مراحل زیر را برای ایجاد Podهای جدید برنامه که همزمان دادهها را در یک volume ذخیرهسازی PVC نصب شده ReadWriteMany میخوانند و مینویسند، دنبال کنید.
- یک فایل پیکربندی Pod جدید به نام
log-backend.yamlایجاد کنید که دادهها را در یک دایرکتوری ذخیرهسازی mount شده بنویسد.console$ nano log-backend.yaml - تنظیمات زیر را به فایل اضافه کنید.yaml
apiVersion: v1 kind: Pod metadata: name: log-writer spec: containers: - name: log-writer-container image: busybox:latest command: ["/bin/sh", "-c", "while true; do echo $(date) >> /var/log/app.log; sleep ۱; done"] volumeMounts: - name: shared-storage mountPath: /var/log volumes: - name: shared-storage persistentVolumeClaim: claimName: rwx-pvc
فایل را ذخیره کنید و ببندید.
پیکربندی فوق یک
log-writerجدید برای Application pod ایجاد میکند که به طور مداوم تاریخ و زمان کلاستر Kubernetes را در یک فایل لاگlonghorn-date.logدر دایرکتوری مشترک/var/log/مینویسد. Volume پیویسی ReadWriteMany به عنوان یک Volumeshared-storageبا استفاده از دایرکتوری مشترک/var/logبه عنوان مسیر mount قابل دسترسی برای تمام منابع متصل، Mount میشود. - یک فایل پیکربندی Pod دیگر به نام
log-frontend.yamlایجاد کنید تا دادهها را از دایرکتوری ذخیرهسازی نصبشده بخواند.console$ nano log-frontend.yaml - تنظیمات زیر را به فایل اضافه کنید.yaml
apiVersion: v1 kind: Pod metadata: name: log-viewer spec: containers: - name: log-reader-container image: busybox:latest command: ["/bin/sh", "-c", "tail -f /var/log/app.log"] volumeMounts: - name: shared-storage mountPath: /var/log volumes: - name: shared-storage persistentVolumeClaim: claimName: rwx-pvc
فایل را ذخیره کنید و ببندید.
پیکربندی فوق یک
log-viewerPod جدید ایجاد میکند که دادهها را از فایلapp.logایجاد شده توسطlogs-writerbackend Pod در دایرکتوری مشترک/var/log/میخواند. - یک فایل پیکربندی Pod جدید در backend به نام
updatelog-backendایجاد کنید که به طور مداوم دادهها را در فایل مشترک مینویسد.console$ nano updatelog-backend.yaml - تنظیمات زیر را به فایل اضافه کنید.yaml
apiVersion: v1 kind: Pod metadata: name: updatelog spec: containers: - name: log-writer-container image: busybox:latest command: ["/bin/sh", "-c", "while true; do echo Update from backend pod $(date) >> /var/log/app.log; sleep ۱; done"] volumeMounts: - name: shared-storage mountPath: /var/log volumes: - name: shared-storage persistentVolumeClaim: claimName: rwx-pvc
فایل را ذخیره کنید و ببندید.
پیکربندی فوق یک Pod
updatelogجدید ایجاد میکند که بهروزرسانیها را در فایل مشترکapp.logدر دایرکتوری/var/log/مینویسد. Pod یک پیام جدیدUpdate from backend podو تاریخ کلاستر را به فایل لاگ اضافه میکند. - تنظیمات پاد را روی کلاستر خود اعمال کنید.console
$ kubectl apply -f log-backend.yaml $ kubectl apply -f log-frontend.yaml $ kubectl apply -f updatelog-backend.yaml
- تمام پادهای (Pods) موجود در کلاستر خود را مشاهده کنید و تأیید کنید که پادهای آزمایشی جدید در حال اجرا هستند.console
$ kubectl get podsخروجی:
NAME READY STATUS RESTARTS AGE log-viewer 1/1 Running 1 (37s ago) 59s log-writer 1/1 Running 0 64s updatelog 1/1 Running 0 51s - لاگهای پادِ
log-viewerرا مشاهده کنید و تأیید کنید که هر دو پادِ بکاند به طور فعال در حال نوشتن دادهها در فایل مشترک/var/log/app.logهستند.console$ kubectl logs log-viewerخروجی:
Update from backend pod Tue Apr 30 18:48:19 UTC 2024 Tue Apr 30 18:48:20 UTC 2024 Update from backend pod Tue Apr 30 18:48:20 UTC 2024 Tue Apr 30 18:48:21 UTC 2024 Update from backend pod Tue Apr 30 18:48:21 UTC 2024 Tue Apr 30 18:48:22 UTC 2024 Update from backend pod Tue Apr 30 18:48:22 UTC 2024 Tue Apr 30 18:48:23 UTC 2024 Update from backend pod Tue Apr 30 18:48:23 UTC 2024 Tue Apr 30 18:48:24 UTC 2024 Update from backend pod Tue Apr 30 18:48:24 UTC 2024 Tue Apr 30 18:48:25 UTC 2024 Update from backend pod Tue Apr 30 18:48:25 UTC 2024 Tue Apr 30 18:48:26 UTC 2024 Update from backend pod Tue Apr 30 18:48:26 UTC 2024 Tue Apr 30 18:48:27 UTC 2024 Update from backend pod Tue Apr 30 18:48:27 UTC 2024 Tue Apr 30 18:48:28 UTC 2024 Update from backend pod Tue Apr 30 18:48:28 UTC 2024بر اساس خروجی فوق، Podهای backend
log-writeوupdatelogبه طور همزمان دادهها را در فایل مشترکapp.logمینویسند در حالی کهlog-viewبه طور فعال دادهها را از فایل میخواند. در نتیجه، روش دسترسی ReadWriteMany به چندین Pod این امکان را میدهد که دادهها را به اشتراک بگذارند، فایلها را بخوانند و همزمان در یک فضای ذخیرهسازی بنویسند.
پیکربندی Longhorn برای دسترسی خارجی #
رابط کاربری (UI) لانگهورن یک برنامه وب گرافیکی است که به شما امکان میدهد وضعیت ولومهای لانگهورن و تمام PVCهای نصبشده را رصد کنید. مراحل زیر را برای نصب یک کنترلر Ingress و دسترسی ایمن به رابط کاربری لانگهورن در کلاستر Kubernetes خود با ارسال درخواستهای خارجی به پورت رابط کاربری لانگهورن دنبال کنید.
- آخرین نسخه Nginx Ingress Controller را با استفاده از Kubectl روی کلاستر Kubernetes خود نصب کنید.console
$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.10.1/deploy/static/provider/cloud/deploy.yamlخروجی:
namespace/ingress-nginx created serviceaccount/ingress-nginx created serviceaccount/ingress-nginx-admission created role.rbac.authorization.k8s.io/ingress-nginx created role.rbac.authorization.k8s.io/ingress-nginx-admission created clusterrole.rbac.authorization.k8s.io/ingress-nginx created clusterrole.rbac.authorization.k8s.io/ingress-nginx-admission created rolebinding.rbac.authorization.k8s.io/ingress-nginx created rolebinding.rbac.authorization.k8s.io/ingress-nginx-admission created clusterrolebinding.rbac.authorization.k8s.io/ingress-nginx created clusterrolebinding.rbac.authorization.k8s.io/ingress-nginx-admission created configmap/ingress-nginx-controller created service/ingress-nginx-controller created service/ingress-nginx-controller-admission created deployment.apps/ingress-nginx-controller created job.batch/ingress-nginx-admission-create created job.batch/ingress-nginx-admission-patch created ingressclass.networking.k8s.io/nginx created validatingwebhookconfiguration.admissionregistration.k8s.io/ingress-nginx-admission created - تمام Pod های
ingress-nginxController ایجاد شده را مشاهده کنید و تأیید کنید که Pod ingress-nginx به طور فعال در حال اجرا است.console$ kubectl get pods --all-namespaces -l app.kubernetes.io/name=ingress-nginx
خروجی:
NAMESPACE NAME READY STATUS RESTARTS AGE ingress-nginx ingress-nginx-admission-create-n2gvf 0/1 Completed 0 98s ingress-nginx ingress-nginx-admission-patch-vqfhn 0/1 Completed 0 98s ingress-nginx ingress-nginx-controller-57b7568757-ctk5z 1/1 Running 0 99s - حداقل
۳دقیقه صبر کنید تاingress-nginxController یک Load Balancer را مستقر کند. سپس، تمام سرویسهای موجود در فضای نام ingress-nginx را مشاهده کنید تا آدرس IP عمومی خارجی اختصاص داده شده به سرویسLoadBalancerخود را تأیید کنید.console$ kubectl get services ingress-nginx-controller --namespace=ingress-nginx
خروجی:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE ingress-nginx-controller LoadBalancer 10.106.252.171 203.0.113.5 80:30886/TCP,443:32107/TCP 4m25sبر اساس خروجی بالا، IP متعادلکننده بار خارجی شما
۲۰۳.۰.۱۱۳.۵است. به ثبتکننده دامنه خود دسترسی پیدا کنید و یک رکورد DNS A جدید تنظیم کنید که به آدرس IP خارجی اشاره کند تا همه درخواستها را به خوشه Kubernetes شما ارسال کند. - یک فایل منبع جدید Ingress به نام
longhorn-ingress.yamlایجاد کنید.console$ nano longhorn-ingress.yaml - تنظیمات زیر را به فایل اضافه کنید.
longhorn.example.comرا با نام دامنه واقعی خود جایگزین کنید.yamlapiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: longhorn-production44 namespace: longhorn-system spec: ingressClassName: nginx rules: - host: negarnovin.ddns.net http: paths: - pathType: Prefix path: "/" backend: service: name: longhorn-frontend port: number: ۸۰
فایل را ذخیره کنید و ببندید.
پیکربندی فوق یک منبع جدید Ingress به نام
longhorn-productionایجاد میکند که رابط کاربری Longhorn را با استفاده از نام دامنه شماlonghorn.example.comدر معرض نمایش قرار میدهد و تمام درخواستهای خارجی HTTP را به برنامه داخلیlonghorn-frontendروی پورت۸۰ارسال میکند. - پیکربندی Ingress را روی کلاستر خود اعمال کنید.console
$ kubectl apply -f longhorn-ingress - تمام منابع Ingress را در فضای نام
longhorn-systemمشاهده کنید و تأیید کنید که پیکربندی Longhorn Ingress شما در دسترس است.console$ kubectl get ingressخروجی:
NAME CLASS HOSTS ADDRESS PORTS AGE longhorn-production nginx longhorn.example.com 203.0.113.5 80 2m20sشما Nginx Ingress Controller را نصب کردهاید و یک پیکربندی جدید Longhorn Ingress ایجاد کردهاید که تمام درخواستهای خارجی را به برنامه داخلی
longhorn-frontendارسال میکند. در نتیجه، میتوانید با استفاده از نام دامنه خود، به طور ایمن به رابط کاربری Longhorn دسترسی داشته باشید تا بتوانید Volumeها را در کلاستر Kubernetes خود ایجاد و مدیریت کنید.
دسترسی به رابط کاربری Longhorn #
- با استفاده از یک مرورگر وب مانند فایرفاکس به نام دامنه Longhorn خود دسترسی پیدا کنید.
http://longhorn.example.com - حجمها، گرهها و خلاصه فضای ذخیرهسازی کلاستر Kubernetes خود را در داشبورد Longhorn تأیید کنید. علاوه بر این، ناحیه حجمها شامل اطلاعاتی در مورد وضعیت تمام حجمهای Longhorn موجود در کلاستر شما است.

- برای دسترسی به Volume های Longhorn موجود در کلاستر Kubernetes خود، روی Volume در منوی ناوبری بالا کلیک کنید.
- تأیید کنید که والیومهای ReadWriteOnce (RWO) و ReadWriteMany (RWX) شما در وضعیت سالمی در دسترس هستند.

- برای مشاهده اطلاعات بیشتر مانند تعداد کپیها، جزئیات ولوم، اسنپشاتها و پشتیبانها، روی هر یک از ولومهای لانگهورن کلیک کنید.
- به لیست پارتیشنهای Longhorn برگردید و روی Create Volume کلیک کنید تا یک پارتیشن Longhorn جدید با استفاده از رابط کاربری Longhorn ایجاد شود.
- اطلاعات مربوط به ولوم مورد نظر خود را وارد کنید و روی منوی کشوییAccess Mode کلیک کنید تا روش دسترسی به ولوم ReadWriteOnce یا ReadWriteMany را انتخاب کنید.
- برای اعمال ولوم جدید و تأیید اینکه در فهرست ولومهای Longhorn شما موجود است، روی OK کلیک کنید.
- ولوم را انتخاب کنید و روی Attach کلیک کنید تا ولوم جدید Longhorn به هر یک از گرههای کلاستر شما که فضای ذخیرهسازی کافی دارد، اختصاص داده شود.

- روی منوی کشویی Node کلیک کنید، گره کارگر هدف خود را انتخاب کنید و برای آمادهسازی ولوم جدید با استفاده از فضای ذخیرهسازی گره خود، روی Attach کلیک کنید.
- تأیید کنید که وضعیت ولوم جدید Longhorn سالم است و فیلد Attached To شامل گره کلاستر انتخابی شما میشود.

شما یک درایو Longhorn جدید در رابط کاربری Longhorn ایجاد کردهاید. میتوانید یک PVC جدید ایجاد کنید که به نام درایو Longhorn جدید اشاره دارد تا درایو جدید را بسته به روش دسترسی آن، در کلاستر خود mount کنید.
پشتیبانگیری از Volumeهای Longhorn در NegarNovin Object Storage #
پشتیبانگیریهای Longhorn با ذخیرهسازی S3 مانند Negarnovin Object Storage برای بازیابی و ایجاد Disaster Recovery Volumes (DR volume) در صورت خرابی گرهها در کلاستر شما سازگار است. مراحل زیر را برای اعمال پیکربندیهای جدید Negarnovin Object Storage در کلاستر خود دنبال کنید و Longhorn را برای پشتیبانگیری از Volumeها در باکت مقصد خود تنظیم کنید.
- به نمونه Negarnovin Object Storage خود دسترسی پیدا کنید و Hostname, Secret Key و Access Key را برای استفاده در خوشه خود کپی کنید.
- یک فایل منبع مخفی جدید
negarobj-secret.yamlایجاد کنید تا اعتبارنامههای NegarNovin Object Storage خود را در آن ذخیره کنید.console$ nano negarnovinobj-secret.yaml - پیکربندیهای زیر را به فایل اضافه کنید.
examplekey,examplesecretوewr1.negarnovin.comرا با اعتبارنامههای واقعی Negarnovin Object Storage خود جایگزین کنید.yamlapiVersion: v1 kind: Secret metadata: name: longhorn-negarnovin-backups namespace: longhorn-system type: Opaque stringData: AWS_ACCESS_KEY_ID: examplekey AWS_ENDPOINTS: https://ewr1.negarnovin.com AWS_SECRET_ACCESS_KEY: examplesecret
فایل را ذخیره کنید و ببندید.
پیکربندی فوق یک فایل جدید به نام
longhorn-negar-backupsبا نام Secret ایجاد میکند که شامل اطلاعات دسترسی Negarnovin Object Storage شما در فضای نامlonghorn-systemاست. Longhorn هنگام ایجاد پشتیبانگیری، بسته به باکت هدف در پیکربندی شما، به این فایل مخفی ارجاع میدهد. - پیکربندی را روی کلاستر Kubernetes خود اعمال کنید.console
$ kubectl apply -f negarobj-secret.yaml - تمام اسرار موجود در فضای نام
longhorn-systemرا مشاهده کنید و تأیید کنید که منبع جدید Negarnovin Object Storage شما در دسترس است.console$ kubectl get secrets -n longhorn-systemخروجی:
NAME TYPE DATA AGE longhorn-negarnovin-backups Opaque 3 35s - در مرورگر وب خود به رابط کاربری Longhorn دسترسی پیدا کنید.
- روی منوی کشویی تنظیمات (Setting ) در منوی ناوبری اصلی کلیک کنید و از لیست گزینهها، عمومی (General ) را انتخاب کنید.
- به بخش Back Up بروید Backup Target و با استفاده از آدرس اینترنتی
s3://، نام مخزن و آدرس اینترنتی مخزن NegarNovin Object Storage، محل پشتیبانگیری را روی مخزن NegarNovin Object Storage خود تنظیم کنید.s3://example-bucket@ewr1.negarnovin.com.com/ - نام منبع NegarNovin Object Storage Secret خود را
longhorn-negarnovin-backupsدر فیلدBackup Target Credential Secretوارد کنید.
نصب لانگ هورن در کوبرنتیز - برای ذخیره تغییرات و اعمال پیکربندی جدید پشتیبانگیری Longhorn، Enter را فشار دهید.
- برای دسترسی به ولومهای Longhorn خود، در منوی ناوبری اصلی روی Volume کلیک کنید.
- یک حجم هدف برای پشتیبانگیری انتخاب کنید. برای مثال،
test-volume. - برای وارد کردن جزئیات پشتیبان جدید، روی Create Backup در منوی ناوبری بالا کلیک کنید.

- روی Add Labels for Backup کلیک کنید و جزئیات برچسب پشتیبان مورد نظر خود را وارد کنید. به عنوان مثال،
longhorn-backupوlatest-backupبه ترتیب به عنوان کلید و مقدار برچسب. - بسته به حجم درایو خود، منتظر بمانید تا فرآیند پشتیبانگیری کامل شود و برای دسترسی به تمام Backup موجود، در منوی اصلی روی پشتیبانگیری کلیک کنید.
- تأیید کنید که نسخه پشتیبان جدید Longhorn شما در لیست موجود است.

- به مخزن ذخیرهسازی negarnovin خود دسترسی پیدا کنید و تأیید کنید که یک دایرکتوری
backupstoreجدید توسط Longhorn با اشیاء پشتیبانگیری حجمی شما ایجاد شده است.
شما از پارتیشن Longhorn خود در Negarnovin Object Storage نسخه پشتیبان تهیه کردهاید، میتوانید یک پارتیشن بازیابی فاجعه جدید ایجاد کنید یا از دادههای بازیابی برای بازگرداندن هرگونه تغییر خوشهای استفاده کنید. برای خودکارسازی پشتیبانگیری از پارتیشن Longhorn خود یا ایجاد پشتیبانگیری دستی برای پشتیبانگیری مداوم از دادههای پارتیشن در باکت مقصد، به Recurring Job در منوی ناوبری اصلی رابط کاربری Longhorn بروید.
نتیجه گیری #
شما Longhorn را با استفاده از یک کلاستر Negarnovin Kubernetes Engine (VKE) روی Kubernetes مستقر کردهاید. شما Volume Longhorn را ایجاد کردهاید و چندین PVC را با حالتهای دسترسی ReadWriteOnce و ReadWriteMany برای استفاده با برنامههای کلاستر خود که PVCها را به عنوان Volumeهای ذخیرهسازی Mount میکنند، تنظیم کردهاید. علاوه بر این، شما با استفاده از رابط کاربری Longhorn، پشتیبانهای Longhorn را برای ذخیره خارجی دادههای Volume جهت بازیابی در صورت خرابی کلاستر ایجاد کردهاید. برای اطلاعات بیشتر و گزینههای پیکربندی، به مستندات Longhorn مراجعه کنید.








