تغییرات اخیر

در اینجا اطلاعیه‌ها، نسخه‌ها و تغییرات جدید لیارا فهرست می‌شوند.

معرفی ویژگی‌های پیشرفته Kubernetes Kapsule


۱۷ خرداد ۱۴۰۴

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

ویژگی‌هایی که با استفاده از REST API و Scaleway CLI در دسترس شما قرار دارند و به شما اجازه می‌دهند کنترل جامع و کاملی روی کلاسترهای خود داشته باشید. اگر به دنبال این هستید که مدیریت Kubernetes را به یک مهارت حرفه‌ای تبدیل کنید، این مطلب را از دست ندهید و همراه ما باشید.

آنچه در این مقاله می‌خوانید:

  • ویژگی Feature Gates و Admission Controllers
  • پشتیبانی OIDC (ویژگی آزمایشی)
  • رمزگذاری Persistent Volumes در حالت پایدار
  • پشتیبانی از XFS
  • انواع مختلف محیط‌های اجرایی برای استخرها (pools)
  • پیکربندی Autoscaler 
  • همگام‌سازی برچسب‌های Scaleway با Labels و Taints در Kubernetes
  • سیاست به‌روزرسانی (Upgrade Policy)
  • ایجاد یک کلاستر Kubernetes Kapsule
  • جمع‌بندی
  • سوالات متداول
معرفی ویژگی‌های پیشرفته Kubernetes Kapsule

ویژگی Feature Gates و Admission Controllers

ویژگی‌های Feature Gates در Kubernetes به شما این اجازه را می‌دهند که برخی از قابلیت‌های آزمایشی را فعال کنید و تا قبل از اینکه قابلیت‌ها به مرحله بتا (Beta) برسند، بتوانید آن‌ها را امتحان کنید و از امکانات جدید غافل نشوید. اگر همیشه به دنبال نوآوری و کار با آخرین نسخه‌های Kubernetes هستید، Feature Gates دقیقا همان ویژگی‌ای است که به آن نیاز دارید.

از طرفی Admission Controllers هر درخواستی که به API Server می‌رسد را مدیریت می‌کند و به این درخواست‌ها اجازه می‌دهند یا آن‌ها را رد می‌کنند. این کنترل‌کننده‌ها می‌توانند دسترسی‌ها را محدود کنند، چه برای ایجاد، حذف، تغییر یا حتی برقراری ارتباطی که درون کوبرنتیز ایجاد می‌شود.

با تنظیم Admission Controllers روی کلاستر کوبرنتیز خود، می‌توانید رفتار هر آبجکت کوبرنتیز را تعریف کرده و استراتژی‌های امنیتی را بر اساس نیاز خود، حتی فراتر از podها و کانتینرها، پیاده‌سازی کنید.

برای آشنایی با کوبرنتیز (Kubernetes) و چگونگی کارکرد آن، مقاله زیر را می‌توانید مطالعه کنید.
کوبرنتیز(Kubernetes) چیست؟

برای مثال، یک Admission Controller به نام AlwaysPullImages کمک می‌کند تا به کوبرنتیز بگویید که همیشه هنگام ایجاد یا به‌روزرسانی پادها(pods)، تصاویر کانتینر باید از رجیستری (Registry) اصلی دانلود شود و هیچ‌گاه از نسخه‌های محلی قدیمی استفاده نشود.

این تنها یکی از کنترل‌کننده‌های Admission موجود در API Server است که می‎‌توانید برای محدود کردن استفاده و افزایش امنیت محیط کوبرنتیز از آن‌ها استفاده کنید.

در ادامه یک دستور CLI برای به‌روزرسانی کلاستر Kubernetes آورده‌ایم:

scw k8s cluster update xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \
        feature-gates.0=EphemeralContainers admission-plugins.0=AlwaysPullImages

با اجرای دستور بالا، ویژگی EphemeralContainers و Admission Controller AlwaysPullImages فعال می‌شوند.

برای دیدن لیست Admission Controllers و Feature Gates موجود در نسخه فعلی خود، می‌توانید از API نسخه یا دستور CLI زیر استفاده کنید:

scw k8s version get <version>

همچنین، می‌توانید مستندات کامل Kubernetes در مورد Admission Controllers و Feature Gates را بررسی کنید.

پشتیبانی OIDC (یک ویژگی آزمایشی)

