برنامه نویسی

کلاس‌های ذخیره‌سازی Kubernetes و تأمین پویا: راهنمای مدیریت خودکار ذخیره‌سازی

Summarize this content to 400 words in Persian Lang

کلاس های ذخیره سازی Kubernetes و تدارک دینامیک

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

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

کلاس های ذخیره سازی در Kubernetes چیست؟

الف StorageClass در Kubernetes یک «نوع» ذخیره‌سازی را تعریف می‌کند که برای تأمین حجم‌های پایدار (PVs) به صورت پویا استفاده می‌شود. این اساساً راهی برای توصیف کلاس‌ها یا انواع مختلف ذخیره‌سازی است که یک خوشه می‌تواند ارائه دهد، که می‌تواند بر اساس عملکرد، هزینه و سایر عوامل متفاوت باشد. کلاس‌های ذخیره‌سازی به کاربران اجازه می‌دهند تا ویژگی‌های ذخیره‌سازی مانند ارائه‌دهنده ذخیره‌سازی، نوع حجم، و استراتژی تأمین را تعریف کنند (به عنوان مثال، EBS، NFS، GlusterFSو غیره).

ویژگی های کلیدی کلاس های ذخیره سازی:

تامین: کلاس های ذخیره سازی نحوه تامین PV ها را (به صورت پویا یا استاتیک) تعریف می کنند.

سفارشی سازی: کلاس های ذخیره سازی مختلف را می توان با پارامترهای خاصی مانند ویژگی های عملکرد و انواع حجم تعریف کرد.

یکپارچه سازی بدون درز: کاربران نیازی به دانستن فناوری ذخیره سازی اساسی ندارند. Kubernetes با ارجاع به StorageClass در یک ادعای حجم دائمی (PVC)، از تامین آن مراقبت می کند.

سیاست بازپس گیری: کلاس‌های ذخیره‌سازی خط‌مشی بازیابی را تعریف می‌کنند، که تعیین می‌کند با حذف PVC مرتبط چه اتفاقی برای ذخیره‌سازی اصلی می‌افتد (به عنوان مثال، Retain، Delete).

نحوه کار کلاس های ذخیره سازی در Kubernetes

هنگامی که یک را ایجاد می کنید ادعای حجم پایدار (PVC)، می توانید a را مشخص کنید storageClassName در PVC اگر یک StorageClass مشخص شده باشد، Kubernetes از کلاس برای ارائه داینامیک (PV) مورد نیاز، بر اساس ویژگی‌های کلاس استفاده می‌کند.

اگر نه storageClassName در PVC ارائه شده است، Kubernetes از کلاس ذخیره سازی پیش فرض استفاده می کند (اگر یکی تعریف شده باشد). اگر هیچ پیش‌فرضی مشخص نشده باشد، PVC تا زمانی که یک PV مناسب در دسترس نباشد، بدون محدودیت باقی می‌ماند.

نمونه ای از PVC با کلاس ذخیره سازی:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-pvc
spec:
accessModes:
– ReadWriteOnce
resources:
requests:
storage: 10Gi
storageClassName: fast-storage

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

در این مثال:

را پی وی سی 10Gi فضای ذخیره سازی را درخواست می کند و آن را مشخص می کند fast-storage StorageClass.
Kubernetes از fast-storage StorageClass برای ارائه پویا PV که درخواست را برآورده می کند.

تامین دینامیک چیست؟

تامین دینامیک یک ویژگی در Kubernetes است که امکان ایجاد خودکار حجم های پایدار (PVs) را بر اساس ادعای حجم پایدار (PVC) می دهد. Kubernetes می‌تواند به‌جای نیاز به مدیر برای ایجاد و تخصیص دستی یک PV، بر اساس ویژگی‌های تعریف‌شده در PVC و StorageClass، هنگام ایجاد PVC، یک PV به صورت پویا ایجاد کند.

تدارک پویا تضمین می‌کند که فضای ذخیره‌سازی درخواستی برنامه بدون دخالت دستی در دسترس است، که مقیاس‌گذاری و مدیریت منابع ذخیره‌سازی را در یک خوشه Kubernetes بسیار آسان‌تر می‌کند.

نحوه عملکرد تدارکات پویا:

وقتی یک پی وی سی ایجاد می شود، Kubernetes بررسی می کند که آیا PVC به یک StorageClass معتبر ارجاع می دهد یا خیر.
اگر PVC یک StorageClass را مشخص کند که از تامین پویا پشتیبانی می کند، Kubernetes از آن StorageClass برای ارائه یک کلاس جدید استفاده می کند. حجم پایدار (PV).
هنگامی که PV ایجاد شد و به PVC متصل شد، برای استفاده توسط Pods در دسترس قرار می گیرد.
اگر PVC حذف شود، PV ممکن است حذف شود (بسته به سیاست بازیابی StorageClass).

پارامترهای StorageClass

انواع مختلف ارائه دهندگان ذخیره سازی ممکن است به پارامترهای متفاوتی نیاز داشته باشند. به عنوان مثال، ارائه دهندگان ابری مانند AWS یا GCP ممکن است به تنظیمات خاصی مانند نوع فضای ذخیره سازی نیاز داشته باشند (به عنوان مثال، gp2 برای AWS EBS). Kubernetes به مدیران اجازه می دهد تا این پارامترها را در StorageClass تعریف کنند.

در اینجا برخی از پارامترهای رایج مورد استفاده توسط ارائه دهندگان مختلف ذخیره سازی آورده شده است:

AWS EBS (فروشگاه بلوک الاستیک) مثال:

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: fast-storage
provisioner: kubernetes.io/aws-ebs
parameters:
type: gp2
fsType: ext4

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

در این مثال:

کمیسیون ها ارائه دهنده ذخیره سازی را مشخص می کند (kubernetes.io/aws-ebs).

پارامترها تنظیمات را برای تامین کننده تعریف کنید. در این مورد، type: gp2 به نوع حجم EBS اشاره دارد و fsType: ext4 نوع فایل سیستم مورد استفاده برای حجم را مشخص می کند.

مثال دیسک پایدار GCE:

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: standard-storage
provisioner: kubernetes.io/gce-pd
parameters:
replication-type: none
fsType: ext4

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

در این مثال:

کمیسیون ها ارائه دهنده GCE Persistent Disk را مشخص می کند.

پارامترها اجازه پیکربندی تنظیمات تکرار و نوع سیستم فایل را می دهد.

مثال NFS:

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: nfs-storage
provisioner: kubernetes.io/nfs
parameters:
server: nfs-server.example.com
path: /exported/path

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

در این مثال:

کمیسیون ها ارائه دهنده NFS را مشخص می کند.

پارامترها سرور NFS و مسیر دایرکتوری صادر شده را تعریف کنید.

تامین پویا در عمل

یک StorageClass ایجاد کنید: یک مدیر یک StorageClass تعریف می کند که ویژگی های ذخیره سازی را مشخص می کند.

یک PVC ایجاد کنید: کاربر یک PVC ایجاد می کند که درخواست ذخیره سازی می کند و به StorageClass ارجاع می دهد.

تامین خودکار: Kubernetes به طور خودکار PV را بر اساس PVC و StorageClass ارائه می کند.

صحافی: PVC به PV ارائه شده به صورت دینامیکی متصل می شود و برای استفاده توسط Pods آماده است.

مثال: جریان کامل PVC و تامین دینامیک

StorageClass را تعریف کنید:

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: fast-storage
provisioner: kubernetes.io/aws-ebs
parameters:
type: gp2
fsType: ext4

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

یک PVC ایجاد کنید که از StorageClass استفاده می کند:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: fast-pvc
spec:
accessModes:
– ReadWriteOnce
resources:
requests:
storage: 20Gi
storageClassName: fast-storage

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

Pod از PVC استفاده می کند:

apiVersion: v1
kind: Pod
metadata:
name: my-app
spec:
containers:
– name: my-container
image: my-image
volumeMounts:
– mountPath: /data
name: my-volume
volumes:
– name: my-volume
persistentVolumeClaim:
claimName: fast-pvc

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

هنگامی که PVC ایجاد می شود، Kubernetes به طور خودکار ذخیره سازی درخواستی را با استفاده از آن فراهم می کند fast-storage StorageClass و Pod می‌توانند به ولوم ثابت دسترسی داشته باشند /data.

بازپس گیری سیاست ها

را سیاست بازپس گیری یک حجم پایدار تعیین می کند که وقتی PVC مربوطه حذف می شود چه اتفاقی برای حجم می افتد. رایج ترین سیاست ها عبارتند از:

حفظ کنید: صدا حفظ می شود و به طور خودکار حذف نمی شود. باید به صورت دستی تمیز یا دوباره استفاده شود.

حذف کنید: با حذف پی وی سی حجم صدا حذف می شود.

بازیافت: حجم پاک می شود (پاک می شود) و برای استفاده مجدد در دسترس قرار می گیرد (در نسخه های اخیر Kubernetes منسوخ شده است).

خط مشی بازیابی در StorageClass تعریف شده است.

بهترین روش‌ها برای کلاس‌های ذخیره‌سازی و تأمین دینامیک

از StorageClass پیش فرض استفاده کنید: یک StorageClass پیش‌فرض تنظیم کنید تا به کاربران اجازه دهد بدون تعیین کلاس درخواست ذخیره سازی کنند.

تعریف چند StorageClasses: چندین کلاس ذخیره سازی را برای موارد استفاده مختلف، مانند ذخیره سازی با عملکرد بالا، ذخیره سازی استاندارد یا ذخیره سازی بایگانی تعریف کنید.

نظارت بر استفاده از فضای ذخیره سازی: منابع ذخیره سازی خود را پیگیری کنید و اطمینان حاصل کنید که ظرفیت کافی برای تامین پویا وجود دارد.

سیاست های بازپس گیری مناسب را تنظیم کنید: سیاست بازیابی StorageClass را برای اطمینان از مدیریت صحیح حجم ها پس از عدم نیاز به آنها تنظیم کنید.

نتیجه گیری

کوبرنتیس کلاس های ذخیره سازی و تامین دینامیک یک روش انعطاف‌پذیر و خودکار برای مدیریت ذخیره‌سازی دائمی در محیط Kubernetes ارائه می‌کند. با استفاده از StorageClasses، مدیران می‌توانند انواع مختلفی از فضای ذخیره‌سازی را تعریف کنند و با ارائه پویا، کاربران می‌توانند به‌طور خودکار بدون مداخله دستی، فضای ذخیره‌سازی را درخواست کرده و فراهم کنند. این مقیاس پذیری و کارایی مدیریت منابع ذخیره سازی در یک خوشه Kubernetes را بهبود می بخشد.

کلاس های ذخیره سازی Kubernetes و تدارک دینامیک

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

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


کلاس های ذخیره سازی در Kubernetes چیست؟

الف StorageClass در Kubernetes یک «نوع» ذخیره‌سازی را تعریف می‌کند که برای تأمین حجم‌های پایدار (PVs) به صورت پویا استفاده می‌شود. این اساساً راهی برای توصیف کلاس‌ها یا انواع مختلف ذخیره‌سازی است که یک خوشه می‌تواند ارائه دهد، که می‌تواند بر اساس عملکرد، هزینه و سایر عوامل متفاوت باشد. کلاس‌های ذخیره‌سازی به کاربران اجازه می‌دهند تا ویژگی‌های ذخیره‌سازی مانند ارائه‌دهنده ذخیره‌سازی، نوع حجم، و استراتژی تأمین را تعریف کنند (به عنوان مثال، EBS، NFS، GlusterFSو غیره).

ویژگی های کلیدی کلاس های ذخیره سازی:

  • تامین: کلاس های ذخیره سازی نحوه تامین PV ها را (به صورت پویا یا استاتیک) تعریف می کنند.
  • سفارشی سازی: کلاس های ذخیره سازی مختلف را می توان با پارامترهای خاصی مانند ویژگی های عملکرد و انواع حجم تعریف کرد.
  • یکپارچه سازی بدون درز: کاربران نیازی به دانستن فناوری ذخیره سازی اساسی ندارند. Kubernetes با ارجاع به StorageClass در یک ادعای حجم دائمی (PVC)، از تامین آن مراقبت می کند.
  • سیاست بازپس گیری: کلاس‌های ذخیره‌سازی خط‌مشی بازیابی را تعریف می‌کنند، که تعیین می‌کند با حذف PVC مرتبط چه اتفاقی برای ذخیره‌سازی اصلی می‌افتد (به عنوان مثال، Retain، Delete).

نحوه کار کلاس های ذخیره سازی در Kubernetes

