واحد 5 / 11

Kubernetes: Manifest، Helm و ارکستراسیون مبتنی بر هوش مصنوعی

سود:

  • توانایی درک اشیاء اساسی (Pod، Deployment، Service، ConfigMap، Secret، Namespace) و فلسفه اعلانی Kubernetes و تولید مانیفست های جامد برای هوش مصنوعی
  • امکان آماده سازی مانیفست ها برای تولید و ایمن کردن با محدودیت منابع، بررسی های سلامت (کاوشگر)، تگ های تصویر ثابت و RBAC باریک
  • توانایی بررسی زمینه صحیح قبل از اجرا و اعمال نظم و انضباط در اجرای خشک با اجرای خشک/تفاوت

اجرای یک ظرف آسان است. اما ایجاد سیستمی که صدها کانتینر را در ده‌ها سرور پخش می‌کند، به‌طور خودکار هنگامی که یکی از آنها خراب می‌شود، مجدداً راه‌اندازی می‌شود، زمانی که بار افزایش می‌یابد، آن را تکرار می‌کند، و آن را با توقف صفر به‌روزرسانی می‌کند؟ این ارکستراسیون است و ابزار استاندارد صنعت Kubernetes (به اختصار K8s) است - پلتفرمی که به طور خودکار کانتینرها را در یک خوشه مستقر می کند، مقیاس بندی می کند و مدیریت می کند. Kubernetes قدرتمند اما پیچیده است: همه چیز توسط فایل‌های YAML طولانی و حساس به تورفتگی تعریف می‌شود - به نام مانیفست. اینجاست که هوش مصنوعی نفسی تازه می دهد. با زمینه مناسب، به سرعت این مانیفست ها را تولید می کند و خطاهای مرموز آنها را رمزگشایی می کند.

اما در Kubernetes، مانیفست نادرست به معنای عدم توانایی در ایستادن کل یک سرویس، مقیاس بندی نادرست یا ترک یک آسیب پذیری است. این مسئولیت شماست که هر مانیفست تولید شده توسط هوش مصنوعی را درک و تأیید کنید - به خصوص قبل از اعمال کوبکتل.

اشیاء اصلی Kubernetes

برای ممیزی Kubernetes، باید مفاهیم اصلی را بدانید:

  • غلاف: کوچکترین واحد کاری؛ این شامل یک یا چند ظرف است. به طور کلی، Pod به طور مستقیم استفاده نمی شود، اما اشیاء والد که آن را مدیریت می کنند استفاده می شود.
  • Deployment: تعیین می کند که چند نسخه از یک برنامه اجرا شود، از کدام تصویر استفاده کند و چگونه به روز شود. اگر یک پاد از کار بیفتد، به طور خودکار آن را دوباره ایجاد می کند.
  • سرویس: یک آدرس شبکه ثابت و متعادل کننده بار را به پادها ارائه می دهد. حتی اگر پادها می آیند و می روند، آدرس دسترسی تغییر نمی کند.
  • ConfigMap و Secret: مقادیر پیکربندی و اطلاعات مخفی را جدا از Pods نگه می دارد. ConfigMap برای تنظیمات صریح است، Secret برای مقادیر حساس است.
  • فضای نام: ناحیه ای که منابع را به طور منطقی تقسیم و جدا می کند (به عنوان مثال، dev، prod).
  • Ingress: مجموعه قوانینی که ترافیک HTTP را از دنیای بیرون به سمت خدمات در خوشه هدایت می کند.

Helm "مدیر بسته" Kubernetes است: به شما امکان می دهد مانیفست های تکرار شونده (نمودار) را الگوبرداری کنید و با یک دستور آنها را با مقادیر مختلف در محیط های مختلف نصب کنید. هوش مصنوعی هم مانیفست خام و هم نمودار Helm را تولید می کند.

چرا این همه اشیا وجود دارد؟ از آنجا که فلسفه اصلی Kubernetes بیانی است: شما تعریف می‌کنید که «می‌خواهید سیستم در نهایت چگونه به نظر برسد» (به عنوان مثال «همیشه ۳ نسخه از این برنامه در حال اجرا داشته باشید»)، در حالی که Kubernetes به طور مداوم وضعیت فعلی را به حالت مطلوب نزدیک‌تر می‌کند. اگر یک Pod بمیرد، یک Pod جدید ایجاد می کند. اگر یک گره پایین بیاید، حجم کار را به گره دیگری منتقل می کند. به همین دلیل است که مانیفست ها دستورات "do" نیستند، بلکه دستور العمل های "بگذار اینطور باشد" هستند. درک این تمایز هنگام خواندن مانیفست هایی که هوش مصنوعی تولید می کند بسیار مهم است: هر دامنه بخشی از وضعیت مطلوب سیستم را توصیف می کند. یک دامنه اشتباه به این معنی است که Kubernetes به سمت یک هدف اشتباه کار می کند - و این هدف بی سر و صدا و مداوم اجرا می شود.

