Skip to content

پیشگفتار

Kubernetes: یک تقدیم

Kubernetes می‌خواهد از هر sysadminی که ساعت ۳ صبح برای restart کردن یک process بیدار شده تشکر کند. از هر developerی که کد را به production push کرده و فقط فهمیده روی laptopش مثل production اجرا نمی‌شود. از هر systems architectی که به‌اشتباه load test را به سرویس production اشاره کرده چون hostname قدیمی را به‌روز نکرده بود.

درد، ساعات عجیب و خطاهای عجیب، الهام‌بخش توسعهٔ Kubernetes بودند. در یک جمله: Kubernetes قصد دارد کار ساخت، deploy و نگهداری سیستم‌های توزیع‌شده را به‌شدت ساده کند. از دهه‌ها تجربهٔ واقعی در ساخت سیستم‌های reliable الهام گرفته و از پایه طوری طراحی شده که آن تجربه اگر euphoric نباشد، حداقل pleasant باشد. امیدواریم از کتاب لذت ببرید!

چه کسانی باید این کتاب را بخوانند

چه تازه‌کار سیستم‌های توزیع‌شده باشید و چه سال‌ها سیستم‌های cloud-native deploy کرده باشید، containerها و Kubernetes می‌توانند به شما کمک کنند به سطح جدیدی از velocity، agility، reliability و efficiency برسید. این کتاب orchestrator خوشهٔ Kubernetes و نحوهٔ استفاده از ابزارها و APIهای آن برای بهبود توسعه، تحویل و نگهداری برنامه‌های توزیع‌شده را توصیف می‌کند. اگرچه تجربهٔ قبلی با Kubernetes فرض نشده، برای بهره‌برداری حداکثری از کتاب باید در ساخت و deploy برنامه‌های مبتنی بر server راحت باشید. آشنایی با مفاهیمی مثل load balancer و network storage مفید است، هرچند الزامی نیست. به‌همین‌ترتیب، تجربه با Linux، Linux container و Docker، اگرچه ضروری نیست، به شما کمک می‌کند بیشترین بهره را از این کتاب ببرید.

چرا این کتاب را نوشتیم

از همان آغازهای Kubernetes درگیر آن بوده‌ایم. تماشای تبدیل آن از یک curiosity که عمدتاً در آزمایش‌ها استفاده می‌شد به زیرساخت production-grade حیاتی که برنامه‌های production در مقیاس بزرگ در حوزه‌های متنوع — از machine learning تا سرویس‌های آنلاین — را توان می‌بخشد، واقعاً قابل‌توجه بود. با وقوع این گذار، روشن‌تر شد که کتابی که هم نحوهٔ استفاده از مفاهیم هسته‌ای Kubernetes و هم انگیزه‌های پشت توسعهٔ آن مفاهیم را ثبت کند، سهمی مهم در وضعیت توسعهٔ برنامه‌های cloud-native خواهد بود. امیدواریم با خواندن این کتاب، نه‌تنها یاد بگیرید چگونه برنامه‌های reliable و scalable روی Kubernetes بسازید، بلکه بینشی نسبت به چالش‌های هسته‌ای سیستم‌های توزیع‌شده که به توسعهٔ آن منجر شدند نیز به دست آورید.

چرا این کتاب را به‌روز کردیم

در چند سالی که از نوشتن نسخهٔ اول گذشته، اکوسیستم Kubernetes شکوفا و تکامل یافته است. خود Kubernetes releaseهای بسیاری داشته و ابزارها و الگوهای بیشتری برای استفاده از آن به de facto standard تبدیل شده‌اند. در به‌روزرسانی کتاب، مطالبی دربارهٔ HTTP load balancing، role-based access control (RBAC)، گسترش Kubernetes API، سازمان‌دهی برنامه در source control و موارد دیگر افزودیم. همچنین همهٔ فصل‌های موجود را به‌روز کردیم تا تغییرات و تکامل Kubernetes از زمان نسخهٔ اول را منعکس کنند. کاملاً انتظار داریم چند سال دیگر دوباره این کتاب را بازبینی کنیم (و مشتاق آن هستیم)، زیرا Kubernetes به تکامل خود ادامه می‌دهد.

نکته‌ای دربارهٔ برنامه‌های cloud-native امروز

از اولین زبان‌های برنامه‌نویسی تا برنامه‌نویسی شیءگرا، تا توسعهٔ virtualization و زیرساخت cloud، تاریخ علوم کامپیوتر تاریخ توسعهٔ abstractionهایی است که پیچیدگی را پنهان می‌کنند و شما را توانمند می‌سازند برنامه‌های پیچیده‌تر بسازید. با وجود این، توسعهٔ برنامه‌های reliable و scalable هنوز به‌طرز چشمگیری دشوارتر از آن است که باید باشد. در سال‌های اخیر، containerها و container orchestration APIهایی مثل Kubernetes abstraction مهمی ثابت کرده‌اند که توسعهٔ سیستم‌های توزیع‌شدهٔ reliable و scalable را به‌شدت ساده می‌کنند. اگرچه containerها و orchestratorها هنوز در مسیر ورود به mainstream هستند، از همین حالا به developerها امکان می‌دهند با سرعت، agility و reliabilityی که چند سال پیش شبیه علمی‌تخیلی به نظر می‌رسید، برنامه بسازند و deploy کنند.