پروتکل OpenID Connect (OIDC) یک راه‌حل مناسب برای ساده کردن احراز هویت در Kubernetes است. این ویژگی به شما این اجازه را می‌دهد که با استفاده از حساب‌های موجود در سرویس‌هایی مثل گوگل یا گیت‌هاب، به راحتی وارد کلاستر Kubernetes شوید و دسترسی‌ها را مدیریت کنید. به جای اینکه هر بار نیاز باشد برای دسترسی به Kubernetes حساب جدید بسازید، می‌توانید از توکن‌های JWT که توسط این سرویس‌ها تولید می‌شوند، استفاده کنید تا وارد کلاستر شوید و هم نقش‌ها و دسترسی‌ها را کنترل کنید.

این یعنی اگر شما قبلاً یک حساب کاربری در یکی از این سرویس‌ها دارید، می‌توانید بدون دردسر و به راحتی وارد کلاستر Kubernetes شوید و امنیت و مدیریت دسترسی‌ها را با همان اطلاعات ورود قبلی انجام دهید.

برای پیکربندی این ویژگی، می‌توانید از دستور زیر استفاده کنید:

scw k8s cluster update xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx  \
        open-id-connect-config.client-id=<client-id> \
        open-id-connect-config.issuer-url=<issuer-url>

برای داشتن یک پروسه کاربرپسندتر، می‌توانید پروژه‌های متن‌باز مانند kubelogin یا k8s-oidc-helper را بررسی کنید. این پروژه‌ها به شما کمک می‌کنند تا فرآیند احراز هویت با OIDC را ساده‌تر و راحت‌تر کنید.

برای آشنایی با نحوه راه‌اندازی کلاستر K3s Kubernetes در اوبونتو 22.04، مقاله زیر را مطالعه کنید.
راه‌اندازی کلاستر K3s Kubernetes

رمزگذاری Persistent Volumes در حالت پایدار

این پلاگین به شما این امکان را می‌دهد که حجم‌های ذخیره‌سازی (Persistent Volumes) در Kubernetes را با استفاده از قابلیت Cryptsetup/LUKS رمزگذاری کرده و امنیت داده‌ها را بیشتر کنید. این ویژگی رمزگذاری در حالت پایدار، به شما کمک می‌کند تا داده‌ها‌یتان همیشه امن بمانند.

پشتیبانی از XFS

با Kubernetes Kapsule می‌توانید از سیستم فایل XFS برای ذخیره‌سازی بلوک استفاده کنید، این ویژگی به شما اجازه می‌دهد که داده‌ها را با یکی از سریع‌ترین و قدرتمندترین سیستم‌های فایل به نام XFS ذخیره کنید.

برای استفاده از این سیستم فایل، کافیست که یک Storage Class در محیط کوبرنتیز بسازید و آن را به تنظیمات کلاستر خود اضافه کنید.

مراحل ایجاد Storage Class برای XFS

ابتدا یک فایل YAML جدید بسازید که کلاس ذخیره‌سازی با XFS را مشخص می‌کند. برای این کار، از دستور زیر استفاده کنید:

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: xfs-storage-class
provisioner: kubernetes.io/cinder
parameters:
  type: "XFS"

حالا باید این فایل را به کلاستر خود اعمال کنید. دستور زیر را اجرا کنید:

kubectl apply -f xfs-storage-class.yaml

برای بررسی اینکه کلاس ذخیره‌سازی به درستی ایجاد شده یا نه، از دستور زیر استفاده کنید:

kubectl get storageclass

دستور بالا لیست تمام Storage Classهای موجود را نمایش می‌دهد.

آموزش نصب و استفاده از داکر کامپوز (Docker Compose) در اوبونتو را از دست ندهید.
نصب داکر کامپوز

انواع مختلف محیط‌های اجرایی برای استخرها (pools)

حتی با اینکه Kubernetes Kapsule به طور رسمی از Docker به عنوان محیط اجرایی (runtime) پیش‌فرض پشتیبانی می‌کند، شما می‌توانید از containerd و cri-o نیز برای این‌کار استفاده کنید. اما نکته جالب اینجا است که containerd با ابزارهایی مانند gvisor و kata containers همراه است، که برای مدیریت بارهای کاری غیر معتبر طراحی شده‌اند.

در حال حاضر، محیط اجرایی پیش‌فرض، Docker است.

برای تغییر محیط اجرایی در سطح poolها، با استفاده از CLI، می‌توانید از این دستور استفاده کنید:

scw k8s pool create cluster-id=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \ 
    size=1 name=test node-type=DEV1-M container-runtime=containerd

سپس، شما نیاز به یک کلاس Runtime خواهید داشت:

apiVersion: node.k8s.io/v1
kind: RuntimeClass
metadata:
  name: kata