نکته: در Kubernetes، مهمترین ابزار تست ایمن kubectl application --dry-run=server -f file.yaml است: نشان می دهد که آیا سرور بدون اعمال مانیفست عملاً می پذیرد و چه کاری باید انجام دهد. قبل از اعمال مانیفست برای prod حتماً اجرا خشک و کوبک‌تل را اجرا کنید.

گام به گام: ایجاد مانیفست با هوش مصنوعی

  1. کاربرد و نیاز را شرح دهید. نام تصویر، پورت، تعداد کپی، محدودیت منابع (CPU/حافظه).
  2. درخواست استقرار + خدمات. معمولاً هر دو با هم مورد نیاز هستند.
  3. پیکربندی و مخفی را از هم جدا کنید. تنظیمات ConfigMap، مقادیر حساس به Secret.
  4. بررسی های بهداشتی را اضافه کنید. livenessProbe (آیا زنده است) و ReadinessProbe (آیا برای ترافیک آماده است) بسیار مهم هستند.
  5. محدودیت منابع را تعیین کنید. بدون درخواست/محدودیت، یک Pod می تواند کل گره را مصرف کند.
  6. با «--dry-run» و «diff» تأیید کنید، سپس اعمال کنید. ابتدا در فضای نام تست.

امنیت: خطرات خاص Kubernetes

  1. راز واقعاً محرمانه نیست - فقط base64 است. شی Kubernetes Secret base64 مقادیر را رمزگذاری می کند. این رمزگذاری نیست، به راحتی رمزگشایی می شود. برای حفظ حریم خصوصی واقعی، رمزگذاری etcd و صندوق خارجی (Vault، مدیر مخفی ابر) مورد نیاز است. هرگز مانیفست های مخفی را مستقیماً به Git مرتکب نشوید (راه حل هایی مانند Seed Secrets/External Secrets برای این کار وجود دارد).
  2. محدودیت منابع را تعیین کنید. یک Pod بدون محدودیت می تواند کل گره را با نشت حافظه خراب کند.
  3. حداقل اقتدار (RBAC). با کنترل دسترسی مبتنی بر نقش، هر سرویس/کاربر فقط مجوزهای مورد نیاز خود را دارد. هوش مصنوعی گاهی اوقات یک cluster-admin بزرگ می دهد. این را محدود کنید
  4. از تگ تصویر «جدیدترین» استفاده نکنید. شما نمی دانید کدام نسخه در حال اجرا است و نمی توانید آن را به عقب برگردانید.
احتیاط: حذف kubectl یا اعمال نادرست می تواند یک Deployment زنده را از بین ببرد. قبل از اجرای دستورات، مطمئن شوید که در کدام فضای نام قرار دارید (kubectl config current-context). کار تصادفی یک فاجعه رایج در زمینه تولید است.

مانیفست خام در مقابل میز هلم

معیار

مانیفست خام YAML

نمودار هلم

نصب و راه اندازی

kubectl اعمال -f

نصب فرمان

چند رسانه ای (dev/prod)

کپی پیست، مستعد خطا

نمودار تک، مقادیر مختلف.yaml

نسخه/بازگشت

با دست

آسان با عقبگرد فرمان

منحنی یادگیری

پایین

متوسط

چه زمانی

محیط کوچک و تک

چند رسانه ای، سرویس تکراری

سه کیف کوچک

مورد 1 - راز سرویس از کار افتاده است. یک پاد دائماً در حال راه اندازی مجدد بود (CrashLoopBackOff). تیم گزارش‌ها و مانیفست‌ها را به هوش مصنوعی داد. هوش مصنوعی نشان داد که Pod هرگز "آماده" در نظر گرفته نمی شود زیرا ReadinessProbe به پورت اشتباهی نگاه می کند. پورت را درست کردند، سرویس در 10 دقیقه پایدار شد. ایجاد این رابطه به صورت دستی ممکن است ساعت ها طول بکشد.

مورد 2 - عدم تعیین محدودیت گره را شکست. هیچ محدودیتی در استقرار وجود نداشت. نشت حافظه پاد را باد کرد و کل گره را خراب کرد و سرویس‌های همسایه را نیز از کار انداخت. پس از این حادثه، آن‌ها هوش مصنوعی را مجبور کردند که بگوید «درخواست‌ها و محدودیت‌های منطقی CPU/حافظه را به همه Deployments اضافه کنید» و آن را استاندارد کردند. یک خط مفقود شده هزینه ساعت‌ها توقف دارد.

مورد 3 - RBAC بزرگ گرفته شده است. در طی یک بررسی، مشخص شد که یک مانیفست ServiceAccount تولید شده توسط هوش مصنوعی به نقش مدیریت خوشه مرتبط است - به این معنی که سرویس می تواند کل خوشه را مدیریت کند. تیم اجازه را محدود به خواندن Pods در فضای نام خود کرد. اصل حداقل امتیاز یک آسیب پذیری امنیتی را بسته است.

چهار قالب قابل کپی

1) استقرار + تولید خدمات:

