📄 محتوای کامل
نحوه نصب لانگ هورن روی کوبرنتیز
یاد بگیرید که Longhorn را روی Kubernetes نصب کنید تا فضای ذخیرهسازی بلوکی مقیاسپذیر و با دسترسی بالا به همراه مدیریت رابط کاربری و ویژگیهای پشتیبانگیری داشته باشید.
مقدمه
لانگهورن یک سیستم ذخیرهسازی بلوکی توزیعشدهی سبک و متنباز برای کوبرنتیز است که ذخیرهسازی پایدار را برای برنامههای دارای وضعیت در یک خوشه فراهم میکند. ولومهای لانگهورن، ذخیرهسازی بلوکی مقیاسپذیر و با دسترسی بالا را که به گرههای کارگر شما متصل است، با پشتیبانی از حالتهای دسترسی چندگانه در خوشه کوبرنتیز شما ارائه میدهند.
در یک خوشه کوبرنتیز، لانگهورن با اجزای اصلی زیر اجرا میشود:
- 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 با حداقل 3 گره و 4 vCPUs در هر گره مستقر کنید.
- Negarnovin Object Storage را مستقر کنید و یک bucket longhorn جدید برای ذخیره پشتیبانهای volume خود ایجاد کنید.
- یک سرور مجازی با سیستم عامل دبیان ایجاد کنید تا به عنوان ایستگاه کاری مدیریت خوشه استفاده شود.
- با استفاده از SSH و به عنوان یک کاربر غیر ریشه با امتیازات sudo به سرور دسترسی پیدا کنید.
- Kubectl را با پیکربندی VKE خود نصب و پیکربندی کنید تا به کلاستر روی سرور خود دسترسی داشته باشید.
نصب لانگهورن روی کوبرنتیز
شما میتوانید Longhorn را با استفاده از مدیر بسته Helm یا Kubectl روی کلاستر Kubernetes خود نصب کنید. برای نصب آخرین نسخه سازگار با اکثر نسخههای کلاستر Kubernetes، از Kubectl برای مشخص کردن شماره نسخه هدف و تغییر هرگونه اطلاعات پیکربندی در کلاستر خود استفاده کنید. مراحل زیر را برای نصب آخرین نسخه Longhorn با استفاده از Kubectl دنبال کنید و تمام منابع کلاستر موجود را تأیید کنید.
- آخرین فایل انتشار Longhorn را با استفاده از wgetدانلود کنید.
consoleCopy
$ wget https://github.com/longhorn/longhorn/releases/download/v1.6.1/longhorn.yaml
دستور بالا نسخه 1.6.1,لانگهورن را دانلود میکند، برای تأیید آخرین نسخه جهت استقرار در کلاستر کوبرنتس خود، به مخزن رسمی گیتهاب پروژه مراجعه کنید.
- فایلها را فهرست کنید و تأیید کنید که یک فایل longhorn.yaml جدید در دایرکتوری کاری شما موجود است.
consoleCopy
$ ls
خروجی:
longhorn.yaml
- با استفاده از آخرین فایل longhorn.yaml ، Longhorn را در کلاستر Kubernetes خود مستقر کنید.
consoleCopy
$ 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 را مشاهده کنید و تأیید کنید که آنها به درستی در خوشه شما اجرا میشوند.
consoleCopy
$ 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) در کلاستر شما امکانپذیر شود.
consoleCopy
$ kubectl apply -f https://raw.githubusercontent.com/longhorn/longhorn/v1.6.1/deploy/prerequisite/longhorn-nfs-installation.yaml
- تأیید کنید که غلافهای Longhorn NFS در کلاستر شما ایجاد و اجرا میشوند.
consoleCopy
$ 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 ایجاد کنید.
consoleCopy
$ nano rwo-storageclass.yaml
- تنظیمات زیر را به فایل اضافه کنید.
yamlCopy
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: longhorn-prod
provisioner: driver.longhorn.io
allowVolumeExpansion: true
parameters:
numberOfReplicas: "3"
staleReplicaTimeout: "2880" # 48 hours in minutes
fromBackup: ""
fsType: "ext4"
reclaimPolicy: Retain
فایل را ذخیره کنید و ببندید.
پیکربندی فوق یک StorageClass longhorn-prod قابل توسعه جدید با سیاست حفظ (retain policy) ایجاد میکند که یک فضای ذخیرهسازی را حتی در صورت حذف PVC مرتبط، فعال نگه میدارد. در پیکربندی:
- provisioner: درایور تأمینکنندهی فضای ذخیرهسازی پایدار (PV) را تنظیم میکند. مقدار driver.longhorn.io از موتور مورد نیاز Longhorn برای استقرار و مدیریت فضاها استفاده میکند در حالی که مقداری مانند block.csi.negarnovin.com فضاهای ذخیرهسازی پایدار (PV) را با Negarnovin Block Storage مستقر میکند که با Longhorn manager سازگار نیستند.
- allowVolumeExpansion: امکان تغییر ظرفیت درایوهای Longhorn را در یک کلاستر فراهم میکند. برای مثال، یک درایو 10 GB میتواند بسته به نیاز شما تا 20 GB یا بیشتر افزایش یابد.
- numberOfReplicas: تعداد کپیهای درایو Longhorn را برای استقرار و اتصال به گرههای کلاستر شما تنظیم میکند.
- staleReplicaTimeout: یک مقدار time-out ایجاد میکند تا وقتی زمان فعالیت مشخص شده منقضی شد، یک درایو Longhorn را به عنوان غیرفعال علامتگذاری کند.
- staleReplicaTimeout: یک درایو Longhorn را از منبع پشتیبان شما مانند Negarnovin Object Storage بازیابی میکند.
- fsType: فرمت سیستم فایل ولوم Longhorn را تنظیم میکند.
- reclaimPolicy: اقدام مربوط به ولوم Longhorn را برای اعمال در هنگام حذف PVC یا PV مرتبط با کلاس مشخص میکند. ولومهای Longhorn از سیاستهای حذف و حفظ پشتیبانی میکنند.
- کلاس StorageClass را روی کلاستر خود اعمال کنید.
consoleCopy
$ kubectl apply -f rwo-storageclass.yaml
- تمام StorageClasses را در کلاستر خود مشاهده کنید و تأیید کنید که کلاس RWO جدید شما در دسترس است.
consoleCopy
$ 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 ایجاد کنید.
consoleCopy
$ nano rwx-storageclass.yaml
- تنظیمات زیر را به فایل اضافه کنید.
yamlCopy
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: longhorn-rwx
provisioner: driver.longhorn.io
allowVolumeExpansion: true
reclaimPolicy: Delete
volumeBindingMode: Immediate
parameters:
numberOfReplicas: "3"
staleReplicaTimeout: "2880"
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 خود اعمال کنید.
consoleCopy
$ kubectl apply -f rwx-storageclass.yaml
- کلاس StorageClasses را مشاهده کنید و تأیید کنید که کلاس RWX جدید در دسترس است.
consoleCopy
$ 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 ایجاد کنید.
consoleCopy
$ nano rwo-pvc.yaml
- تنظیمات زیر را به فایل اضافه کنید.
yamlCopy
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: test-rwo
spec:
accessModes:
- ReadWriteOnce
storageClassName: longhorn-prod
resources:
requests:
storage: 10Gi
فایل را ذخیره کنید و ببندید.
پیکربندی فوق یک PVC test-rwo جدید ایجاد میکند که به longhorn-prod StorageClass ارجاع میدهد تا یک Volume 10 GB گیگابایتی Longhorn ایجاد کند، زمانی که PVC توسط یک Pod در کلاستر نصب شده باشد.
- PVC را روی خوشه خود بمالید.
consoleCopy
$ kubectl apply -f rwo-pvc.yaml
- تمام PVC های خوشه را مشاهده کنید و تأیید کنید که منبع جدید با وضعیت Bound در دسترس است.
consoleCopy
$ 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 در دسترس است.
consoleCopy
$ 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 ایجاد کنید.
consoleCopy
$ nano rwx-pvc.yaml
- تنظیمات زیر را به فایل اضافه کنید.
yamlCopy
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: rwx-pvc
spec:
accessModes:
- ReadWriteMany
storageClassName: longhorn-rwx
resources:
requests:
storage: 20Gi
فایل را ذخیره کنید و ببندید.
پیکربندی فوق یک ReadWriteMany (RWX) PVC rwx-pvc ایجاد میکند که به longhorn-rwx StorageClass ارجاع میدهد تا یک ولوم جدید 20 GB Longhorn را هنگام نصب PVC به عنوان ولوم ذخیرهسازی توسط یک Pod فراهم کند.
- منبع را به کلاستر خود اعمال کنید.
consoleCopy
$ kubectl apply -f rwx-pvc.yaml
- تمام PVC های موجود در کلاستر خود را مشاهده کنید و تأیید کنید که PVC جدید RWX با وضعیت Boundدر دسترس است.
consoleCopy
$ 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 در دسترس است.
consoleCopy
$ 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 ایجاد کنید.
consoleCopy
$ nano nginx-rwo-pod.yaml
- تنظیمات زیر را به فایل اضافه کنید.
yamlCopy
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 خود اعمال کنید.
consoleCopy
$ kubectl apply -f nginx-rwo-pod.yaml
- تمام Pod های موجود در کلاستر خود را مشاهده کنید و تأیید کنید که یک Pod جدید nginx-webserver در حال اجرا است.
consoleCopy
$ kubectl get pods
خروجی:
NAME READY STATUS RESTARTS AGE
nginx-webserver 1/1 Running 0 41s
- با استفاده از Kubectl به محیط غلاف Nginx دسترسی پیدا کنید.
consoleCopy
$ kubectl exec -it nginx-webserver -- /bin/bash
دستور -- /bin/bash پوسته Bash را در محیط pod با پشتیبانی از دستورات و ابزارهای رایج لینوکس فعال میکند. هنگامی که دستور فوق با موفقیت اجرا شود، محیط ترمینال شما باید به پوسته زیر تغییر کند..
consoleCopy
root@nginx-webserver:/#
- یک پیکربندی HTML جدید بنویسید تا با استفاده از ابزار echo، محتوای پیشفرض فایل /usr/share/nginx/html/index.html را جایگزین کند.
consoleCopy
$ echo "<html><body><h1> Hello World! Nginx Writes to the RWO Longhorn Volume </h1></body></html>" > /usr/share/nginx/html/index.html
- دسترسی به آدرس IP 127.0.0.1 در Nginx localhost را با استفاده از Curl آزمایش کنید.
consoleCopy
$ curl 127.0.0.1
تأیید کنید که محتوای صفحه وب Hello World سلام دنیا شما در خروجی مشابه تصویر زیر نمایش داده میشود.
htmlCopy
<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 خارج شوید.
consoleCopy
# exit
خواندن، نوشتن و تعداد زیاد (RWX)
حالت دسترسی Read Write Many (RWX) برای برنامههای خوشهای با رابطهای ارتباطی front-end و back-end مناسب است. مراحل زیر را برای ایجاد Podهای جدید برنامه که همزمان دادهها را در یک volume ذخیرهسازی PVC نصب شده ReadWriteMany میخوانند و مینویسند، دنبال کنید.
- یک فایل پیکربندی Pod جدید به نام log-backend.yaml ایجاد کنید که دادهها را در یک دایرکتوری ذخیرهسازی mount شده بنویسد.
consoleCopy
$ nano log-backend.yaml
- تنظیمات زیر را به فایل اضافه کنید.
yamlCopy
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 1; 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 به عنوان یک Volume shared-storage با استفاده از دایرکتوری مشترک /var/log به عنوان مسیر mount قابل دسترسی برای تمام منابع متصل، Mount میشود.
- یک فایل پیکربندی Pod دیگر به نام log-frontend.yaml ایجاد کنید تا دادهها را از دایرکتوری ذخیرهسازی نصبشده بخواند.
consoleCopy
$ nano log-frontend.yaml
- تنظیمات زیر را به فایل اضافه کنید.
yamlCopy
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-viewer Pod جدید ایجاد میکند که دادهها را از فایل app.log ایجاد شده توسط logs-writer backend Pod در دایرکتوری مشترک /var/log/میخواند.
- یک فایل پیکربندی Pod جدید در backend به نام updatelog-backend ایجاد کنید که به طور مداوم دادهها را در فایل مشترک مینویسد.
consoleCopy
$ nano updatelog-backend.yaml
- تنظیمات زیر را به فایل اضافه کنید.
yamlCopy
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 1; 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 و تاریخ کلاستر را به فایل لاگ اضافه میکند.
- تنظیمات پاد را روی کلاستر خود اعمال کنید.
consoleCopy
$ kubectl apply -f log-backend.yaml
$ kubectl apply -f log-frontend.yaml
$ kubectl apply -f updatelog-backend.yaml
- تمام پادهای (Pods) موجود در کلاستر خود را مشاهده کنید و تأیید کنید که پادهای آزمایشی جدید در حال اجرا هستند.
consoleCopy
$ 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 هستند.
consoleCopy
$ 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 خود نصب کنید.
consoleCopy
$ 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-nginx Controller ایجاد شده را مشاهده کنید و تأیید کنید که Pod ingress-nginx به طور فعال در حال اجرا است.
consoleCopy
$ 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
- حداقل 3 دقیقه صبر کنید تا ingress-nginx Controller یک Load Balancer را مستقر کند. سپس، تمام سرویسهای موجود در فضای نام ingress-nginx را مشاهده کنید تا آدرس IP عمومی خارجی اختصاص داده شده به سرویس LoadBalancer خود را تأیید کنید.
consoleCopy
$ 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 متعادلکننده بار خارجی شما 203.0.113.5است. به ثبتکننده دامنه خود دسترسی پیدا کنید و یک رکورد DNS A جدید تنظیم کنید که به آدرس IP خارجی اشاره کند تا همه درخواستها را به خوشه Kubernetes شما ارسال کند.
- یک فایل منبع جدید Ingress به نام longhorn-ingress.yaml ایجاد کنید.
consoleCopy
$ nano longhorn-ingress.yaml
- تنظیمات زیر را به فایل اضافه کنید. longhorn.example.com را با نام دامنه واقعی خود جایگزین کنید.
yamlCopy
apiVersion: 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: 80
فایل را ذخیره کنید و ببندید.
پیکربندی فوق یک منبع جدید Ingress به نام longhorn-production ایجاد میکند که رابط کاربری Longhorn را با استفاده از نام دامنه شما longhorn.example.com در معرض نمایش قرار میدهد و تمام درخواستهای خارجی HTTP را به برنامه داخلی longhorn-frontend روی پورت 80ارسال میکند.
- پیکربندی Ingress را روی کلاستر خود اعمال کنید.
consoleCopy
$ kubectl apply -f longhorn-ingress
- تمام منابع Ingress را در فضای نام longhorn-system مشاهده کنید و تأیید کنید که پیکربندی Longhorn Ingress شما در دسترس است.
consoleCopy
$ 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 خود را در آن ذخیره کنید.
consoleCopy
$ nano negarnovinobj-secret.yaml
- پیکربندیهای زیر را به فایل اضافه کنید. examplekey, examplesecret و ewr1.negarnovin.com را با اعتبارنامههای واقعی Negarnovin Object Storage خود جایگزین کنید.
yamlCopy
apiVersion: 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 خود اعمال کنید.
consoleCopy
$ kubectl apply -f negarobj-secret.yaml
- تمام اسرار موجود در فضای نام longhorn-system را مشاهده کنید و تأیید کنید که منبع جدید Negarnovin Object Storage شما در دسترس است.
consoleCopy
$ 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 مراجعه کنید.