پیمایش این کتاب

این کتاب به‌صورت زیر سازمان‌دهی شده است. فصل ۱ مزایای سطح بالای Kubernetes را بدون ورود عمیق به جزئیات ترسیم می‌کند. اگر تازه‌کار Kubernetes هستید، جای خوبی برای فهمیدن چرایی خواندن بقیهٔ کتاب است.

فصل ۲ مقدمهٔ مفصلی به containerها و توسعهٔ برنامهٔ containerized می‌دهد. اگر واقعاً با Docker کار نکرده‌اید، این فصل مقدمهٔ مفیدی است. اگر از قبل expert Docker هستید، احتمالاً عمدتاً مرور خواهد بود.

فصل ۳ نحوهٔ deploy کردن Kubernetes را پوشش می‌دهد. در حالی که بیشتر این کتاب روی نحوهٔ استفاده از Kubernetes متمرکز است، قبل از شروع باید یک cluster راه بیندازید. اگرچه اجرای cluster برای production خارج از محدودهٔ این کتاب است، این فصل چند راه ساده برای ایجاد cluster ارائه می‌دهد تا بفهمید چگونه از Kubernetes استفاده کنید. فصل ۴ گزینشی از دستورات رایج برای تعامل با cluster Kubernetes را پوشش می‌دهد.

از فصل ۵ به بعد، به جزئیات deploy یک برنامه با Kubernetes می‌پردازیم. Podها (فصل ۵)، labelها و annotationها (فصل ۶)، serviceها (فصل ۷)، Ingress (فصل ۸) و ReplicaSetها (فصل ۹) را پوشش می‌دهیم. این‌ها هستهٔ اصولی آنچه برای deploy سرویس در Kubernetes نیاز دارید را تشکیل می‌دهند. سپس deploymentها (فصل ۱۰) را پوشش می‌دهیم که چرخهٔ عمر یک برنامهٔ کامل را به هم وصل می‌کنند.

پس از آن فصل‌ها، برخی objectهای تخصصی‌تر در Kubernetes را پوشش می‌دهیم: DaemonSetها (فصل ۱۱)، Jobها (فصل ۱۲) و ConfigMapها و secretها (فصل ۱۳). اگرچه این فصل‌ها برای بسیاری از برنامه‌های production ضروری‌اند، اگر تازه Kubernetes را یاد می‌گیرید می‌توانید از آن‌ها بگذرید و بعداً با تجربهٔ بیشتر به آن‌ها برگردید.

سپس یکپارچه‌سازی storage در Kubernetes (فصل ۱۵) را پوشش می‌دهیم. گسترش Kubernetes را در فصل ۱۶ بحث می‌کنیم. در پایان با چند نمونه از توسعه و deploy برنامه‌های واقعی در Kubernetes (فصل ۱۷) و بحثی دربارهٔ سازمان‌دهی برنامه‌ها در source control (فصل ۱۸) به پایان می‌رسانیم.

منابع آنلاین

می‌خواهید Docker را نصب کنید. همچنین احتمالاً می‌خواهید اگر قبلاً نکرده‌اید با مستندات Docker آشنا شوید.

به‌همین‌ترتیب، می‌خواهید ابزار خط فرمان kubectl را نصب کنید. همچنین ممکن است بخواهید به کانال Slack Kubernetes بپیوندید، جایی که جامعهٔ بزرگی از کاربران حاضرند تقریباً در هر ساعتی از شبانه‌روز گفت‌وگو کنند و سؤال پاسخ دهند.

در نهایت، با پیشرفت بیشتر، ممکن است بخواهید با repository متن‌باز Kubernetes در GitHub درگیر شوید.

قراردادهای به‌کاررفته در این کتاب

قراردادهای تایپوگرافیک زیر در این کتاب استفاده شده‌اند:

Italic : نشان‌دهندهٔ اصطلاحات جدید، URLها، آدرس ایمیل، نام فایل‌ها و پسوندهای فایل است.

Constant width : برای فهرست برنامه‌ها و همچنین درون پاراگراف‌ها برای اشاره به عناصر برنامه مثل نام متغیر یا تابع، پایگاه‌داده‌ها، نوع داده، متغیرهای محیطی، statementها و keywordها به‌کار می‌رود.

Constant width bold : دستورات یا متنی را نشان می‌دهد که کاربر باید عیناً تایپ کند.