هنگامی که یک را ایجاد می کنید ادعای حجم پایدار (PVC)، می توانید a را مشخص کنید storageClassName در PVC اگر یک StorageClass مشخص شده باشد، Kubernetes از کلاس برای ارائه داینامیک (PV) مورد نیاز، بر اساس ویژگی‌های کلاس استفاده می‌کند.

اگر نه storageClassName در PVC ارائه شده است، Kubernetes از کلاس ذخیره سازی پیش فرض استفاده می کند (اگر یکی تعریف شده باشد). اگر هیچ پیش‌فرضی مشخص نشده باشد، PVC تا زمانی که یک PV مناسب در دسترس نباشد، بدون محدودیت باقی می‌ماند.

نمونه ای از PVC با کلاس ذخیره سازی:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi
  storageClassName: fast-storage
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

در این مثال:

  • را پی وی سی 10Gi فضای ذخیره سازی را درخواست می کند و آن را مشخص می کند fast-storage StorageClass.
  • Kubernetes از fast-storage StorageClass برای ارائه پویا PV که درخواست را برآورده می کند.

تامین دینامیک چیست؟

تامین دینامیک یک ویژگی در Kubernetes است که امکان ایجاد خودکار حجم های پایدار (PVs) را بر اساس ادعای حجم پایدار (PVC) می دهد. Kubernetes می‌تواند به‌جای نیاز به مدیر برای ایجاد و تخصیص دستی یک PV، بر اساس ویژگی‌های تعریف‌شده در PVC و StorageClass، هنگام ایجاد PVC، یک PV به صورت پویا ایجاد کند.

تدارک پویا تضمین می‌کند که فضای ذخیره‌سازی درخواستی برنامه بدون دخالت دستی در دسترس است، که مقیاس‌گذاری و مدیریت منابع ذخیره‌سازی را در یک خوشه Kubernetes بسیار آسان‌تر می‌کند.

نحوه عملکرد تدارکات پویا:

  1. وقتی یک پی وی سی ایجاد می شود، Kubernetes بررسی می کند که آیا PVC به یک StorageClass معتبر ارجاع می دهد یا خیر.
  2. اگر PVC یک StorageClass را مشخص کند که از تامین پویا پشتیبانی می کند، Kubernetes از آن StorageClass برای ارائه یک کلاس جدید استفاده می کند. حجم پایدار (PV).
  3. هنگامی که PV ایجاد شد و به PVC متصل شد، برای استفاده توسط Pods در دسترس قرار می گیرد.
  4. اگر PVC حذف شود، PV ممکن است حذف شود (بسته به سیاست بازیابی StorageClass).

پارامترهای StorageClass

انواع مختلف ارائه دهندگان ذخیره سازی ممکن است به پارامترهای متفاوتی نیاز داشته باشند. به عنوان مثال، ارائه دهندگان ابری مانند AWS یا GCP ممکن است به تنظیمات خاصی مانند نوع فضای ذخیره سازی نیاز داشته باشند (به عنوان مثال، gp2 برای AWS EBS). Kubernetes به مدیران اجازه می دهد تا این پارامترها را در StorageClass تعریف کنند.

در اینجا برخی از پارامترهای رایج مورد استفاده توسط ارائه دهندگان مختلف ذخیره سازی آورده شده است:

AWS EBS (فروشگاه بلوک الاستیک) مثال:

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: fast-storage
provisioner: kubernetes.io/aws-ebs
parameters:
  type: gp2
  fsType: ext4
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

در این مثال:

  • کمیسیون ها ارائه دهنده ذخیره سازی را مشخص می کند (kubernetes.io/aws-ebs).
  • پارامترها تنظیمات را برای تامین کننده تعریف کنید. در این مورد، type: gp2 به نوع حجم EBS اشاره دارد و fsType: ext4 نوع فایل سیستم مورد استفاده برای حجم را مشخص می کند.

مثال دیسک پایدار GCE:

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: standard-storage
provisioner: kubernetes.io/gce-pd
parameters:
  replication-type: none
  fsType: ext4
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

در این مثال:

  • کمیسیون ها ارائه دهنده GCE Persistent Disk را مشخص می کند.
  • پارامترها اجازه پیکربندی تنظیمات تکرار و نوع سیستم فایل را می دهد.

مثال NFS:

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: nfs-storage
provisioner: kubernetes.io/nfs
parameters:
  server: nfs-server.example.com
  path: /exported/path
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