handler: kata

یا کلاس:

apiVersion: node.k8s.io/v1
kind: RuntimeClass
metadata:
  name: gvisor
handler: runsc

در سطح پاد (pod)، باید از کلاس runtimeClassName: kata استفاده کنید.

برای آشنایی کامل با نحوه نصب داکر روی اوبونتو 22.04، مقاله زیر را می‌توانید مطالعه کنید.
نصب داکر روی اوبونتو

پیکربندی Autoscaler 

ویژگی AutoScaling در Kubernetes Kapsule به شما این امکان را می‌دهد که کنترل جامعی بر مقیاس‌پذیری کلاسترتان داشته باشید و با تنظیم پارامترهای مختلف، هم هزینه‌ها را مدیریت کنید و هم اینکه کلاسترها را با انعطاف‌پذیری بالا پیکربندی کنید.

با Autoscaler می‌توانید تنظیمات زیر را انجام دهید:

  • غیرفعال کردن Autoscaler : این گزینه اجازه می‌دهد مقیاس‌گذاری خودکار غیرفعال شود.
  • تنظیم تأخیر در کاهش مقیاس بعد از افزایش مقیاس (scale_down_delay_after_add): این ویژگی زمان بین دو عملیات مقیاس‌بندی را تنظیم می‌کند.
  • تنظیم برآوردگر منابع: می‌توانید مشخص کنید که بر اساس کدام منابع مقیاس‌بندی انجام شود.
  • انتخاب نوع گسترش‌دهنده گروه نود در هنگام مقیاس‌بندی (expander): این گزینه کنترل می‌کند که کدام الگوریتم برای افزایش تعداد نودها استفاده شود.
  • نادیده گرفتن پادهای DaemonSet برای محاسبه مصرف منابع در هنگام کاهش مقیاس، با این گزینه می‌توانید پادهای خاصی را از محاسبات مقیاس‌بندی کنار بگذارید.
  • متعادل کردن تعداد نودها بین گروه‌های مشابه: این امکان باعث می‌شود تا تعداد نودها به‌طور بهینه بین گروه‌های مشابه تقسیم شود.
  • تعریف اولویت قطع پادها: این گزینه به شما این امکان را می‌دهد که اولویت حذف پادها را تعیین کنید.
  • تنظیم زمان برای کاهش مقیاس نودهای بدون استفاده: مشخص می‌کنید که نود باید چقدر زمان بدون استفاده بماند تا مقیاس آن کاهش پیدا کند.

برای پیکربندی Autoscaler با استفاده از CLI، از دستور زیر استفاده کنید:

scw k8s cluster update xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \
    autoscaler-config.scale-down-delay-after-add=5m \
    autoscaler-config.scale-down-unneeded-time=5m \
    autoscaler-config.scale-down-utilization-threshold=0.7
با سرور مجازی لینوکس لیارا، قدرت، سرعت و امنیت را یکجا داشته باشید!
✅ منابع اختصاصی و مقیاس‌پذیر✅ استقرار سریع بدون پیچیدگی ✅ قیمت مقرون‌به‌صرفه
خرید سرور مجازی لینوکس ساعتی لیارا

همگام‌سازی برچسب‌های Scaleway با Labels و Taints در Kubernetes

زمانی که برچسب‌ها را روی استخرهای(pools) Kubernetes Kapsule تنظیم می‌کنید، به‌طور خودکار این برچسب‌ها با نودهای استخر همگام‌سازی می‌شوند. یعنی دیگر نیازی نیست هر بار دستی برچسب‌ها را به نودهای استخر اضافه کنید، زیرا این پروسه به صورت خودکار انجام می‌شود. این ویژگی می‌تواند به شما کمک کند تا منابع و تنظیمات کلاسترها را خیلی راحت‌تر مدیریت کنید.

برای مثال، اگر برچسب greatestpool را به یک استخر اضافه کنید، نودهای داخل این استخر به‌طور خودکار برچسب k8s.scaleway.com/greatestpool: خواهند گرفت. اگر برچسبی مثل greatestpool=ever وارد کنید، نودها با برچسب k8s.scaleway.com/greatestpool=ever برچسب‌گذاری می‌شوند.

همچنین، اگر برچسب ویژه‌ای به اسم taint=foo=bar:Effect ایجاد کنید، جایی که Effect یکی از مقادیر NoExecute، NoSchedule یا PreferNoSchedule باشد، این برچسب باعث ایجاد یک taint به اسم k8s.scaleway.com/foo:bar با اثر مشخص روی نودهای استخر می‌شود.