Constant width italic : متنی را نشان می‌دهد که باید با مقادیر کاربر یا مقادیر تعیین‌شده از context جایگزین شود.

💡 این نماد نشان‌دهندهٔ نکته، پیشنهاد یا یادداشت عمومی است.

⚠️ این نماد نشان‌دهندهٔ هشدار یا احتیاط است.

استفاده از نمونه‌های کد

مطالب تکمیلی (نمونه‌های کد، تمرین‌ها و غیره) برای دانلود در https://github.com/kubernetes-up-and-running/examples در دسترس است.

این کتاب برای کمک به انجام کار شماست. به‌طور کلی، اگر نمونه کد با این کتاب ارائه شده، می‌توانید در برنامه‌ها و مستندات خود از آن استفاده کنید. نیازی به تماس با ما برای اجازه نیست مگر اینکه بخش قابل‌توجهی از کد را بازتولید کنید. مثلاً نوشتن برنامه‌ای که چند بخش کد از این کتاب را استفاده می‌کند نیاز به اجازه ندارد. فروش یا توزیع CD-ROM نمونه‌ها از کتاب‌های O'Reilly نیاز به اجازه دارد. پاسخ به سؤال با استناد به این کتاب و نقل نمونه کد نیاز به اجازه ندارد. گنجاندن مقدار قابل‌توجهی از نمونه کد این کتاب در مستندات محصول شما نیاز به اجازه دارد.

قدردانی می‌کنیم اما الزام نمی‌کنیم که attribution بدهید. attribution معمولاً شامل عنوان، نویسنده، ناشر و ISBN است. مثلاً: «Kubernetes: Up and Running, 2nd edition, by Brendan Burns, Joe Beda, and Kelsey Hightower (O'Reilly). Copyright 2019 Brendan Burns, Joe Beda, and Kelsey Hightower, 978-1-492-04653-0.»

اگر احساس می‌کنید استفادهٔ شما از نمونه‌های کد خارج از fair use یا اجازهٔ بالاست، با ما در permissions@oreilly.com تماس بگیرید.

O'Reilly Online Learning

تقریباً ۴۰ سال است O'Reilly Media آموزش فناوری و کسب‌وکار، دانش و بینش برای کمک به موفقیت شرکت‌ها ارائه می‌دهد.

شبکهٔ منحصربه‌فرد متخصصان و نوآوران ما دانش و تخصص خود را از طریق کتاب‌ها، مقالات، کنفرانس‌ها و پلتفرم یادگیری آنلاین به اشتراک می‌گذارند. پلتفرم یادگیری آنلاین O'Reilly دسترسی on-demand به دوره‌های آموزشی زنده، مسیرهای یادگیری عمیق، محیط‌های coding تعاملی و مجموعهٔ عظیمی از متن و ویدیو از O'Reilly و بیش از ۲۰۰ ناشر دیگر می‌دهد. برای اطلاعات بیشتر به http://oreilly.com مراجعه کنید.

نحوهٔ تماس با ما

لطفاً نظرات و سؤالات مربوط به این کتاب را به ناشر ارسال کنید:

O'Reilly Media, Inc.
1005 Gravenstein Highway North
Sebastopol, CA 95472
800-998-9938 (in the United States or Canada)
707-829-0515 (international or local)
707-829-0104 (fax)

صفحهٔ وب مخصوص این کتاب داریم که errata، نمونه‌ها و اطلاعات تکمیلی را فهرست می‌کند. می‌توانید از http://bit.ly/kubernetesUR_2e به این صفحه دسترسی داشته باشید.

برای نظر یا سؤال فنی دربارهٔ این کتاب، ایمیل به bookquestions@oreilly.com بفرستید.

برای اطلاعات بیشتر دربارهٔ کتاب‌ها، دوره‌ها، کنفرانس‌ها و اخبار، وب‌سایت http://www.oreilly.com را ببینید.

ما را در Facebook پیدا کنید: http://facebook.com/oreilly

ما را در Twitter دنبال کنید: http://twitter.com/oreillymedia

ما را در YouTube تماشا کنید: http://www.youtube.com/oreillymedia

قدردانی

می‌خواهیم از همهٔ کسانی که در توسعهٔ این کتاب کمک کردند قدردانی کنیم. این شامل ویراستار ما Virginia Wilson و همهٔ افراد عالی O'Reilly، و همچنین بازبینان فنی که بازخورد فوق‌العاده‌ای دادند و کتاب را به‌طور قابل‌توجهی بهبود دادند، می‌شود. در پایان، از همهٔ خوانندگان نسخهٔ اول که وقت گذاشتند errata گزارش دهند که در این نسخهٔ دوم یافت و اصلاح شد، تشکر می‌کنیم. از همهٔ شما سپاسگزاریم! بسیار سپاسمندیم.