یک مانیفست استقرار و سرویس برای Kubernetes بنویسید. کاربرد: [میلادی]، تصویر: [تصویر: نسخه ثابت]، پورت: [X]، ماکت: [N]. قوانین: - اضافه کردن درخواست‌ها و محدودیت‌های CPU/حافظه. - تعریف livenessProbe و ReadinessProbe. - خواندن پیکربندی از ConfigMap، مخفی از شی Secret. مقادیر را در مانیفست جاسازی نکنید، از متغیرهایی استفاده کنید. - از برچسب تصویر ":latest" استفاده نکنید. همراه با توضیحات بدهید.

2) حل خطای آشکار:

Pod فعلی در وضعیت [CrashLoopBackOff / در انتظار / ImagePullBackOff] است. با توجه به مانیفست زیر و خروجی 'kubectl describe'، علل ریشه ای احتمالی را به ترتیب احتمال فهرست کنید و برای هر کدام دستور verify را صادر کنید. مانیفست: [YAML] توضیح دهید: [OUTPUT]

3) بررسی امنیت/یکپارچگی:

این مانیفست Kubernetes را بررسی کنید: آیا محدودیت منبع وجود ندارد، آیا prob از دست رفته است، آیا یک برچسب :latest وجود دارد، آیا یک RBAC/مجوز بسیار گسترده وجود دارد، آیا راز در مانیفست تعبیه شده است؟ یافته ها را به ترتیب اهمیت و با تصحیح بنویسید. مانیفست: [YAML]

4) Conversion to Helm chart:

مانیفست های خام زیر را به نمودار هلم قابل استفاده مجدد تبدیل کنید: کدام مقادیر باید به values.yaml (تصویر، ماکت، منبع، محیط) بروند؟ نمایش ساختار نمودار و مقادیر نمونه.yaml.Manifests: [YAML]

اعلان ضعیف / اعلان قوی

ضعیف: "برای برنامه من Kubernetes YAML بنویسید."

نتیجه: استقرار بدون کاوشگر، بدون محدودیت با برچسب :latest، جاسازی دشت مخفی. ناامن و شکننده در تولید.

قوی: "Write Kubernetes Deployment + Service. Image myapp: 1.4.2، 3 replicas, 8080 port. CPU 100m-500m, memory 128Mi-512Mi add requests/limits. probe liveness for /healthz. Readiness probe for /healthz. Readiness probe for /rea. با شرح دادن.

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

اشتباهات رایج

  • عدم تعیین محدودیت منابع یک پاد می تواند کل گره را مصرف کند.
  • عدم افزودن چک سلامت (پروب). Kubernetes نمی تواند پاد خراب/آماده را تشخیص دهد.
  • برچسب `: آخرین` مشخص نیست که کدام نسخه در حال اجرا است، نمی توان آن را به عقب بازگرداند.
  • ارتکاب راز به طور مستقیم به Git. Base64 رمزگذاری نیست. همه آن را حل می کنند
  • اجرای دستورات در زمینه / فضای نام اشتباه. متداول ترین راه برای تصادف در prod.
  • پرش «--dry-run»/«تفاوت». نمی بینیم که قبل از اجرا چه اتفاقی خواهد افتاد.

به طور خلاصه

Kubernetes یک ارکستراتور قدرتمند اما پیچیده است که به طور خودکار کانتینرها را در یک خوشه مستقر می کند، مقیاس بندی و بهینه می کند. همه چیز توسط YAML های آشکار تعریف می شود که Helm آنها را الگوسازی می کند. هوش مصنوعی به سرعت مانیفست‌های استقرار/خدمات و نمودارهای Helm را تولید می‌کند، باگ‌های مرموز را حل می‌کند – اما شما باید صریحاً محدودیت منابع، بررسی سلامت، برچسب تصویر تغییرناپذیر، RBAC باریک و قوانین امنیتی مخفی را بخواهید. --dry-run, diff and correct context checking are habits that prevent prod crashes.

وظیفه کاربردی

از هوش مصنوعی بخواهید یک مانیفست برای یک برنامه نمونه با الگوی "Deployment + Service Generation" ایجاد کند. سپس: (1) آیا محدودیت منابع، کاوش، :latest، و مخفی را با الگوی "بررسی امنیت/عقل" بررسی کنید. (2) در صورت امکان kubectl را اجرا کنید. (3) به دو مورد مهم ایمنی/مقاومت که گم شده اید توجه کنید.

چک لیست

  • [ ] من نسخه تصویر، تعداد کپی ها، پورت و محدودیت منابع را به درخواست خود اضافه کردم.
  • [ ] من سرزندگی و کاوشگر آمادگی را به مانیفست اضافه کردم.
  • [ ] برچسب تصویر ثابت شد. من استفاده نکردم :latest.
  • [ ] راز در مانیفست نهفته است. من از شیء مخفی/طاق خارجی استفاده کردم.
  • [ ] من RBAC/مجوزها را به حداقل مجوزها محدود کردم.
  • [ ] قبل از اعمال، تأیید کردم که در زمینه درستی هستم و خروجی های --dry-run/diff.