کوبرنتیز به زبان ساده یک پلتفرم منبع باز برای میزبانی کانتینرها و تعریف APIهای برنامهمحور، برای مدیریت مفاهیم مرتبط با cloud حول محور چگونگی فراهمسازی این کانتینرها با ذخیرهسازی، شبکه، امنیت و سایر منابع می باشد. کوبرنتیز تطبیق مداوم کل فضای وضعیت استقرار برنامههای شما، از جمله نحوهی دسترسی به آنها از دنیای بیرون، را امکانپذیر میکند. چرا باید به جای دستی کردن این نوع منابع با استفاده از یک ابزار زیرساخت مرتبط با DevOps کوبرنتیز را در محیط خود پیادهسازی کنیم؟ پاسخ در چگونگی تعریفی است که ما از DevOps داریم، تا آن را طی زمان، به طور فزاینده، در چرخهی عمر کلی برنامه ادغام کنیم. راهکارهای DevOps به طور فزایندهای تکامل یافته و شامل فرآیندها، مهندسان و ابزارهایی است که از مدیریت اتوماتیکتر برنامهها در یک مرکز داده پشتیبانی میکنند.
یکی از رموز موفقیت این کار، قابلیت بازتولیدپذیری زیرساخت است: اگر تغییراتی که برای رفع یک حادثه در یک جزء ایجاد میشود، در تمام اجزای مشابه دیگر به طور کامل تکرار نشود، به این معنی است که یک یا چند جزء متفاوت هستند.
در این مقاله ما به کوبرنتیز به زبان ساده اشاره خواهیم کرد و به بررسی بهترین روشهای استفاده از کوبرنتیز با DevOps میپردازیم تا مؤلفهها در صورت نیاز تکرار شوند و سیستم شما کمتر دچار اختلال شود. در سال 2021، کوبرنتیز یکی از رایجترین فناوریهای مبتنی بر cloud بوده، اگر در صورتی که در مورد کوبرنتیز تازهکار هستید یا از معنای چند اصطلاح مطمئن نیستید میتوانید ا مقالات موجود در سایت که در این مورد است استفاده نمایید.
- CNI و CSI: به ترتیب رابطهای شبکه و ذخیرهسازی کانتینر هستند که امکان اتصال به شبکه و ذخیرهسازی را برای Podها که در کوبرنتیز اجرا میشوند را فراهم میکند.
- Container: یک تصویر Docker یا OCI است که معمولاً یک برنامه را اجرا میکند.
- Control plane یا صفحه کنترل: مغز یک کلاستر کوبرنتیز است، یعنی جایی که برنامهریزی کانتینرها و مدیریت تمام اشیاء کوبرنتیز در آن انجام میشود که گاهی اوقات با عنوان Masters نیز شناخته میشود.
- DaemonSet: مانند یک استقرار است، اما روی هر گره یک کلاستر اجرا میشود.
ویدیوهای بیشتر درباره kubernetes
- Deployment: مجموعه ای از Podها است که توسط کوبرنتیز مدیریت میشود.
- Kubectl: ابزار خط فرمان برای مکالمه با صفحه کنترل کوبرنتیز است.
- Kubelet: عامل کوبرنتیز است که روی گرههای کلاستر شما اجرا شده وکاری را که صفحه کنترل میخواهد انجام میدهد.
- Node یا گره: ماشینی است که فرآیند kubelet را اجرا میکند.
- OCI: فرمت تصویری رایج برای ساخت برنامههای مستقل قابل اجرا است، که همچنین به عنوان تصاویر Docker نیز شناخته میشود.
- Pod: وسیلهی کوبرنتیز است که یک container در حال اجرا را بستهبندی میکند.
مشکلات زیرساخت سازمان و کوبرنتیز به زبان ساده
مدیریت زیرساخت روشی بازتولیدپذیر برای مدیریت پیکربندی آن زیرساخت است، چراکه سختافزار، انطباق و سایر الزامات مرکز داده در طول زمان تغییر میکنند. این امر هم برای تعریف برنامهها و هم برای مدیریت میزبانهایی که این برنامهها روی آنها اجرا میشوند، صدق میکند. مهندسان فناوری اطلاعات همه با کارهای معمولی زیر آشنا هستند:
- به روز رسانی نسخهی جاوا بر روی مجموعهای از سرورها
- اطمینان از اینکه برنامههای خاصی در مکانهای خاص اجرا نمیشوند
- جایگزینی یا مقیاسبندی سختافزار قدیمی یا خراب و انتقال برنامههای کاربردی از آن
- مدیریت دستی مسیرهای متعادل کنندهی بار
- فراموش کردن مستندسازی تغییرات جدید زیرساخت در صورت عدم وجود یک زبان پیکربندی اجباری مشترک
همانطور که ما سرورها را در یک مرکز داده یا در فضای مبتنی بر cloud مدیریت و بهروزرسانی میکنیم، احتمال اینکه تعاریف اصلی آنها از معماری IT مورد نظر دور شود افزایش مییابد. برنامهها ممکن است در مکانهای اشتباه، با تخصیص منابع اشتباه، یا با دسترسی به ماژولهای ذخیرهسازی اشتباه اجرا شوند. کوبرنتیز به ما راهی برای مدیریت مرکزی کل فضای وضعیت تمام برنامهها با یک ابزار مفید ارائه میدهد: kubectl یک کلاینت خط فرمان است که API REST را به سرور API Kubernetes فرا میخواند. ما همچنین میتوانیم از کاربران API Kubernetes برای انجام این وظایف به صورت برنامهریزیشده استفاده کنیم.
بیشتر بخوانید: کوبرنتیز یا Kubernetes چیست؟ چرا روشهای امنیتی قدیمی در پیادهسازی آن کمک نمی کند – قسمت اول
رویکردهای پیشین برای مدیریت این فضای حالت برنامهی پیچیده شامل فناوریهایی مانند Puppet، Chef، Mesos، Ansible و SaltStack میباشد. در حالی که کوبرنتیز از این رویکردهای مختلف، قابلیت مدیریتِ وضعیتِ ابزارهایی مانند Puppet را وام گرفته؛ مفاهیم اولیه را از برخی برنامهها و برنامهریزیهای ارائه شده توسط نرمافزارهایی مانند Mesos الهام گرفته است. Ansible، SaltStack و Terraform معمولاً نقش مهمی در پیکربندی زیرساخت مانند هموارسازی الزامات خاص سیستم عامل مانند فایروالها یا نصبهای باینری ایفا کردهاند. کوبرنتیز این مفهوم را نیز مدیریت میکند، اما از کانتینرهای ممتاز در یک محیط لینوکس که با عنوان HostProcess Pods در ویندوز v1.22 شناخته میشوند استفاده میکند. برای مثال، یک کانتینر ممتاز در یک سیستم لینوکس میتواند قوانین iptables را برای مسیریابی ترافیک به برنامهها مدیریت کند و در واقع، این دقیقاً همان کاری است که پراکسی سرویس Kubernetes معروف به kube-proxy انجام میدهد.
برای مشاوره رایگان جهت (باز)طراحی امنیت شبکه و یا انجام تست نفوذ مطابق با الزامات افتا با کارشناسان شرکت APK تماس بگیرید. |
گوگل، مایکروسافت، آمازون، VMware و بسیاری از شرکتها، کانتینریسازی را بهعنوان یک استراتژی اصلی و فعال برای کاربران خود در اجرای ناوگان صدها یا هزاران برنامه در محیطهای مبتنی بر cloud وbare metal مختلف اتخاذ کردهاند. بنابراین، کانتینرها، هم برای appهای در حال اجرا و هم برای مدیریت زیرساختِ برنامههایی مانند ارائهی کانتینرهایی با آدرسهای IP، که مجری سرویسهای لازم برای برنامهها هستند مانند تأمین نیازهای ذخیرهسازی سفارشی و فایروال و مهمتر از همه، برای اجرای خود برنامهها، ضروری و لازم اند. کوبرنتیز بیتردید در زمان نگارش این مقاله اساساً به عنوان استانداردی مدرن برای سازماندهی و اجرای کانتینرها در هر محیط مبتنی بر cloud، سرور یا مرکز داده است.
بیشتر بخوانبد: Kubernetes چیست و چه مزیت هایی برای سازمان ها دارد
کانتینرها و تصاویر
برنامهها وابستگیهایی دارند که باید توسط میزبانی که روی آن اجرا میشوند برآورده شوند. توسعهدهندگان، پیش از ظهور کانتینرها، این کار را در صورت نیاز انجام میدادند، برای مثال، یک برنامهی جاوا، برای مکالمه با پایگاه داده، به JVM در حالِ اجرا و قوانین فایروال نیاز داشت.
داکر،، به عنوان هستهی اصلی کانتینر، میتواند راهی برای اجرای کانتینرهایی باشد که در آن کانتینر یک تصویر OCI در حال اجرا میباشد.
مشخصات OCI روشی استاندارد برای تعریف تصویری است که میتواند توسط برنامهای مانند Docker اجرا شود و در نهایت یک tarball با لایههای مختلف باشد. هر یک از tarballهای داخل یک تصویر حاوی مواردی مانند باینریهای لینوکس و فایلهای کاربردی است. بنابراین، هنگامی که یک کانتینر را اجرا میکنید، در فاز زمان اجرای کانتینر مانند داکر، containerd یا CRI-O تصویر گرفته شده، باز میشود و فرآیندی در سیستم میزبان شروع میشود که محتویات تصویر را اجرا میکند.
کانتینرها لایهای از ایزولاسیون را اضافه میکنند که نیاز به مدیریت libraryها در سرور یا بارگذاری اولیهی زیرساخت، با دیگر وابستگیهای تصادفی به برنامه، را برطرف میکند. برای مثال، اگر دو برنامه Ruby دارید که به نسخههای متفاوتی از یک library نیاز دارند، میتوانید از دو کانتینر استفاده کنید. هر برنامهی Ruby در داخل یک کانتینر در حالِ اجرا جدا شده است و نسخهی خاصی از libraryمورد نیاز خود را دارد.
ممکن است نرمافزاری، در یک محیط یا ماشین اجرا شود اما در جای دیگری اجرا نشود. استفاده از تصاویر، اجرای یک نرمافزار مشابه را در سرورهای مختلف ساده میکند. استفاده از تصاویر را با کوبرنتیز ترکیب کنید تا سرورهای تغییرناپذیری را اجرا کنید و سطحی از سادگی را در ردهی جهانی داشته باشید. از آنجایی که کانتینرها، به سرعت، در حال تبدیل شدن به یک استاندارد صنعتی برای استقرار برنامههای کاربردی نرمافزاری هستند، چند نکته در ارتباط با داده شایان ذکر است:
- پس از بررسی بیش از 88000 توسعهدهنده Docker و کوبرنتیز، پس از Docker و Linux سومین فناوری محبوب توسعهی سال 2020 بودند.
- اخیراً Datadog دریافته است که Docker بیش از 50 درصد از گردش کار متوسط توسعهدهندگان را در بر میگیرد. به همین ترتیب، پذیرش در سراسر شرکت بیش از 25٪ از کل مشاغل میباشد.
نکتهی اصلی این است که ما به اتوماسیون کانتینرها نیاز داریم، و این جایی است که کوبرنتیز اهمیت پیدا میکند. کوبرنتیز مانند پایگاه داده Oracle و پلتفرم مجازیسازی vSphere در دوران اوج خود بر فضا تسلط دارد. در سالهای پیشرو، پایگاههای داده Oracle و نصبهای vSphere هنوز وجود خواهند داشت. ما همین طول عمر را برای کوبرنتیز نیز پیشبینی میکنیم.
ما این مقاله را با تلاش برای شناخت اولیهی ویژگیهای کوبرنتیز آغاز میکنیم. هدف آن این است که شما را، فراتر از اصول اولیه، به هستهی سطحِ عمیقتر ببرد. بیایید به یک گردش کار بسیار ساده شدهی کوبرنتیز که با عنوان “K8s” نیز شناخته میشود نگاهی بیاندازیم که برخی از کاربران درجه یک سازه و خدمات خرد را نشان میدهد.
پایهی اصلی کوبرنتیز به زبان ساده
در اصل، ما همه چیز را در کوبرنتیز به عنوان فایلهای متنی ساده تعریف میکنیم که از طریق YAML یا JSON تعریف میشوند، و تصاویر OCI شما را بهصورت اعلان برایتان اجرا میکند. ما میتوانیم از همین رویکرد فایلهای متنی YAML یا JSON برای پیکربندی قوانین شبکه، احراز هویت و مجوز مبتنی بر نقش یا Role-based access control یا RBAC و غیره استفاده کنیم. با یادگیری یک ترکیب و نحوهی ساختار آن، هر سیستم کوبرنتیز را میتوان پیکربندی، مدیریت و بهینه کرد.