10 ترفند و نکته برتر Kubernetes

10 ترفند و نکته برتر Kubernetes

ادبیات مرجع زیادی در اینترنت وجود دارد، اما گاهی اوقات ساده ترین توصیه ارزشمندترین است. تیم Kubernetes aaS از Mail.ru ترجمه شده مجموعه ای از ده ترفند و نکته، که نویسنده مقاله پس از یک سال کار با Kubernetes جمع آوری کرده است. نکات بر اساس اهمیت مرتب نشده اند، اما ما فکر می کنیم که هر کس چیزی برای خود مفید خواهد یافت.

ساده ترین دستور کار با Kubernetes

برای شروع، شاید ساده ترین و مفیدترین اقدام در کار با Kubernetes باشد. دستور زیر تکمیل فرمان را فعال می کند kubectl در پوسته bash:

echo "source <(kubectl completion bash)" >> ~/.bashrc

تکمیل خودکار kubectl در فایل bashrc. نوشته می شود و هر بار که پوسته شروع می شود به طور خودکار فعال می شود. این امر سرعت تایپ دستورات طولانی و پارامترهایی مانند all-namespaces. ادامه مطلب را در Kubernetes bash help.

محدودیت های حافظه پیش فرض و CPU در یک فضای نام

اگر برنامه به اشتباه نوشته شده باشد، برای مثال، هر ثانیه یک اتصال جدید به پایگاه داده باز می کند اما هرگز آن را نمی بندد، پس خوشه دارای نشت حافظه است. و اگر برنامه در حین استقرار محدودیت حافظه تنظیم نکرده باشد، این می تواند منجر به خرابی گره شود.

برای جلوگیری از این امر، Kubernetes به شما اجازه می دهد تا محدودیت های پیش فرض را بر اساس فضای نام تعیین کنید. آنها در فایل yaml برای یک فضای نام خاص نوشته می شوند. در اینجا نمونه ای از چنین فایلی آورده شده است:

apiVersion: v1
kind: LimitRange
metadata:
  name: mem-limit-range
spec:
  limits:
  - default:
      memory: 512Mi
    defaultRequest:
      memory: 256Mi
    type: Container

چنین yaml را ایجاد کنید و در هر فضای نامی اعمال کنید. به عنوان مثال، به فضای نام limit-example. اکنون هر کانتینری که در این فضای نام مستقر شود دارای محدودیت 512Mi خواهد بود، مگر اینکه محدودیت فردی دیگری برای این کانتینر تعیین شود.

جمع آوری زباله در نسخه های قدیمی Kubernetes

Kubelet به‌طور پیش‌فرض جمع‌آوری زباله را زمانی شروع می‌کند var/lib/docker 90 درصد فضای موجود دیسک را اشغال می کند. با این حال، این عالی است، تا زمانی که Kubernetes 1.7 هیچ محدودیت پیش‌فرضی در تعداد inodeهای استفاده شده، که با تعداد فایل‌های موجود در سیستم فایل مطابقت دارد، وجود نداشت.

به طور بالقوه ظرف شما var/lib/docker ممکن است فقط از 50 درصد فضای دیسک استفاده کند، اما ممکن است اینود تمام شود، که برای کارگران مشکل ایجاد می کند.

در نسخه‌های قدیمی‌تر kubelet از 1.4 تا 1.6 باید این پرچم را اضافه کنید:

--eviction-hard
=memory.available<100Mi,nodefs.available<10%,nodefs.inodesFree<5%

در نسخه های 1.7 به بعد این پرچم به صورت پیش فرض تنظیم شده است. با این حال، نسخه های قبلی محدودیت inode را نظارت نمی کنند.

Minikube... Kubernetes محلی کوچک اما قدرتمند

Minikube ساده ترین راه برای اجرای یک خوشه محلی Kubernetes است. با یک دستور ساده راه اندازی می شود:

minikube start

اجرای این دستور منجر به ایجاد یک خوشه واقعی Kubernetes در رایانه شما می شود.

10 ترفند و نکته برتر Kubernetes
منبع تصویر

ترفند این است که چگونه برنامه را بسازیم و آن را به صورت محلی روی آن کلاستر اجرا کنیم. مگر اینکه دستورالعمل خاصی داده شود، تصویر Docker بر روی رایانه شما ساخته می شود و نه روی خوشه.

برای وادار کردن داکر به فشار دادن تصویر به خوشه محلی Kubernetes، دستور زیر به ماشین داکر داده می شود:

eval $(minikube docker-env)

اکنون می‌توانیم برنامه‌های کاربردی را روی یک خوشه محلی Kubernetes بسازیم.

دسترسی به کوبکتل را به همه ندهید

این امر بدیهی به نظر می رسد، اما اگر چندین تیم از یک کلاستر برای برنامه های خود استفاده می کنند (که Kubernetes برای آن ایجاد شده است)، نباید فقط به همه آنها بدهید. kubectl. بهتر است دستورات را از هم جدا کنید و به هر یک از آنها فضای نام اختصاص دهید و دسترسی را با استفاده از سیاست های RBAC محدود کنید.

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

مدیریت بودجه های پاد

چگونه می توان از عدم توقف برنامه در یک کلاستر Kubernetes اطمینان حاصل کرد؟ PodDisruptionBudget و دوباره PodDisruptionBudget.

خوشه ها به صورت دوره ای به روز می شوند و گره ها خالی می شوند. هیچ چیز ثابت نمی ماند، این واقعیت است. هر استقرار با بیش از یک نمونه باید شامل یک PDB (PodDisruptionBudget) باشد. در یک فایل yaml ساده ایجاد شده است که روی خوشه اعمال می شود. منطقه پوشش یک PDB خاص توسط انتخابگرهای برچسب تعیین می شود.

توجه: بودجه PDB فقط زمانی در نظر گرفته می شود که نقض بودجه قابل برگشت باشد (اختلال داوطلبانه). در شرایطی مانند خرابی سخت افزار، PDB کار نخواهد کرد.

PDB مثال:

apiVersion: policy/v1beta1
kind: PodDisruptionBudget
metadata:
  name: app-a-pdb
spec:
  minAvailable: 2
  selector:
      matchLabels:
        app: app-a

دو پارامتر اصلی هستند matchLabels и minAvailable. اولین پارامتر مشخص می کند که بودجه برای کدام برنامه ها اعمال می شود. به عنوان مثال، اگر من استقرار با برچسب داشته باشم app: app-a и app: app-b، سپس این PDB فقط برای اولین مورد اعمال می شود.

پارامتر minAvailable هنگام تخلیه (تمیز کردن) گره مورد توجه قرار می گیرد. برای مثال در مثال ما در حین تخلیه، تمام نمونه ها خارج می شوند app: app-a، به جز دو.

این به شما این امکان را می دهد که کنترل کنید چند نمونه از برنامه باید در هر زمان اجرا شود.

نظارت بر سلامت برنامه

چنین نظارتی به دو صورت امکان پذیر است: با استفاده از تست های آمادگی یا زنده بودن.

اولین کاوشگر (آمادگی) آمادگی کانتینر را برای دریافت ترافیک مشخص می کند.

دومی (زندگی) نشان می دهد که آیا ظرف سالم است یا نیاز به راه اندازی مجدد دارد.

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

برچسب ها همه جا هستند

برچسب ها یکی از مفاهیم اساسی در Kubernetes هستند. آنها به اشیاء اجازه می دهند آزادانه با یکدیگر ارتباط برقرار کنند و همچنین پرس و جوهایی را بر اساس برچسب ها ایجاد کنند. در Kubernetes، حتی می توانید به مشتری بروید و رویدادهای برچسب های خاص را تماشا کنید.

تقریباً می توانید هر کاری را با برچسب ها انجام دهید، اما یک مثال خوب ایجاد چندین محیط برای اجرای برنامه ها در یک کلاستر است.

فرض کنید از همان خوشه استفاده می کنید dev и qa. این بدان معنی است که شما می توانید یک برنامه کاربردی داشته باشید app-a، به طور همزمان در هر دو محیط کار می کند qa и dev. در این حالت می توانیم با تعیین پارامتر مناسب به طور جداگانه به نمونه برنامه در یک محیط خاص دسترسی داشته باشیم environment. به عنوان مثال app: app-a и environment: dev برای یک محیط، و app: app-a и environment: qa برای دومی

این به شما امکان می دهد به هر دو نمونه برنامه دسترسی داشته باشید، به عنوان مثال، آزمایش را به طور همزمان انجام دهید.

سازماندهی کنید

Kubernetes یک سیستم بسیار قدرتمند است، اما هر سیستمی در نهایت ممکن است با فرآیندهای بیش از حد درگیر شود. Kubelet تمام فرآیندها را اجرا می کند و بررسی می کند که شما مشخص کرده اید، و همچنین فرآیندهای خود را.

البته، یک سرویس یتیم، سرعت سیستم را کاهش نمی دهد، و Kubernetes به گونه ای طراحی شده است که از ابتدا به سطح بالایی برسد. اما اگر به جای یک سرویس، یک میلیون ظاهر شود، کوبلت شروع به خفگی می کند.

اگر به دلایلی یک استقرار (کانتینر، تصویر، هر چیز دیگری) را حذف کردید، فقط مطمئن شوید که یک پاکسازی کامل انجام دهید.

Meet Go

توصیه اصلی را برای آخر ذخیره کردیم. زبان برنامه نویسی Go را یاد بگیرید.

Kubernetes در Go توسعه یافته است، تمام برنامه های افزودنی در Go نوشته شده اند، و کتابخانه مشتری-go کلاینت نیز به طور رسمی پشتیبانی می شود.

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

یادگیری زبان برنامه نویسی Go و تسلط بر Client-go شاید مهم ترین توصیه ای باشد که می توانید به کاربران جدید Kubernetes بدهید.

با پشتیبانی Mail.ru Cloud Solutions ترجمه شده است

چه چیز دیگری برای خواندن:

  1. سه سطح مقیاس خودکار در Kubernetes و نحوه استفاده موثر از آنها.
  2. گره های کارگر Kubernetes: بسیاری از گره های کوچک یا چند گره بزرگ?
  3. 25 ابزار مفید برای استقرار و مدیریت Kubernetes.

منبع: www.habr.com

اضافه کردن نظر