برای مثال، اگر یک استخر GPU داشته باشید و یک taint با اثر NoSchedule به آن اعمال کنید، پادهایی که تحمل آن taint را نداشته باشند، روی نودهای آن استخر برنامه‌ریزی نخواهند شد. بنابراین،پادهایی که آن taint را تحمل نکنند، می‌توانند روی این نودها قرار بگیرند.

برای اطلاعات بیشتر درباره taint/tolerations و مدیریت برچسب‌ها، می‌توانید به مستندات مربوطه مراجعه کنید.

سیاست به‌روزرسانی (Upgrade Policy)

برای کنترل نحوه رفتار کلاستر در هنگام به‌روزرسانی‌ها، می‌توانید مقادیر upgrade_policy.max_unavailable و upgrade_policy.max_surge را برای هر استخر (pool) تنظیم کنید.

  • max_unavailable: حداکثر تعداد نودهایی که می‌توانند همزمان در هنگام به‌روزرسانی غیرفعال شوند.
  • max_surge: حداکثر تعداد نودهایی که می‌توانند هنگام به‌روزرسانی استخر ایجاد شوند.

مقادیر پیش‌فرض برای این دو گزینه 20 است.

برای تنظیم سیاست به‌روزرسانی با استفاده از CLI، از دستور زیر استفاده کنید:

scw k8s pool update xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \
    upgrade-policy.max-surge=1 \
    upgrade-policy.max-unavailable=3
برای آموزش نصب و راه‌اندازی Kubernetes روی سرور فیزیکی (بدون مجازی‌سازی)، مقاله زیر را می‌توانید مطالعه کنید.
نحوه نصب و راه‌اندازی Kubernetes

ایجاد یک کلاستر Kubernetes Kapsule

برای ایجاد یک کلاستر Kubernetes Kapsule، کافی است دستور زیر را اجرا کنید:

scw k8s cluster create name=production \
    version=1.20.2 cni=cilium pools.0.node-type=DEV1-M \
    pools.0.size=3 pools.0.name=default

این دستور کلاستری به نام production ایجاد می‌کند که از نسخه 1.20.2 کوبرنتیز و CNI Cilium برای مدیریت شبکه استفاده می‌کند. در این مثال، اندازه کلاستر به ۳ گره از نوع DEV1-M تنظیم شده است. همچنین نام استخر گره‌ها (node pool) روی default تنظیم می‌شود.

اگر می‌خواهید به سرعت یک کلاستر با تنظیمات خاص خود بسازید، می‌توانید این دستور را مطابق با نیازهای خود شخصی‌سازی کنید.

آموزش گام به گام راه‌ اندازی رجیستری خصوصی داکر در اوبونتو را در مقاله زیر بخوانید.
راه‌ اندازی رجیستری خصوصی داکر

جمع‌بندی

در این مقاله، با نحوه راه‌اندازی و پیکربندی ویژگی‌های پیشرفته Kubernetes Kapsule آشنا شدیم. با استفاده از ویژگی‌های گفته شده در این مطلب، می‌توانید به سرعت کلاسترها را راه‌اندازی کرده و منابع را به طور خودکار مقیاس‌دهی کنید. با پشتیبانی از چندین محیط اجرایی مانند Docker، containerd و cri-o، می‌توانید بسته به نیاز پروژه‌تان از گزینه‌های مختلف استفاده کنید. امنیت داده‌ها با رمزنگاری حجم‌ها در حالت at-rest، مدیریت خودکار منابع با Autoscaler، و تنظیم دقیق دسترسی با استفاده از OpenID Connect، از دیگر مزایای این پلتفرم است.

سوالات متداول

کلاستر کوبرنتیز چیست؟

کلاستر در Kubernetes مجموعه‌ای از سرورهای فیزیکی یا مجازی است که برای اجرای برنامه‌های توزیع‌شده و مقیاس‌پذیر استفاده می‌شود.

پاد (Pod) چیست؟

پاد کوچک‌ترین واحد اجرایی در Kubernetes است.

Volume در Kubernetes چیست؟

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

Kubernetes Kapsule چیست و چه کاربردی دارد؟

Kubernetes Kapsule یک سرویس مدیریت‌شده Kubernetes است که توسط Scaleway ارائه می‌شود. این سرویس به شما این امکان را می‌دهد که کلاسترهای Kubernetes را به راحتی و بدون نیاز به مدیریت پیچیدگی‌های زیرساخت، راه‌اندازی و مدیریت کنید.

به اشتراک بگذارید