در این مثال:

  • کمیسیون ها ارائه دهنده NFS را مشخص می کند.
  • پارامترها سرور NFS و مسیر دایرکتوری صادر شده را تعریف کنید.

تامین پویا در عمل

  1. یک StorageClass ایجاد کنید: یک مدیر یک StorageClass تعریف می کند که ویژگی های ذخیره سازی را مشخص می کند.
  2. یک PVC ایجاد کنید: کاربر یک PVC ایجاد می کند که درخواست ذخیره سازی می کند و به StorageClass ارجاع می دهد.
  3. تامین خودکار: Kubernetes به طور خودکار PV را بر اساس PVC و StorageClass ارائه می کند.
  4. صحافی: PVC به PV ارائه شده به صورت دینامیکی متصل می شود و برای استفاده توسط Pods آماده است.

مثال: جریان کامل PVC و تامین دینامیک

  1. StorageClass را تعریف کنید:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: fast-storage
provisioner: kubernetes.io/aws-ebs
parameters:
  type: gp2
  fsType: ext4
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

  1. یک PVC ایجاد کنید که از StorageClass استفاده می کند:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: fast-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 20Gi
  storageClassName: fast-storage
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

  1. Pod از PVC استفاده می کند:
apiVersion: v1
kind: Pod
metadata:
  name: my-app
spec:
  containers:
    - name: my-container
      image: my-image
      volumeMounts:
        - mountPath: /data
          name: my-volume
  volumes:
    - name: my-volume
      persistentVolumeClaim:
        claimName: fast-pvc
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

هنگامی که PVC ایجاد می شود، Kubernetes به طور خودکار ذخیره سازی درخواستی را با استفاده از آن فراهم می کند fast-storage StorageClass و Pod می‌توانند به ولوم ثابت دسترسی داشته باشند /data.


بازپس گیری سیاست ها

را سیاست بازپس گیری یک حجم پایدار تعیین می کند که وقتی PVC مربوطه حذف می شود چه اتفاقی برای حجم می افتد. رایج ترین سیاست ها عبارتند از:

  • حفظ کنید: صدا حفظ می شود و به طور خودکار حذف نمی شود. باید به صورت دستی تمیز یا دوباره استفاده شود.
  • حذف کنید: با حذف پی وی سی حجم صدا حذف می شود.
  • بازیافت: حجم پاک می شود (پاک می شود) و برای استفاده مجدد در دسترس قرار می گیرد (در نسخه های اخیر Kubernetes منسوخ شده است).

خط مشی بازیابی در StorageClass تعریف شده است.


بهترین روش‌ها برای کلاس‌های ذخیره‌سازی و تأمین دینامیک

  1. از StorageClass پیش فرض استفاده کنید: یک StorageClass پیش‌فرض تنظیم کنید تا به کاربران اجازه دهد بدون تعیین کلاس درخواست ذخیره سازی کنند.
  2. تعریف چند StorageClasses: چندین کلاس ذخیره سازی را برای موارد استفاده مختلف، مانند ذخیره سازی با عملکرد بالا، ذخیره سازی استاندارد یا ذخیره سازی بایگانی تعریف کنید.
  3. نظارت بر استفاده از فضای ذخیره سازی: منابع ذخیره سازی خود را پیگیری کنید و اطمینان حاصل کنید که ظرفیت کافی برای تامین پویا وجود دارد.
  4. سیاست های بازپس گیری مناسب را تنظیم کنید: سیاست بازیابی StorageClass را برای اطمینان از مدیریت صحیح حجم ها پس از عدم نیاز به آنها تنظیم کنید.

نتیجه گیری

کوبرنتیس کلاس های ذخیره سازی و تامین دینامیک یک روش انعطاف‌پذیر و خودکار برای مدیریت ذخیره‌سازی دائمی در محیط Kubernetes ارائه می‌کند. با استفاده از StorageClasses، مدیران می‌توانند انواع مختلفی از فضای ذخیره‌سازی را تعریف کنند و با ارائه پویا، کاربران می‌توانند به‌طور خودکار بدون مداخله دستی، فضای ذخیره‌سازی را درخواست کرده و فراهم کنند. این مقیاس پذیری و کارایی مدیریت منابع ذخیره سازی در یک خوشه Kubernetes را بهبود می بخشد.


نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا