<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>کوبرنتیز آرشیو - بلاگ هم‌روش</title>
	<atom:link href="https://hamravesh.com/blog/category/kubernetes/feed/" rel="self" type="application/rss+xml" />
	<link>https://hamravesh.com/blog/category/kubernetes/</link>
	<description>وبلاگ رسمی هم‌روش</description>
	<lastBuildDate>Sun, 03 May 2026 10:58:48 +0000</lastBuildDate>
	<language>fa-IR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.1</generator>

<image>
	<url>https://hamravesh.com/blog/wp-content/uploads/2022/07/cropped-fav1-32x32.png</url>
	<title>کوبرنتیز آرشیو - بلاگ هم‌روش</title>
	<link>https://hamravesh.com/blog/category/kubernetes/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>آشنایی با Workload در کوبرنتیز؛ انواع و کاربردها</title>
		<link>https://hamravesh.com/blog/what-is-kubernetes-workloads/</link>
					<comments>https://hamravesh.com/blog/what-is-kubernetes-workloads/#respond</comments>
		
		<dc:creator><![CDATA[ارسطو عباسی]]></dc:creator>
		<pubDate>Wed, 29 Apr 2026 12:30:00 +0000</pubDate>
				<category><![CDATA[مقالات]]></category>
		<category><![CDATA[کوبرنتیز]]></category>
		<guid isPermaLink="false">https://hamravesh.com/blog/?p=3104</guid>

					<description><![CDATA[<p>Workload در کوبرنتیز به مجموعه‌ای از کانتینرها اطلاق می‌شود که یک برنامه یا سرویس را اجرا می‌کنند.</p>
<p>The post <a href="https://hamravesh.com/blog/what-is-kubernetes-workloads/">آشنایی با Workload در کوبرنتیز؛ انواع و کاربردها</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Workload در کوبرنتیز یکی از مفاهیم کلیدی برای اجرای برنامه‌ها در محیط‌های ابری و مقیاس‌پذیر است. وقتی صحبت از اجرای یک برنامه در کوبرنتیز می‌شود، فقط اجرای چند کانتینر مطرح نیست، بلکه نحوه مدیریت، مقیاس‌دهی و نگهداری آن برنامه نیز اهمیت پیدا می‌کند. در چنین شرایطی، شناخت Workloadها و تفاوت بین انواع آن‌ها به شما کمک می‌کند تصمیم بگیرید که هر برنامه را چگونه اجرا و مدیریت کنید. در این مقاله، به‌صورت ساده و کاربردی به بررسی مفهوم Workload در کوبرنتیز و انواع آن می‌پردازیم.</p>



<h2 class="wp-block-heading" id="h-workload-در-کوبرنتیز-چیست">Workload در کوبرنتیز چیست؟</h2>



<p>Workload در <a href="https://hamravesh.com/blog/what-is-kubernetes" type="link" id="https://hamravesh.com/blog/what-is-kubernetes" target="_blank" rel="noreferrer noopener">کوبرنتیز </a>برنامه یا سرویسی است که روی کلاستر اجرا می‌شود و نحوه استقرار، اجرا و مقیاس‌دهی آن بر اساس وضعیت مورد انتظار (desired state) مشخص می‌شود. کوبرنتیز این وضعیت را دریافت کرده و با استفاده از مکانیزم‌های خود، اجرای برنامه را مدیریت می‌کند تا وضعیت واقعی (actual state) با وضعیت مورد انتظار مطابقت داشته باشد.</p>



<p>Workloadها معمولاً در قالب مجموعه‌ای از پادها اجرا می‌شوند (هر پاد شامل یک یا چند کانتینر است). به‌جای اینکه کاربر مستقیماً پادها را مدیریت کند، کوبرنتیز از منابعی مانند Deployment ،StatefulSet و Job استفاده می‌کند تا این وضعیت را به‌صورت خودکار اعمال و کنترل کند.</p>



<h2 class="wp-block-heading">انواع Workload در کوبرنتیز</h2>



<p id="h-در-kubernetes-انواع-مختلفی-از-workload-وجود-دارد-که-هرکدام-برای-نیازهای-خاصی-طراحی-شده-اند-این-workloadها-رفتار-اجرای-برنامه-ها-مقیاس-دهی-و-نحوه-مدیریت-وضعیت-آن-ها-را-کنترل-می-کنند-در-ادامه-مهم-ترین-انواع-workload-و-کاربرد-هر-یک-را-بررسی-می-کنیم">در کوبرنتیز انواع مختلفی از Workload وجود دارد که هرکدام برای نیازهای خاصی طراحی شده‌اند. این Workloadها رفتار اجرای برنامه‌ها، مقیاس‌دهی و نحوه مدیریت وضعیت آن‌ها را کنترل می‌کنند. در ادامه، مهم‌ترین انواع Workload و کاربرد هر یک را بررسی می‌کنیم.</p>



<figure class="wp-block-image size-large"><img fetchpriority="high" decoding="async" width="1024" height="587" src="https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-what-is-kubernetes-workload2-1024x587.webp" alt="انواع Workload در کوبرنتیز" class="wp-image-5021" srcset="https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-what-is-kubernetes-workload2-1024x587.webp 1024w, https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-what-is-kubernetes-workload2-300x172.webp 300w, https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-what-is-kubernetes-workload2-768x440.webp 768w, https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-what-is-kubernetes-workload2-120x69.webp 120w, https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-what-is-kubernetes-workload2.webp 1201w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<h3 class="wp-block-heading" id="h-pod">Pod</h3>



<p><a href="https://hamravesh.com/blog/what-is-kubernetes-pod" target="_blank" rel="noreferrer noopener">پاد در کوبرنتیز</a> کوچک‌ترین واحد اجرایی است که یک یا چند کانتینر را در خود جای می‌دهد. کانتینرهای داخل یک پاد منابع شبکه و ذخیره‌سازی مشترک دارند و به‌صورت یک واحد منطقی مدیریت می‌شوند. هر پاد یک آدرس IP یکتا دارد و کانتینرهای درون آن می‌توانند به‌راحتی با یکدیگر ارتباط برقرار کنند.</p>



<p><strong>کاربردهای Pod</strong></p>



<ul class="wp-block-list">
<li>اجرای چند کانتینر که باید با هم و همزمان کار کنند، مانند یک وب‌سرور و یک کانتینر لاگ‌گیری مرتبط</li>



<li>اجرای یک کانتینر ساده که نیازی به مقیاس‌پذیری ندارد</li>
</ul>



<h3 class="wp-block-heading" id="h-deployment">Deployment</h3>



<p><a href="https://hamravesh.com/blog/what-is-kubernetes-deployment" target="_blank" rel="noreferrer noopener">دیپلویمنت در کوبرنتیز</a> یکی از کنترلرهای اصلی است که برای مدیریت اجرای پادهای مشابه و به‌روزرسانی آن‌ها به‌صورت خودکار استفاده می‌شود. با Deployment می‌توان برنامه‌ها را مستقر، مقیاس‌دهی و نسخه‌های آن‌ها را به‌روزرسانی کرد یا در صورت نیاز به حالت قبلی بازگرداند.</p>



<p><strong>کاربردهای Deployment</strong></p>



<ul class="wp-block-list">
<li>اجرای برنامه‌هایی که نیاز به مقیاس‌پذیری دارند</li>



<li>مدیریت به‌روزرسانی تدریجی نسخه‌ها (Rolling Update) و امکان بازگشت (Rollback)</li>



<li>توزیع بار کاری بین چندین پاد مشابه برای افزایش دسترس‌پذیری</li>
</ul>



<h3 class="wp-block-heading" id="h-statefulset">StatefulSet</h3>



<p>StatefulSet برای مدیریت برنامه‌هایی طراحی شده است که نیاز به حالت پایدار و هویت یکتا برای هر Pod دارند. برخلاف دیپلویمنت، StatefulSet تضمین می‌کند که هر پاد یک شناسه منحصربه‌فرد داشته باشد و ترتیب ایجاد یا حذف آن‌ها حفظ شود.</p>



<p><strong><strong>کاربردهای </strong>StatefulSet</strong></p>



<ul class="wp-block-list">
<li>اجرای برنامه‌های stateful مانند پایگاه‌های داده (مثلاً MySQL یا PostgreSQL)</li>



<li>سرویس‌هایی که نیاز به شناسه و ترتیب خاص برای پادها دارند، مانند Zookeeper یا Cassandra</li>



<li>هنگامی که نیاز است داده‌های هر Pod پس از حذف یا بازسازی حفظ شود</li>
</ul>



<h3 class="wp-block-heading" id="h-daemonset">DaemonSet</h3>



<p><strong>DaemonSet</strong> نوعی Workload در کوبرنتیز است که تضمین می‌کند یک Pod روی همه یا گروه خاصی از نودها اجرا شود. این نوع ورک لود معمولاً برای وظایف سیستمی یا پس‌زمینه که باید روی تمام نودها فعال باشند، استفاده می‌شود.</p>



<p id="h-موارد-کاربرد-daemonset"><strong>کاربردهای DaemonSet</strong></p>



<ul class="wp-block-list">
<li>جمع‌آوری لاگ‌ها و متریک‌ها از تمام نودها</li>



<li>اجرای ابزارهای مانیتورینگ یا امنیتی روی همه نودها</li>



<li>نصب و مدیریت نرم‌افزارهایی که باید در تمام نودها اجرا شوند</li>
</ul>



<h3 class="wp-block-heading">Job</h3>



<p>Job نوعی Workload در کوبرنتیز است که برای اجرای وظایف موقت و تک‌مرحله‌ای کاربرد دارد. Job تضمین می‌کند که Pod مربوطه تا تکمیل موفقیت‌آمیز کار، اجرا شود.</p>



<p id="h-کاربردهای-معمول-job"><strong>کاربردهای Job</strong></p>



<ul class="wp-block-list">
<li>پردازش دسته‌ای داده‌ها (batch processing)</li>



<li>اجرای اسکریپت یا فرایندهای موقتی مثل بکاپ‌گیری</li>



<li>عملیات‌هایی که فقط یک‌بار و تا تکمیل شدن لازم است اجرا شوند</li>
</ul>



<h3 class="wp-block-heading">CronJob</h3>



<p><a href="https://hamravesh.com/blog/cronjob-kubernetes" target="_blank" rel="noreferrer noopener">CronJob در کوبرنتیز</a> نسخه زمان‌بندی‌شده Job است که مشابه cron در لینوکس امکان اجرای وظایف به صورت دوره‌ای و با زمان‌بندی قبلی را فراهم می‌کند. CronJob زمانی کاربرد دارد که نیاز باشد یک وظیفه به صورت منظم و خودکار تکرار شود.</p>



<p id="h-کاربردهای-معمول-cronjob"><strong>کاربردهای CronJob</strong></p>



<ul class="wp-block-list">
<li>اجرای وظایف دوره‌ای مانند ارسال گزارش‌های ایمیل</li>



<li>پاکسازی دوره‌ای داده‌ها یا maintenanceهای زمان‌بندی شده</li>



<li>هر وظیفه‌ای که باید در فواصل زمانی مشخص تکرار شود</li>
</ul>



<h2 class="wp-block-heading">کاربردهای Workload در کوبرنتیز</h2>



<p>Workloadها نقش کلیدی در اجرای برنامه‌ها و سرویس‌ها روی کوبرنتیز دارند و به مدیریت مؤثر برنامه‌ها در یک محیط مقیاس‌پذیر کمک می‌کنند. برخی از کاربردهای اصلی ورک لود عبارت‌اند از:</p>



<ol class="wp-block-list">
<li><strong>اجرای برنامه‌های وب و سرویس‌ها</strong><br>با استفاده از Deployment و ReplicaSet می‌توان برنامه‌های وب و سرویس‌ها را به‌صورت مداوم و مقیاس‌پذیر اجرا کرد. این Workloadها همچنین به‌روزرسانی نسخه‌ها و مقیاس‌دهی پویا را تسهیل می‌کنند.</li>



<li><strong>مدیریت وظایف موقت و یک‌باره</strong><br>Job برای اجرای وظایف موقت و تک‌مرحله‌ای مناسب است و CronJob همان وظایف را به صورت زمان‌بندی‌شده اجرا می‌کند. برای مثال، می‌توان از Job برای پردازش داده‌ها و از CronJob برای پاکسازی یا بکاپ‌گیری دوره‌ای استفاده کرد.</li>



<li><strong>اجرای برنامه‌های Stateful</strong><br>StatefulSet برای برنامه‌هایی مانند پایگاه‌های داده و سیستم‌های ذخیره‌سازی کاربرد دارد؛ زیرا ترتیب و هویت یکتا برای هر پاد را حفظ می‌کند.</li>



<li><strong>اجرای وظایف سیستمی و سرویس‌های پس‌زمینه</strong><br>DaemonSet برای اجرای ابزارهای مانیتورینگ، جمع‌آوری لاگ‌ها و وظایف امنیتی روی هر نود استفاده می‌شود و تضمین می‌کند که این پادها روی تمام نودهای هدف اجرا شوند.</li>



<li><strong>مدیریت بار کاری توزیع‌شده</strong><br>کوبرنتیز می‌تواند با استفاده از مقیاس‌دهی خودکار (Auto-Scaling) تعداد پادها را بر اساس میزان بار کاری و معیارهای تعریف‌شده افزایش یا کاهش دهد. این ویژگی بهره‌وری منابع را بهبود می‌بخشد و هزینه‌ها را کاهش می‌دهد.</li>



<li><strong>اجرای برنامه‌های مایکروسرویس و پشتیبانی از CI/CD</strong><br>با ترکیب Deployment برای مدیریت نسخه‌ها و مقیاس‌دهی، Service برای دسترسی و load balancing داخلی و Gateway یا Ingress برای مدیریت ترافیک ورودی، می‌توان برنامه‌های مایکروسرویس را به صورت مقیاس‌پذیر و قابل مدیریت اجرا کرد. کوبرنتیز همچنین با ابزارهای <a href="https://hamravesh.com/blog/what-is-ci-cd" type="link" id="https://hamravesh.com/blog/what-is-ci-cd" target="_blank" rel="noreferrer noopener">CI/CD</a> یکپارچه می‌شود تا فرایند توسعه، تست و انتشار نرم‌افزار به‌صورت خودکار انجام شود.</li>



<li><strong>بهبود دسترس‌پذیری و تاب‌آوری</strong><br>با توزیع بارکاری بین نودهای مختلف و استفاده از مکانیزم‌های بازسازی خودکار، کوبرنتیز به افزایش دسترس‌پذیری و تاب‌آوری برنامه‌ها کمک می‌کند.</li>
</ol>



<h2 class="wp-block-heading" id="h-مقایسه-کلی-انواع-workload-در-کوبرنتیز">مقایسه کلی انواع Workload در کوبرنتیز</h2>



<p>کوبرنتیز انواع مختلفی از Workloadها را ارائه می‌دهد که هرکدام برای سناریوهای خاص طراحی شده‌اند. در ادامه، ویژگی‌های کلیدی، کاربرد و نوع اجرای هر Workload خلاصه شده است:</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th><strong>Workload</strong></th><th><strong>هدف اصلی</strong></th><th><strong>تعداد Podها</strong></th><th><strong>حالت داده / هویت</strong></th><th><strong>مقیاس‌دهی</strong></th><th><strong>مثال‌های رایج</strong></th></tr></thead><tbody><tr><td><strong>Pod</strong></td><td>کوچک‌ترین واحد اجرایی</td><td>یک</td><td>وابسته به نوع پاد</td><td>دستی</td><td>اجرای یک کانتینر ساده</td></tr><tr><td><strong>Deployment</strong></td><td>مدیریت نسخه‌ها و مقیاس‌دهی</td><td>چند رپلیکا</td><td>Stateless</td><td>خودکار / دستی</td><td>برنامه‌های وب و سرویس‌های مقیاس‌پذیر</td></tr><tr><td><strong>StatefulSet</strong></td><td>مدیریت برنامه‌های Stateful</td><td>چند رپلیکا</td><td>Stateful</td><td>عمدتا دستی</td><td>دیتابیس‌ها، Zookeeper ،Cassandra</td></tr><tr><td><strong>DaemonSet</strong></td><td>هر نود یک پاد</td><td>هر نود هدف</td><td>وابسته به Workload</td><td>خودکار</td><td>مانیتورینگ و جمع‌آوری لاگ</td></tr><tr><td><strong>Job</strong></td><td>اجرای موقت تا پایان</td><td>۱ یا چند (موازی)</td><td>Stateless</td><td>خودکار</td><td>پردازش دسته‌ای و بکاپ‌گیری</td></tr><tr><td><strong>CronJob</strong></td><td>اجرای زمان‌بندی شده Job</td><td>۱ یا چند (موازی)</td><td>Stateless</td><td>خودکار</td><td>وظایف دوره‌ای و پاکسازی داده</td></tr></tbody></table></figure>



<h2 class="wp-block-heading" id="h-سخن-پایانی">سخن پایانی</h2>



<p>Workload در کوبرنتیز هسته اصلی اجرای برنامه‌ها روی کلاستر است و تعیین می‌کند که هر برنامه چگونه اجرا، مقیاس‌دهی و مدیریت شود. همان‌طور که دیدیم، انواع مختلفی از Workloadها وجود دارند که هرکدام برای سناریوهای مشخصی طراحی شده‌اند. انتخاب درست Workload تأثیر مستقیمی بر عملکرد، پایداری و مقیاس‌پذیری برنامه دارد. برای مثال، Deployment برای برنامه‌های Stateless و StatefulSet برای برنامه‌های دارای داده پایدار و Job یا CronJob برای وظایف موقت و زمان‌بندی‌شده مناسب هستند. در نهایت، درک دقیق مفهوم Workload در کوبرنتیز و شناخت تفاوت بین انواع آن، به شما کمک می‌کند تصمیم‌های بهتری در طراحی و اجرای برنامه‌ها بگیرید و از امکانات Kubernetes به‌صورت مؤثرتر استفاده کنید.</p>



<p>اگر قصد دارید از این مفاهیم در عمل استفاده کنید، پلتفرم‌‌‌های ابری می‌توانند این مسیر را ساده‌تر کنند. برای مثال <a href="https://hamravesh.com/darkube" target="_blank" rel="noreferrer noopener">پلتفرم ابری دارکوب</a> هم‌روش این امکان را فراهم می‌کند که تنها با یک داکرفایل، برنامه خود را بر بستر کوبرنتیز اجرا کنید. علاوه بر این <a href="https://hamravesh.com/managed-kubernetes" type="link" id="https://hamravesh.com/managed-kubernetes" target="_blank" rel="noreferrer noopener">کوبرنتیز مدیریت‌شده</a> هم‌روش به صورت اختصاصی (کلاستر ابری یا on-premises) به سازمان‌ها ارائه می‌شود. </p>



<p></p>
<p>The post <a href="https://hamravesh.com/blog/what-is-kubernetes-workloads/">آشنایی با Workload در کوبرنتیز؛ انواع و کاربردها</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://hamravesh.com/blog/what-is-kubernetes-workloads/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>خود ترمیمی کوبرنتیز چیست؟ بررسی مکانیزم Self-Healing در کوبرنتیز</title>
		<link>https://hamravesh.com/blog/what-is-kubernetes-self-healing/</link>
					<comments>https://hamravesh.com/blog/what-is-kubernetes-self-healing/#respond</comments>
		
		<dc:creator><![CDATA[ارسطو عباسی]]></dc:creator>
		<pubDate>Wed, 22 Apr 2026 12:30:10 +0000</pubDate>
				<category><![CDATA[مقالات]]></category>
		<category><![CDATA[کوبرنتیز]]></category>
		<guid isPermaLink="false">https://hamravesh.com/blog/?p=4110</guid>

					<description><![CDATA[<p>خود ترمیمی کوبرنتیز یا Self-Healing یکی از قابلیت‌های حیاتی این پلتفرم برای مدیریت کانتینرها است که به سرویس‌ها کمک می‌کند حتی در شرایط غیرمنتظره، پایدار و قابل اعتماد باقی بمانند. این ویژگی ترکیبی از هوشمندی و اتوماسیون است و بهبود کیفیت و دسترس‌پذیری سرویس‌ها و کاهش بار کاری تیم‌ها را به همراه دارد. در این [&#8230;]</p>
<p>The post <a href="https://hamravesh.com/blog/what-is-kubernetes-self-healing/">خود ترمیمی کوبرنتیز چیست؟ بررسی مکانیزم Self-Healing در کوبرنتیز</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>خود ترمیمی کوبرنتیز یا Self-Healing یکی از قابلیت‌های حیاتی این پلتفرم برای مدیریت کانتینرها است که به سرویس‌ها کمک می‌کند حتی در شرایط غیرمنتظره، پایدار و قابل اعتماد باقی بمانند. این ویژگی ترکیبی از هوشمندی و اتوماسیون است و بهبود کیفیت و دسترس‌پذیری سرویس‌ها و کاهش بار کاری تیم‌ها را به همراه دارد. در این مطلب نحوه عملکرد Self-Healing کوبرنتیز،‌ ابزارهای آن و مزایا و معایب را بررسی می‌کنیم.</p>



<h2 class="wp-block-heading" id="h-خود-ترمیمی-یا-self-healing-در-کوبرنتیز-چیست">خود ترمیمی یا Self-healing در کوبرنتیز چیست؟</h2>



<p>قابلیت خود ترمیمی در کوبرنتیز فرایندی است که به‌طور خودکار مشکلات پادها و کانتینرها را شناسایی و برطرف می‌کند و در صورت بروز مشکل در نود، پادها را روی نودهای سالم مجدداً اجرا می‌کند. این ویژگی باعث کاهش نیاز به مداخله انسانی و افزایش دسترس‌پذیری سرویس‌ها می‌شود. خودترمیمی در کوبرنتیز در سطح پاد اعمال می‌شود، اما با استفاده از مکانیزم‌هایی در سطح کانتینر (مانند راه‌اندازی مجدد کانتینر) و سطح نود (مانند زمان‌بندی مجدد پادها روی نودهای سالم) تکمیل می‌شود.</p>



<p><strong>عملکرد خود ترمیمی در سطوح مختلفی انجام می‌شود:</strong></p>



<ul class="wp-block-list">
<li><strong>سطح پاد:</strong>
<ul class="wp-block-list">
<li>در صورت پیکربندی Liveness Probe، وضعیت کانتینرها به‌صورت دوره‌ای بررسی می‌شود.</li>



<li>اگر کانتینر از کار بیفتد یا پاسخ ندهد، کوبرنتیز آن را دوباره راه‌اندازی می‌کند.</li>



<li>این مکانیزم اطمینان می‌دهد که <a href="https://hamravesh.com/blog/what-is-kubernetes-pod" target="_blank" rel="noreferrer noopener">پاد در کوبرنتیز</a> همیشه در وضعیت سالم باقی بماند.</li>
</ul>
</li>



<li><strong>سطح نود:</strong>
<ul class="wp-block-list">
<li>اگر یک نود از دسترس خارج شود، کنترلر نود، پادهای آن نود را روی نودهای سالم مجدداً زمان‌بندی (reschedule) و اجرا می‌کند.</li>



<li>این فرایند وضعیت مطلوب (Desired State) را برای کل کلاستر حفظ می‌کند.</li>
</ul>
</li>



<li><strong>سطح StatefulSet:</strong>
<ul class="wp-block-list">
<li>پادها با حفظ هویت و اتصال به داده‌های ماندگار (Persistent Storage) مجدداً اجرا می‌شوند.</li>



<li>این امکان را می‌دهد که سرویس‌ها حتی پس از کرش کردن یا ری‌استارت پادها، به حالت پایدار خود بازگردند.</li>
</ul>
</li>
</ul>



<h2 class="wp-block-heading" id="h-خود-ترمیمی-کوبرنتیز-چگونه-کار-می-کند">خود ترمیمی کوبرنتیز چگونه کار می‌کند؟</h2>



<p>قابلیت خود ترمیمی در کوبرنتیز با استفاده از <a href="https://hamravesh.com/blog/what-is-kubernetes-controller" target="_blank" rel="noreferrer noopener">کنترلرهای کوبرنتیز</a> و نظارت مداوم بر وضعیت پادها و نودها، سلامت سیستم را حفظ می‌کند. این ویژگی وضعیت فعلی سیستم را با وضعیت مطلوب تعریف‌شده مقایسه می‌کند و در صورت مشاهده ناهنجاری، اقدامات اصلاحی را به‌طور خودکار اجرا می‌کند.</p>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="570" src="https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-what-is-kubernetes-self-healing-2-1024x570.webp" alt="خودترمیمی کوبرنتیز چگونه کار می‌کند؟" class="wp-image-4968" srcset="https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-what-is-kubernetes-self-healing-2-1024x570.webp 1024w, https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-what-is-kubernetes-self-healing-2-300x167.webp 300w, https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-what-is-kubernetes-self-healing-2-768x427.webp 768w, https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-what-is-kubernetes-self-healing-2-120x67.webp 120w, https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-what-is-kubernetes-self-healing-2.webp 1201w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>فرایند خود ترمیمی کوبرنتیز به صورت مرحله‌ای اجرا می‌شود:</p>



<ul class="wp-block-list">
<li><strong>شناسایی مشکل:</strong> کنترلرها وضعیت پادها و نودها را بررسی می‌کنند تا مشکلات یا عدم تطابق با وضعیت مطلوب را تشخیص دهند.</li>



<li><strong>تصمیم‌گیری بر اساس وضعیت مطلوب:</strong> سیستم مشخص می‌کند چه اقداماتی برای بازگرداندن وضعیت پایدار لازم است.</li>



<li><strong>اجرای اقدامات اصلاحی:</strong> پادها یا نودهای مشکل‌دار راه‌اندازی مجدد یا جایگزین می‌شوند تا سرویس‌ها در وضعیت پایدار باقی بمانند.</li>
</ul>



<h2 class="wp-block-heading" id="h-ابزارهای-اصلی-خود-ترمیمی">ابزارهای اصلی خود ترمیمی</h2>



<p>برای اجرای قابلیت خود ترمیمی، کوبرنتیز از ابزارها و مکانیزم‌های مختلفی استفاده می‌کند که هر کدام نقش مشخصی در حفظ سلامت پادها و نودها دارند. مهم‌ترین ابزارهای خود ترمیمی عبارتند از:</p>



<ul class="wp-block-list">
<li><strong>Liveness Probe:</strong> بررسی وضعیت زنده بودن کانتینر و راه‌اندازی مجدد خودکار در صورت از کار افتادن</li>



<li><strong>Readiness Probe:</strong> تشخیص آماده بودن پاد برای دریافت ترافیک و حذف پادهای غیرفعال از مسیرهای ترافیک</li>



<li><strong>کنترلرها (Controllers):</strong> مدیریت وضعیت فعلی پادها و نودها و اجرای اقدامات اصلاحی خودکار بر اساس وضعیت مطلوب. به عنوان مثال، کنترلرها با استفاده از ReplicaSets تعداد مشخصی از پادها را حفظ و در صورت نیاز پادهای جدید ایجاد می‌کنند.</li>
</ul>



<h2 class="wp-block-heading" id="h-مزایای-خود-ترمیمی-در-کوبرنتیز">مزایای خود ترمیمی در کوبرنتیز</h2>



<p>قابلیت خود ترمیمی، مدیریت برنامه‌های کانتینری را قابل اعتمادتر و کارآمدتر می‌کند و مزایای زیر را به همراه دارد:</p>



<ul class="wp-block-list">
<li><strong>افزایش دسترس‌پذیری و پایداری:</strong> مشکلات پادها و کانتینرها به‌طور خودکار شناسایی و رفع می‌شوند، بنابراین برنامه‌ها با کمترین downtime در دسترس باقی می‌مانند.</li>



<li><strong>کاهش نیاز به دخالت انسانی:</strong> با خود ترمیمی، تیم‌های عملیات و مهندسی، کمتر درگیر رفع مشکلات جزئی یا پیش‌بینی‌نشده می‌شوند و در نتیجه می‌توانند تمرکز خود را روی توسعه و بهینه‌سازی نرم‌افزار بگذارند.</li>



<li><strong>سرعت بالا در رفع مشکلات:</strong> اقدامات اصلاحی به‌صورت خودکار و بلادرنگ انجام می‌شوند.</li>



<li><strong>مدیریت بهتر محیط‌های گذرا (Ephemeral Environments):</strong> محیط‌های کانتینری ماهیت موقتی دارند و ممکن است کانتینرها بارها و بارها حذف یا راه‌اندازی مجدد شوند. خودترمیمی کوبرنتیز تضمین می‌کند که حتی در صورت حذف یا راه‌اندازی مجدد مکرر پادها، پایداری سرویس حفظ شود.</li>
</ul>



<h2 class="wp-block-heading" id="h-معایب-خود-ترمیمی-در-کوبرنتیز">معایب خود ترمیمی در کوبرنتیز</h2>



<p>خود ترمیمی کوبرنتیز هم مانند هر فناوری دیگری، محدودیت‌هایی دارد که باید در نظر گرفته شوند:</p>



<ul class="wp-block-list">
<li><strong>نیاز به تعریف وضعیت مطلوب:</strong> خود ترمیمی بر اساس وضعیت مطلوب (Desired State) عمل می‌کند که باید توسط تیم مدیریت کوبرنتیز تعریف شود.</li>



<li><strong>محدودیت در لایه اپلیکیشن:</strong> خود ترمیمی عمدتاً در سطح پاد و کانتینر عمل می‌کند و شناسایی و رفع مشکلات زیرساختی یا سخت‌افزاری (مانند خرابی سرور یا شبکه) نیاز به ابزارهای اضافی دارند.</li>



<li><strong>نیاز به نظارت مداوم:</strong> تیم‌ها باید همچنان سیستم را زیر نظر داشته باشند تا از عملکرد صحیح خود ترمیمی اطمینان حاصل شود.</li>



<li><strong>پیچیدگی پیکربندی:</strong> تنظیم دقیق Liveness Probe ،Readiness Probe و ReplicaSet می‌تواند چالش‌برانگیز باشد و خطا در آن‌ها منجر به راه‌اندازی مجدد غیرضروری یا تشخیص اشتباه شود.</li>



<li><strong>ابزارهای مکمل برای زیرساخت:</strong> برای مدیریت خطاهای نود یا سخت‌افزار، نیازمند استفاده از ابزارهای نظارتی اضافی شامل پرومتئوس و گرافانا است.</li>
</ul>



<h2 class="wp-block-heading" id="h-سخن-پایانی">سخن پایانی</h2>



<p>قابلیت خود ترمیمی در کوبرنتیز یکی از ابزارهای کلیدی برای افزایش پایداری و دسترس‌پذیری برنامه‌ها است. با شناسایی خودکار مشکلات، مقایسه وضعیت فعلی با وضعیت مطلوب و اجرای اقدامات اصلاحی، سیستم می‌تواند بدون دخالت مستقیم انسان، پادها و کانتینرها را در حالت عملیاتی حفظ کند.</p>



<p>این ویژگی به تیم‌های فنی امکان می‌دهد زمان کمتری را صرف رفع مشکلات پیش‌بینی‌نشده کنند و تمرکز بیشتری روی توسعه و بهینه‌سازی نرم‌افزار داشته باشند. با این حال، استفاده مؤثر از خود ترمیمی نیازمند تعریف دقیق وضعیت مطلوب، پیکربندی صحیح ابزارها و نظارت مستمر است. همچنین، این قابلیت به تنهایی نمی‌تواند مشکلات زیرساختی را پوشش دهد و ممکن است نیاز به ابزارهای مکمل برای مدیریت نودها، شبکه و منابع سخت‌افزاری باشد.</p>



<p>در چنین شرایطی، استفاده از یک پلتفرم مدیریت کوبرنتیز می‌تواند پیچیدگی‌های مرتبط با پیاده‌سازی و نظارت بر Self-Healing را کاهش دهد. برای مثال، <a href="https://hamravesh.com/darkube" target="_blank" rel="noreferrer noopener">پلتفرم ابری دارکوب</a> تجربه زیرساخت مبتنی بر کوبرنتیز را به ساده‌ترین شکل ممکن فراهم می‌کند و به تیم‌ها امکان می‌دهد برنامه‌های خود را بر بستر کوبرنتیز اجرا کرده و اپلیکیشن‌های پرکاربرد را با تنظیمات دلخواه بسازند.</p>



<p>در نهایت، خودترمیمی یک گام مهم در خودکارسازی مدیریت زیرساخت و افزایش اعتمادپذیری سرویس‌ها است؛ به شرطی که مزایا و محدودیت‌های آن به‌درستی در نظر گرفته شوند.</p>
<p>The post <a href="https://hamravesh.com/blog/what-is-kubernetes-self-healing/">خود ترمیمی کوبرنتیز چیست؟ بررسی مکانیزم Self-Healing در کوبرنتیز</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://hamravesh.com/blog/what-is-kubernetes-self-healing/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>آشنایی با کنترلر کوبرنتیز؛ مقایسه با اپراتور کوبرنتیز</title>
		<link>https://hamravesh.com/blog/what-is-kubernetes-controller/</link>
					<comments>https://hamravesh.com/blog/what-is-kubernetes-controller/#respond</comments>
		
		<dc:creator><![CDATA[علی باقرزاده]]></dc:creator>
		<pubDate>Wed, 15 Apr 2026 12:30:00 +0000</pubDate>
				<category><![CDATA[مقالات]]></category>
		<category><![CDATA[کوبرنتیز]]></category>
		<guid isPermaLink="false">https://hamravesh.com/blog/?p=2935</guid>

					<description><![CDATA[<p>کنترلرها حلقه‌های بی‌پایانی از بررسی کلاستر کوبرنتیز هستند که در صورت مشاهده مشکلی، آن را حل می‌کنند. در این مطلب قصد داریم با انواع کنترلرها در کوبرنتیز آشنا شویم.</p>
<p>The post <a href="https://hamravesh.com/blog/what-is-kubernetes-controller/">آشنایی با کنترلر کوبرنتیز؛ مقایسه با اپراتور کوبرنتیز</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>کنترلر کوبرنتیز یکی از مفاهیم کلیدی در مدیریت کلاسترهاست که به شما کمک می‌کند وضعیت منابع و پادها همواره پایدار و مطابق با وضعیت مطلوب (Desired State) باقی بماند. با استفاده از کنترلرها، بسیاری از وظایف تکراری و مدیریتی به‌صورت خودکار انجام می‌شود و نیاز به دخالت دستی کاهش می‌یابد. علاوه بر کنترلرها، اپراتور کوبرنتیز لایه‌ای پیشرفته‌تر فراهم می‌کند تا مدیریت اپلیکیشن‌های پیچیده و stateful را نیز خودکار کرده و فرایندهایی مانند نصب، به‌روزرسانی، مقیاس‌دهی و بازیابی را بهبود بخشد. در این مطلب بررسی می‌‌کنیم که کنترلر کوبرنتیز چیست، چگونه کار می‌کند و چه تفاوتی با اپراتور کوبرنتیز دارد. </p>



<h2 class="wp-block-heading">کنترلر کوبرنتیز چیست؟</h2>



<p>کنترلرها اجزای بنیادی کوبرنتیز هستند که برای مدیریت و نگهداری وضعیت منابع طراحی شده‌اند. این اجزا با بررسی مداوم وضعیت فعلی منابع و مقایسه آن با وضعیت مطلوب (Desired State)، اطمینان حاصل می‌کنند که کلاستر همیشه در شرایط پایدار باقی بماند. به عبارت دیگر، کنترلرها به صورت حلقه‌های کنترلی (Control Loops) عمل می‌کنند تا به صورت خودکار وضعیت منابع را اصلاح و هماهنگ کنند.</p>



<h2 class="wp-block-heading">کنترلر کوبرنتیز چگونه کار می‌کنند؟</h2>



<p>عملکرد کنترلرها را می‌توان با مثال یک ترموستات ساده توضیح داد. فرض کنید ترموستات برای حفظ دمای اتاق روی یک مقدار مشخص تنظیم شده است. در این حالت دمای تنظیم‌شده همان وضعیت مطلوب و دمای فعلی اتاق همان وضعیت فعلی است. ترموستات به‌صورت مداوم دما را بررسی می‌کند و اگر دما از مقدار مطلوب کمتر باشد، سیستم گرمایشی را روشن و در صورت بیشتر بودن خاموش می‌کند.</p>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="669" src="https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-what-is-kubernetes-controller-02-1024x669.webp" alt="کنترلر کوبرنتیز چگونه کار می‌‌کند؟ ارتباط کنترلر کوبرنتیز با آبجکت‌ها و منابع" class="wp-image-4752" srcset="https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-what-is-kubernetes-controller-02-1024x669.webp 1024w, https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-what-is-kubernetes-controller-02-300x196.webp 300w, https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-what-is-kubernetes-controller-02-768x502.webp 768w, https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-what-is-kubernetes-controller-02-120x78.webp 120w, https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-what-is-kubernetes-controller-02.webp 1201w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>کنترلرهای کوبرنتیز نیز دقیقاً به همین شکل عمل می‌کنند؛ آن‌ها وضعیت منابع را از طریق Kubernetes API پایش کرده و هرگونه اختلاف با وضعیت مطلوب را اصلاح می‌کنند. این حلقه کنترلی به صورت پیوسته اجرا می‌شود تا منابع و پادها همیشه در وضعیت پایدار باقی بمانند.</p>



<h2 class="wp-block-heading">کنترلر کوبرنتیز چه منابعی را مدیریت می‌کند؟</h2>



<p>در کوبرنتیز، هر کنترلر مسئول مدیریت یک نوع مشخص از منابع است. این منابع به‌صورت آبجکت‌هایی در Kubernetes API تعریف می‌شوند و کنترلرها وضعیت آن‌ها را به‌صورت مداوم بررسی و اصلاح می‌کنند.</p>



<p>برای مثال، برخی کنترلرها مانند ReplicaSet مسئول حفظ تعداد مشخصی <a href="https://hamravesh.com/blog/what-is-kubernetes-pod" target="_blank" rel="noreferrer noopener">پاد در کوبرنتیز</a> هستند، در حالی که کنترلرهایی مانند Job وظیفه اجرای تسک‌های مشخص را برعهده دارند. هر کنترلر تنها روی مجموعه‌ای از منابع مشخص تمرکز دارد و تلاش می‌کند وضعیت آن‌ها را با وضعیت مطلوب تعریف‌شده توسط کاربر همگام نگه دارد.</p>



<p>نکته مهم این است که در کوبرنتیز، این منابع از طریق API تعریف و ذخیره می‌شوند و کنترلرها نیز از همین طریق وضعیت آن‌ها را مشاهده کرده (Watch) و در صورت نیاز تغییرات لازم را اعمال می‌کنند (Update). به همین دلیل، تعامل بین کنترلر کوبرنتیز و Kubernetes API نقش کلیدی در مدیریت کلاستر دارد.</p>



<figure class="wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex">
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="573" data-id="4753" src="https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-what-is-kubernetes-controller-03-1024x573.webp" alt="انواع کنترلرهای کوبرنتیز شامل ReplicaSet و Deployment و StatefulSet و Job و CronJob و DaemonSet" class="wp-image-4753" srcset="https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-what-is-kubernetes-controller-03-1024x573.webp 1024w, https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-what-is-kubernetes-controller-03-300x168.webp 300w, https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-what-is-kubernetes-controller-03-768x430.webp 768w, https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-what-is-kubernetes-controller-03-120x67.webp 120w, https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-what-is-kubernetes-controller-03.webp 1201w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</figure>



<h2 class="wp-block-heading" id="h-انواع-کنترلر-کوبرنتیز">انواع کنترلر کوبرنتیز</h2>



<p>در <a href="https://hamravesh.com/blog/what-is-kubernetes" target="_blank" rel="noreferrer noopener">کوبرنتیز</a>، کنترلرهای مختلفی برای مدیریت سناریوهای متفاوت وجود دارند. هر یک از این کنترلرها برای مدیریت نوع خاصی از workload طراحی شده‌اند. نکته مهم این است که این کنترلرها معمولاً به‌صورت مستقل از یکدیگر عمل نمی‌کنند، بلکه در بسیاری از موارد به‌صورت زنجیره‌ای با هم در ارتباط هستند. برای مثال، زمانی که یک Deployment ایجاد می‌شود، این کنترلر به‌طور مستقیم پادها را مدیریت نمی‌کند، بلکه یک ReplicaSet ایجاد می‌کند و این ReplicaSet است که مسئول ایجاد و نگهداری پادها است. این ارتباط بین کنترلرها باعث می‌شود مدیریت وضعیت مطلوب سیستم به‌صورت دقیق‌تر و قابل‌کنترل‌تری انجام شود.</p>



<p></p>



<p>در ادامه با مهم‌ترین انواع کنترلر کوبرنتیز آشنا می‌شویم.</p>



<h3 class="wp-block-heading">ReplicaSet</h3>



<p>کنترلر ReplicaSet مسئول اطمینان از اجرای تعداد مشخصی از پادهای یکسان در هر لحظه است و نقش مهمی در حفظ پایداری اپلیکیشن‌ها در کوبرنتیز دارد. این کنترلر به‌صورت مداوم وضعیت پادها را بررسی می‌کند و اگر تعداد پادهای در حال اجرا کمتر از مقدار تعریف‌شده باشد، پادهای جدیدی ایجاد می‌کند. در مقابل، اگر تعداد پادها بیشتر از مقدار موردنظر باشد، برخی از آن‌ها را حذف می‌کند.</p>



<h3 class="wp-block-heading">Deployment</h3>



<p>کنترلر <a href="https://hamravesh.com/blog/what-is-kubernetes-deployment" target="_blank" rel="noreferrer noopener">دیپلویمنت در کوبرنتیز</a> یکی از رایج‌ترین راهکارها برای استقرار اپلیکیشن‌ها در کوبرنتیز است. این کنترلر مدیریت ReplicaSetها را برعهده دارد و امکان به‌روزرسانی تدریجی (rolling update) و بازگشت به نسخه‌های قبلی (rollback) را فراهم می‌کند. به بیان دیگر، Deployment یک لایه بالاتر از ReplicaSet است و فرایند به‌روزرسانی و مدیریت نسخه‌های مختلف اپلیکیشن را ساده‌تر می‌کند.</p>



<h3 class="wp-block-heading">StatefulSet</h3>



<p>کنترلر StatefulSet برای مدیریت اپلیکیشن‌هایی استفاده می‌شود که به هویت پایدار و ذخیره‌سازی دائمی نیاز دارند (برای مثال سرویس‌های داده‌های احراز هویت کاربران). در این نوع از workloadها، هر پاد دارای یک شناسه منحصربه‌فرد است و این شناسه حتی در صورت جابه‌جایی یا راه‌اندازی مجدد پاد نیز حفظ می‌شود. برخلاف سایر workloadها، این پادها قابل جایگزینی ساده با یکدیگر نیستند و هر کدام هویت مستقل خود را دارند. این ویژگی باعث می‌شود StatefulSet گزینه مناسبی برای اجرای سیستم‌هایی باشد که به ذخیره‌سازی پایدار وابسته هستند.</p>



<p>زمانی که از دیتابیس‌های PostgreSQL ،MySQL ،MongoDB ،Cassandra و به‌صورت کلی از هر حالت Persistent Storage استفاده می‌شود، StatefulSets راهکار مناسبی است.</p>



<h3 class="wp-block-heading">Job</h3>



<p>کنترلر Job برای اجرای تسک‌های کوتاه‌مدت طراحی شده است. این کنترلر یک یا چند پاد ایجاد می‌کند و تا زمانی که این پادها با موفقیت کار خود را به پایان برسانند، آن‌ها را مدیریت می‌کند. پس از تکمیل موفقیت‌آمیز تسک، Job، دیگر پاد جدیدی ایجاد نمی‌کند.</p>



<h3 class="wp-block-heading">CronJob</h3>



<p>کنترلر <a href="https://hamravesh.com/blog/cronjob-kubernetes/" target="_blank" rel="noreferrer noopener">CronJob</a> برای اجرای Jobها در زمان‌بندی‌های مشخص استفاده می‌شود. کاربران می‌توانند با استفاده از الگوی زمان‌بندی (cron)، مشخص کنند که یک Job در چه زمان‌هایی اجرا شود و CronJob به‌صورت خودکار در همان زمان‌ها Jobهای موردنظر را ایجاد می‌کند.</p>



<h3 class="wp-block-heading">DaemonSet</h3>



<p>کنترلر DaemonSet اطمینان حاصل می‌کند که یک نسخه از یک پاد مشخص روی همه (یا برخی) از نودهای کلاستر اجرا شود. با اضافه شدن نودهای جدید به کلاستر، پادهای مربوط به DaemonSet نیز به‌صورت خودکار روی آن‌ها اجرا می‌شوند و در صورت حذف نود، این پادها نیز حذف می‌شوند.</p>



<h2 class="wp-block-heading">تفاوت کنترلر کوبرنتیز و اپراتور کوبرنتیز</h2>



<p>در کوبرنتیز، کنترلرها و اپراتورها هر دو مسئول مدیریت وضعیت منابع هستند، اما از نظر دامنه و سطح پیچیدگی تفاوت دارند.</p>



<ul class="wp-block-list">
<li><strong>کنترلر کوبرنتیز</strong>: وظیفه اصلی آن حفظ وضعیت مطلوب (Desired State) برای یک یا چند نوع مشخص از منابع است. این کنترلرها معمولاً برای workloadهای استاندارد و عمومی مثل پادها، ReplicaSetها، Deploymentها و Jobها استفاده می‌شوند. همان‌طور که در بخش قبل توضیح دادیم، کنترلرها از حلقه‌های کنترلی (Control Loops) استفاده می‌کنند تا وضعیت فعلی را با وضعیت مطلوب مقایسه کرده و در صورت نیاز اصلاح کنند.</li>



<li><strong>اپراتور کوبرنتیز</strong>: اپراتورها لایه‌ای بالاتر از کنترلرها هستند و برای مدیریت <a href="https://hamravesh.com/blog/stateful-vs-stateless" target="_blank" rel="noreferrer noopener">اپلیکیشن‌های stateful</a> یا پیچیده طراحی شده‌اند. یک اپراتور علاوه بر حفظ وضعیت مطلوب منابع، می‌تواند منطق اختصاصی برنامه را نیز پیاده‌سازی کند؛ مثلاً مدیریت نصب، پیکربندی، به‌روزرسانی، بکاپ و بازیابی یک دیتابیس. به‌عبارتی اپراتورها کنترلرهایی هستند که با دانش برنامه (application-specific logic) ترکیب شده‌اند تا مدیریت خودکار اپلیکیشن‌های پیچیده را ممکن سازند.</li>
</ul>



<p>به طور خلاصه کنترلرها برای منابع استاندارد و عمومی هستند و فقط وضعیت کلاستر را پایش و اصلاح می‌کنند. اپراتورها از کنترلرها استفاده می‌کنند اما شامل منطق اختصاصی اپلیکیشن هم هستند و قادرند عملیات پیچیده و خودکار اپلیکیشن را مدیریت کنند.</p>



<h3 class="wp-block-heading" id="h-مزایای-کنترلر-کوبرنتیز">مزایای کنترلر کوبرنتیز</h3>



<p>کنترلرهای کوبرنتیز از مزایای زیر برخوردارند:</p>



<ul class="wp-block-list">
<li><strong>پایداری وضعیت منابع:</strong> کنترلرها تضمین می‌کنند که وضعیت فعلی منابع همواره با وضعیت مطلوب (Desired State) هماهنگ باشد.</li>



<li><strong>خودکارسازی وظایف ساده و تکراری:</strong> کنترلرها وظایف مدیریت تعداد پادها، راه‌اندازی مجدد آنها و نگهداری وضعیت را بدون دخالت دستی انجام می‌دهند.</li>



<li><strong>حلقه کنترل مستمر:</strong> کنترلرها به صورت مداوم منابع را پایش می‌کنند و در صورت اختلاف با وضعیت مطلوب، تغییرات لازم را اعمال می‌کنند.</li>
</ul>



<h3 class="wp-block-heading" id="h-مزایای-اپراتور-کوبرنتیز">مزایای اپراتور کوبرنتیز</h3>



<p id="h-مزایای-اپراتور-کوبرنتیز-شامل-موارد-زیر-است">مزایای اپراتور کوبرنتیز شامل موارد زیر است:</p>



<ul class="wp-block-list">
<li><strong>مدیریت خودکار اپلیکیشن‌های پیچیده:</strong> اپراتورها قادرند علاوه بر حفظ وضعیت مطلوب منابع، منطق اختصاصی برنامه‌ها را نیز مدیریت کنند.</li>



<li><strong>خودکارسازی عملیات پیشرفته:</strong> نصب، به‌روزرسانی، مقیاس‌دهی، پشتیبان‌گیری و بازیابی اپلیکیشن‌ها توسط اپراتور کوبرنتیز به صورت خودکار انجام می‌شود.</li>



<li>پ<strong>شتیبانی از اپلیکیشن‌های stateful:</strong> اپراتورها برای اپلیکیشن‌هایی که به ذخیره‌سازی پایدار و هویت ثابت نیاز دارند، گزینه مناسب هستند.</li>
</ul>



<h2 class="wp-block-heading" id="h-در-پایان">در پایان</h2>



<p>کنترلرها بخش اصلی کوبرنتیز هستند که به‌صورت مداوم وضعیت منابع را پایش می‌کنند و با اعمال تغییرات لازم، آن‌ها را با وضعیت مطلوب هماهنگ نگه می‌دارند. این کار باعث پایداری پادها و کاهش دخالت دستی می‌شود. اپراتورها لایه‌ای بالاتر هستند و علاوه بر مدیریت منابع، منطق اپلیکیشن‌های پیچیده و stateful را خودکار می‌کنند؛ مانند فرایندهای نصب، مقیاس‌دهی و بازیابی. درک کنترلرها و نقش اپراتورها برای مدیریت مؤثر کلاستر و استفاده بهینه از منابع ضروری است. </p>



<p><a href="https://hamravesh.com/darkube" target="_blank" rel="noreferrer noopener">پلتفرم ابری دارکوب</a> هم‌روش تجربه زیرساختی مبتنی بر کوبرنتیز را به ساده‌ترین شکل ممکن در اختیارتان قرار می‌دهد. با کمک دارکوب می‌توانید به سرعت برنامه‌های خود را بر بستر کوبرنتیز اجرا کنید و اپلیکیشن‌های پرکاربرد را با تنظیمانت دلخواه بسازید.</p>



<p></p>



<p></p>



<p></p>



<p></p>
<p>The post <a href="https://hamravesh.com/blog/what-is-kubernetes-controller/">آشنایی با کنترلر کوبرنتیز؛ مقایسه با اپراتور کوبرنتیز</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://hamravesh.com/blog/what-is-kubernetes-controller/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>آشنایی با Deployment در کوبرنتیز؛ ابزار مدیریت پادها و ReplicaSetها</title>
		<link>https://hamravesh.com/blog/what-is-kubernetes-deployment/</link>
					<comments>https://hamravesh.com/blog/what-is-kubernetes-deployment/#respond</comments>
		
		<dc:creator><![CDATA[ارسطو عباسی]]></dc:creator>
		<pubDate>Wed, 01 Apr 2026 12:30:00 +0000</pubDate>
				<category><![CDATA[مقالات]]></category>
		<category><![CDATA[کوبرنتیز]]></category>
		<guid isPermaLink="false">https://hamravesh.com/blog/?p=1681</guid>

					<description><![CDATA[<p>دیپلویمنت در کوبرنتیز ابزاری است که مدیریت کانتینرها و پادها را ساده و خودکار می‌کند. با استفاده از آن، اجرای پایدار و مقیاس‌پذیر اپلیکیشن‌های کانتینرسازی‌شده امکان‌پذیر می‌شود، تغییرات بدون توقف سرویس اعمال شده و منابع کلاستر به شکل بهینه مورد استفاده قرار می‌گیرند. در این مقاله با کاربردها، مزایا و مراحل عملیاتی Kubernetes Deployment آشنا [&#8230;]</p>
<p>The post <a href="https://hamravesh.com/blog/what-is-kubernetes-deployment/">آشنایی با Deployment در کوبرنتیز؛ ابزار مدیریت پادها و ReplicaSetها</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>دیپلویمنت در کوبرنتیز ابزاری است که مدیریت کانتینرها و پادها را ساده و خودکار می‌کند. با استفاده از آن، اجرای پایدار و مقیاس‌پذیر اپلیکیشن‌های کانتینرسازی‌شده امکان‌پذیر می‌شود، تغییرات بدون توقف سرویس اعمال شده و منابع کلاستر به شکل بهینه مورد استفاده قرار می‌گیرند. در این مقاله با کاربردها، مزایا و مراحل عملیاتی Kubernetes Deployment آشنا می‌شوید تا مدیریت اپلیکیشن‌ها در کلاستر کوبرنتیز به شکلی مطمئن و کارآمد انجام شود.</p>



<h2 class="wp-block-heading" id="h-kubernetes-deployment-چیست">Kubernetes Deployment چیست؟</h2>



<p>Kubernetes Deployment یکی از ابزارهای مدیریتی در کوبرنتیز است که فرآیند ایجاد و مدیریت ReplicaSetها را بر عهده دارد. ReplicaSetها نیز مسئول ایجاد و نگهداری پادها هستند. به این ترتیب Deployment به صورت غیرمستقیم وضعیت پادها را کنترل کرده و تضمین می‌کند اپلیکیشن‌ها همیشه در وضعیت مطلوب اجرا شوند. با کمک Deployment می‌توان تغییرات را به آرامی و بدون اختلال در سرویس اعمال کرد، پادهای خراب یا قدیمی را جایگزین کرد و در صورت نیاز به سرعت به آخرین نسخه پایدار بازگشت. این قابلیت باعث افزایش پایداری، دسترس‌پذیری و مقیاس‌پذیری سیستم می‌شود و نیاز به اجرای فرایندهای دستی را کاهش می‌دهد.</p>



<h2 class="wp-block-heading" id="h-چرا-به-دیپلویمنت-در-کوبرنتیز-نیاز-داریم">چرا به دیپلویمنت در کوبرنتیز نیاز داریم؟</h2>



<p>یکی از اهداف اصلی استفاده از Deployment، مدیریت Rolloutها است؛ فرایندی که در آن تغییرات کلاستر بدون توقف سرویس اعمال می‌شوند و پادهای قدیمی به‌صورت مرحله‌ای جایگزین می‌شوند. این روش باعث افزایش مقیاس‌پذیری و دسترس‌پذیری اپلیکیشن‌ها می‌شود.</p>



<p>Deployment در چند سناریوی کلیدی کاربرد دارد:</p>



<ul class="wp-block-list">
<li><strong>ایجاد خودکار پادها و ReplicaSetها:</strong> با استفاده از فایل‌های YAML که پیکربندی وضعیت مطلوب را مشخص می‌کنند، کوبرنتیز می‌تواند پادها و ReplicaSetهای جدید ایجاد کند.</li>



<li><strong>تعیین وضعیت مطلوب پادها:</strong> فایل YAML به شما اجازه می‌دهد تعریف کاملی از وضعیت ایده‌آل برای پادها و ReplicaSetها داشته باشید تا کوبرنتیز بر اساس آن عمل کند.</li>



<li><strong>بازگشت سریع به نسخه پایدار (Rollback):</strong> اگر وضعیت کلاستر ناپایدار شود، Deployment تاریخچه‌ای از نسخه‌های قبلی را نگه می‌دارد تا بتوان به راحتی به آخرین وضعیت پایدار بازگشت.</li>



<li><strong>مقیاس‌گذاری پادها (Scaling):</strong> زمانی که اپلیکیشن به منابع بیشتری نیاز داشته باشد، می‌توان تعداد پادهای تعریف‌شده در Deployment را افزایش داد. Deployment با به‌روزرسانی مقدار replicas، از طریق ReplicaSet، پادهای جدید ایجاد می‌کند تا تعداد پادهای در حال اجرا، با وضعیت مطلوب تعریف‌شده هماهنگ باقی بماند. این فرایند می‌تواند به صورت دستی انجام شود یا با استفاده از ابزارهایی مانند Horizontal Pod Autoscaler (به اختصار HPA) به شکل خودکار مدیریت شود.</li>
</ul>



<h2 class="wp-block-heading" id="h-اجزا-و-کامپوننت-های-دیپلویمنت-در-کوبرنتیز">اجزا و کامپوننت‌های دیپلویمنت در کوبرنتیز</h2>



<p>قبل از ایجاد یک Deployment، شناخت اجزا و کامپوننت‌های آن ضروری است. هر جزء نقش مشخصی در مدیریت پادها، ReplicaSetها و وضعیت کلاستر دارد و همکاری این اجزا تضمین می‌کند که اپلیکیشن‌ها همیشه در وضعیت مطلوب اجرا شوند.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="673" src="https://hamravesh.com/blog/wp-content/uploads/2026/03/Hamravesh-what-is-kubernetes-deployment-02-1024x673.webp" alt="دیپلویمنت در کوبرنتیز" class="wp-image-4693" srcset="https://hamravesh.com/blog/wp-content/uploads/2026/03/Hamravesh-what-is-kubernetes-deployment-02-1024x673.webp 1024w, https://hamravesh.com/blog/wp-content/uploads/2026/03/Hamravesh-what-is-kubernetes-deployment-02-300x197.webp 300w, https://hamravesh.com/blog/wp-content/uploads/2026/03/Hamravesh-what-is-kubernetes-deployment-02-768x505.webp 768w, https://hamravesh.com/blog/wp-content/uploads/2026/03/Hamravesh-what-is-kubernetes-deployment-02-120x79.webp 120w, https://hamravesh.com/blog/wp-content/uploads/2026/03/Hamravesh-what-is-kubernetes-deployment-02.webp 1201w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>اجزای اصلی Kubernetes Deployment شامل موارد زیر هستند:</p>



<ul class="wp-block-list">
<li><strong>فایل YAML:</strong> فایل YAML فرمت متداول برای تعریف منابع در کوبرنتیز است و در آن می‌توان پیکربندی Deployment، تعداد پادها، مشخصات کانتینرها و سایر تنظیمات اجرای اپلیکیشن را مشخص کرد.</li>



<li><strong>پاد (Pod):</strong> کوچک‌ترین واحد اجرایی در کوبرنتیز است که شامل یک یا چند کانتینر، پیکربندی‌ها و محیط‌های اجرای اپلیکیشن می‌شود. پادها پایه‌ای‌ترین بخش اجرای Deployment هستند و مدیریت صحیح آن‌ها برای عملکرد مطلوب سیستم ضروری است. برای مطالعه بیشتر در مورد پاد می‌توانید مقاله «<a href="https://hamravesh.com/blog/what-is-kubernetes-pod/" target="_blank" rel="noreferrer noopener"><strong>پاد در کوبرنتیز</strong></a>» را مطالعه کنید.</li>



<li><strong>ReplicaSet:</strong> گروهی از پادهای همسان است که تضمین می‌کند تعداد پادهای در حال اجرا مطابق با تعریف فایل YAML باشد. اگر یک پاد با مشکل مواجه شود، ReplicaSet مسئول ایجاد پاد جایگزین است.</li>



<li><strong>kube-scheduler:</strong> این کامپوننت بخشی از Control Plane است و تصمیم می‌گیرد که پادها و ReplicaSetها روی کدام نودهای کارگر (Worker Nodes) اجرا شوند.</li>



<li><strong>kube-controller-manager:</strong> مجموعه‌ای از کنترلرهای مختلف را اجرا می‌کند که وظیفه آن‌ها تطبیق وضعیت فعلی کلاستر با وضعیت مطلوب تعریف شده در YAML است. این کنترلرها ایجاد، حذف یا به‌روزرسانی منابعی مانند ReplicaSetها و پادها را مدیریت می‌کنند.</li>
</ul>



<h2 class="wp-block-heading" id="h-مزایا-استفاده-از-دیپلویمنت-در-کوبرنتیز">مزایا استفاده از دیپلویمنت در کوبرنتیز</h2>



<p>با استفاده از کوبرنتیز دیپلویمنت، می‌توانید پایداری (Stability) و نرخ در دسترس بودن (Availability) کانتینرها را افزایش دهید. برای مثال، اگر یک نود در کلاستر با مشکل مواجه شود، Deployment با کمک اجزای کنترلر و ReplicaSet به‌طور خودکار یک پاد جایگزین ایجاد می‌کند. این فرایند تماماً خودکار انجام می‌شود و نیاز به مداخله دستی را حذف می‌کند.</p>



<p>اگر پادها بدون استفاده از کنترلرهایی مانند Deployment ،ReplicaSet یا StatefulSet ایجاد شوند، به آن‌ها Naked Pod گفته می‌شود. در این حالت اگر پاد با مشکل مواجه شود، کوبرنتیز به صورت خودکار نمونه جایگزین ایجاد نمی‌کند.</p>



<p>اصلی‌ترین مزایای دیپلویمنت در کوبرنتیز عبارتند از:</p>



<ul class="wp-block-list">
<li><strong>خودکارسازی دیپلوی، بروزرسانی و مقیاس‌دهی:</strong> Deployment فرایند ایجاد و مدیریت پادها و ReplicaSetها را به صورت خودکار انجام می‌دهد.</li>



<li><strong>افزایش پایداری و کاهش خطاها:</strong> مدیریت خودکار پادها باعث کاهش خطاهای انسانی و حفظ عملکرد مطلوب سیستم می‌شود.</li>



<li><strong>کاهش نرخ Downtime:</strong> با جایگزینی مرحله‌ای پادها و Rollout هوشمند، اپلیکیشن‌ها همیشه در دسترس باقی می‌مانند.</li>



<li><strong>استفاده بهینه از منابع:</strong> Kubernetes Deployment منابع کلاستر را به شکل هوشمند مدیریت می‌کند و از اضافه‌کاری یا کمبود منابع جلوگیری می‌کند.</li>
</ul>



<h2 class="wp-block-heading" id="h-استراتژی-های-مختلف-دیپلویمنت-در-کوبرنتیز">استراتژی‌های مختلف دیپلویمنت در کوبرنتیز</h2>



<p>کوبرنتیز دیپلویمنت چند استراتژی پیاده‌سازی دارد که هر کدام برای شرایط و اهداف خاصی طراحی شده‌اند. انتخاب مناسب‌ترین استراتژی بستگی به نیازمندی‌های کسب‌وکار، اهداف اپلیکیشن و محدودیت‌های منابع دارد. با آشنایی کامل با این استراتژی‌ها، می‌توانید تغییرات در کلاستر را به شکل بهینه، امن و بدون اختلال در سرویس اعمال کنید.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="668" src="https://hamravesh.com/blog/wp-content/uploads/2026/03/Hamravesh-what-is-kubernetes-deployment-03-1024x668.webp" alt="استراتژی‌های دیپلویمنت در کوبرنتیز - مقایسه Rolling Update  و Recreate" class="wp-image-4694" srcset="https://hamravesh.com/blog/wp-content/uploads/2026/03/Hamravesh-what-is-kubernetes-deployment-03-1024x668.webp 1024w, https://hamravesh.com/blog/wp-content/uploads/2026/03/Hamravesh-what-is-kubernetes-deployment-03-300x196.webp 300w, https://hamravesh.com/blog/wp-content/uploads/2026/03/Hamravesh-what-is-kubernetes-deployment-03-768x501.webp 768w, https://hamravesh.com/blog/wp-content/uploads/2026/03/Hamravesh-what-is-kubernetes-deployment-03-120x78.webp 120w, https://hamravesh.com/blog/wp-content/uploads/2026/03/Hamravesh-what-is-kubernetes-deployment-03.webp 1201w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>دو استراتژی اصلی برای دیپلویمنت در کوبرنتیز وجود دارد.</p>



<p><strong>Rolling Update:</strong> در این استراتژی، پادهای جدید به‌صورت تدریجی ایجاد شده و به‌مرور جایگزین پادهای قدیمی می‌شوند. به این ترتیب نسخه جدید اپلیکیشن بدون توقف کامل سرویس منتشر می‌شود و همواره تعدادی از پادهای سالم در حال اجرا باقی می‌مانند. Rolling Update رایج‌ترین استراتژی برای محیط‌های Production است.</p>



<p><strong>Recreate:</strong> در این روش، ابتدا تمام پادهای نسخه قبلی حذف می‌شوند و سپس پادهای مربوط به نسخه جدید ایجاد می‌شوند. این کار باعث ایجاد Downtime می‌شود، به همین دلیل معمولاً برای محیط‌های Production توصیه نمی‌شود و بیشتر در محیط‌های توسعه یا زمانی استفاده می‌شود که امکان اجرای همزمان دو نسخه از اپلیکیشن وجود نداشته باشد.</p>



<p>علاوه بر استراتژی‌های رسمی Deployment، روش‌های پیشرفته‌ای مانند <strong>Canary ،A/B Testing و Blue/Green</strong> وجود دارند که برای کنترل دقیق انتشار نسخه جدید در محیط‌های حساس یا با حجم بالای کاربران استفاده می‌شوند. این روش‌ها معمولاً با کمک Service، Ingress یا Service Mesh پیاده‌سازی می‌شوند و فراتر از قابلیت‌های داخلی Deployment هستند.</p>



<h2 class="wp-block-heading" id="h-ایجاد-و-پیاده-سازی-دیپلویمنت-در-کوبرنتیز-با-yaml-و-kubectl"><strong>ایجاد و پیاده‌سازی دیپلویمنت در کوبرنتیز با YAML و kubectl</strong></h2>



<p>در این بخش قصد داریم با شیوه ایجاد Kubernetes Deployment آشنا شویم. برای انجام اینکار از دستور <code>kubectl</code> در محیط CLI استفاده می‌کنیم. البته برای انجام این‌ کار نیاز است که ابتدا از نصب بودن <code>Kubectl</code> و <code>minikube</code> روی سیستم‌عامل‌تان مطمئن باشید.</p>



<h3 class="wp-block-heading" id="h-۱-ایجاد-دایرکتوری-و-فایل-yaml"><strong>۱- ایجاد دایرکتوری و فایل YAML</strong></h3>



<p>یک دایرکتوری جدید بسازید و فایل YAML خود را ایجاد کنید. برای مثال: nginx-deployment.yaml. این فایل شامل پیکربندی‌های اولیه مانند تعداد پادها، کانتینرها، ایمیج‌‌هاو پورت‌ها است:</p>



<pre class="wp-block-code"><code>apiVersion: apps/v1
kind: Deployment

metadata:
  name: nginx-deployment
  labels:
    app: nginx

spec:
  replicas: 4
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:latest # name of image deployed to DockerHub
        ports:
        - containerPort: 80</code></pre>



<p>این فایل حاوی پیکربندی‌های اولیه دیپلویمنت در کوبرنتیز بوده و به عنوان اصلی‌ترین فایل دیپلویمنت شما به حساب می‌آید. برای آشنایی بیشتر در ادامه تمام موارد ذکر شده در این فایل را بررسی می‌کنیم:</p>



<ul class="wp-block-list">
<li><strong>apiVersion</strong>: نسخه API مربوط به این منبع در کوبرنتیز را مشخص می‌کند.</li>



<li><strong>kind</strong>: برای مشخص کردن نوع فایل که در این مثال Deployment است.</li>



<li><strong>metadata</strong>: اطلاعات مربوط به دیپلویمنت، از جمله نام آن.</li>



<li>«روش‌های پیشرفته‌ای مثل Canary و A/B نیز برای انتشار کنترل‌شده نسخه‌ها وجود دارد که معمولاً در محیط‌های Production بزرگ یا با ابزارهای Service Mesh استفاده می‌شوند.»: شامل مواردی که پیکربندی‌های دیپلویمنت و Replicaها را تعریف می‌کند.</li>
</ul>



<h3 class="wp-block-heading" id="h-۲-اعمال-فایل-yaml-با-kubectl">۲- اعمال فایل YAML با kubectl</h3>



<p>برای ایجاد دیپلویمنت مورد نظر، دستور زیر را اجرا کنید:</p>



<pre class="wp-block-code"><code>kubectl apply -f nginx-deployment.yaml</code></pre>



<p>در صورت موفقیت، خروجی مشابه زیر را مشاهده خواهید کرد.</p>



<pre class="wp-block-code"><code>deployment.apps/nginx-deployment created</code></pre>



<h3 class="wp-block-heading" id="h-۳-بررسی-وضعیت-deployment"><strong>۳- بررسی وضعیت Deployment</strong></h3>



<p>برای مشاهده وضعیت Deployment، از دستور زیر استفاده کنید.</p>



<pre class="wp-block-code"><code>kubectl get deployments</code></pre>



<p>بعد از اینکار انتظار می‌رود که خروجی زیر را دریافت کنید.</p>



<pre class="wp-block-code"><code>NAME               READY   UP-TO-DATE   AVAILABLE   AGE
nginx-deployment   4/4     4            4           6s</code></pre>



<h3 class="wp-block-heading" id="h-۴-بررسی-پادهای-در-حال-اجرا">۴- بررسی پادهای در حال اجرا</h3>



<p>برای مشاهده پادهای فعال، دستور زیر را اجرا کنید:</p>



<pre class="wp-block-code"><code>kubectl get pods</code></pre>



<p>این دستور لیستی از پادهای در حال اجرا را همراه با وضعیت و تعداد ریستارت‌ها نشان می‌دهد.</p>



<pre class="wp-block-code" style="font-size:10px"><code>NAME                                     READY   STATUS    RESTARTS   AGE   LABELS
nginx-deployment-9456bbbf9-fr8mc         1/1     Running   0          20s   app=nginx,pod-template-hash=75675f5897
nginx-deployment-9456bbbf9-lpn89         1/1     Running   0          20s   app=nginx,pod-template-hash=75675f5897
nginx-deployment-9456bbbf9-wq76m         1/1     Running   0          20s   app=nginx,pod-template-hash=75675f5897
nginx-deployment-9456bbbf9-xxczh         1/1     Running   0          20s   app=nginx,pod-template-hash=75675f5897</code></pre>



<p>با انجام این مراحل، دیپلویمنت شما ایجاد و فعال شده و کوبرنتیز به‌صورت خودکار وضعیت مطلوب پادها و ReplicaSetها را حفظ می‌کند. این روش نه تنها مدیریت اپلیکیشن را ساده می‌کند، بلکه باعث افزایش پایداری، دسترس‌پذیری و مقیاس‌پذیری می‌شود.</p>



<h2 class="wp-block-heading" id="h-در-پایان">در پایان</h2>



<p>Kubernetes Deployment یکی از ابزارهای کلیدی برای مدیریت خودکار پادها و ReplicaSetها در کلاستر کوبرنتیز است. با استفاده از Deployment می‌توانید اپلیکیشن‌های کانتینرسازی شده خود را با پایداری، دسترس‌پذیری و مقیاس‌پذیری بالا اجرا کنید، تغییرات را بدون توقف سرویس اعمال کنید و در صورت بروز مشکل به سرعت به نسخه پایدار بازگردید. استفاده از دیپلویمنت در کوبرنتیز نه تنها نیاز به مدیریت دستی را کاهش می‌دهد، بلکه عملکرد و قابلیت اطمینان سیستم را نیز به شکل قابل توجهی افزایش می‌دهد. برای مطالعه بیشتر در ارتباط با این موضوع می‌توانید به <strong><a href="https://kubernetes.io/docs/concepts/workloads/controllers/deployment/#updating-a-deployment" target="_blank" rel="noreferrer noopener">مستندات رسمی کوبرنتیز</a></strong> مراجعه کنید.</p>



<p></p>
<p>The post <a href="https://hamravesh.com/blog/what-is-kubernetes-deployment/">آشنایی با Deployment در کوبرنتیز؛ ابزار مدیریت پادها و ReplicaSetها</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://hamravesh.com/blog/what-is-kubernetes-deployment/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>مهاجرت به کوبرنتیز: نکات و بهترین رویکردها</title>
		<link>https://hamravesh.com/blog/kubernetes-migration-best-practices/</link>
					<comments>https://hamravesh.com/blog/kubernetes-migration-best-practices/#respond</comments>
		
		<dc:creator><![CDATA[ارسطو عباسی]]></dc:creator>
		<pubDate>Thu, 12 Feb 2026 14:02:19 +0000</pubDate>
				<category><![CDATA[مقالات]]></category>
		<category><![CDATA[کوبرنتیز]]></category>
		<guid isPermaLink="false">https://hamravesh.com/blog/?p=4095</guid>

					<description><![CDATA[<p>در این مطلب از وبلاگ هم‌روش، به بررسی نکات کلیدی و بهترین رویکردها برای مهاجرت موفق به کوبرنتیز خواهیم پرداخت. </p>
<p>The post <a href="https://hamravesh.com/blog/kubernetes-migration-best-practices/">مهاجرت به کوبرنتیز: نکات و بهترین رویکردها</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>مهاجرت به کوبرنتیز یک گام بزرگ اما ضروری برای سازمان‌هایی است که به دنبال افزایش بهره‌وری، کاهش هزینه‌ها و پاسخ‌گویی بهتر به نیازهای متغیر بازار هستند. این فرآیند، اگر به درستی انجام شود، می‌تواند تحول عظیمی در چگونگی مدیریت و اجرای نرم‌افزارها ایجاد کند. اما این مسیر بدون چالش نیست؛ از برنامه‌ریزی دقیق گرفته تا تغییرات زیرساختی و فرهنگی، همه‌چیز باید به درستی طراحی و اجرا شود.</p>



<p>در این مطلب از وبلاگ هم‌روش، به بررسی نکات کلیدی و بهترین رویکردها برای مهاجرت موفق به <strong><a href="https://hamravesh.com/blog/what-is-kubernetes/">کوبرنتیز</a></strong> خواهیم پرداخت. با ما همراه باشید تا این سفر پیچیده را به یک مسیر روشن و کاربردی تبدیل کنیم.</p>



<h2 class="wp-block-heading" id="h-برنامه-ریزی-و-استراتژی-برای-مهاجرت-به-کوبرنتیز"><strong>برنامه‌ریزی و استراتژی برای مهاجرت به کوبرنتیز</strong></h2>



<p>در این بخش، به نکات مهمی خواهیم پرداخت که به شما کمک می‌کند مهاجرت به کوبرنتیز را به شکلی کارآمد و کم‌ریسک انجام دهید:</p>



<h3 class="wp-block-heading" id="h-ارزیابی-نیازها-و-اهداف-سازمان"><strong>ارزیابی نیازها و اهداف سازمان</strong></h3>



<p>ارزیابی نیازها و اهداف سازمان یکی از اساسی‌ترین مراحل در فرآیند مهاجرت به کوبرنتیز است. این گام به شما کمک می‌کند تا دقیقاً بدانید چرا این تغییر ضروری است و چه انتظاراتی از آن دارید. در ابتدا باید به دلایل اصلی مهاجرت بپردازید؛ آیا سازمان شما با مشکلاتی مانند مقیاس‌پذیری پایین، پیچیدگی مدیریت برنامه‌ها یا هزینه‌های بالا مواجه است؟ یا شاید هدف شما دستیابی به یک زیرساخت مدرن‌تر و انعطاف‌پذیرتر باشد؟</p>



<p>تعریف دقیق اهداف نیز اهمیت بالایی دارد. اهداف شما می‌توانند شامل کاهش زمان استقرار نرم‌افزار، بهبود دسترس‌پذیری، افزایش پایداری سیستم‌ها یا تسهیل فرآیندهای توسعه باشند. این اهداف باید مشخص و قابل اندازه‌گیری باشند تا بتوانید موفقیت پروژه را ارزیابی کنید.</p>



<h3 class="wp-block-heading" id="h-تحلیل-زیرساخت-فعلی"><strong>تحلیل زیرساخت فعلی</strong></h3>



<p>تحلیل زیرساخت فعلی سازمان، گامی کلیدی برای آماده‌سازی مهاجرت به کوبرنتیز است. پیش از هر تغییری، باید شناخت دقیقی از سیستم‌ها، سرویس‌ها و وابستگی‌های موجود داشته باشید. این تحلیل به شما امکان می‌دهد تا نقاط قوت و ضعف زیرساخت فعلی را شناسایی کرده و از آن‌ها در طراحی زیرساخت جدید استفاده کنید.</p>



<p>در ابتدا، لازم است تمام اجزای فعلی زیرساخت، از جمله سرورها، دیتابیس‌ها، سیستم‌های شبکه، و معماری نرم‌افزارها بررسی شوند. درک اینکه هر جزء چگونه با دیگر اجزا در تعامل است، کمک می‌کند تا وابستگی‌ها و بخش‌هایی که ممکن است در فرآیند مهاجرت دچار اختلال شوند را شناسایی کنید. همچنین، مشخص کردن تکنولوژی‌ها و ابزارهایی که در حال حاضر استفاده می‌کنید، می‌تواند به شما نشان دهد که آیا آن‌ها با محیط کوبرنتیز سازگار هستند یا نیاز به تغییر دارند.</p>



<h3 class="wp-block-heading" id="h-تدوین-استراتژی-مهاجرت"><strong>تدوین استراتژی مهاجرت</strong></h3>



<p>تدوین استراتژی مهاجرت به کوبرنتیز یکی از مهم‌ترین مراحل برای اطمینان از موفقیت این فرآیند پیچیده است. این مرحله شامل طراحی یک نقشه راه دقیق است که سازمان شما را از وضعیت فعلی به یک زیرساخت مبتنی بر کوبرنتیز هدایت می‌کند، بدون اینکه اختلال جدی در عملکرد سیستم‌ها ایجاد شود.</p>



<p>ابتدا باید نوع استراتژی مهاجرت خود را انتخاب کنید. استراتژی‌های متداول شامل مهاجرت مرحله‌ای (Phased Migration) و مهاجرت یکپارچه (Big Bang) هستند. اگر زیرساخت شما بسیار پیچیده است یا نمی‌خواهید ریسک اختلالات زیاد را بپذیرید، استراتژی مرحله‌ای مناسب‌تر خواهد بود. در این روش، برنامه‌ها به صورت تدریجی به کوبرنتیز منتقل می‌شوند، که این امکان را می‌دهد هر مرحله را به صورت جداگانه آزمایش و ارزیابی کنید. اما اگر زیرساخت فعلی قدیمی یا ناکارآمد است و به تغییر سریع نیاز دارید، مهاجرت یکپارچه می‌تواند انتخاب مناسبی باشد.</p>



<p>در این فرآیند، شناسایی و اولویت‌بندی برنامه‌ها و سرویس‌ها بسیار مهم است. معمولاً توصیه می‌شود که ابتدا برنامه‌های ساده‌تر و مستقل‌تر به کوبرنتیز منتقل شوند تا تیم بتواند با فرآیند مهاجرت آشنا شود. پس از کسب تجربه، می‌توان به سراغ برنامه‌های پیچیده‌تر رفت.</p>



<h3 class="wp-block-heading" id="h-انتخاب-ابزارها-و-تکنولوژی-ها"><strong>انتخاب ابزارها و تکنولوژی‌ها</strong></h3>



<p>انتخاب ابزارها و تکنولوژی‌ها یکی از حساس‌ترین بخش‌های مهاجرت به کوبرنتیز است، زیرا این انتخاب‌ها مستقیماً بر عملکرد، بهره‌وری و موفقیت کلی پروژه تأثیر می‌گذارند. هر ابزار یا تکنولوژی که انتخاب می‌کنید باید با نیازها، زیرساخت‌ها و اهداف سازمان همخوانی داشته باشد و بتواند کارایی و پایداری سیستم را بهبود بخشد.</p>



<p>برای مدیریت چرخه حیات برنامه‌ها در کوبرنتیز، ابزارهایی مانند <strong><a href="https://hamravesh.com/blog/what-is-helm/">Helm</a></strong> نقش کلیدی ایفا می‌کنند. Helm به شما امکان می‌دهد تا تنظیمات پیچیده را به صورت چارت‌های ساده و قابل مدیریت انجام دهید و فرآیند استقرار را استانداردسازی کنید. برای خودکارسازی فرآیندهای توسعه و استقرار، سیستم‌های CI/CD مانند <strong>Jenkins</strong> ،<strong>GitLab CI</strong> و <strong>ArgoCD</strong> انتخاب‌های محبوبی هستند که می‌توانند به کاهش زمان استقرار کمک کنند.</p>



<p>در حوزه مانیتورینگ و نظارت، ابزارهایی نظیر <strong>Prometheus</strong> و <strong>Grafana</strong> برای پایش سلامت و عملکرد سیستم بسیار ضروری هستند. این ابزارها اطلاعات لحظه‌ای از وضعیت کانتینرها، نودها و سرویس‌های مختلف را فراهم می‌کنند و به شما کمک می‌کنند تا مشکلات را به سرعت شناسایی و رفع کنید. همچنین برای مدیریت لاگ‌ها، استفاده از ابزارهایی مانند <strong>ELK Stack</strong> (Elasticsearch, Logstash, Kibana) یا <strong>Loki</strong> بسیار موثر است.</p>



<h3 class="wp-block-heading" id="h-آموزش-و-توانمندسازی-تیم"><strong>آموزش و توانمندسازی تیم</strong></h3>



<p>آموزش و توانمندسازی تیم برای مهاجرت به کوبرنتیز امری ضروری است. ابتدا باید سطح آگاهی تیم از مفاهیم پایه‌ای مانند کانتینرها، Docker و کوبرنتیز را ارزیابی کرده و آن‌ها را با ابزارهایی مثل Helm، پرمتئوس و CI/CD آشنا کنید. برگزاری کارگاه‌های عملی و شبیه‌سازی سناریوهای واقعی به تیم کمک می‌کند تا مهارت‌های عملی را به‌طور مؤثر یاد بگیرند.</p>



<p>همچنین، تقسیم وظایف به وضوح برای هر عضو تیم از اهمیت بالایی برخوردار است تا فرآیندها به درستی پیش برود. آموزش باید مداوم باشد، زیرا تکنولوژی‌های مرتبط با کوبرنتیز به سرعت تغییر می‌کنند و دسترسی به منابع به‌روز برای تیم ضروری است. توانمندسازی تیم نه تنها باعث افزایش کارایی می‌شود، بلکه تیم را برای حل چالش‌ها آماده‌تر می‌کند و موفقیت در مهاجرت به کوبرنتیز را تضمین می‌کند.</p>



<h3 class="wp-block-heading" id="h-اجرای-آزمایشی-و-تست-مداوم"><strong>اجرای آزمایشی و تست مداوم</strong></h3>



<p>اجرای آزمایشی و تست مداوم بخش حیاتی در مهاجرت به کوبرنتیز است که به شما کمک می‌کند مشکلات احتمالی را قبل از پیاده‌سازی نهایی شناسایی کنید. پس از طراحی و پیاده‌سازی مرحله‌ای یا کامل، لازم است که فرآیندهای سیستم در یک محیط آزمایشی شبیه‌سازی شوند تا عملکرد واقعی کوبرنتیز در شرایط مشابه محیط تولید ارزیابی شود.</p>



<p>در این مرحله، باید به شناسایی مشکلاتی مانند خطاهای پیکربندی، ناسازگاری‌های نرم‌افزاری یا مشکلات مقیاس‌پذیری پرداخته و آن‌ها را اصلاح کنید. استفاده از <strong>تست‌های خودکار</strong> برای ارزیابی عملکرد سیستم و <strong>مانیتورینگ مستمر</strong> می‌تواند به شما کمک کند تا از سلامت سیستم مطمئن شوید. همچنین، تست مداوم در طول زمان پس از مهاجرت نیز ضروری است تا هرگونه تغییر یا به‌روزرسانی به درستی ارزیابی و پیاده‌سازی شود.</p>



<p>با پیروی از این مراحل و تدوین یک برنامه‌ریزی اصولی، مهاجرت به کوبرنتیز می‌تواند فرصتی بی‌نظیر برای بهبود عملکرد و انعطاف‌پذیری زیرساخت‌های شما باشد. این مسیر شاید چالش‌برانگیز باشد، اما نتایج نهایی ارزش آن را دارند.</p>



<h2 class="wp-block-heading" id="h-۴-نکته-کلیدی-برای-مهاجرت-به-کوبرنتیز">۴ نکته کلیدی برای مهاجرت به کوبرنتیز</h2>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="521" src="https://hamravesh.com/blog/wp-content/uploads/2024/12/Migrating-your-app-to-Kubernetes-1024x521.webp" alt="مهاجرت به کوبرنتیز" class="wp-image-4099" srcset="https://hamravesh.com/blog/wp-content/uploads/2024/12/Migrating-your-app-to-Kubernetes-1024x521.webp 1024w, https://hamravesh.com/blog/wp-content/uploads/2024/12/Migrating-your-app-to-Kubernetes-300x153.webp 300w, https://hamravesh.com/blog/wp-content/uploads/2024/12/Migrating-your-app-to-Kubernetes-768x391.webp 768w, https://hamravesh.com/blog/wp-content/uploads/2024/12/Migrating-your-app-to-Kubernetes-1536x782.webp 1536w, https://hamravesh.com/blog/wp-content/uploads/2024/12/Migrating-your-app-to-Kubernetes.webp 1964w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h3 class="wp-block-heading" id="h-۱-شروع-با-رویکرد-مرحله-ای">۱. <strong>شروع با رویکرد مرحله‌ای</strong></h3>



<p>مهاجرت به کوبرنتیز می‌تواند چالش‌برانگیز باشد، بنابراین بهتر است فرآیند را به صورت مرحله‌ای آغاز کنید. این رویکرد به شما این امکان را می‌دهد که ابتدا بخش‌های کوچک‌تر و کم‌خطرتر را به کوبرنتیز منتقل کنید، مشکلات احتمالی را شبیه‌سازی کنید و از آن‌ها درس بگیرید. با گذشت زمان و کسب تجربه، می‌توانید به تدریج پروژه‌های بزرگ‌تر را نیز به این پلتفرم منتقل کنید. این روش به کاهش ریسک و تسهیل فرآیند کمک می‌کند و همچنین به تیم شما فرصت می‌دهد تا با ابزارها و مفاهیم کوبرنتیز به تدریج آشنا شود.</p>



<h3 class="wp-block-heading" id="h-۲-بهره-گیری-از-چند-ابر-multi-cloud-برای-انعطاف-پذیری"><strong>۲. بهره‌گیری از چند ابر (Multi-Cloud) برای انعطاف‌پذیری</strong></h3>



<p>استفاده از استراتژی چند ابری (Multi-Cloud) یکی از راهکارهای کلیدی در مهاجرت به کوبرنتیز است. این رویکرد به شما امکان می‌دهد تا از مزایای زیر بهره‌مند شوید:</p>



<ul class="wp-block-list">
<li><strong>انعطاف‌پذیری بیشتر:</strong> با توزیع بار کاری میان چندین ارائه‌دهنده ابری، می‌توانید زیرساخت خود را به شکلی طراحی کنید که وابسته به یک پلتفرم خاص نباشید.</li>



<li><strong>کاهش ریسک وابستگی:</strong> Multi-Cloud از قفل شدن در یک ارائه‌دهنده (Vendor Lock-In) جلوگیری می‌کند و به شما آزادی عمل بیشتری برای تغییر ارائه‌دهنده یا استفاده همزمان از چند سرویس را می‌دهد.</li>



<li><strong>بهینه‌سازی هزینه‌ها:</strong> با مقایسه و استفاده از خدمات مقرون‌به‌صرفه‌تر هر ارائه‌دهنده، می‌توانید هزینه‌های زیرساخت خود را کاهش دهید.</li>



<li><strong>افزایش دسترس‌پذیری:</strong> توزیع سرویس‌ها در چندین ابر، احتمال خرابی یا وقفه در سرویس‌دهی را کاهش داده و باعث افزایش پایداری می‌شود.</li>
</ul>



<p>اتخاذ استراتژی چند ابری همراه با کوبرنتیز می‌تواند انعطاف‌پذیری و قابلیت‌های زیرساخت شما را به سطح بالاتری برساند.</p>



<h3 class="wp-block-heading" id="h-۳-استفاده-از-ابزارهای-خودکارسازی">۳. <strong>استفاده از ابزارهای خودکارسازی</strong></h3>



<p>ابزارهای خودکارسازی نقش حیاتی در موفقیت مهاجرت به کوبرنتیز دارند و می‌توانند فرآیندهای پیچیده را ساده و کارآمد کنند. برخی از مزایای استفاده از این ابزارها عبارتند از:</p>



<ul class="wp-block-list">
<li><strong>کاهش خطاهای انسانی:</strong> ابزارهایی مانند <strong>Helm</strong> و <strong>Kustomize</strong> امکان مدیریت خودکار تنظیمات و استقرار برنامه‌ها را فراهم می‌کنند، که به کاهش اشتباهات دستی کمک می‌کند.</li>



<li><strong>خودکارسازی فرآیندهای CI/CD:</strong> با استفاده از ابزارهایی مانند <strong>Jenkins</strong>, <strong>GitLab CI/CD</strong>، یا <strong>ArgoCD</strong> می‌توانید استقرارها را سریع‌تر و با اطمینان بیشتری انجام دهید.</li>



<li><strong>مدیریت منابع:</strong> ابزارهای خودکارسازی به شما کمک می‌کنند منابع را بهینه تخصیص دهید و اطمینان حاصل کنید که کانتینرها تنها از منابع مورد نیاز استفاده می‌کنند.</li>



<li><strong>استانداردسازی محیط‌ها:</strong> این ابزارها محیط‌های توسعه، آزمایش و تولید را یکپارچه و استاندارد می‌کنند، که به تیم‌ها اجازه می‌دهد در محیط‌های مشابه کار کنند.</li>



<li><strong>تسریع فرآیند مهاجرت:</strong> خودکارسازی فعالیت‌های تکراری و وقت‌گیر، زمان و تلاش مورد نیاز برای مهاجرت را کاهش می‌دهد.</li>
</ul>



<p>با انتخاب و استفاده از ابزارهای مناسب، می‌توانید فرآیند مهاجرت به کوبرنتیز را ساده‌تر، سریع‌تر و قابل‌اعتمادتر کنید.</p>



<h3 class="wp-block-heading" id="h-۴-تدوین-برنامه-بازگشت-rollback-plan">۴. <strong>تدوین برنامه بازگشت (Rollback Plan)</strong></h3>



<p>در مهاجرت به کوبرنتیز، هرچند که تمام تلاش‌ها برای اجرای صحیح انجام شود، باز هم احتمال وقوع مشکلات یا شکست‌هایی وجود دارد. داشتن یک برنامه بازگشت (Rollback Plan) اطمینان می‌دهد که در صورت بروز خطا، می‌توانید سیستم را به حالت پایدار قبلی بازگردانید.</p>



<p>ویژگی‌های کلیدی یک برنامه بازگشت مؤثر شامل موارد زیر است:</p>



<ul class="wp-block-list">
<li><strong>تهیه نسخه‌های پشتیبان:</strong> پیش از شروع مهاجرت، از داده‌ها، پیکربندی‌ها و سرویس‌های کلیدی نسخه‌های پشتیبان تهیه کنید تا در مواقع نیاز بتوانید آن‌ها را بازیابی کنید.</li>



<li><strong>ایجاد نقاط بازگشت:</strong> در هر مرحله از مهاجرت، نقاط بازگشت مشخصی تعریف کنید که امکان بازگرداندن تغییرات تا آن مرحله را فراهم می‌کند.</li>



<li><strong>تست بازگشت:</strong> قبل از اجرای مهاجرت در محیط تولید، فرآیند بازگشت را در محیط‌های آزمایشی شبیه‌سازی و آزمایش کنید تا از کارایی آن اطمینان حاصل شود.</li>



<li><strong>مستند‌سازی فرآیند:</strong> تمامی مراحل و اقدامات لازم برای بازگشت باید به‌طور دقیق مستند شود تا تیم بتواند به سرعت و بدون اشتباه عمل کند.</li>



<li><strong>آمادگی تیم:</strong> اعضای تیم باید با برنامه بازگشت آشنا باشند و نقش هر یک در اجرای آن مشخص باشد.</li>
</ul>



<p>برنامه بازگشت نه تنها از سیستم شما در برابر خطاهای احتمالی محافظت می‌کند، بلکه به تیم و سازمان آرامش خاطر می‌دهد که حتی در شرایط پیش‌بینی‌نشده نیز آمادگی کامل وجود دارد.</p>



<h2 class="wp-block-heading" id="h-در-پایان"><strong>در پایان</strong></h2>



<p>مهاجرت به کوبرنتیز گامی بزرگ و تأثیرگذار برای بهبود زیرساخت‌ها، مقیاس‌پذیری و مدیریت سرویس‌ها در سازمان‌هاست. با این حال، این فرآیند بدون برنامه‌ریزی دقیق، استفاده از رویکردهای مناسب و آماده‌سازی تیم می‌تواند به چالشی جدی تبدیل شود. در این مسیر، تدوین استراتژی مرحله‌ای، استفاده از ابزارهای خودکارسازی، آموزش مستمر تیم و طراحی برنامه بازگشت از جمله اقداماتی هستند که می‌توانند موفقیت شما را تضمین کنند.</p>



<p>به یاد داشته باشید که مهاجرت به کوبرنتیز تنها یک پروژه نیست، بلکه یک تحول فرهنگی و فنی در سازمان است. این تغییر به شما کمک می‌کند تا زیرساخت‌های خود را مدرن‌تر، چابک‌تر و مقاوم‌تر کنید. با ارزیابی دقیق نیازها و چالش‌های خود و اجرای بهترین رویکردها، می‌توانید از این فناوری پیشرفته برای تحقق اهداف سازمانی خود بهره‌مند شوید.</p>



<p>با حرکت گام‌به‌گام و آمادگی کامل، مهاجرت به کوبرنتیز می‌تواند به یکی از ارزشمندترین تصمیمات استراتژیک شما تبدیل شود.</p>
<p>The post <a href="https://hamravesh.com/blog/kubernetes-migration-best-practices/">مهاجرت به کوبرنتیز: نکات و بهترین رویکردها</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://hamravesh.com/blog/kubernetes-migration-best-practices/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Kubernetes Secrets چیست؟ – به زبان ساده</title>
		<link>https://hamravesh.com/blog/what-is-kubernetes-secrets/</link>
					<comments>https://hamravesh.com/blog/what-is-kubernetes-secrets/#respond</comments>
		
		<dc:creator><![CDATA[بابک خوش‌نویس]]></dc:creator>
		<pubDate>Sat, 04 Jan 2025 14:48:48 +0000</pubDate>
				<category><![CDATA[مقالات]]></category>
		<category><![CDATA[کوبرنتیز]]></category>
		<guid isPermaLink="false">https://hamravesh.com/blog/?p=2498</guid>

					<description><![CDATA[<p> Kubernetes Secret جایی است که اطلاعات حساس مانند کلیدها، رمزهای عبور و توکن‌ها در کوبرنتیز نگه‌داری می‌شود. در این نوشته Kubernetes Secrets به بررسی مفهوم آن‌ها، انواع Kubernetes Secrets، نحوه ایجاد آن‌ها و موارد بیشتر می‌پردازیم.</p>
<p>The post <a href="https://hamravesh.com/blog/what-is-kubernetes-secrets/">Kubernetes Secrets چیست؟ – به زبان ساده</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>در اکوسیستم کوبرنتیز، Kubernetes Secret شیئی است که اطلاعات حساس مانند کلیدها، رمزهای عبور و توکن‌ها را در خود نگه‌داری می‌کند. در این نوشته Kubernetes Secrets به بررسی مفهوم آن‌ها، انواع Kubernetes Secrets، نحوه ایجاد آن‌ها و موارد بیشتر می‌پردازیم.</p>



<h2 class="wp-block-heading" id="h-kubernetes-secrets-چیست">Kubernetes Secrets چیست؟</h2>



<p>همان‌طور که در ابتدای این مطلب بیان شد، در اکوسیستم کوبرنتیز، Kubernetes Secret شیئی است که اطلاعات حساس مانند کلیدها، رمزهای عبور و توکن‌ها را در خود نگه‌داری می‌کند. به‌جای قرار دادن مستقیم این داده‌ها در یک پاد یا دیپلویمنت، ذخیره اطلاعاتی که می‌خواهید امن نگه‌داری شوند در یک Secret، باعث می‌شود سطح حمله کاهش یابد و شانس تغییر این اطلاعات حیاتی در چرخه عمر توسعه نرم‌افزار کمتر شود.</p>



<p>Kubernetes Secrets برای نگه‌داری امن اطلاعات حساس مانند رمزهای عبور، توکن‌ها و گواهینامه‌ها به کار می‌روند. دیپلویمنت‌ها، پادها و سایر منابع Kubernetes که به این اطلاعات حساس نیاز دارند، می‌توانند از Secrets استفاده کنند. همه ما به کسی یا چیزی نیاز داریم که رازهای ما را امن نگه دارد، در این مورد، این نقش برعهده Kubernetes است. شیءهای Secret جزئی از «Kubernetes v1 API» هستند و با استفاده از مانیفست زیر می‌توان آن‌ها را ایجاد کرد:</p>



<pre class="wp-block-code"><code>apiVersion: v1

kind: Secret

metadata:

 name: file-credential

data:

 .secret-file: dmFsdWUtMg0KDQo=</code></pre>



<p>وقتی یک Secret ایجاد شد، باید در پاد خود به آن Secret ارجاع دهید. فایل کانفیگ زیر به پاد مربوطه دسترسی به Kubernetes Secret ایجاد شده در مانیفست بالا را می‌دهد:</p>



<pre class="wp-block-code"><code>apiVersion: v1


kind: Pod


metadata:


 name: secret-files-pod


spec:


 volumes:


   - name: secret-volume


     secret:


       secretName: file-secret


 containers:


   - name: dotfile-test-container


     image: registry.k8s.io/busybox


     command:


       - ls


       - "-l"


       - "/etc/secret-volume"


     volumeMounts:


       - name: secret-volume


         readOnly: true


         mountPath: "/etc/secret-volume"</code></pre>



<p>در این مثال، فایل Secrets مربوطه در مسیر <code>/etc/secret-volume</code> در سیستم فایل قرار می‌گیرد تا برنامه بتواند به آن دسترسی داشته باشد. (در تعریف volume mount، شما مشخص می‌کنید که مسیر فایل کجا خواهد بود.)</p>



<h2 class="wp-block-heading" id="h-چطور-از-kubernetes-secrets-استفاده-کنیم">چطور از Kubernetes Secrets استفاده کنیم؟</h2>



<p>به روش‌های مختلفی می‌توان از Secretها در یک کلاستر کوبرنتیز استفاده کرد. از جمله این روش‌ها می‌توان به موارد زیر اشاره داشت:</p>



<ul class="wp-block-list">
<li>متغیرهای محیطی در یک کانتینر</li>



<li>فایل‌هایی داخل یک کانتینر</li>



<li>آرگومان‌های خط فرمان در داخل یک کانتینر</li>
</ul>



<p>در ادامه هر یک از موارد فوق در زیربخش‌هایی شرح داده شده‌اند.</p>



<h3 class="wp-block-heading" id="h-متغیرهای-محیطی-در-یک-کانتینر">متغیرهای محیطی در یک کانتینر</h3>



<p>Secretها می‌توانند برای ارسال داده‌های حساس به کانتینرها/پادها به‌عنوان متغیرهای محیطی استفاده شوند. این یک موردِ استفاده و کاربرد رایج برای Secretها است، زیرا به برنامه اجازه می‌دهد به‌راحتی به این داده‌ها دسترسی پیدا کند.</p>



<h3 class="wp-block-heading" id="h-فایل-هایی-داخل-یک-کانتینر">فایل‌هایی داخل یک کانتینر</h3>



<p>Secretها می‌توانند به‌صورت فایل در یک کانتینر mount شوند. به این ترتیب برنامه می‌تواند به داده‌ها به‌صورت فایل دسترسی داشته باشد. این می‌تواند برای برنامه‌هایی مفید باشد که انتظار دارند داده‌های حساس در یک فایل ذخیره شوند.</p>



<h3 class="wp-block-heading" id="h-آرگومان-های-خط-فرمان-در-داخل-یک-کانتینر">آرگومان‌های خط فرمان در داخل یک کانتینر</h3>



<p>Secretها می‌توانند به‌عنوان آرگومان‌های خط فرمان به یک کانتینر ارسال شوند. این ویژگی می‌تواند برای برنامه‌هایی مفید باشد که انتظار دارند داده‌های حساس به‌عنوان آرگومان خط فرمان ارسال شوند.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="800" height="450" src="https://blog.hamravesh.com/blog/wp-content/uploads/2024/05/Kubernetes-Secrets.png" alt="کوبرنتیز سکرت یا کوبرنتیز سیکرت Kubernetes secrets" class="wp-image-2730" srcset="https://hamravesh.com/blog/wp-content/uploads/2024/05/Kubernetes-Secrets.png 800w, https://hamravesh.com/blog/wp-content/uploads/2024/05/Kubernetes-Secrets-300x169.png 300w, https://hamravesh.com/blog/wp-content/uploads/2024/05/Kubernetes-Secrets-768x432.png 768w" sizes="auto, (max-width: 800px) 100vw, 800px" /></figure>
</div>


<h2 class="wp-block-heading" id="h-موارد-استفاده-kubernetes-secrets-چیست">مواردِ استفاده Kubernetes Secrets چیست؟</h2>



<p>موارد زیر نمونه‌هایی از کاربردهای متداول Secrets هستند:</p>



<ul class="wp-block-list">
<li><strong>فراهم کردن متغیرهای محیطی برای کانتینرها</strong>: مقادیر محیطی می‌توانند رفتار برنامه را کنترل کنند، بنابراین استفاده از Secrets برای ارائه این مقادیر توصیه می‌شود. این مقادیر محیطی کانتینر ممکن است شامل اطلاعات محرمانه مانند اعتبارنامه‌ها (Credentials) باشد که برای فراخوانی برنامه‌های شخص ثالث (مثلاً درگاه‌های پرداخت) مورد استفاده قرار می‌گیرند.</li>



<li><strong>فراهم کردن اعتبارنامه‌هایی مانند کلیدهای SSH، رمزهای عبور برای کانتینرها</strong>: Secrets می‌توانند اعتبارنامه‌هایی مانند کلیدهای SSH، رمزهای عبور، گواهینامه‌های TLS و موارد مشابه را به کانتینرها منتقل کنند. کلیدهای SSH و گواهینامه‌های TLS از نشانه‌های امنیتی مهمی هستند که می‌توانند در برنامه‌ها و از طریق Secrets ارسالی به آن‌ها، مورد استفاده قرار گیرند.</li>



<li><strong>ایجاد امکان pull شدن ایمیج‌های کانتینرها از رجیستری</strong>: Secrets همچنین برای اجازه دادن pull کردن تصاویر کانتینر از رجیستری‌ها در گره‌های کوبرنتیز به کار می‌روند. می‌توانید اعتبارنامه‌های دسترسی رجیستری Docker را از طریق Secrets ارائه کنید تا Kubelet از آنها برای pull کردن تصاویر کانتینر ذخیره شده در رجیستری استفاده کند.</li>



<li><strong>ذخیره اطلاعات اضافه مثل جزئیات Helm</strong>: همان‌طور که Helm از Secrets برای ذخیره اطلاعات مربوط به خود استفاده می‌کند، سایر برنامه‌ها نیز می‌توانند از Secrets برای انجام عملکردهای خود بهره ببرند.</li>
</ul>



<p>حالا در ادامه به سایر انواع Kubernetes Secrets می‌پردازیم.</p>



<h2 class="wp-block-heading" id="h-انواع-kubernetes-secrets-چیست">انواع Kubernetes Secrets چیست؟</h2>



<p>بر اساس مقادیر تعیین شده برای Secrets، آن‌ها به انواع زیر تقسیم می‌شوند:</p>



<ul class="wp-block-list">
<li><strong>Opaque</strong>: نوع پیش‌فرض و عمومی Secrets است که هر کسی می‌تواند آن را ایجاد و استفاده کند. این نوع، زوج‌های کلید-مقدار ساده هستند؛ بنابراین اگر نوع آن را مشخص نکنید، یک Secret از نوع Opaque (با تعریف نوع opaque) ایجاد خواهد شد.</li>



<li><strong>توکن‌های Service Account</strong>: برای شناسایی حساب‌های سرویس استفاده می‌شوند. این توکن‌ها به API‌های کوبرنتیز امکان دسترسی به پاد‌ها را می‌دهند. نوع این API، kubernetes.io/service-account-token است.</li>



<li><strong>SSH-auth</strong>: این نوع Secret برای ذخیره اطلاعات مورد نیاز به‌منظور احراز هویت SSH استفاده می‌شود. نوع آن <code>kubernetes.io/ssh-auth</code> است.</li>



<li><strong>TLS</strong>: از این نوع Secret برای ذخیره گواهینامه‌های TLS و کلید‌های مرتبط با آن‌ها استفاده می‌شود. نوع این <code>Secret kubernetes.io/tls</code> است.</li>



<li><strong>Basic-auth</strong>: برای Secret‌های «احراز هویت پایه» (basic auth)، نوع آن را <code>kubernetes.io/basic-auth</code> تعریف کنید.</li>



<li><strong>Docker-cgf و Dockerconfigjson</strong>: پیکربندی‌های مربوط به Docker و اعتبارنامه‌های رجیستری معمولاً در این دو نوع Secret ذخیره می‌شوند. برای استفاده از docker-cfg و dockerconfigjson، نوع را به‌ترتیب <code>kubernetes.io/dockercfg</code> یا <code>kubernetes.io/dockerconfigjson</code> تعریف کنید.</li>



<li><strong>توکن</strong>: این نوع Secret به توکن‌های «راه‌اندازی» (bootstrap) اشاره دارد که برای اضافه کردن Nodeهای جدید به خوشه کوبرنتیز مورد استفاده قرار می‌گیرند. برای استفاده از این توکن در فرایند راه‌اندازی نود، نوع آن را <code>bootstrap.kubernetes.io/token</code> تعریف کنید.</li>
</ul>



<h2 class="wp-block-heading" id="h-چطور-kubernetes-secret-بسازیم">چطور Kubernetes Secret بسازیم؟</h2>



<p>در این بخش از مقاله هر یک از مراحل ایجاد و استفاده از Kubernetes Secrets شرح داده شده است.</p>



<h3 class="wp-block-heading" id="h-گام-اول-ایجاد-و-ساخت-kubernetes-secret">گام اول: ایجاد و ساخت Kubernetes Secret</h3>



<p>چند روش برای ایجاد Kubernetes Secret وجود دارد که آسان‌ترین آن استفاده از دستور <code>kubectl create secret</code> است. در ادامه مثالی برای این روش ارائه کرده‌ایم:</p>



<pre class="wp-block-code"><code>kubectl create secret generic my-secret --from-literal=password=abc123</code></pre>



<p>دستور بالا یک سیکرت عمومی یا همان جنریک با نام <code>my-secret</code> ایجاد می‌کند و مقدار کلید <code>password</code> را برابر <code>abc123</code> قرار می‌دهد. همچنین می‌توان با استفاده از آپشن <code>— from-file</code> نیز یک Kubernetes Secret ایجاد کرد:</p>



<pre class="wp-block-code"><code>kubectl create secret generic my-secret --from-file=ssh-privatekey=/path/to/privatekey --from-file=ssh-publickey=/path/to/publickey</code></pre>



<p>دستور بالا یک سکرت عمومی با نام <code>my-secret</code> ایجاد می‌کند و مقادیر کلیدهای <code>ssh-privatekey</code> و <code>ssh-publickey</code> را برابر با محتویات فایل‌های مشخص شده قرار می‌دهد.</p>



<h3 class="wp-block-heading" id="h-گام-دوم-استفاده-از-kubernetes-secret-در-یک-pod">گام دوم: استفاده از Kubernetes Secret در یک Pod</h3>



<p>برای استفاده از یک Secret در یک Pod، باید volumeی را که به Secret ارجاع می‌دهد اضافه و سپس آن volume را به کانتینر وصل کنیم. در ادامه مثالی برای این مورد ارائه شده است.</p>



<pre class="wp-block-code"><code>apiVersion: v1
kind: Pod
metadata:
 name: my-pod
spec:
 containers:
 - name: my-container
 image: my-image
 volumeMounts:
 - name: my-secret
 mountPath: /etc/my-secret
 readOnly: true
 volumes:
 - name: my-secret
 secret:
 secretName: my-secret</code></pre>



<p>این فایل YAML یک Pod تعریف می‌کند که یک کانتینر و یک volume دارد. volume یک Secret کوبرنتیز با نام <code>my-secret</code> است که در مسیر <code>/etc/my-secret</code> به کانتینر mount شده است.</p>



<h3 class="wp-block-heading" id="h-گام-سوم-استفاده-از-kubernetes-secret-در-یک-deployment">گام سوم: استفاده از Kubernetes Secret در یک Deployment</h3>



<p>برای استفاده از Secret در یک Deployment، می‌توانیم یک متغیر محیطی که به Secret ارجاع می‌دهد را اضافه کنیم. در ادامه مثالی در این خصوص ارائه شده است.</p>



<pre class="wp-block-code"><code>apiVersion: apps/v1
kind: Deployment
metadata:
 name: my-deployment
spec:
 replicas: 3
 template:
 metadata:
 labels:
 app: my-app
 spec:
 containers:
 - name: my-container
 image: my-image
 env:
 - name: DB_PASSWORD
 valueFrom:
 secretKeyRef:
 name: my-secret
 key: password</code></pre>



<p>این فایل YAML یک Deployment را تعریف می‌کند که دارای یک کانتینر است. کانتینر یک متغیر محیطی به نام <code>DB_PASSWORD</code> دارد که مقدار آن از کلید <code>password</code> در سکرت <code>my-secret</code> گرفته شده است.</p>



<h3 class="wp-block-heading" id="h-گام-چهارم-مشاهده-kubernetes-secrets">گام چهارم: مشاهده Kubernetes Secrets</h3>



<p>برای مشاهده یک سکرت موجود، از دستور زیر استفاده می‌کنیم:</p>



<pre class="wp-block-code"><code>kubectl get secret secret-name</code></pre>



<p>سکرت توسط <code>kubectl</code> با فرمت کدگذاری شده base64 نمایش داده می‌شود. برای رمزگشایی کامل Secret، از یک دیکُدر base64 خارجی (مانند برنامه base64 در لینوکس) استفاده و دستوراتی مانند دستور زیر را اجرا می‌کنیم:</p>



<pre class="wp-block-code"><code>echo $encoded_secret | base64 -d</code></pre>



<p>توجه داشته باشید که اگر محدودیت‌های RBAC را برای مشاهده سکرت‌ها اعمال کرده‌اید، فقط کاربرانی که دارای مجوزهای لازم هستند می‌توانند به این روش به سکرت‌ها دسترسی داشته باشند. می‌توانید برای بررسی موفقیت‌آمیز ایجاد سکرت، از دستور زیر استفاده کنید:</p>



<pre class="wp-block-code"><code>kubectl get secrets</code></pre>



<p>دستور فوق، فهرست سکرت‌های موجود را به‌همراه نام، نوع، تعداد مقادیر داده‌ای که در آن‌ها موجود است و عمر آن‌ها را نمایش می‌دهد.</p>



<h3 class="wp-block-heading" id="h-گام-پنجم-ویرایش-مشخصات-یک-سکرت-k8s">گام پنجم: ویرایش مشخصات یک سکرت K8s</h3>



<p>برای تغییر مشخصات یک سکرت کوبرنتیز موجود، می‌توانیم از دستور <code>kubectl edit</code> استفاده کنیم. دستور زیر نشان می‌دهد که چطور می‌توان یک Kubernetes Secret با نام <code>production-secret</code> را ویرایش کرد:</p>



<pre class="wp-block-code"><code>kubectl edit secret production-secret</code></pre>



<h3 class="wp-block-heading" id="h-گام-ششم-حذف-یک-kubernetes-secret-با-استفاده-از-دستور-kubectl">گام ششم: حذف یک Kubernetes Secret با استفاده از دستور kubectl</h3>



<p>برای حذف یک سکرت، ابتدا با استفاده از دستورات <code>cat</code> یا <code>get</code> بررسی می‌کنیم که آیا سکرت‌هایی در کلاستر ما وجود دارد یا خیر. سپس با دستور <code>describe</code> می‌توانیم اطلاعات بیشتری در مورد یک سکرت خاص کسب کنیم. برای حذف سکرت‌های کوبرنتیز از دستور <code>kubectl delete</code> استفاده می‌شود:</p>



<pre class="wp-block-code"><code>kubectl delete secret production-secret</code></pre>



<p>به این ترتیب اکنون یاد گرفتیم که چطور Kubernetes Secrets را ایجاد و از آن‌ها استفاده کنیم.</p>



<h2 class="wp-block-heading" id="h-kubernetes-secrets-چقدر-ایمن-هستند">Kubernetes Secrets چقدر ایمن هستند؟</h2>



<p>سکرت‌های کوبرنتیز برای امنیت طراحی شده‌اند و مکانیزمی برای ذخیره و مدیریت امن داده‌های حساس در داخل یک کلاستر کوبرنتیز فراهم می‌کنند. هنگامی که سکرت‌های کوبرنتیز به‌درستی پیکربندی و استفاده شوند، می‌توانند امنیت بالایی را برای داده‌های حساس فراهم کنند.</p>



<p>Kubernetes Secrets به‌صورت رمزگذاری شده در سرور API کوبرنتیز ذخیره می‌شوند و تنها کاربران یا سرویس‌های مُجازی که مجوز لازم را دارند، می‌توانند به آن‌ها دسترسی داشته باشند. به‌طور پیش‌فرض، Secret‌ها با الگوریتم رمزنگاری AES-256 رمزگذاری می‌شوند و دسترسی به آن‌ها توسط قوانین RBAC (کنترل دسترسی نقش‌محور) کوبرنتیز کنترل می‌شود.</p>



<p>یک روش رایج این است که دسترسی ویرایش یا حذف به فردی که نیازی به آن ندارد، داده نشود. علاوه بر این، Kubernetes Secrets تنها زمانی که یک Pod از آن‌ها استفاده می‌کند در حافظه ذخیره می‌شوند. پس از خاتمه پاد، Secret‌ها برای همیشه از حافظه حذف می‌شوند که این امر لایه امنیتی افزوده‌ای را فراهم می‌کند.</p>



<p>با این حال، مهم است که بدانید Kubernetes Secrets کاملاً امن نیستند و خطرهای امنیتی بالقوه‌ای وجود دارد که می‌تواند امنیت Secret‌ها را به خطر بیندازد. به‌عنوان مثال، اگر یک مهاجم به کلاستر Kubernetes یا به پادی که از Secret‌ها استفاده می‌کند دسترسی پیدا کند، ممکن است بتواند به Secret‌ها هم دسترسی پیدا کند. در گذشته چنین مواردی رخ داده است، بنابراین باید با احتیاط عمل کرد؛ زیرا هیچ سیستمی در دنیا ۱۰۰ درصد امن نیست.</p>



<p>باید به خاطر داشت که نحوه ذخیره Kubernetes Secrets در etcd چندان امن نیست، زیرا رمزگذاری نمی‌شوند. بلکه به‌صورت اشیاء رمزگذاری‌شده Base64 ذخیره می‌شوند. این به آن معناست که اگر کسی به این داده‌ها دسترسی پیدا کند، می‌تواند به‌سرعت رشته Base64 را رمزگشایی و از تمام Secret‌ها استفاده کند. تنها چیزی که نیاز دارد، دسترسی برای مشاهده اشیاء Secret Kubernetes است (می‌توان از استفاده Base64 با بهره‌گیری از فیلد stringData اجتناب کرد).</p>



<h2 class="wp-block-heading" id="h-بهترین-شیوه-ها-در-kubernetes-secrets">بهترین شیوه‌ها در Kubernetes Secrets</h2>



<p>برای کاهش خطرهای امنیتی Kubernetes Secrets، پیروی از شیوه‌های مناسب به‌منظور تامین امنیت خوشه‌های Kubernetes، مانند اعمال کنترل‌های امنیتی شبکه، استفاده از سازوکارهای احراز هویت قوی و محدود کردن دسترسی به منابع حساس، ضروری است.</p>



<p>علاوه بر این، پیکربندی و استفاده صحیح از Kubernetes Secrets مانند اجتناب از ذخیره Secret‌ها در متغیرهای محیطی و محدود کردن دسترسی به Secret‌ها تنها برای پادهایی که به آن‌ها نیاز دارند، ضروری است. توجه به این امر ضرورت دارد که شیوه‌های مناسب صنعت را دنبال کنیم، چرا که تمام نشت‌های داده‌ای که تاکنون رخ داده‌اند، به علت عدم پیروی از پروتکل‌های امنیتی تایید شده بوده‌اند.</p>



<h3 class="wp-block-heading" id="h-پیکربندی-kubernetes-secrets-به-منظور-افزایش-امنیت-در-آن-ها">پیکربندی Kubernetes secrets به‌منظور افزایش امنیت در آن‌ها</h3>



<p>برای امن‌تر کردن Kubernetes secrets، می‌توان موارد زیر را انجام داد:</p>



<ul class="wp-block-list">
<li><strong>اعمال قوانین کنترل دسترسی نقش‌محور (RBAC)</strong>: کوبرنتیز از کنترل دسترسی نقش‌محور و مبتنی بر سیاست به خوبی پشتیبانی می‌کند. می‌توان به‌راحتی کنترل کرد که چه کسی مجاز است به کدام اجزا در Kubernetes دسترسی داشته باشد، بنابراین می‌توانیم استفاده از API‌های Secret را محدود و دسترسی به Secret‌ها را از تمام کاربران حذف کرد. اطمینان از عدم دسترسی به Secret‌ها از طریق ابزار خط فرمان Kubectl، اولین گام است.</li>



<li><strong>اجازه دسترسی به Secret‌های خاص تنها برای کانتینرها</strong>: همان‌طور که می‌توان دسترسی RBAC را برای کاربران کنترل کرد، می‌توان دسترسی به Secret‌ها را به مجموعه‌ای خاص از برنامه‌ها محدود کرد. به این ترتیب، Secret‌های شما تنها برای برنامه‌هایی در دسترس خواهند بود که مجاز به استفاده از آن‌ها هستند.</li>
</ul>



<h4 class="wp-block-heading" id="h-فعال-کردن-رمزگذاری-در-حالت-استراحت-encryption-at-rest">فعال کردن رمزگذاری در حالت استراحت (Encryption at rest)</h4>



<p>رمزگذاری در حالت استراحت (Encryption at rest) یک ویژگی است که می‌توان آن را با استفاده از پرچم <code>--encryption-provider-config</code> در سرور API فعال کرد. در این پرچم، شما به یک فایل اشاره می‌کنید که ارائه‌دهندگان رمزگذاری در حالت استراحت را مشخص می‌کند. محتوای این فایل YAML چیزی شبیه به این خواهد بود:</p>



<pre class="wp-block-code"><code>apiVersion: apiserver.config.k8s.io/v1

kind: EncryptionConfiguration

resources:

 - resources:

     - events

   providers:

     - identity: {} # do not encrypt Events even though *.* is specified below

 - resources:

     - '*.apps' 

   providers:

     - aescbc:

         keys:

         - name: first_key

           secret: c2VlkansaklnsxlanslxHsa1hUndklMgaXQ/Cg==

 - resources:

     - '*.*' 
   providers:

     - aescbc:

         keys:

         - name: second_key

           secret: c2VjcmV12ds2JJklY3vyZSwgSSB0aGluaw==</code></pre>



<p>با نگاه به این فایل، می‌بینید که آرایه‌ای از منابع وجود دارد که شرط‌هایی را برای آن‌ها اعمال می‌کنیم. منبع <code>events</code> «رمزگذاری در حالت استراحت» ندارد، زیرا هویت ارائه دهنده یک آرایه خالی است. سپس، مشخص کرده‌ایم که منابع تحت اِی‌پی‌آی <code>apps‌</code> باید در حالت استراحت رمزگذاری شوند. آخرین آرایه نشان می‌دهد که همه چیز در Kubernetes باید رمزگذاری شود.</p>



<h3 class="wp-block-heading" id="h-ابزارهایی-برای-مدیریت-پایدار-kubernetes-secrets">ابزارهایی برای مدیریت پایدار Kubernetes secrets </h3>



<p>با پیروی از نکات پیکربندی که تا اینجا ارائه شدند، می‌توان اطمینان حاصل کرد که هیچ کاربر یا نهاد غیرمجازی نمی‌تواند به Secret‌های ما دسترسی پیدا کند. با این حال، ارسال واقعی Secret‌ها به Kubernetes نیز خطرات امنیتی را به‌همراه دارد که نیازمند کنترل دسترسی نقش‌محور و سایر بررسی‌ها برای کاهش آن است. این‌‌ها ویژگی‌های بومی Kubernetes نیستند، اما خوشبختانه ابزارهای موثر زیادی برای انتخاب وجود دارد.</p>



<p>در ادامه ابتدا به راهکارهای شخص ثالث برای مدیریت پایدار Kubernetes secrets می‌پردازیم.</p>



<h4 class="wp-block-heading" id="h-راهکارهای-شخص-ثالث-برای-مدیریت-پایدار-kubernetes-secrets">راهکارهای شخص ثالث برای مدیریت پایدار Kubernetes secrets</h4>



<ul class="wp-block-list">
<li><strong>Vault</strong>: یک استاندارد صنعتی است که به‌طور گسترده مورد استفاده قرار می‌گیرد. با استفاده از کانتینر Sidecar، امکاناتی مانند RBAC، ممیزی، چرخش Secret‌ها و موتور Secret‌های پویا را ارائه می‌دهد. می‌توانید از Vault استفاده کنید و بدون نگرانی از امنیت، Secret‌ها را به کانتینرهای خود ارسال کنید.</li>



<li><strong>Secrets Manager ارائه شده توسط AWS</strong>:‌ سرویس AWS راه‌حلی بسیار مقرون‌به‌صرفه‌تر است، اما بسیاری از ویژگی‌های Vault، مانند تولید پویای Secret‌ها و رابط کاربری RBAC را ندارد. با این حال، می‌توانید RBAC را با استفاده از سیاست‌های IAM بومی AWS پیاده‌سازی کنید.</li>



<li><strong>قابلیت Key Vault در Azure</strong>: این سرویس مشابه Secrets Manager AWS است و Secret‌ها، گواهینامه‌های TLS، کلیدهای SSH و موارد دیگر را ایمن می‌کند. یک مزیت بزرگ شاید این باشد که می‌توانید Key Vault‌ها را در دیتاسنترهای بین‌المللی Azure ایجاد کنید تا Secret‌های خود را امن‌تر نگه دارید و کارایی آن‌ها را افزایش دهید.</li>
</ul>



<h4 class="wp-block-heading" id="h-راهکارهای-اوپن-سورس-برای-مدیریت-پایدار-kubernetes-secrets">راهکارهای اوپن سورس برای مدیریت پایدار Kubernetes secrets</h4>



<ul class="wp-block-list">
<li><strong>Helm secrets</strong>: برای مدیریت deploymentها در کوبرنتیز به‌طور گسترده استفاده می‌شود و Helm Secrets یک راه‌حل ساده برای یکپارچه‌سازی است. گرچه امنیت آن به اندازه Vault نیست، اما با داشتن مجوزهای مناسب، Helm راه‌حلی متن‌باز و قابل قبول است.</li>



<li><strong>Open-source Vault</strong>: علاوه بر نسخه پولی که قبلاً بحث شد، Vault دارای یک توزیع متن‌باز نیز هست. می‌توانید نسخه متن‌باز Vault را در خوشه‌های Kubernetes خود یا در یک ماشین مجازی بومی Deploy کنید و از آن برای ارسال Secret‌ها به کانتینرهای خود استفاده کنید. این نسخه از Vault تقریباً تمام ویژگی‌های نسخه ارتقا یافته را به غیر از پشتیبان‌گیری و بازیابی ارائه می‌دهد.</li>
</ul>



<h2 class="wp-block-heading" id="h-جمع-بندی">جمع‌بندی</h2>



<p>Kubernetes Secret شیئی است که اطلاعات حساس مانند کلیدها، رمزهای عبور و توکن‌ها را در خود نگهداری می‌کند. این Secrets می‌توانند به‌صورت متغیرهای محیطی، فایل‌ها یا آرگومان‌های خط فرمان در کانتینرها استفاده شوند. با پیروی از شیوه‌های مناسب مانند کنترل دسترسی و رمزگذاری، می‌توان امنیت Secrets را افزایش داد. همچنین ابزارهای شخص ثالث و متن‌باز متعددی برای مدیریت پایدار Secrets در دسترس هستند.</p>



<p>Kubernetes secrets دارای برخی شکاف‌های امنیتی هستند، اما می‌توان با پیروی از اصل کمترین امتیاز و پیاده‌سازی رمزنگاری در حالت استراحت، با این موارد مقابله کرد. ممیزی نیز روشی کلیدی برای محدود کردن سطح حمله است و تمام ابزارهای ذکر شده دارای یک یا چند روش برای تولید لاگ‌های ممیزی هستند.</p>
<p>The post <a href="https://hamravesh.com/blog/what-is-kubernetes-secrets/">Kubernetes Secrets چیست؟ – به زبان ساده</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://hamravesh.com/blog/what-is-kubernetes-secrets/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>پاسخ به متداول‌ترین سوالات کوبرنتیز</title>
		<link>https://hamravesh.com/blog/kubernetes-faq/</link>
					<comments>https://hamravesh.com/blog/kubernetes-faq/#respond</comments>
		
		<dc:creator><![CDATA[ارسطو عباسی]]></dc:creator>
		<pubDate>Sun, 08 Dec 2024 09:15:42 +0000</pubDate>
				<category><![CDATA[مقالات]]></category>
		<category><![CDATA[کوبرنتیز]]></category>
		<guid isPermaLink="false">https://hamravesh.com/blog/?p=2835</guid>

					<description><![CDATA[<p>با در نظر گرفتن این موضوع که کوبرنتیز یک تکنولوژی نوظهور بوده و نسبت به کامیونیتی ایران هم کمی ناآشنا است، سوالات بسیار زیادی در ارتباط با آن مطرح می‌شود.</p>
<p>The post <a href="https://hamravesh.com/blog/kubernetes-faq/">پاسخ به متداول‌ترین سوالات کوبرنتیز</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>با در نظر گرفتن این موضوع که کوبرنتیز یک تکنولوژی نوظهور بوده و نسبت به کامیونیتی ایران هم کمی ناآشنا است، سوالات بسیار زیادی در ارتباط با آن مطرح می‌شود. با جمع‌بندی این سوالات از منابع مختلف، تصمیم گرفتیم تا برخی از متداول‌ترین سوالات کوبرنتیز را در این مطلب از وبلاگ هم‌روش پاسخ بدهیم.</p>



<p>همچنین اگر علاقه‌مند به آشنایی اولیه با کوبرنتیز هستید می‌توانید مطلب «<strong><a href="https://hamravesh.com/blog/what-is-kubernetes/" target="_blank" rel="noreferrer noopener">کوبرنتیز چیست؟</a></strong>» را مطالعه کنید. </p>



<h2 class="wp-block-heading" id="h-سوال-اول-چه-زمانی-باید-از-کوبرنتیز-استفاده-کنم">سوال اول: چه زمانی باید از کوبرنتیز استفاده کنم؟</h2>



<p> بسیاری از افراد در همان آشنایی اولیه با کوبرنتیز این سوال را از خودشان می‌پرسند که آیا باید از کوبرنتیز برای اپلیکیشن‌ام استفاده کنم یا خیر؟ </p>



<p>پاسخ دادن به این سوال چندان سخت نیست. به‌عنوان صاحب کسب‌وکار و توسعه‌دهنده باید ابتدا این سوال را از خودتان بپرسید که در حال حاضر برای اجرا شدن اپلیکیشن‌ام مشکلی وجود دارد یا خیر؟ اگر همه چیز به‌درستی کار می‌کند و از فرایند انجام کارها راضی هستید و مطمئنید که در آینده با اضافه شدن ویژگی‌های جدید، زیاد شدن تعداد کاربران، منابع مصرفی بیشتر و&#8230; به مشکل برنخواهید خورد، تغییر زیرساخت و استفاده از تکنولوژی جدید به‌نظر نمی‌رسد که کاری ضروری باشد. </p>



<p>کوبرنتیز مزایا متعددی برای کسب‌وکارها دارد اما اگر بدون در نظر گرفتن شرایط کنونی‌ خودتان به سمت آن بروید ممکن است با پیچیدگی‌ها و البته هزینه‌های بیشتری سروکار داشته باشید. </p>



<p>اما از طرفی دیگر اگر در حال حاضر مدیریت کانتینرهای مختلف برای‌تان مشکل است، مقیاس‌دهی به اپلیکیشن واقعا به سختی پیش می‌رود و همچنین نیازمند استخدام افراد بیشتری برای مدیریت زیرساخت‌تان هستید، بهتر است مهاجرت به سوی کوبرنتیز را در اولویت قرار دهید. </p>



<p>برای مطالعه بیشتر این موضوع و آشنایی با ضرورت‌ها و مزایا کوبرنتیز می‌توانید مطلب «<strong><a href="https://hamravesh.com/blog/is-kubernetes-right-for-me/" target="_blank" rel="noreferrer noopener">آیا کوبرنتیز برای کسب‌وکار من مناسب است؟</a></strong>» را مطالعه کنید. </p>



<h2 class="wp-block-heading" id="h-سوال-دوم-چگونه-از-کوبرنتیز-استفاده-کنم">سوال دوم: چگونه از کوبرنتیز استفاده کنم؟</h2>



<p>برای پاسخ به پرسش دوم می‌توان دو راهکار را در نظر گرفت:</p>



<p>راهکار اول پیاده‌سازی کوبرنتیز به‌صورت محلی و توسط تیم داخلی شرکت است. اما این راهکار مشکلاتی دارد. استخدام متخصصان حوزه کوبرنتیز اولین چالشی‌ست که در این راهکار با آن روبه‌رو خواهید بود. از آنجایی که افراد حرفه‌ای در این زمینه کم هستند و حقوق‌شان بسیار بالا، به‌نظر نمی‌رسد که راهکار چندان بهینه‌ای به لحاظ هزینه باشد. </p>



<p>راهکار دوم استفاده از خدمات سرویس‌دهندگان ابری مانند هم‌روش است. هم‌روش با ارائه سرویس «کوبرنتیز مدیریت‌شده» این امکان را به شما می‌دهد که بدون نگرانی از پیاده‌سازی و مدیریت کلاستر کوبرنتیز، به‌سرعت اپلیکیشن خود را در محیط کوبرنتیز اجرا کنید. مزایا این روش بهینه بودن حداکثری آن و داشتن تیمی حرفه‌ای از متخصصان کوبرنتیز است. </p>



<p>برای آشنایی بیشتر با سرویس کوبرنتیز مدیریت شده و دریافت مشاوره از تیم حرفه‌ای هم‌روش به صفحه «<strong><a class="global-rtl" href="https://hamravesh.com/managed-kubernetes" target="_blank" rel="noreferrer noopener">کوبرنتیز مدیریت‌شده</a></strong>» مراجعه کنید. </p>



<h2 class="wp-block-heading" id="h-سوال-سوم-برای-شروع-به-یادگیری-کوبرنتیز-از-کجا-شروع-کنم">سوال سوم: برای شروع به یادگیری کوبرنتیز از کجا شروع کنم؟</h2>



<p>یکی از چالش‌های اصلی برای یادگیری کوبرنتیز این است که شما نمی‌توانید به‌صورت مستقیم بدون پیش‌نیازهایی وارد دنیای کوبرنتیز شوید و از مزایا آن به‌درستی برخوردار شوید.</p>



<p>برای یادگیری کوبرنتیز ابتدا نیاز است که درک خوبی از محیط لینوکس، خط فرمان، مفهوم <strong><a href="https://hamravesh.com/blog/what-is-container/">کانتینر</a></strong> و همچنین YAML را داشته باشید. بدون در نظر گرفتن این موارد، ورود مستقیم به دنیای کوبرنتیز پیچیده و مشکل خواهد بود. </p>



<h2 class="wp-block-heading" id="h-سوال-چهارم-اجزا-اصلی-کوبرنتیز-کدام-ها-هستند">سوال چهارم: اجزا اصلی کوبرنتیز کدام‌ها هستند؟</h2>



<p>کوبرنتیز کامپوننت‌ها و بخش‌های بسیار زیادی دارد که برخی از اصلی‌ترین این موارد به شرح زیر است:</p>



<ul class="wp-block-list">
<li><strong><a href="https://hamravesh.com/blog/what-is-kubernetes-pod/">Pod</a>:</strong> پاد‌ها کوچک‌ترین واحد قابل اجرا در کوبرنتیز هستند که از یک یا چند کانتینر تشکیل می‌شوند.</li>



<li><strong><a href="https://hamravesh.com/blog/what-is-kubernetes-node/">Node</a>:</strong> نود ماشینی فیزیکی یا مجازی است که پادها را در خود نگهداشته و اجرا می‌کند.</li>



<li><strong>Cluster:</strong> مجموعه‌ای از نودها که تحت مدیریت یک کوبرنتیز واحد قرار دارند.</li>



<li><strong>Service:</strong> از سرویس‌ برای تعریف مجموعه‌ای از پادها و یک سیاست دسترسی به آن‌ها استفاده می‌شود.</li>



<li><strong>Deployment:</strong> دیپلویمنت نوعی کنترلر است که برای مدیریت استقرارها و به‌روزرسانی‌های برنامه‌ استفاده می‌شود. </li>
</ul>



<h2 class="wp-block-heading" id="h-سوال-پنجم-تفاوت-کوبرنتیز-و-داکر-چیست">سوال پنجم: تفاوت کوبرنتیز و داکر چیست؟</h2>



<p>داکر و کوبرنتیز هر دو در زمینه کانتینرسازی و مدیریت کانتینرها به کار می‌روند، اما نقش‌ها و وظایف متفاوتی دارند. داکر یک پلتفرم متن‌باز است که برای ساخت، ارسال، و اجرای کانتینرها استفاده می‌شود و به توسعه‌دهندگان این امکان را می‌دهد تا برنامه‌های خود را در قالب کانتینرها بسته‌بندی کرده و در محیط‌های مختلف به طور یکسان اجرا کنند. در مقابل، کوبرنتیز یک سیستم<strong> <a href="https://hamravesh.com/blog/what-is-orchestration/" target="_blank" rel="noreferrer noopener">ارکستریشن</a></strong> کانتینر است که برای مدیریت استقرار، مقیاس‌پذیری، و عملیات خودکار کانتینرها طراحی شده است. کوبرنتیز به مدیران سیستم‌ها کمک می‌کند تا تعداد زیادی از کانتینرها را در کلاسترهای توزیع‌شده مدیریت کرده و قابلیت‌های مقیاس‌پذیری و خودپایداری را فراهم می‌کند. </p>



<p>به طور خلاصه، داکر برای ایجاد و اجرای کانتینرها است و کوبرنتیز برای مدیریت و ارکستریشن آن‌ها در محیط‌های گسترده استفاده می‌شود. </p>



<p>برای آشنایی بیشتر با تفاوت‌های Docker و Kubernetes می‌توانید مطلب «<strong><a href="https://hamravesh.com/blog/docker-vs-kubernetes/">تفاوت داکر و کوبرنتیز</a></strong>» را مطالعه کنید. </p>



<h2 class="wp-block-heading" id="h-سوال-ششم-منظور-از-مقیاس-پذیری-در-کوبرنتیز-چیست">سوال ششم: منظور از مقیاس‌پذیری در کوبرنتیز چیست؟</h2>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="478" src="https://hamravesh.com/blog/wp-content/uploads/2024/12/kubernetes-scaling-1024x478.webp" alt="مقیاس‌پذیری در کوبرنتیز" class="wp-image-4088" srcset="https://hamravesh.com/blog/wp-content/uploads/2024/12/kubernetes-scaling-1024x478.webp 1024w, https://hamravesh.com/blog/wp-content/uploads/2024/12/kubernetes-scaling-300x140.webp 300w, https://hamravesh.com/blog/wp-content/uploads/2024/12/kubernetes-scaling-768x358.webp 768w, https://hamravesh.com/blog/wp-content/uploads/2024/12/kubernetes-scaling-1536x717.webp 1536w, https://hamravesh.com/blog/wp-content/uploads/2024/12/kubernetes-scaling-2048x956.webp 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p><strong>مقیاس‌پذیری</strong> در کوبرنتیز به توانایی افزایش یا کاهش منابع تخصیص‌یافته به برنامه‌ها یا کلاسترها به‌صورت پویا و متناسب با نیازهای کاری اشاره دارد. این ویژگی به شما امکان می‌دهد با رشد یا کاهش تقاضا، عملکرد برنامه‌ها و استفاده بهینه از منابع را حفظ کنید.</p>



<h3 class="wp-block-heading" id="h-انواع-مقیاس-پذیری-در-کوبرنتیز"><strong>انواع مقیاس‌پذیری در کوبرنتیز</strong></h3>



<h4 class="wp-block-heading" id="h-1-مقیاس-پذیری-افقی-horizontal-scaling">1. <strong>مقیاس‌پذیری افقی (Horizontal Scaling):</strong></h4>



<p>در این روش، تعداد پادها (Pods) که برنامه شما را اجرا می‌کنند، افزایش یا کاهش می‌یابد. برای مثال:</p>



<ul class="wp-block-list">
<li>اگر ترافیک روی برنامه زیاد شود، می‌توانید تعداد پادها را افزایش دهید.</li>



<li>وقتی بار کاری کاهش یابد، تعداد پادها کم می‌شود تا منابع کمتری مصرف شود.</li>
</ul>



<p><strong>Horizontal Pod Autoscaler (HPA)</strong> در این حالت وظیفه دارد تا تعداد پادها را بر اساس متریک‌هایی مانند مصرف CPU یا RAM به‌صورت خودکار تنظیم کند.</p>



<p><strong>مثال کاربردی:</strong></p>



<p>فرض کنید یک وب‌سایت فروشگاهی دارید و ترافیک آن در روزهای خاصی مانند حراج‌های فصلی افزایش می‌یابد. HPA به شما کمک می‌کند تعداد پادهای پشتیبان این وب‌سایت را به‌صورت خودکار افزایش دهید تا کاربران تجربه بهتری داشته باشند.</p>



<h4 class="wp-block-heading" id="h-2-مقیاس-پذیری-عمودی-vertical-scaling">2. <strong>مقیاس‌پذیری عمودی (Vertical Scaling):</strong></h4>



<p>در این روش، منابع اختصاص‌یافته به هر پاد (مانند CPU و RAM) افزایش یا کاهش می‌یابد. به عبارت دیگر، به جای افزایش تعداد پادها، ظرفیت هر پاد تغییر می‌کند.</p>



<p><strong>Vertical Pod Autoscaler (VPA)</strong> در این روش وظیفه دارد تا به‌صورت خودکار میزان منابع لازم برای پادها را تنظیم کند.</p>



<p><strong>مثال کاربردی:</strong></p>



<p>اگر برنامه‌ای دارید که عملکرد آن تحت تأثیر حافظه کم قرار می‌گیرد، VPA می‌تواند میزان RAM اختصاصی به آن را افزایش دهد.</p>



<h4 class="wp-block-heading" id="h-3-مقیاس-پذیری-کلاستر-cluster-scaling">3. <strong>مقیاس‌پذیری کلاستر (Cluster Scaling):</strong></h4>



<p>این روش شامل افزودن یا حذف نودها (Nodes) از کلاستر کوبرنتیز است. این نوع مقیاس‌پذیری زمانی ضروری است که منابع موجود در نودهای فعلی برای پادها کافی نباشند.</p>



<p><strong>Cluster Autoscaler</strong> در روش مقیاس‌پذیری کلاستر وظیفه دارد تا به‌صورت خودکار تعداد نودها را بر اساس نیاز پادها تنظیم کند.</p>



<p><strong>مثال کاربردی:</strong></p>



<p>فرض کنید تعداد زیادی پاد جدید باید ایجاد شود، اما کلاستر فضای کافی برای اجرای آن‌ها ندارد. Cluster Autoscaler می‌تواند نودهای بیشتری به کلاستر اضافه کند.</p>



<h2 class="wp-block-heading" id="h-سوال-هفتم-آیا-کوبرنتیز-می-تواند-خطاها-را-به-صورت-خودکار-رفع-کند">سوال هفتم: <strong>آیا کوبرنتیز می‌تواند خطاها را به‌صورت خودکار رفع کند؟</strong></h2>



<p>بله، یکی از ویژگی‌های برجسته و کاربردی <strong>کوبرنتیز</strong> قابلیت بازسازی خودکار یا <strong>Self-Healing</strong> است. این ویژگی به کوبرنتیز اجازه می‌دهد که در مواقعی که مشکلاتی در کلاستر یا منابع ایجاد می‌شود، به‌صورت خودکار برای حل آن‌ها اقدام کند.</p>



<p><strong>Self-Healing</strong> در کوبرنتیز به معنای توانایی تشخیص خطاها و مشکلات و اقدام خودکار برای بازگرداندن منابع به حالت نرمال است. این کار از طریق چندین مکانیزم داخلی انجام می‌شود:</p>



<h3 class="wp-block-heading" id="h-1-بازسازی-پادهای-خراب-یا-از-کار-افتاده-restart-pods"><strong>1. </strong><strong>بازسازی پادهای خراب یا از کار افتاده (Restart Pods)</strong></h3>



<p>اگر یک پاد (Pod) از کار بیفتد یا پاسخگو نباشد، کوبرنتیز به‌صورت خودکار آن را مجدداً راه‌اندازی می‌کند. این کار با کمک <strong>Kubelet</strong> انجام می‌شود که به‌صورت مداوم وضعیت پادها را بررسی می‌کند.</p>



<ul class="wp-block-list">
<li>اگر یک کانتینر در پاد خراب شود، کوبرنتیز فقط همان کانتینر را بازنشانی می‌کند.</li>



<li>اگر پاد کلاً از کار بیفتد، یک پاد جدید جایگزین آن می‌شود.</li>
</ul>



<h3 class="wp-block-heading" id="h-2-جایگزینی-پادهای-حذف-شده-replace-pods"><strong>2. </strong><strong>جایگزینی پادهای حذف‌شده (Replace Pods)</strong></h3>



<p>اگر یک پاد به هر دلیلی از بین برود (مثلاً به دلیل مشکلات نود یا خطای انسانی)، کوبرنتیز با کمک <strong>ReplicaSet</strong> اطمینان حاصل می‌کند که تعداد مشخصی از پادها همیشه در حال اجرا هستند.</p>



<h3 class="wp-block-heading" id="h-3-مسیرهای-سالم-سازی-health-checks"><strong>3. </strong><strong>مسیرهای سالم‌سازی (Health Checks)</strong></h3>



<p>کوبرنتیز از دو نوع چک سلامت برای نظارت بر وضعیت کانتینرها استفاده می‌کند:</p>



<ul class="wp-block-list">
<li><strong>Liveness Probe</strong>: بررسی می‌کند که آیا کانتینر هنوز زنده است یا خیر. اگر این بررسی شکست بخورد، کانتینر ری‌استارت می‌شود.</li>



<li><strong>Readiness Probe</strong>: بررسی می‌کند که آیا کانتینر آماده سرویس‌دهی است یا نه. اگر این بررسی شکست بخورد، کوبرنتیز آن پاد را از ترافیک ورودی خارج می‌کند تا کاربر تجربه بدی نداشته باشد.</li>
</ul>



<h3 class="wp-block-heading" id="h-4-جابه-جایی-بار-eviction"><strong>4. جابه‌جایی بار (Eviction)</strong></h3>



<p>اگر نودها (<strong>Nodes</strong>) دچار کمبود منابع شوند (مانند CPU یا RAM)، کوبرنتیز به‌صورت خودکار پادهایی که کمترین اولویت را دارند حذف می‌کند و به اجرای پادهای حیاتی اولویت می‌دهد.</p>



<h3 class="wp-block-heading" id="h-5-انتقال-پادها-در-صورت-خرابی-نودها-node-failure"><strong>5. </strong><strong>انتقال پادها در صورت خرابی نودها (Node Failure)</strong></h3>



<p>اگر یک نود به هر دلیلی خراب شود یا پاسخگو نباشد، کوبرنتیز وضعیت آن را به‌صورت خودکار بررسی می‌کند. اگر نود دیگر قابل استفاده نباشد:</p>



<ul class="wp-block-list">
<li>کوبرنتیز پادهای موجود روی آن نود را به نودهای دیگر منتقل می‌کند.</li>



<li>این فرآیند با استفاده از <strong>Scheduler</strong> انجام می‌شود.</li>
</ul>



<h3 class="wp-block-heading" id="h-6-مدیریت-استقرارها-deployments-management"><strong>6. </strong><strong>مدیریت استقرارها (Deployments Management)</strong></h3>



<p>در هنگام استقرار یک نسخه جدید از برنامه، اگر به هر دلیلی نسخه جدید با مشکل مواجه شود، کوبرنتیز می‌تواند به‌صورت خودکار به نسخه پایدار قبلی بازگردد.</p>



<h2 class="wp-block-heading" id="h-در-پایان">در پایان</h2>



<p>کوبرنتیز در اکوسیستم استارتاپی و سازمانی ایران هنوز تکنولوژی نوپایی به حساب آمده و کمتر شناخته شده است. اما با توجه به مزایا و امکاناتی که ارائه می‌دهد، در آینده‌ای نزدیک مطمئنا به یکی از اصلی‌ترین تکنولوژی‌ها در حوزه زیرساخت تبدیل شده و شرکت‌های بیشتری به استفاده از آن روی می‌آورند. </p>



<p>در این مطلب به ۷ سوال متداول حوزه کوبرنتیز و جواب‌های آن‌ها پرداختیم و همچنین لیستی از کاربردی‌ترین مقالات حوزه کوبرنتیز را معرفی کردیم.</p>
<p>The post <a href="https://hamravesh.com/blog/kubernetes-faq/">پاسخ به متداول‌ترین سوالات کوبرنتیز</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://hamravesh.com/blog/kubernetes-faq/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>ترفندهایی برای کاهش هزینه‌ها در کوبرنتیز</title>
		<link>https://hamravesh.com/blog/kubernetes-cost-optimizat/</link>
					<comments>https://hamravesh.com/blog/kubernetes-cost-optimizat/#respond</comments>
		
		<dc:creator><![CDATA[بابک خوش‌نویس]]></dc:creator>
		<pubDate>Tue, 03 Dec 2024 14:27:23 +0000</pubDate>
				<category><![CDATA[مقالات]]></category>
		<category><![CDATA[کوبرنتیز]]></category>
		<guid isPermaLink="false">https://hamravesh.com/blog/?p=3541</guid>

					<description><![CDATA[<p>در این نوشته،‌ انواع هزینه‌های مرتبط با کوبرنتیز را بررسی می‌کنیم و برخی از راهکارهای کلیدی و نکات کاربردی برای بهینه‌سازی و کاهش هزینه کوبرنتیز را مرور می‌کنیم.</p>
<p>The post <a href="https://hamravesh.com/blog/kubernetes-cost-optimizat/">ترفندهایی برای کاهش هزینه‌ها در کوبرنتیز</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>«کوبرنتیز» (<a href="https://hamravesh.com/blog/what-is-kubernetes/">Kubernetes</a>) حالا به راه‌حل اصلی برای مدیریت و هماهنگی <a href="https://hamravesh.com/blog/what-is-container/">کانتِینرها</a> تبدیل شده است، اما کنترل هزینه‌های آن برای شرکت‌هایی که می‌خواهند هزینه‌های IT خود را بهینه کنند، چالش برانگیز است. در این نوشته،‌ انواع هزینه‌های مرتبط با اجرای کوبرنتیز را بررسی می‌کنیم و برخی از راهکارهای کلیدی و نکات کاربردی برای بهینه‌سازی و کاهش هزینه کوبرنتیز را مرور می‌کنیم.</p>



<h2 class="wp-block-heading" id="h-انواع-هزینه-کوبرنتیز-کدامند">انواع هزینه کوبرنتیز کدامند؟</h2>



<p>در اجرای کوبرنتیز، چند نوع هزینه وجود دارد که باید در نظر بگیرید. این هزینه‌های کوبرنتیز را می‌توان به‌طور کلی به ۳ دسته اصلی تقسیم کرد. این ۳ دسته شامل <strong>پردازش</strong>، <strong>شبکه</strong> و <strong>ذخیره‌سازی</strong> می‌شود که در ادامه هر کدام را شرح می‌دهیم.</p>



<h3 class="wp-block-heading" id="h-هزینه-های-مربوط-به-پردازش-یا-محاسبات-در-کوبرنتیز">هزینه‌های مربوط به پردازش یا محاسبات در کوبرنتیز</h3>



<p>هزینه‌های پردازش معمولاً بخش اصلی صورت‌حساب کوبرنتیز را تشکیل می‌دهند. این هزینه‌ها مربوط به سرورهایی هستند که nodeهای کوبرنتیز شما را اجرا می‌کنند. هر نود در یک کلاستر کوبرنتیز، یک ماشین worker است و هزینه هر ماشین بر اساس ظرفیت CPU و حافظه آن محاسبه می‌شود. هر چه تعداد گره‌ها بیشتر و ظرفیت آن‌ها بزرگتر باشد، هزینه‌های پردازش نیز بالاتر خواهد بود.</p>



<h3 class="wp-block-heading" id="h-هزینه-های-کوبرنتیز-مربوط-به-شبکه">هزینه‌های کوبرنتیز مربوط به شبکه</h3>



<p>در کوبرنتیز، هزینه‌های شبکه مربوط به انتقال داده بین سرویس‌های شما و دنیای خارج و همچنین بین سرویس‌های مختلف درون کلاستر شماست. این هزینه‌های کوبرنتیز می‌توانند به‌سرعت افزایش یابند، به‌خصوص اگر برنامه‌های شما حجم زیادی از داده‌ها را پردازش می‌کنند یا اگر سرویس‌هایی را در مناطق مختلف اجرا می‌کنید.</p>



<h3 class="wp-block-heading" id="h-هزینه-ذخیره-سازی-در-کوبرنتیز">هزینه ذخیره‌سازی در کوبرنتیز</h3>



<p>هزینه‌های ذخیره‌سازی زمانی مطرح می‌شوند که شما از حجم‌های پایدار در کلاستر کوبرنتیز خود استفاده می‌کنید. حجم‌های پایدار برای ذخیره داده‌هایی (مثل فایل‌های پایگاه داده) استفاده می‌شوند که باید پس از ری‌استارت شدن podها حفظ شوند. هزینه این حجم‌ها به اندازه آن‌ها و نوع ذخیره‌سازی که استفاده می‌کنید بستگی دارد.</p>



<h2 class="wp-block-heading" id="h-انباشتگی-هزینه-های-کوبرنتیز-در-تنظیمات-بهینه-نشده">انباشتگی هزینه‌های کوبرنتیز در تنظیمات بهینه‌نشده</h2>



<p>در تنظیمات کوبرنتیز که بهینه نشده‌اند، هزینه‌ها می‌توانند به‌سرعت انباشته شوند. اینجا چند سناریوی رایج را مرور می‌کنیم:</p>



<ul class="wp-block-list">
<li><strong>تخصیص بیش از حد منابع</strong>: اگر nodeهای بیشتر از حد نیاز اجرا می‌کنید یا اگر nodeهای شما بزرگتر از حد نیاز هستند، برای ظرفیت استفاده نشده هزینه پرداخت می‌کنید. این یکی از رایج‌ترین منابع هزینه‌های غیرضروری در کوبرنتیز است.</li>



<li><strong>شبکه‌‌بندی ناکارآمد</strong>: اگر سرویس‌های شما طوری طراحی نشده‌اند که انتقال داده را به حداقل برسانند، ممکن است هزینه‌های شبکه بالایی داشته باشید. این مسئله به‌خصوص زمانی صادق است که داده‌ها را بین regionهای مختلف منتقل می‌کنید، یا سرویس‌های شما پرگفتگو هستند و داده‌های زیادی را مبادله می‌کنند.</li>



<li><strong>volumeهای پایدار استفاده نشده</strong>: volumeهای پایداری که تخصیص داده شده‌اند اما استفاده نمی‌شوند همچنان هزینه دارند. مهم است که به‌طور منظم volumeهای استفاده نشده را بررسی و پاک‌سازی کنید تا از پرداخت هزینه کوبرنتیز برای ذخیره‌سازی که نیاز ندارید جلوگیری شود.</li>
</ul>



<h2 class="wp-block-heading" id="h-استراتژی-های-کلیدی-برای-کاهش-هزینه-های-کوبرنتیز">استراتژی‌های کلیدی برای کاهش هزینه‌های کوبرنتیز</h2>



<p>بهینه‌سازی و کاهش هزینه کوبرنتیز شامل ترکیبی از برنامه‌ریزی استراتژیک و مدیریت مؤثر منابع است. در اینجا استراتژی‌های اصلی که باید در نظر گرفت آمده است:</p>



<ul class="wp-block-list">
<li><strong>نظارت بر هزینه کوبرنتیز برای کاهش آن</strong>: ایجاد یک سیستم قوی برای نظارت بر هزینه‌ها ضروری است. این استراتژی شامل پیگیری مخارج کوبرنتیز برای شناسایی ترندها و مواردی است که می‌توان هزینه‌ها را در آن‌ها بهینه کرد.</li>



<li><strong>محدودیت‌های منابع</strong>: اعمال محدودیت‌های منابع برای کنترل و کاهیش هزینه کوبرنتیز ضروری است. با تعیین حد بالا برای استفاده از منابع، از مصرف بیش از حد منابع توسط هر برنامه یا سرویس جلوگیری می‌کنید و در نتیجه هزینه‌های کلی را بهینه می‌کنید.</li>



<li><strong>مقیاس‌پذیری خودکار</strong>: ترکیب Auto-Scaling افقی و عمودی، تخصیص منابع را با استفاده واقعی هماهنگ می‌کند و اطمینان می‌دهد که فقط برای آنچه نیاز دارید هزینه می‌کنید. این استراتژی برای سازگاری با شرایط بار (load) متغیر بدون تخصیص بیش از حد منابع ضروری است.</li>



<li><strong>استفاده از منابع تخفیف‌دار برای کاهش هزینه کوبرنتیز</strong>: استفاده از ریسورس‌های تخفیف‌دار ارائه‌دهندگان ابری، مانند نمونه‌های موقتی یا رزرو شده، می‌تواند هزینه‌ها را به طور قابل توجهی کاهش دهد. این گزینه‌ها به ویژه برای بارهای کاری انعطاف‌پذیر یا کم‌تر حساس به زمان ارزشمند هستند.</li>



<li><strong>حالت خواب</strong> (<strong>Sleep Mode</strong>): برای محیط‌های غیر تولیدی (non-production)، اجرای حالت‌های خواب در ساعات کم مصرف می‌تواند هزینه‌ها را به شدت کاهش دهد.</li>



<li><strong>استراتژی‌های پاکسازی</strong>: maintenance منظم برای حذف منابع قدیمی یا استفاده نشده، از جمله بارهای کاری، تصاویر و گزارش‌ها، از هزینه‌های بیهوده جلوگیری می‌کند.</li>



<li>اشتراک‌گذاری کلاستر و Multi-Tenancy: با ادغام بارهای کاری در خوشه‌های کمتر و استفاده از Multi-Tenancy (چند-مستأجری) می‌توانید هزینه‌های سربار و مدیریت را کاهش دهید. این رویکرد باید جداسازی مناسب بین مستأجران را برای جلوگیری از مسائل امنیتی و عملکردی تضمین کند.</li>
</ul>



<h2 class="wp-block-heading" id="h-استفاده-از-راهکار-مدیریت-کانتینر-برای-کاهش-هزینه-کوبرنتیز">استفاده از راهکار مدیریت کانتینر برای کاهش هزینه کوبرنتیز</h2>



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



<h2 class="wp-block-heading" id="h-نکات-کاربردی-برای-بهینه-سازی-و-کاهش-هزینه-های-کوبرنتیز">نکات کاربردی برای بهینه‌سازی و کاهش هزینه‌های کوبرنتیز</h2>



<p>در اینجا چند نکته کاربردی و بهترین روش‌ها برای بهینه‌سازی و کاهش هزینه در کوبرنتیز آورده شده است.</p>



<ul class="wp-block-list">
<li><strong>نظارت جامع بر هزینه‌ها</strong>: از ابزارهایی مانند <a href="https://hamravesh.com/blog/what-is-prometheus/">پرومتئوس (Prometheus)</a> و Kubecost برای دریافت اطلاعات مالی دقیق استفاده کنید. بررسی منظم این معیارها امکان تنظیم به موقع استراتژی‌های شما را فراهم می‌کند.</li>



<li><strong>اعمال محدودیت‌ها و درخواست‌ها برای منابع</strong>: با استفاده از قابلیت‌های داخلی کوبرنتیز، درخواست‌ها و محدودیت‌های دقیق منابع را برای هر pod تعیین کنید. این کار به استفاده کارآمد از منابع و جلوگیری از هزینه‌های اضافی کمک می‌کند.</li>



<li><strong>استفاده هوشمندانه از مقیاس‌پذیری خودکار</strong> (<strong>Autoscaling</strong>): از «مقیاس‌دهنده افقی پاد و مقیاس‌دهنده عمودی پاد کوبرنتیز» (Horizontal Pod Autoscaler and Vertical Pod Autoscaler) استفاده کنید تا منابع به‌صورت پویا بر اساس نیاز واقعی تنظیم شوند و کارایی هزینه تضمین شود.</li>



<li><strong>بهینه‌سازی با استفاده از منابع ابری تخفیف‌دار</strong>: از تخفیف‌های ارائه‌دهندگان ابری مانند نمونه‌های اسپات AWS برای کارهای قابل وقفه، یا نمونه‌های رزرو شده Azure برای کارهای قابل پیش‌بینی استفاده کنید تا در هزینه‌ها صرفه‌جویی شود.</li>



<li><strong>اجرای روش‌های کارآمد مدیریت منابع</strong>: پاکسازی منظم منابع را انجام دهید، حالت خواب (Sleep Mode) را برای محیط‌های بیکار (Idle) پیاده‌سازی کنید و از فضاهای نام (Namespace) برای جداسازی و مدیریت موثر منابع استفاده کنید.</li>



<li><strong>استفاده از روش‌های اشتراک‌گذاری خوشه و چند مستاجری</strong>: از ابزارهایی مانند فضاهای نام کوبرنتیز و خوشه‌های مجازی (Virtual Cluster) استفاده کنید و استفاده از پلتفرم‌هایی را در نظر بگیرید که استقرار و مدیریت برنامه‌ها روی کوبرنتیز را ساده می‌کنند. این پلتفرم‌ها می‌توانند به ساده‌سازی اشتراک‌گذاری خوشه و چند مستاجری کمک کنند و مدیریت منابع را آسان‌تر کرده و احتمالاً هزینه‌ها را کاهش دهند.</li>



<li><strong>استفاده از زمانبندی و تخصیص منابع پیشرفته</strong>: از ویژگی‌های زمانبندی کوبرنتیز و ابزارهایی مانند Descheduler یا Kube-batch برای مدیریت و بهینه‌سازی بهتر منابع استفاده کنید.</li>
</ul>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="721" height="376" src="https://hamravesh.com/blog/wp-content/uploads/2024/08/Reducing-Kubernetes-Costs.png" alt="کاهش هزینه کوبرنتیز" class="wp-image-3567" srcset="https://hamravesh.com/blog/wp-content/uploads/2024/08/Reducing-Kubernetes-Costs.png 721w, https://hamravesh.com/blog/wp-content/uploads/2024/08/Reducing-Kubernetes-Costs-300x156.png 300w" sizes="auto, (max-width: 721px) 100vw, 721px" /></figure>
</div>


<h2 class="wp-block-heading" id="h-جمع-بندی">جمع‌بندی</h2>



<p>بهینه‌سازی و کاهش هزینه‌های کوبرنتیز برای افزایش کارایی و اثربخشی زیرساخت ابری شما ضروری است. نکات کلیدی این مقاله شامل اهمیت نظارت بر هزینه‌ها با استفاده از ابزارهایی مانند پرومتئوس و Kubecost، اعمال محدودیت‌های منابع و استفاده از Auto-Scaling برای تطبیق استفاده از منابع با نیازهای واقعی است. </p>



<p>علاوه بر این، استفاده از <a href="https://www.qovery.com/blog/kubernetes-cost-optimization-tips-and-best-practises/">راهکارهای مدیریت کانتینر</a>، بهینه‌سازی هزینه را با ارائه ویژگی‌هایی مانند اشتراک‌گذاری منابع، خاموش کردن محیط‌های غیرفعال و استفاده از نمونه‌های مقرون‌به‌صرفه ARM بهبود می‌بخشد. با به‌کارگیری این استراتژی‌ها و بهترین روش‌ها، سازمان‌ها می‌توانند اطمینان حاصل کنند که فقط برای منابع مورد نیاز خود هزینه می‌کنند و بدین ترتیب هزینه‌های کلی را کاهش داده و کارایی عملیاتی را افزایش می‌دهند.</p>
<p>The post <a href="https://hamravesh.com/blog/kubernetes-cost-optimizat/">ترفندهایی برای کاهش هزینه‌ها در کوبرنتیز</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://hamravesh.com/blog/kubernetes-cost-optimizat/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>آموزش دیپلوی اپلیکیشن روی کوبرنتیز</title>
		<link>https://hamravesh.com/blog/deploy-application-kubernetes-step-by-step/</link>
					<comments>https://hamravesh.com/blog/deploy-application-kubernetes-step-by-step/#respond</comments>
		
		<dc:creator><![CDATA[ارسطو عباسی]]></dc:creator>
		<pubDate>Sat, 30 Nov 2024 08:11:19 +0000</pubDate>
				<category><![CDATA[مقالات]]></category>
		<category><![CDATA[کوبرنتیز]]></category>
		<guid isPermaLink="false">https://hamravesh.com/blog/?p=3500</guid>

					<description><![CDATA[<p>در این مطلب قصد داریم به‌صورت مرحله به مرحله شیوه دیپلوی یک اپلیکیشن جنگویی روی کوبرنتیز را از ابتدا پیش ببریم و به‌صورت کامل با این فرایند آشنا شویم.</p>
<p>The post <a href="https://hamravesh.com/blog/deploy-application-kubernetes-step-by-step/">آموزش دیپلوی اپلیکیشن روی کوبرنتیز</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>اگر دنبال راهنمایی برای دیپلوی اولین اپلیکیشن‌تان روی کوبرنتیز هستید، باید بگویم که جای درستی آمده‌اید. در این مطلب از وبلاگ هم‌روش قصد داریم به‌صورت مرحله به مرحله شیوه دیپلوی یا استقرار یک اپلیکیشن روی کوبرنتیز را از ابتدا پیش ببریم و به‌صورت کامل با این فرایند آشنا شویم. برای دنبال کردن این آموزش نیازی نیست که توسعه‌دهنده حرفه‌ای باشید، تمام موارد این مطلب براساس موضوعات ابتدایی نوشته شده است.</p>



<h2 class="wp-block-heading" id="h-چرا-باید-از-کوبرنتیز-استفاده-کنیم">چرا باید از کوبرنتیز استفاده کنیم؟</h2>



<p>کوبرنتیز به عنوان یک <strong><a href="https://hamravesh.com/blog/what-is-orchestration/" target="_blank" rel="noreferrer noopener">سیستم ارکستریشن کانتینر</a></strong>، امکانات بسیاری را فراهم می‌کند که توسعه و مدیریت برنامه‌های مدرن را ساده‌تر و کارآمدتر می‌سازد. یکی از اصلی‌ترین دلایل استفاده از کوبرنتیز، خودکارسازی فرآیندهای پیچیده است. این سیستم به طور خودکار وظایفی مانند مقیاس‌دهی، توزیع ترافیک، و نظارت بر سلامت کانتینرها را انجام می‌دهد، که باعث کاهش بار کاری تیم‌های توسعه و عملیات می‌شود.</p>



<p>کوبرنتیز از قابلیت <strong>خود ترمیمی</strong> برخوردار است، بدین معنا که در صورت بروز خطا در یکی از کانتینرها یا نودها، به طور خودکار تلاش می‌کند آن را بازیابی کند. این ویژگی به تضمین بالاترین سطح در دسترس بودن برنامه‌ها کمک می‌کند. همچنین، کوبرنتیز از کانتینرها در محیط‌های مختلف اعم از سرورهای محلی، مراکز داده خصوصی، و ابرهای عمومی پشتیبانی می‌کند، که این امر باعث افزایش انعطاف‌پذیری در انتخاب زیرساخت می‌شود.</p>



<p>با استفاده از کوبرنتیز، توسعه‌دهندگان می‌توانند برنامه‌های خود را به صورت <strong><a href="https://hamravesh.com/blog/microservice-monitoring/">میکروسرویس</a></strong> پیاده‌سازی کنند، که این رویکرد به بهبود قابلیت مقیاس‌پذیری و نگهداری کمک می‌کند. به علاوه، با استفاده از فایل‌های پیکربندی قابل تعریف، می‌توان به راحتی محیط‌های توسعه، آزمایش و تولید را همسان‌سازی کرد و از بروز مشکلات ناسازگاری محیطی جلوگیری نمود.</p>



<p>کوبرنتیز همچنین امکان یکپارچه‌سازی با ابزارهای مختلف CI/CD (توسعه و استقرار پیوسته) را فراهم می‌کند، که این موضوع به تسریع فرآیندهای توسعه و انتشار نرم‌افزار منجر می‌شود. با توجه به این مزایا، کوبرنتیز یک ابزار حیاتی برای توسعه‌دهندگان و تیم‌های عملیات فناوری اطلاعات است که به دنبال بهبود کارایی، کاهش هزینه‌ها و افزایش قابلیت اطمینان سیستم‌های خود هستند.</p>



<h2 class="wp-block-heading" id="h-پیش-نیازها"> پیش‌نیازها</h2>



<p>برای استفاده و استقرار اپلیکیشن روی کوبرنتیز نیاز است که ابتدا کوبرنتیز را روی Master Node و Worker Node نصب کنید. برای انجام این‌کار می‌توانید براساس قطعه کدهای زیر پیش بروید. هر بخش به‌صورت کامنت از همدیگر جدا شده است:</p>



<pre class="wp-block-code"><code>-------------------------------------- Both Master &amp; Worker Node ---------------------------------------
sudo su
apt update -y
apt install docker.io -y

systemctl start docker
systemctl enable docker

curl -fsSL "https://packages.cloud.google.com/apt/doc/apt-key.gpg" | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/kubernetes-archive-keyring.gpg
echo 'deb https://packages.cloud.google.com/apt kubernetes-xenial main' &gt; /etc/apt/sources.list.d/kubernetes.list

apt update -y
apt install kubeadm=1.20.0-00 kubectl=1.20.0-00 kubelet=1.20.0-00 -y

# To connect with cluster execute above commands on master node and worker node respectively
--------------------------------------------- Master Node -------------------------------------------------- 
sudo su
kubeadm init

# To start using your cluster, you need to run the following as a regular user:
  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

# Alternatively, if you are the root user, you can run:
  export KUBECONFIG=/etc/kubernetes/admin.conf
  
kubectl apply -f https://github.com/weaveworks/weave/releases/download/v2.8.1/weave-daemonset-k8s.yaml

kubeadm token create --print-join-command
  

------------------------------------------- Worker Node ------------------------------------------------ 
sudo su
kubeadm reset pre-flight checks
-----&gt; Paste the Join command on worker node and append `--v=5` at end

#To verify cluster connection  
---------------------------------------on Master Node-----------------------------------------

kubectl get nodes 


# worker
# kubeadm join 172.31.84.66:6443 --token n4tfb4.grmew1s1unug0get     --discovery-token-ca-cert-hash sha256:c3fda2eaf5960bed4320d8175dc6a73b1556795b1b7f5aadc07642ed85c51069 --v=5
# kubeadm reset pre-flight checks
# kubeadm token create --print-join-command
# kubectl label node ip-172-31-20-246 node-role.kubernetes.io/worker=worker
# kubectl label nodes ip-172-31-92-99 kubernetes.io/role=worker
# kubectl config set-context $(kubectl config current-context) --namespace=dev</code></pre>



<p>برای کوتاه کردن آموزش، ما از یک پروژه آماده جنگو استفاده می‌کنیم که داکرایز شده است. برای این‌کار از <a href="https://github.com/LondheShubham153/django-todo-cicd">این مخزن</a>، پروژه را Clone می‌کنیم. </p>



<p>با مشاهده dockerfile این مخزن می‌توانیم کدهای زیر را مشاهده کنیم:</p>



<pre class="wp-block-code"><code>FROM python:3

WORKDIR /data

RUN pip install django==3.2

COPY . .

RUN python manage.py migrate

EXPOSE 8000

CMD &#91;"python","manage.py","runserver","0.0.0.0:8000"]</code></pre>



<p>همانطور که مشاهده می‌کنید پروژه مورد نظر با زبان پایتون نوشته شده و براساس جنگو نسخه ۳.۲ کار می‌کند. </p>



<p>در مرحله بعدی نیاز است که با استفاده از داکرفایل پروژه را Build کنیم. برای این‌ کار وارد دایرکتوری پروژه شده و دستور زیر را اجرا کنید:</p>



<pre class="wp-block-code"><code>docker build . -t django-todo:latest</code></pre>



<p>حال برای مطمئن شدن از موفقیت‌آمیز بودن دستور بالا، می‌توانید دستور docker image را وارد کنید تا لیستی از imageها را مشاهده کنید. در صورت وجود ایمیج django-todo می‌توانید مطمئن شوید که همه چیز به درستی پیش رفته است. </p>



<p>بعد از انجام تمام موارد بالا نیاز است که ایمیج مربوطه را به رجیستری push کنید. برای این‌ کار ابتدا با دستور <code>docker login</code> فرایند ورود به داکر‌هاب را طی کنید. با وارد کردن این دستور از شما نام‌کاربری و رمزعبور پرسیده خواهد شد.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="850" height="211" src="https://hamravesh.com/blog/wp-content/uploads/2024/08/docker-login.webp" alt="ورود به داکر هاب" class="wp-image-3507" srcset="https://hamravesh.com/blog/wp-content/uploads/2024/08/docker-login.webp 850w, https://hamravesh.com/blog/wp-content/uploads/2024/08/docker-login-300x74.webp 300w, https://hamravesh.com/blog/wp-content/uploads/2024/08/docker-login-768x191.webp 768w" sizes="auto, (max-width: 850px) 100vw, 850px" /></figure>



<p>بعد از ورود موفقیت‌آمیز، می‌توانید با استفاده از دستور <code>docker push image-name</code>، ایمیج خود را به رجیستری ارسال کنید. برای آشنایی بیشتر با مفهوم رجیستری می‌توانید مطلب «<strong><a href="https://hamravesh.com/blog/what-is-container-registry/">کانتینر رجیستری (container registry) چیست؟</a></strong>» را مطالعه کنید. </p>



<h2 class="wp-block-heading" id="h-پیاده-سازی-کوبرنتیز">پیاده‌سازی کوبرنتیز</h2>



<p>برای استفاده از قابلیت کوبرنتیز، دو راهکار کلی وجود دارد:</p>



<ol class="wp-block-list">
<li>استفاده از رابط کاربری متنی</li>



<li>تعریف فایل YAML</li>
</ol>



<p>در روش اول با استفاده از <strong><a href="https://hamravesh.com/blog/what-is-kubectl/">ابزار kubectl</a></strong> شما امکان ارتباط برقرار کردن با کلاستر کوبرنتیز را خواهید داشت. این ابزار شامل مجموعه‌ای از دستورات است که برای مدیریت کوبرنتیز استفاده می‌شود.</p>



<p>در روش دوم، ما یک فایل YAML را ایجاد می‌کنیم و تمام ویژگی‌ها و وضعیت‌های مورد نظر را در آن ذکر خواهیم کرد. پاد‌ها، دیپلویمنت‌ها، ConfigMap و&#8230; را می‌توان در این فایل مشخص کرد. </p>



<p>در این آموزش ما قصد داریم از روش دوم، یعنی تعریف فایل YAML استفاده کنیم. </p>



<h3 class="wp-block-heading" id="h-تعریف-پاد">تعریف پاد</h3>



<p>در قدم اول فایلی با نام pod.yml ایجاد می‌کنیم و قطعه کد زیر را در آن قرار می‌دهیم:</p>



<pre class="wp-block-code"><code>apiVersion: v1
kind: Pod
metadata:
  name: django-app
spec:
  containers:
  - name: django-app
    image:django-todo:latest
    ports: 
    - containerPort: 8000</code></pre>



<p>برای آشنایی با قطعه کد بالا نیاز است که هر بخش را جداگانه توضیح دهیم:</p>



<ul class="wp-block-list">
<li><code>apiVersion</code>: مشخص کردن نسخه Kubernetes API که در این فایل مورد استفاده قرار می‌گیرد.</li>



<li><code>kind</code>: در این بخش «نوع»  منابع کلاستر کوبرنتیز مشخص می‌شود که در این مثال pod است.</li>



<li><code>metadata</code>: این فیلد شامل متاداده‌های مربوط به هر پاد می‌شود.</li>



<li><code>spec</code>: تعریف وضعیت مطلوب پاد.</li>



<li><code>containers</code>: آرایه‌ای از کانتینرها که در این پاد باید اجرا شوند. در این مثال ما تنها یک کانتینر داریم.</li>



<li><code>name</code>: نام کانتینر مورد نظر.</li>



<li><code>image</code>: نام و نسخه ایمیج مورد نظر. </li>



<li><code>ports</code>: تعیین پورت‌هایی که کانتینر expose می‌کند.</li>
</ul>



<p>حال برای اعمال این فایل روی کلاستر کوبرنتیز و انجام به‌روزرسانی‌ها نیاز است که دستور زیر را اجرا کنید:</p>



<pre class="wp-block-code"><code>kubectl apply -f pod.yml</code></pre>



<p>برای مطمئن شدن از ایجاد پاد در درون namespace، می‌توانید دستور زیر را وارد کنید:</p>



<pre class="wp-block-code"><code>kubectl get pods -n=my-django-app</code></pre>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="720" height="469" src="https://hamravesh.com/blog/wp-content/uploads/2024/11/pod-creating-test.webp" alt="وجود namespace مربوط به پروژه" class="wp-image-4045" srcset="https://hamravesh.com/blog/wp-content/uploads/2024/11/pod-creating-test.webp 720w, https://hamravesh.com/blog/wp-content/uploads/2024/11/pod-creating-test-300x195.webp 300w" sizes="auto, (max-width: 720px) 100vw, 720px" /></figure>



<p>برای حذف کردن پاد مربوطه نیز کافی‌ست دستور زیر را وارد کنید:</p>



<pre class="wp-block-code"><code>kubectl delete -f pod.yml</code></pre>



<h2 class="wp-block-heading" id="h-دیپلویمنت">دیپلویمنت</h2>



<p>در Kubernetes، <strong>دیپلویمنت</strong> ابزاری است که برای اجرای برنامه‌های کانتینری‌شده استفاده می‌شود. دیپلویمنت به ما کمک می‌کند تا مدیریت مقیاس‌پذیری، به‌روزرسانی و پایداری اپلیکیشن را ساده‌تر پیش ببریم. <br><br>برای آشنایی بیشتر با دیپلویمنت و نقش آن در معماری کوبرنتیز می‌توانید به مطلب «<strong><a href="https://hamravesh.com/blog/kubernetes-architecture/#:~:text=%D8%A7%D8%B1%D8%AA%D8%A8%D8%A7%D8%B7%20%D8%A8%D8%B1%D9%82%D8%B1%D8%A7%D8%B1%20%DA%A9%D9%86%D9%86%D8%AF.-,3.%20%D8%AF%DB%8C%D9%BE%D9%84%D9%88%DB%8C%D9%85%D9%86%D8%AA%20(Deployment),-%D8%AF%DB%8C%D9%BE%D9%84%D9%88%DB%8C%D9%85%D9%86%D8%AA%E2%80%8C%D9%87%D8%A7%20%DB%8C%DA%A9%DB%8C%20%D8%A7%D8%B2">آشنایی با معماری کوبرنتیز</a></strong>» مراجعه کنید. </p>



<h3 class="wp-block-heading" id="h-ایجاد-فایل-دیپلویمنت">ایجاد فایل دیپلویمنت</h3>



<pre class="wp-block-code"><code>apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-django-app-deployment
  labels:
    app: django-app
  namespace: my-django-app
spec:
  replicas: 3
  selector:
    matchLabels:
      app: django-app
  template:
    metadata:
      labels:
        app: django-app
    spec:
      containers:
      - name: django-app-container
        image: trajendra/django-todo:latest
        ports:
        - containerPort: 8000</code></pre>



<p>در این مانیفست ما موارد زیر را تعریف کرده‌ایم:</p>



<ul class="wp-block-list">
<li><strong>kind</strong>: در اینجا نوع منبع <code>Deployment</code> است که برای مدیریت به‌روزرسانی و مدیریت پادها (Pods) استفاده می‌شود.</li>



<li><strong>selector</strong>: این بخش مشخص می‌کند که کدام پادها باید به این Deployment مرتبط شوند.
<ul class="wp-block-list">
<li><strong>matchLabels</strong>: نشان می‌دهد که هر پادی که لیبل <code>app: django-app</code> داشته باشد.</li>



<li><strong>replicas</strong>: تعداد کپی‌های پاد (Pod) را که باید ایجاد شود، مشخص می‌کند، در این مانیفست ما ۳ عدد را تعیین کرده‌ایم.</li>



<li><strong>template</strong>: الگوی ایجاد پادها را مشخص می‌کند.</li>
</ul>
</li>



<li><strong>spec</strong>: بخش <code>spec</code> مشخصات و رفتار Deployment را تعریف می‌کند.</li>
</ul>



<p>برای اعمال این فایل روی کلاستر کوبرنتیز و انجام به‌روزرسانی‌ها نیاز است که دستور زیر را اجرا کنید:</p>



<pre class="wp-block-code"><code>kubectl apply -f deployment.yml</code></pre>



<h2 class="wp-block-heading" id="h-scale-یا-مقیاس-دهی">Scale یا مقیاس‌دهی</h2>



<p>در کوبرنتیز، <strong>مفهوم مقیاس‌دهی (Scale)</strong> به فرآیند تغییر تعداد <strong>پادها (یا replicaها)</strong> مربوط می‌شود که برای اجرای یک برنامه استفاده می‌شوند. این عمل معمولاً برای مدیریت بار کاری و بهینه‌سازی منابع سیستم انجام می‌شود. </p>



<p>اگر بخواهیم ۱۰ رپلیکا را برای اپلیکیشن کنونی ایجاد کنیم، می‌توانیم با استفاده از kubectl، به شکل زیر عمل کنیم. </p>



<pre class="wp-block-code"><code>kubectl scale deployment my-django-app-deployment --replicas=10 -n=my-django-app</code></pre>



<p>همانطور که در دستور بالا مشاهده می‌کنید، <code>--replicas=10</code> تعداد رپلیکا مورد نیاز ما را تعیین می‌کند. کوبرنتیز با دریافت این دستور، تعداد پادها موجود در دیپلویمنت را با این عدد تنظیم می‌کند. </p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="720" height="328" src="https://hamravesh.com/blog/wp-content/uploads/2024/11/replica-pods-kubernetes.webp" alt="تعداد رپلیکاهای ایجاد شده" class="wp-image-4047" srcset="https://hamravesh.com/blog/wp-content/uploads/2024/11/replica-pods-kubernetes.webp 720w, https://hamravesh.com/blog/wp-content/uploads/2024/11/replica-pods-kubernetes-300x137.webp 300w" sizes="auto, (max-width: 720px) 100vw, 720px" /></figure>



<h2 class="wp-block-heading" id="h-سرویس"><strong>سرویس</strong></h2>



<p>در حال حاضر شما یک دیپلویمنت همراه با چندین پاد در حال اجرا دارید. هر کدام از این پادها یک IP Address منحصر به فرد دارند که به‌صورت پویا تغییر می‌کنند. اگر شما این پادها را به‌صورت مستقیم به کلاینت expose کنید، نیاز است که تغییرات ایجاد شده در IP Addressها را به‌صورت دستی مدیریت کنید. کوبرنتیز مکانیزمی به نام Service دارد که این مسئله را برای شما حل خواهد کرد. </p>



<h3 class="wp-block-heading" id="h-پیاده-سازی-service-yml">پیاده‌سازی service.yml</h3>



<p>فایلی با نام service.yml را ایجاد کرده و کدهای زیر را در آن قرار دهید:</p>



<pre class="wp-block-code"><code>apiVersion: v1
kind: Service
metadata:
  name: my-django-app-service
  namespace: my-django-app
spec:
  type: NodePort
  selector:
    app: django-app
  ports:
      # By default and for convenience, the `targetPort` is set to the same value as the `port` field.
    - port: 80
      targetPort: 8000
      # Optional field
      # By default and for convenience, the Kubernetes control plane will allocate a port from a range (default: 30000-32767)
      nodePort: 30009</code></pre>



<ul class="wp-block-list">
<li><strong>port: </strong>مشخص کردن پورت خود Service. در این فایل ما 80 را انتخاب کرده‌ایم. </li>



<li><strong>targetPort:</strong> پورت داخل پاد که برنامه روی آن اجرا می‌شود.</li>



<li><strong>nodePort: 30009: </strong>یک <strong>پورت ثابت</strong> که روی هر گره (Node) باز می‌شود و کاربران از طریق آن می‌توانند با آدرس IP نود و آن پورت به سرویس دسترسی پیدا کنند. در این مثال ما از 30009 استفاده کرده‌ایم. </li>
</ul>



<p>برای درک بهتر مفهوم <strong>nodePort</strong>، فرض کنید یک اپلیکیشن وب دارید که روی پورت 8080 داخل کانتینر اجرا می‌شود. با استفاده از <strong>نوع سرویس NodePort</strong>، می‌توانید برنامه را از طریق آدرس IP هر نود در پورت مشخص‌شده (مانند 30009) در دسترس قرار دهید. انجام این کار برای محیط‌های آزمایشی یا ساده‌سازی دسترسی به برنامه مفید است.</p>



<p>در نهایت برای اعمال تغییرات، دستور زیر را وارد کنید:</p>



<pre class="wp-block-code"><code>kubectl apply -f service.yml</code></pre>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="720" height="368" src="https://hamravesh.com/blog/wp-content/uploads/2024/11/service-apply.webp" alt="سرویس‌ها و nodePort" class="wp-image-4048" srcset="https://hamravesh.com/blog/wp-content/uploads/2024/11/service-apply.webp 720w, https://hamravesh.com/blog/wp-content/uploads/2024/11/service-apply-300x153.webp 300w" sizes="auto, (max-width: 720px) 100vw, 720px" /></figure>



<p>حال می‌توانید از طریق پنل سرویس‌دهنده به اپلیکیشن اصلی خود که روی کوبرنتیز در حال اجرا است دسترسی داشته باشید. به یاد داشته باشید که سرویس شما روی پورت 30009 در دسترس است. در نتیجه URL شما به این شکل خواهد بود:</p>



<pre class="wp-block-code"><code>http:&#47;&#47;&lt;public_ip_of_instance&gt;:30009</code></pre>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="720" height="363" src="https://hamravesh.com/blog/wp-content/uploads/2024/11/todo-app.webp" alt="نسخه نهایی پروژه فعلی" class="wp-image-4049" style="width:840px;height:auto" srcset="https://hamravesh.com/blog/wp-content/uploads/2024/11/todo-app.webp 720w, https://hamravesh.com/blog/wp-content/uploads/2024/11/todo-app-300x151.webp 300w" sizes="auto, (max-width: 720px) 100vw, 720px" /></figure>



<h2 class="wp-block-heading" id="h-در-پایان">در پایان</h2>



<p>در این مطلب از وبلاگ هم‌روش، با اصول اولیه استقرار یک برنامه در Kubernetes آشنا شدیم. مفاهیم کلیدی مانند <strong>پادها (Pods)</strong>، <strong>سرویس‌ها (Services)</strong> و <strong>دیپلویمنت‌ها (Deployments)</strong> را بررسی کردیم و نحوه تعامل آن‌ها را در استقرار یک برنامه ساده وب مشاهده نمودیم. با ایجاد یک پاد، سرویس و دیپلویمنت، توانستیم برنامه را در کلاستر Kubernetes مستقر کنیم.</p>
<p>The post <a href="https://hamravesh.com/blog/deploy-application-kubernetes-step-by-step/">آموزش دیپلوی اپلیکیشن روی کوبرنتیز</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://hamravesh.com/blog/deploy-application-kubernetes-step-by-step/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>آشنایی با CronJob در کوبرنتیز</title>
		<link>https://hamravesh.com/blog/cronjob-kubernetes/</link>
					<comments>https://hamravesh.com/blog/cronjob-kubernetes/#respond</comments>
		
		<dc:creator><![CDATA[ارسطو عباسی]]></dc:creator>
		<pubDate>Fri, 29 Nov 2024 14:16:44 +0000</pubDate>
				<category><![CDATA[مقالات]]></category>
		<category><![CDATA[کوبرنتیز]]></category>
		<guid isPermaLink="false">https://hamravesh.com/blog/?p=2980</guid>

					<description><![CDATA[<p>در این مطلب از وبلاگ هم‌روش با چیستی CronJob و اهمیت آن در محیط کوبرنتیز آشنا می‌شویم.</p>
<p>The post <a href="https://hamravesh.com/blog/cronjob-kubernetes/">آشنایی با CronJob در کوبرنتیز</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>CronJob یکی از بنیادی‌ترین بخش‌های خودکارسازی در لینوکس/یونیکس برای زمان‌بندی انجام کارها در یک زمان یا بازه زمانی مشخص است. حال در دنیای <strong><a href="https://hamravesh.com/blog/what-is-kubernetes/" target="_blank" rel="noreferrer noopener">کوبرنتیز</a></strong> نیز ما می‌توانیم از توانمندی‌های آن بهره گرفته و در کلاستر کوبرنتیز از آن استفاده کنیم. به همین دلیل در این مطلب از وبلاگ هم‌روش با چیستی CronJob و اهمیت آن در محیط کوبرنتیز آشنا می‌شویم.</p>



<h2 class="wp-block-heading" id="h-kubernetes-cronjob-چیست">Kubernetes CronJob چیست؟</h2>



<p>CronJobها در کوبرنتیز روشی برای اجرا یک تسک خاص براساس زمان‌بندی مشخص است. این تکنولوژی برای سال‌ها در محیط‌های یونیکس و لینوکس وجود داشته و برای خودکارسازی کارها و مدیریت سیستم از اهمیت بسیار بالایی برخوردار است. در محیط کلاستر کوبرنتیز ما می‌توانیم از CronJobها برای تسک‌هایی مانند بکاپ‌گیری، گزارش‌گیری، راه‌اندازی مجدد کانتینرها و&#8230; استفاده کنیم.</p>



<h2 class="wp-block-heading" id="h-cronjob-چگونه-کار-می-کند">CronJob چگونه کار می‌کند؟</h2>



<p>در سیستم‌های مبتنی بر یونیکس، شیوه کار کردن CronJobها به شکل زیر است:</p>



<ol class="wp-block-list">
<li>مدیر سیستم ابتدا با استفاده از دستور crontab فایل «crontab» را ویرایش می‌کند. در این فایل لیستی از دستورات و اسکریپت‌هایی که باید اجرا شوند، همراه با زمان اجرای آن‌ها قرار می‌گیرد. انجام این کار در نهایت به ساخته شدن CronJob جدید منجر می‌شود.</li>



<li>در قدم بعدی cron daemon که یک پردازش پس‌زمینه‌ای یا Background Process است فایل crontab تمام کاربران را به‌صورت مداوم برای پیدا کردن تغییرات و مشاهده تسک‌های جدیدی که زمان‌بندی شده‌اند مشاهده می‌کند. </li>



<li> اگر تسک جدیدی که زمان‌بندی شده مشاهده شود، cron daemon آن را در زمان تعریف شده اجرا می‌کند. </li>
</ol>



<p>در کوبرنتیز تمام موارد گفته شده توسط Control plane مربوط به کلاستر به‌صورت خودکار مدیریت می‌شود.</p>



<h2 class="wp-block-heading" id="h-چه-زمانی-باید-از-cronjobها-در-کوبرنتیز-استفاده-کنید">چه زمانی باید از CronJobها در کوبرنتیز استفاده کنید؟</h2>



<p>مهمترین استفاده و البته مزیت CrobJobها، خودکارسازی‌های تسک‌های تکرارشونده مانند بکاپ‌گیری، همگام‌سازی داده‌ها و کارهای مربوط به نگهداری و مدیریت است. در نتیجه شما باید براساس کارهایی که انجام می‌دهید، در هر حالتی که انجام کارها به‌صورت خودکار را ضرورت دانستید از آن استفاده کنید. در ادامه به‌صورت کامل‌تر برخی از سناریوهایی که استفاده از CrobJob در آن‌ها می‌تواند رویکرد خوبی باشد را بررسی می‌کنیم. </p>



<h3 class="wp-block-heading" id="h-۱-تهیه-نسخه-پشتیبان-یا-backup">۱. تهیه نسخه پشتیبان یا Backup</h3>



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



<h3 class="wp-block-heading" id="h-۲-نگهداری-از-دیتابیس"> ۲. نگهداری از دیتابیس</h3>



<p>انجام عملیات‌هایی مانند پاک‌سازی دیتابیس، reindex کردن، ادغام و انتقال اطلاعات و&#8230; از جمله کارهایی هستند که در فرایند نگهداری از دیتابیس در بازه‌های زمانی ثابتی انجام می‌شوند. انجام این تسک‌ها در یک فرایند خودکارسازی شده با استفاده از CrobJob می‌تواند به استفاده درست‌تر از زمان کمک کند. </p>



<h3 class="wp-block-heading" id="h-۳-log-rotation">۳. Log Rotation </h3>



<p>Rotate کردن لاگ‌ها به شما کمک می‌کند تا از «<strong>بسیار بزرگ شدن</strong>» لاگ‌ها جلوگیری کنید و آن‌ها را به‌صورت مدیریت‌پذیرتری نگهدارید. CrobJobها می‌توانند در rotate کردن لاگ‌ها در بازه‌های زمانی مختلف به‌صورت خودکار به شما کمک کنند.</p>



<h3 class="wp-block-heading" id="h-۴-همگام-سازی-داده">۴. همگام‌سازی داده</h3>



<p>همگام‌سازی داده‌ها بین سرویس‌ها و دیتابیس‌های مختلف یکی دیگر از کارهایی است که ممکن است هر چند وقت یکبار در یک سازمان انجام شود.</p>



<h3 class="wp-block-heading" id="h-۵-گزارش-گیری">۵. گزارش‌گیری</h3>



<p>تهیه گزارشات از میزان مصرف منابع و یا عملکرد کامپوننت‌های مختلف ممکن است در هر سازمانی براساس زمان‌بندی‌های روزانه، هفتگی و ماهانه اتفاق بی‌فتد. با استفاده از CrobJob می‌توانید فرایند گزارش‌گیری در بازه‌های زمانی مختلف را به‌صورت خودکار پیش ببرید. </p>



<h3 class="wp-block-heading" id="h-۶-اسکن-امنیتی"> ۶. اسکن امنیتی</h3>



<p>اسکن سرویس‌ها و دیتاها به‌صورت مداوم برای کشف‌ آسیب‌پذیری و مشکلات امنیتی یکی از رویکردهای جاری در بیشتر سازمان‌هاست. </p>



<p>در تمام موارد گفته شده انجام کارهای دستی در بازه‌های زمانی نزدیک به هم اتفاق می‌افتد. در نتیجه اگر موارد مشابه با این حالت داشتید نیز می‌توانید با استفاده از CrobJob آن را خودکارسازی کنید. </p>



<h2 class="wp-block-heading" id="h-آشنایی-با-سینتکس-cronjob">آشنایی با سینتکس CronJob</h2>



<p>سینتکس CrobJob کمی عجیب و غریب بوده و برای زمان‌بندی اجرا تسک‌ها نیاز است که از الگوی زیر بهره ببرید:</p>



<pre class="wp-block-code"><code> * * * * *</code></pre>



<p>حال شاید بپرسید که این پنج ستاره به چه معناست! هر کدام از این ستاره‌ها نماد یک موجودیت زمانی (ساعت، دقیقه، روز و&#8230;) است. از سمت چپ به ترتیب هر کدام از این موجودیت‌ها عبارت است از:‌ دقیقه، ساعت، روز از ماه (۱ تا ۳۱)، ماه و روز از هفته (۰ تا ۶). همچنین منظور از خود ستاره موجودیت کامل است. برای مثال اگر در قسمت روز از علامت ستاره استفاده کنیم به معنی «تمام روزهای ماه» است. </p>



<p>برای درک این مسئله با یک مثال پیش می‌رویم:</p>



<pre class="wp-block-code"><code>0 23 * * *</code></pre>



<p>در مثال بالا تسکی که قرار است انجام شود هر روز در ساعت ۱۱ شب اجرا می‌شود. </p>



<pre class="wp-block-code"><code>* * * * *</code></pre>



<p>در این مثال نیز تسک هر ۱ دقیقه یکبار اجرا می‌شود. </p>



<p>برای پیدا کردن درک بهتر از این قضیه و امتحان کردن آن می‌توانید از وبسایت <a href="https://crontab.guru/" target="_blank" rel="noreferrer noopener">Crontab.guru</a> استفاده کنید.</p>



<h2 class="wp-block-heading" id="h-پیاده-سازی-crobjob-در-کوبرنتیز">پیاده‌سازی CrobJob در کوبرنتیز</h2>



<p>در قدم اول مانیفستی مانند زیر را در فایلی با عنوان <em>cronjob.yaml</em> قرار دهید:</p>



<pre class="wp-block-code"><code>apiVersion: batch/v1
kind: CronJob
metadata:
  name: hello
spec:
  schedule: "* * * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: hello
            image: busybox:1.28
            imagePullPolicy: IfNotPresent
            command:
            - /bin/sh
            - -c
            - date; echo Hello from the Kubernetes cluster
          restartPolicy: OnFailure</code></pre>



<p>همانطور که از مقدار kind مشخص است این مانیفست مربوط به یک CrobJob است. در بخش spec ما با مقداردهی schedule می‌توانیم از سینتکس CrobJob برای زمان‌بندی استفاده کنیم. در این مثال از آنجایی که تمام پارامترها برابر علامت ستاره است، هر دقیقه یکبار تسک (command) مشخص شده در ادامه اجرا می‌شود. </p>



<p>بنابراین با اجرایی شدن این مانیفست، هر دقیقه یکبار پیام <code>Hello from the Kubernetes cluster</code> در قسمت log نمایش داده می‌شود. </p>



<p>در قدم بعدی نیاز است که با استفاده از kubectl دیپلویمنت مورد نظر را ایجاد کنیم:</p>



<pre class="wp-block-code"><code>kubectl create -f .\cronjob.yaml</code></pre>



<p>برای تایید ساخته شدن CronJob مورد نظر می‌توانید دستور زیر را وارد کنید:</p>



<pre class="wp-block-code"><code>kubectl get cronjob hello</code></pre>



<p>خروجی شما در نهایت باید به شکل زیر باشد:</p>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="536" height="40" src="https://hamravesh.com/blog/wp-content/uploads/2024/06/kubectl-get-cronjob-hello.jpeg" alt="خروجی cronjob ساخته شده" class="wp-image-2987" style="width:764px;height:auto" srcset="https://hamravesh.com/blog/wp-content/uploads/2024/06/kubectl-get-cronjob-hello.jpeg 536w, https://hamravesh.com/blog/wp-content/uploads/2024/06/kubectl-get-cronjob-hello-300x22.jpeg 300w" sizes="auto, (max-width: 536px) 100vw, 536px" /></figure>



<p>مقدار ACTIVE به تسک‌های در حال اجرا اشاره دارد. اگر این مقدار برابر صفر باشد یا به این معناست که تسک به‌صورت کامل انجام شده و یا به‌ معنای وجود خطا است. همچنین مقدار LAST SCHEDULE به میزان زمانی اشاره دارد که تسک اجرا شده است. </p>



<p>برای مشاهده Jobهای در حال اجرا به‌صورت Real-time می‌توانید از آرگومان <code>--watch</code> استفاده کنید:</p>



<pre class="wp-block-code"><code>kubectl get jobs --watch</code></pre>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="437" height="383" src="https://hamravesh.com/blog/wp-content/uploads/2024/06/kubectl-get-jobs-watch.jpeg" alt="آرگومان --watch" class="wp-image-2988" style="width:545px;height:auto" srcset="https://hamravesh.com/blog/wp-content/uploads/2024/06/kubectl-get-jobs-watch.jpeg 437w, https://hamravesh.com/blog/wp-content/uploads/2024/06/kubectl-get-jobs-watch-300x263.jpeg 300w" sizes="auto, (max-width: 437px) 100vw, 437px" /></figure>



<p>همچنین برای مشاهده پادهایی که برای اجرا این Jobها ساخته شده‌اند می‌توانید دستور زیر را وارد کنید:</p>



<pre class="wp-block-code"><code>kubectl get pods</code></pre>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="685" height="59" src="https://hamravesh.com/blog/wp-content/uploads/2024/06/kubectl-get-pods.jpeg" alt="پادهای ساخته شده" class="wp-image-2990" style="width:840px;height:auto" srcset="https://hamravesh.com/blog/wp-content/uploads/2024/06/kubectl-get-pods.jpeg 685w, https://hamravesh.com/blog/wp-content/uploads/2024/06/kubectl-get-pods-300x26.jpeg 300w" sizes="auto, (max-width: 685px) 100vw, 685px" /></figure>



<h2 class="wp-block-heading" id="h-خطاهای-مرسوم-در-پیاده-سازی-cronjob-در-کوبرنتیز">خطاهای مرسوم در پیاده‌سازی CronJob در کوبرنتیز</h2>



<p>اگر در فرایند پیاده‌سازی CronJob در کوبرنتیز به مشکل برخوردید احتمال دارد که در یکی از زمینه‌های زیر اشتباه پیش رفته باشید. مواردی که در زیر مطرح شده‌اند مرسوم‌ترین مشکلات بوده و ممکن است مستقیما به مشکل شما مرتبط نباشند:</p>



<ul class="wp-block-list">
<li><strong class="global-rtl">سینتکس</strong><strong>: </strong>یکی از مرسوم‌ترین خطاهایی که در پیاده‌سازی CronJob اتفاق می‌افتد، وارد کردن سینتکس اشتباهی است. بنابراین این بخش را حتما مجددا بررسی کرده و براساس الگوی درست سینتکسی پیش بروید. </li>



<li><strong>timezone</strong>: یکی دیگر از مشکلات و خطاهای مرسوم مربوط به منطقه زمانی می‌شود. اگر منطقه زمانی کلاستر کوبرنتیز شما با اپلیکیشن یا دیگر بخش‌ها تطابق ندارد بهتر است آن را درست کنید. </li>



<li><strong>ایمیج</strong>: اگر CronJob با ایمیج خاصی سر و کار داشته باشد و آن ایمیج در دسترس نباشد، برنامه به درستی اجرا نحواهد شد. </li>



<li><strong>مجوز‌ها</strong>: برای انجام برخی از تسک‌ها CronJob به سطح خاصی از دسترسی نیاز خواهد داشت. مطمئن شوید که متناسب با تسک برنامه‌ریزی شده، CronJob دسترسی‌های لازم را در اختیار دارد.</li>



<li><strong class="global-rtl">منابع کافی: </strong>ممکن است محدودیت‌های منابعی باعث fail شدن اجرا تسک‌ها شود. در نتیجه نیاز است که در اختیار داشتن منابع کافی برای اجرا تسک‌ها بررسی شود.</li>
</ul>



<h2 class="wp-block-heading" id="h-در-پایان">در پایان</h2>



<p>همانگونه که در این مطلب گفتیم CronJob برای زمان‌بندی کردن تسک‌ها استفاده می‌شود. استفاده از این قابلیت در فضای کوبرنتیز بسیار کاربردی بوده و در مواقع بسیار زیادی می‌تواند کاربردی باشد. </p>
<p>The post <a href="https://hamravesh.com/blog/cronjob-kubernetes/">آشنایی با CronJob در کوبرنتیز</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://hamravesh.com/blog/cronjob-kubernetes/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>تفاوت داکر سوارم و کوبرنتیز – Docker Swarm vs Kubernetes</title>
		<link>https://hamravesh.com/blog/docker-swarm-vs-kubernetes/</link>
					<comments>https://hamravesh.com/blog/docker-swarm-vs-kubernetes/#respond</comments>
		
		<dc:creator><![CDATA[بابک خوش‌نویس]]></dc:creator>
		<pubDate>Wed, 30 Oct 2024 10:34:27 +0000</pubDate>
				<category><![CDATA[مقالات]]></category>
		<category><![CDATA[کوبرنتیز]]></category>
		<guid isPermaLink="false">https://hamravesh.com/blog/?p=3740</guid>

					<description><![CDATA[<p>داکر سوارم و کوبرنتیز دو ابزار محبوب برای ارکستریشن کانتینرها هستند. در این بلاگ‌پست این دو  تکنولو‌ژی را باهم مقایسه می‌کنیم و به نقاط قوت و ضعفشان می‌پردازیم.</p>
<p>The post <a href="https://hamravesh.com/blog/docker-swarm-vs-kubernetes/">تفاوت داکر سوارم و کوبرنتیز – Docker Swarm vs Kubernetes</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>تفاوت داکر سوارم و کوبرنتیز چیست و کدامیک از این ابزارهای هماهنگ‌سازی Container برای ما مناسب‌تر است؟ در دنیای امروزی که مدیریت خودکار مایکروسرویس‌ها در توسعه اپلیکیشن‌ها بیش از هر زمان دیگری اهمیت پیدا کرده، هماهنگ‌سازیِ بارِ کاری (Workload Orchestration) امری بسیار حیاتی است. اما در مورد اینکه آیا Docker Swarm برای این <a href="https://hamravesh.com/blog/what-is-orchestration/">ارکستریشن</a> مناسب‌تر است یا Kubernetes، بحث و جدل زیادی وجود دارد. بنابراین در این مطلب می‌خواهیم شباهت‌ها و تفاوت‌های داکر سوارم و کوبرنتیز را بررسی کنیم و ببینیم کدام یک برای محیط ما مناسب‌تر است.</p>



<h2 class="wp-block-heading" id="h-کانتینر-container-چیست">کانتینر Container چیست؟</h2>



<p>در یک کلام <a href="https://hamravesh.com/blog/what-is-container/">کانتینرها</a>، روشی استاندارد برای بسته‌بندی (پکیج کردن) برنامه‌ها و همه وابستگی‌های (Dependency) آن‌ها هستند تا بتوانید برنامه‌ها را بدون مشکل بین محیط‌های Runtime منتقل کنید. با بسته‌بندی کُدهای برنامه، وابستگی‌ها و پیکربندی‌ها (Configuration) در یک بلوک ساختاری که به سادگی قابل استفاده است، کانتینرها به شما کمک می‌کنند گام‌های مهمی برای کاهش زمان استقرار و بهبود قابلیت اطمینان برنامه بردارید.</p>



<p>در برنامه‌های سازمانی، تعداد کانتینرها می‌تواند به سرعت به حدی غیرقابل مدیریت برسد. برای استفاده موثرتر از کانتینرهای خود، نیاز داریم برنامه‌های کانتینری خود را هماهنگ‌سازی (Orchestrate) کنیم و این جاست که <a href="https://hamravesh.com/blog/what-is-kubernetes/">Kubernetes</a> و Docker Swarm مورد استفاده قرار می‌گیرند و بحث استفاده از آن‌ها مطرح می‌شود.</p>



<h2 class="wp-block-heading" id="h-کوبرنتیز-kubernetes-چیست">کوبرنتیز Kubernetes چیست؟</h2>



<p>کوبرنتیز پلتفرمی سیار و متن‌باز برای مدیریت کانتینرها، بارهای کاری پیچیده در تولید و مدیریت انطباق‌پذیری کانتینرها است. با Kubernetes، توسعه‌دهندگان و تیم‌های دواپس می‌توانند برنامه‌های با دسترسی بالا را با استفاده از انعطاف‌پذیری کلاسترها، برنامه‌ریزی، مستقر، مدیریت و کشف کنند. یک کلاستر کوبرنتیز متشکل از میزبان‌های محاسباتی به نام «Worker Node» (گره‌های کارگزار) است. این Worker Nodeها توسط یک Master کوبرنتیز مدیریت می‌شوند که همه منابع در خوشه را کنترل و پایش می‌کند. یک Node می‌تواند ماشین مجازی (VM) یا ماشین فیزیکی باشد.</p>



<p>در ابتدای ظهور کوبرنتیز، اعضای کامیونیتی برای بهره‌برداری از کوبرنتیز از دانش خود در ایجاد و اجرای ابزارهای داخلی مانند Borg و Omega (دو سیستم مدیریت خوشه‌ها) استفاده کردند. با ظهور بنیاد محاسبات ابری (<a href="https://hamravesh.com/blog/what-is-cncf/">CNCF</a>) و در همکاری با بنیاد لینوکس، کامیونیتی، حکمرانیِ باز (Open Governance) را برای کوبرنتیز اتخاذ شد، مجموعه‌ای از قوانین برای خوشه‌های کوبرنتیز که به تیم‌ها کمک می‌کند تا در مقیاس بزرگ عمل کنند. IBM، به عنوان عضو بنیانگذار CNCF، به‌طور فعال در پروژه‌های متن‌باز CNCF همانند سایر شرکت‌ها مانند گوگل، Red Hat، مایکروسافت و آمازون مشارکت می‌کند.</p>



<h2 class="wp-block-heading" id="h-مزایای-کوبرنتیز-چیست">مزایای کوبرنتیز چیست؟</h2>



<ul class="wp-block-list">
<li>کوبرنتیز مجموعه گسترده‌ای از ویژگی‌های کلیدی را ارائه می‌دهد. از جمله: «کشف سرویس» (Service Discovery)، «ingress» و «لود بالانسینگ»، «خود-درمانی» (Self-Healing)، «Storage Orchestration»، «انطباق افقی» (Horizontal Scaling)، «استقرارها/بازگشت‌های خودکار» (automated rollouts/rollbacks) و «اجرای دسته‌ای» (Batch Execution).</li>



<li>سیستم کوبرنتیز دارای مجموعه‌ای متحد از API‌ها و گارانتی‌های قوی در مورد وضعیت خوشه است.</li>



<li>کوبرنتیز دارای <a href="https://kubernetes.io/community/">کامیونیتی اوپن‌سورسی</a> است که به‌طور فعال در حال توسعه کدبِیس هستند.</li>



<li>کنفرانس‌های به سرعت در حال رشد به نام KubeCon در طول سال، بینش‌های کاربران را انعکاس می‌دهند.</li>



<li>کوبرنتیز بیش‌ترین میزان استفاده را در بازار از آن خود کرده است.</li>



<li>کوبرنتیز توسط بازیگران بزرگی مثل گوگل و IBM در عمل امتحانش را پس داده است و روی اکثر سیستم‌عامل‌ها هم اجرا می‌شود.</li>



<li>در ابرهای عمومی (مثل AWS یا Azure) در دسترس است و همچنین برای استفاده در سرورهای خصوصی هم می‌توان از آن استفاده کرد. همچنین از سوی ارائه‌دهندگان ابری بزرگ هم به صورت مدیریت شده و هم به صورت خام ارائه قابل دسترسی است.</li>



<li>همچنین از پشتیبانی گسترده‌ای از اکوسیستم ابزارهای ابری مانند Sysdig ،LogDNA و Portworx (در میان بسیاری دیگر) برخوردار است.</li>
</ul>



<h2 class="wp-block-heading" id="h-چالش-های-استفاده-از-کوبرنتیز">چالش‌های استفاده از کوبرنتیز</h2>



<p>استفاده از Kubernetes چالش‌های خاص خود را دارد که در ادامه به آن‌ها اشاره شده است.</p>



<ul class="wp-block-list">
<li>یادگیری آن نیاز به تلاش زیادی دارد و مدیریت Kubernetes نیازمند دانش تخصصی است.</li>



<li>به‌روزرسانی‌های جامعه متن‌باز به طور مداوم اتفاق می‌افتد و نیاز به پچ کردن دقیق دارد تا از اختلال در بارهای کاری جلوگیری شود.</li>



<li>برای توسعه‌دهندگانِ فردی و برای برنامه‌های ساده و استقرارهای کوچک مناسب نیست و بسیار سنگین است.</li>



<li>تیم‌ها معمولاً به ابزارهای اضافی (مانند رابطِ خط فرمانِ kubectl)، خدمات، جریان‌های کاری CI/CD و سایر روش‌های DevOps نیاز دارند تا به‌طور کامل بتوانند بر دسترسی، هویت، حاکمیت و امنیت مدیریت کنند.</li>
</ul>



<h2 class="wp-block-heading" id="h-داکر-سوارم-docker-swarm-چیست">داکر سوارم Docker Swarm چیست؟</h2>



<p>داکر سوارم هم پلتفرم متن‌باز دیگری برای هماهنگ‌سازی کانتِینرها به‌حساب می‌آید که مدت‌هاست وجود دارد. Swarm یا به بیان دقیق‌تر، «حالت خوشه» (Swarm Mode)، پشتیبانی درونی داکر برای هماهنگ‌سازی خوشه‌های موتورهای داکر به حساب می‌آید. یک خوشه Swarm متشکل از گره‌های مدیریت کننده Docker Engine (که خوشه را هماهنگ و مدیریت می‌کنند) و Nodeهای Worker (که به دستور Nodeهای مدیریت کننده&amp; وظایف را اجرا می‌کنند) است.</p>



<h3 class="wp-block-heading" id="h-مزایای-docker-swarm">مزایای Docker Swarm</h3>



<p>استفاده از Docker Swarm به چند دلیل مزیت دارد:</p>



<ul class="wp-block-list">
<li>اول اینکه داکر پلتفرم کانتینری رایجی برای ساخت و استقرار برنامه‌های کانتینری است. Swarm هم برای استفاده با موتور داکر ساخته شده است و بخشی از پلتفرمی آشنا برای اکثر تیم‌هاست.</li>



<li>نصب و راه‌اندازی آن برای محیط Docker آسان است.</li>



<li>ابزارها، خدمات و نرم‌افزارهایی که با کانتینرهای داکر اجرا می‌شوند، با Swarm هم به خوبی کار می‌کنند.</li>



<li>داکر Swarm دارای API خاص خودش است.</li>



<li>داکر سوارم با ابزارهای Docker مانند Docker Compose و رابط خط فرمانِ داکر یکپارچگی خوبی دارد، چون از همان رابط خط فرمان (CLI) موتور داکر استفاده می‌کند.</li>



<li>همچنین از یک سیستم فیلترینگ و زمان‌بندی استفاده می‌کند تا Nodeهای بهینه را برای استقرار کانتینرها در خوشه انتخاب کند.</li>
</ul>



<h3 class="wp-block-heading" id="h-چالش-ها-و-مشکلات-داکر-سوارم">چالش‌ها و مشکلات داکر سوارم</h3>



<ul class="wp-block-list">
<li>Swarm گزینه‌های سفارشی و افزونه‌های محدودی دارد.</li>



<li>از نظر عملکردی اندکی ضعیف است و قابلیت‌های اتوماسیون کمتری نسبت به Kubernetes دارد.</li>



<li>در یک پایپلاین دواپس، جدا کردن بارهای کاری توسعه-آزمایش-تولید (Dev-Test-Prod) به راحتی امکان‌پذیر نیست.</li>
</ul>



<p>البته برای جلوگیری از ایجاد ابهام، باید گفت که Docker Enterprise Edition اکنون پشتیبانی از Kubernetes را هم ارائه می‌دهد.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="600" height="331" src="https://hamravesh.com/blog/wp-content/uploads/2024/09/image.png" alt="تفاوت داکر سوارم و کوبرنتیز – Docker Swarm vs Kubernetes" class="wp-image-3751" srcset="https://hamravesh.com/blog/wp-content/uploads/2024/09/image.png 600w, https://hamravesh.com/blog/wp-content/uploads/2024/09/image-300x166.png 300w" sizes="auto, (max-width: 600px) 100vw, 600px" /></figure>
</div>


<h2 class="wp-block-heading" id="h-تفاوت-داکر-سوارم-و-کوبرنتیز">تفاوت داکر سوارم و کوبرنتیز</h2>



<p>حالا که مزایا و چالش‌های هر کدام را بررسی کردیم، بیایید راجع به تفاوت‌ها و شباهت‌های بین Kubernetes و Docker Swarm توضیح بدهیم. هر دوی این پلتفرم‌ها به شما امکان مدیریت کانتینرها و مقیاس‌دهی استقرار برنامه‌ها را می‌دهند. تفاوت‌های آن‌ها به بحث پیچیدگی مربوط می‌شود. کوبرنتیز روشی کارآمد برای مدیریت کانتینرها فراهم می‌کند که برای برنامه‌های پرتقاضا با پیکربندی پیچیده عالی است، در حالی که Docker Swarm برای سهولت استفاده طراحی شده است و انتخاب خوبی برای برنامه‌های ساده محسوب می‌شود که سریع استقرار داده می‌شوند و مدیریت آسانی دارند.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="450" height="450" src="https://hamravesh.com/blog/wp-content/uploads/2024/09/Docker-Swarm-vs-Kubernetes.png" alt="مقایسه داکر سوارم و کوبرنتیز" class="wp-image-3753" srcset="https://hamravesh.com/blog/wp-content/uploads/2024/09/Docker-Swarm-vs-Kubernetes.png 450w, https://hamravesh.com/blog/wp-content/uploads/2024/09/Docker-Swarm-vs-Kubernetes-300x300.png 300w, https://hamravesh.com/blog/wp-content/uploads/2024/09/Docker-Swarm-vs-Kubernetes-150x150.png 150w, https://hamravesh.com/blog/wp-content/uploads/2024/09/Docker-Swarm-vs-Kubernetes-250x250.png 250w, https://hamravesh.com/blog/wp-content/uploads/2024/09/Docker-Swarm-vs-Kubernetes-100x100.png 100w" sizes="auto, (max-width: 450px) 100vw, 450px" /></figure>
</div>


<p>در ادامه با جزئیات بیشتری به شرح تفاوت و مقایسه داکر سوارم و کوبرنتیز پرداخته شده است.</p>



<h3 class="wp-block-heading" id="h-تفاوت-داکر-سوارم-و-کوبرنتیز-در-نصب-و-راه-اندازی">تفاوت داکر سوارم و کوبرنتیز در نصب و راه‌اندازی</h3>



<p>به دلیل پیچیدگی کوبرنتیز، Docker Swarm برای نصب و پیکربندی ساده‌تر است.</p>



<ul class="wp-block-list">
<li><strong>Kubernetes:</strong> نصب دستی ممکن است برای هر سیستم عامل متفاوت باشد. برای ارائه‌دهندگان ابری، نیازی به نصب وجود ندارد.</li>



<li><strong>Swarm:</strong> نصب آن با داکر ساده است و Instanceها معمولاً در سیستم‌عامل‌ها منسجم و یکپارچه هستند.</li>
</ul>



<h3 class="wp-block-heading" id="h-مفایسه-داکر-سوارم-و-کوبرنتیز-از-نظر-انطباق-پذیری-scalability">مفایسه داکر سوارم و کوبرنتیز از نظر انطباق‌پذیری (Scalability)</h3>



<p>کوبرنتیز امکان انطباق‌پذیری و قابلیت ارتقای همه‌کاره (All in One) بر اساس ترافیک را ارائه می‌دهد، در حالی که داکر سوارم بر انطباق‌پذیری سریع متمرکز است.</p>



<ul class="wp-block-list">
<li><strong>کوبرنتیز</strong>: انطباق‌پذیری و قابلیت ارتقای خودکار افقی به صورت تعبیه شده و داخلی وجود دارد.</li>



<li><strong>سوارم</strong>: قابلیت انطباق‌پذیری خودکار در صورت تقاضا (On Demand) را ارائه می‌دهد.</li>
</ul>



<h3 class="wp-block-heading" id="h-تفاوت-داکر-سوارم-و-کوبرنتیز-در-لود-بالانسینگ">تفاوت داکر سوارم و کوبرنتیز در لود بالانسینگ</h3>



<p>داکر سوارم دارای لود بالانسینگ خودکار است، در حالی که کوبرنتیز این قابلیت را ندارد. البته، می‌توان لودبالانسر خارجی را به راحتی از طریق ابزارهای شخص ثالث در کوبرنتیز تعبیه و اضافه کرد.</p>



<ul class="wp-block-list">
<li><strong>کوبرنتیز</strong>: کشف سرویس‌ها از طریق تنها یک نام DNS فعال می‌شود. کوبرنتیز از طریق یک آدرس IP یا مسیر HTTP به اپلیکیشن‌های کانتینری دسترسی دارد.</li>



<li><strong>سوارم</strong>: دارای لودبالانسرهای داخلی است.</li>
</ul>



<h3 class="wp-block-heading" id="h-مقایسه-docker-swarm-و-kubernetes-از-نظر-دسترس-پذیری-زیاد">مقایسه Docker Swarm و Kubernetes از نظر دسترس‌پذیری زیاد</h3>



<p>هر دوی این ابزارهای هماهنگ‌سازی، قابلیت دسترسی بالایی را ارائه می‌دهند.</p>



<ul class="wp-block-list">
<li><strong>کوبرنتیز</strong>: به‌وسیله دور کردن ترافیک از podهای ناسالم، کوبرنتیز خود-درمانی می‌کند. کوبرنتیز قابلیت زمان‌بندی هوشمند و دسترس‌پذیری بالای سرویس‌ها را از طریق همانند‌سازی (Replication) انجام می‌دهد.</li>



<li><strong>سوارم</strong>: منیجرهای سوارم، کنترل دسترس‌پذیری را ارائه می‌دهند و مایکروسرویس‌ها می‌توانند به راحتی همانندسازی شوند.</li>
</ul>



<h2 class="wp-block-heading" id="h-کدام-یک-برای-من-بهتر-است-کوبرنتیز-یا-داکر-سوارم">کدام‌یک برای من بهتر است؟ کوبرنتیز یا داکر سوارم؟</h2>



<p>کدام ابزار ارکستراسیون کانتینر برای شما مناسب‌تر است؟ مانند بیشتر تصمیم‌گیری‌های پلتفرمی، ابزار مناسب بستگی به نیازهای سازمان شما دارد. کوبرنیتیز به دلیل پذیرش گسترده و کامیونیتی بزرگی که دارد، محبوب است. همه ارائه‌دهندگان بزرگ ابری از آن پشتیبانی می‌کنند و گزینه‌های «خودت انجام بده» مانند Docker Enterprise Edition نیز موجود هستند. </p>



<p>کوبرنیتیز قدرتمندتر، قابل تنظیم‌تر و انعطاف‌پذیرتر است، اما به همان نسبت یادگیری اولیه آن سخت‌تر است. برای استفاده از آن، نیاز به تیمی با تجربه و توانمند دارید که بتواند آن را مدیریت کند؛ با این حال، بسیاری از شرکت‌ها ترجیح می‌دهند از یک ارائه‌دهنده خدمات مدیریت‌شده استفاده کنند تا مسئولیت‌های مدیریت نرم‌افزارهای متن‌باز را ساده‌تر کرده و بتوانند بیشتر روی توسعه اپلیکیشن‌ها تمرکز کنند.<br><br>مزیت Docker Swarm در سادگی و آشناتر بودن آن است. این ابزار با Docker Engine عرضه می‌شود و به‌راحتی در محیط شما در دسترس است. بنابراین، Swarm شروع کار را آسان‌تر می‌کند و ممکن است برای بارهای کاری کوچک ایده‌آل‌تر باشد.</p>



<h2 class="wp-block-heading" id="h-جمع-بندی">جمع‌بندی</h2>



<p>کوبرنیتیز و داکر سوارم ۲ ابزار اصلی برای هماهنگ‌سازی کانتینرها هستند که هر کدام مزایا و چالش‌های خاص خود را دارند. کوبرنیتیز قدرتمندتر و انعطاف‌پذیرتر است، اما نیاز به دانش تخصصی و یادگیری بیشتری دارد. در مقابل، داکر سوارم با سادگی و آشنایی بیشتر، برای پروژه‌های کوچکتر و شروع کار، مناسب‌تر است. انتخاب بین این ۲ ابزار به نیازهای سازمان و پیچیدگی پروژه‌ها بستگی دارد؛ کوبرنیتیز برای مدیریت بارهای سنگین و محیط‌های پیچیده مناسب است، در حالی که داکر سوارم برای استفاده سریع و ساده در پروژه‌های کوچک‌تر گزینه بهتری است.<br></p>
<p>The post <a href="https://hamravesh.com/blog/docker-swarm-vs-kubernetes/">تفاوت داکر سوارم و کوبرنتیز – Docker Swarm vs Kubernetes</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://hamravesh.com/blog/docker-swarm-vs-kubernetes/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>ابزارهای امنیتی در کوبرنتیز</title>
		<link>https://hamravesh.com/blog/kubernetes-security-tools/</link>
					<comments>https://hamravesh.com/blog/kubernetes-security-tools/#respond</comments>
		
		<dc:creator><![CDATA[ارسطو عباسی]]></dc:creator>
		<pubDate>Fri, 13 Sep 2024 04:01:25 +0000</pubDate>
				<category><![CDATA[مقالات]]></category>
		<category><![CDATA[کوبرنتیز]]></category>
		<category><![CDATA[امنیت کوبرنتیز]]></category>
		<guid isPermaLink="false">https://hamravesh.com/blog/?p=2794</guid>

					<description><![CDATA[<p>حفظ امنیت در محیط کوبرنتیز جدای از اینکه ممکن است سخت و چالش‌برانگیز باشد، بسیار ضروری است. با در نظر گرفتن این موضوع قصد داریم شما را با ساختار و ابزارهای امنیتی کوبرنتیز آشنا کنیم. </p>
<p>The post <a href="https://hamravesh.com/blog/kubernetes-security-tools/">ابزارهای امنیتی در کوبرنتیز</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>حفظ امنیت در محیط کوبرنتیز جدای از اینکه ممکن است سخت و چالش‌برانگیز باشد، بسیار ضروری است. در نتیجه آشنایی با ساختار و وضعیت امنیتی <strong><a href="https://hamravesh.com/blog/what-is-kubernetes/" target="_blank" rel="noreferrer noopener">کوبرنتیز</a></strong> و آشنایی با ابزارهای امنیتی آن بسیار مهم بوده و نیاز است که در اولویت قرار بگیرد. </p>



<p>عمده کاری که ابزارهای امنیتی در کوبرنتیز انجام می‌دهند، بررسی آسیب‌پذیری‌های کلاستر، پیکربندی‌های اشتباه و مشکلات دیگر مربوط به پیاده‌سازی کوبرنتیز است. با در نظر گرفتن این موضوع، در این مطلب قصد داریم شما را ابتدا با لایه‌های مختلف امنیتی کوبرنتیز آشنا کنیم و سپس سراغ ابزارهایی برویم که در پیاده‌سازی و نگهداری امن‌تر کوبرنتیز به ما کمک می‌کنند. </p>



<h2 class="wp-block-heading" id="h-لایه-های-امنیت-در-کوبرنتیز">لایه‌های امنیت در کوبرنتیز</h2>



<p>مبحث امنیت در کوبرنتیز به چهار لایه تقسیم می‌شود این چهار لایه با عنوان <strong>4Cs of Kubernetes security</strong> شناخته شده و شامل لایه‌های زیر می‌شود:</p>



<ul class="wp-block-list">
<li>لایه ابری</li>



<li>لایه کلاستر</li>



<li>لایه کانتینر</li>



<li>لایه کُد</li>
</ul>



<p>هر کدام از این لایه‌ها در واقع سطوحی هستند که باید امنیت کوبرنتیز در آن‌ها تضمین شود. اما هر کدام از این لایه‌ها به چه صورتی روی موضوع امنیت دلالت می‌کنند و چگونه می‌توان امنیت را برای آن‌ها پیاده‌سازی کرد؟</p>



<h3 class="wp-block-heading" id="h-لایه-ابری">لایه ابری</h3>



<p>لایه ابری اصلی‌ترین لایه‌ای است که در ساختار امنیتی کوبرنتیز در نظر گرفته می‌شود. در نتیجه اگر امنیت این لایه پایین باشد، امنیت تمام لایه‌های دیگر پایین خواهد بود. با در نظر گرفتن این موضوع می‌توان نتیجه گرفت که اولین لایه برای نگرانی‌های امنیتی باید همین لایه ابری باشد. در هر نوع پلتفرم ابری، رعایت یکسری موارد امنیتی و رویکردهای پیشنهادی ضروری بوده و باید آن‌ها را جدی بگیرید.</p>



<h3 class="wp-block-heading" id="h-لایه-کلاستر">لایه کلاستر</h3>



<p>لایه بعدی لایه کلاستر است. در این لایه عمده نگرانی‌های امنیتی به دو بخش تقسیم می‌شوند: کامپوننت‌های کلاستر و اپلیکیشن‌های در حال اجرا روی کلاستر. در ادامه چند رویکرد کلی برای برقراری امنیت در لایه کلاستر را معرفی خواهیم کرد اما همواره باید یک قدم پیش‌تر رفت و موارد دیگری را نیز در نظر داشت:</p>



<ul class="wp-block-list">
<li>تمام ترافیک‌های ورودی به کلاستر از طریق APIها باید رمزنگاری (TLS) شده باشند. </li>



<li>جداسازی namespaceها براساس کارکردی که دارند.</li>



<li>تعداد کاربرانی که به‌صورت همزمان می‌توانند به یک منبع دسترسی داشته باشند را محدود کنید. </li>



<li>برقراری نهایت امنیت برای دسترسی به kubectl.</li>



<li>اضافه کردن <strong><a href="https://kubernetes.io/docs/reference/access-authn-authz/rbac/" target="_blank" rel="noreferrer noopener">role base access control</a></strong> یا کنترل دسترسی براساس نقش. </li>



<li>جلوگیری از اجرای غیرضروری ماژول‌های کرنل توسط کانتینرها. </li>



<li>مسدود کردن هرگونه دسترسی به متاداده مربوط به Cloud API.</li>
</ul>



<h3 class="wp-block-heading" id="h-لایه-کانتینر">لایه کانتینر</h3>



<p>لایه سوم امنیت کوبرنتیز مربوط به کانتینرها می‌شود. در زیر چند مورد از بهترین رویکردها برای امن‌سازی این لایه عنوان شده است:</p>



<ul class="wp-block-list">
<li>پایه‌ای‌ترین رویکرد برای حل مشکلات امنیتی لایه کانتینر استفاده از ایمیج‌های رسمی و معتبر است. از ایمیج‌هایی که شناخته شده نیستند و یا ممکن است مشکلات امنیتی داشته باشند دوری کنید.</li>



<li>رجیستری را با اسکن ایمیج‌ها و بررسی دسترسی‌های کنترل امن نگهدارید. </li>



<li>ایزوله‌سازی را جدی گرفته و از runtimeهای درست برای این موضوع استفاده کنید.</li>



<li>از Docker Scout استفاده کنید، <strong><a href="https://docs.docker.com/scout/" target="_blank" rel="noreferrer noopener">Docker Scout</a></strong> ابزاری برای بررسی لایه‌های مختلف یک کانتینر ایمیج برای بررسی آسیب‌پذیری‌هاست. </li>
</ul>



<h3 class="wp-block-heading" id="h-لایه-ک-د">لایه کُد</h3>



<p>کد آخرین لایه از امنیت کوبرنتیز است که بسیاری از حملات در آن صورت می‌گیرد. در ادامه برخی از مهمترین رویکردهای امنیتی برای حفظ امنیت لایه کد آورده شده است:</p>



<ul class="wp-block-list">
<li>سطح دسترسی به کدها را به‌صورت مداوم بررسی کنید و تمام دسترسی‌ها را از پروتکل TLS عبور دهید. </li>



<li>استانداردهای امنیتی در حوزه کدنویسی را رعایت کرده و مطمئن شوید که در ساختار کدهای‌تان مشکلات عمده امنیتی وجود ندارند. </li>



<li>حملات مختلف این لایه را شبیه‌سازی کرده و کُدهای‌تان را در بهترین وضعیت برای مقابله با این گونه از حملات نگهدارید.</li>



<li>پیاده‌سازی <strong><a href="https://www.datadoghq.com/knowledge-center/audit-logging" target="_blank" rel="noreferrer noopener">Audit Logging</a></strong> به‌عنوان یکی از کارهای مهم در سازمان‌های بزرگ در نظر گرفته می‌شود. Audit Logging به فرایند مستندسازی تمام فعالیت‌ها در یک سیستم نرم‌افزاری گفته می‌شود. در این ساختار تمام رخدادها به همراه زمان اتفاق افتادن ثبت می‌شود. </li>
</ul>



<h2 class="wp-block-heading" id="h-بهترین-ابزارهای-امنیتی-کوبرنتیز"><strong class="global-rtl">بهترین ابزارهای امنیتی</strong><strong> کوبرنتیز</strong></h2>



<p>حال که با اصلی‌ترین لایه‌های امنیتی در کوبرنتیز آشنا شدیم نوبت آن است که سراغ برخی از مهمترین ابزارهای امنیتی کوبرنتیز رفته و آن‌ها را بررسی کنیم. </p>



<h3 class="wp-block-heading" id="h-cillium"><a href="https://cilium.io/" target="_blank" rel="noreferrer noopener">Cillium</a></h3>



<p>تمرکز اصلی ابزار Cillium روی بخش Networking است. عمده استفاده از این ابزار برای مانیتورینگ و مشاهده‌پذیری شبکه در محیط کلاستر کوبرنتیز است. با استفاده از این ابزار می‌توان حملات را رهگیری کرد و همچنین سیاست‌های دقیقی را روی شبکه اعمال نمود. </p>



<h3 class="wp-block-heading" id="h-falco"><a href="https://falco.org/" target="_blank" rel="noreferrer noopener">Falco</a></h3>



<p>تمرکز اصلی ابزار Falco روی امن‌سازی محیط اجرایی یا Runtime است. این ابزار قابلیت رهگیری و مانیتور فعالیت‌ها را به شما داده و همچنین در تشخیص خطاها به شما کمک خواهد کرد. با ارسال هشدارها به‌صورت Real-time این ابزار کمک می‌کند تا بتوانید در سریع‌ترین زمان ممکن به مشکلات پاسخ داده و آن‌ها را حل کنید. </p>



<h3 class="wp-block-heading" id="h-checkov"><a href="https://www.checkov.io/" target="_blank" rel="noreferrer noopener">Checkov</a></h3>



<p>تمرکز اصلی ابزار Checkov روی برقراری <a href="https://hamravesh.com/blog/infrastructure-as-code/"><strong>امنیت IaC</strong></a> است. این ابزار پیکربندی‌های شما را اسکن کرده و هرگونه خطای پیکربندی را اطلاع می‌دهد. </p>



<h3 class="wp-block-heading" id="h-kong"><a href="https://konghq.com/" target="_blank" rel="noreferrer noopener">Kong</a></h3>



<p>تمرکز اصلی ابزار Kong روی حفظ امنیت API Server در کلاستر کوبرنتیز است. با استفاده از این ابزار می‌توانید برای APIهای در حال اجرا روی کلاستر قابلیت‌های احرازهویت، اعتبارسنجی و کنترل دسترسی را فراهم کرد. همچنین این ابزار در رمزنگاری ارتباط میان سرویس‌ها نقش ایفا می‌کند.</p>



<h3 class="wp-block-heading" id="h-hubble"><strong><a href="https://github.com/cilium/hubble">Hubble</a></strong></h3>



<p>Hubble ابزار مشاهده‌پذیری شبکه، امنیت و سرویس‌ها در کوبرنتیز است. بخشی از کار اصلی این ابزار alerting یا همان هشداردهی در سطح کوبرنتیز است. به این معنا که اگر در فرایند‌های Networking و Security مشکلی وجود داشته باشد این ابزار می‌تواند به شما alert بدهد. این ابزار بر پایه Cillium ایجاد شده است. </p>



<h2 class="wp-block-heading" id="h-در-پایان">در پایان</h2>



<p>برقراری امنیت برای کوبرنتیز از جمله مهمترین کارهایی‌ست که در جهت ایمن‌سازی زیرساخت باید انجام داد. در این مطلب ابتدا با ۴ لایه اصلی امنیت کوبرنتیز آشنا شدیم و سپس ۴ ابزار کاربردی برای برقراری امنیت در کوبرنتیز را معرفی کردیم.  </p>
<p>The post <a href="https://hamravesh.com/blog/kubernetes-security-tools/">ابزارهای امنیتی در کوبرنتیز</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://hamravesh.com/blog/kubernetes-security-tools/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>آشنایی با ۷ ابزار CI/CD در کوبرنتیز</title>
		<link>https://hamravesh.com/blog/cicd-tools-for-kubernetes/</link>
					<comments>https://hamravesh.com/blog/cicd-tools-for-kubernetes/#respond</comments>
		
		<dc:creator><![CDATA[ارسطو عباسی]]></dc:creator>
		<pubDate>Fri, 06 Sep 2024 07:41:14 +0000</pubDate>
				<category><![CDATA[مقالات]]></category>
		<category><![CDATA[کوبرنتیز]]></category>
		<guid isPermaLink="false">https://hamravesh.com/blog/?p=2644</guid>

					<description><![CDATA[<p>همانطور که می‌دانید کوبرنتیز پلتفرمی برای ارکستریشن کانتینرهاست. منظور از عبارت ارکستریشن در این جمله، مدیریت چرخه‌ زندگی کانتینرها در محیط‌های پویا و مبتنی بر تعامل است. با در نظر گرفتن ویژگی‌ها و مزایایی که کوبرنتیز به‌ ما ارائه می‌دهد، شاید کار اشتباهی نباشد اگر یک قدم به جلو رفته و ابزارهای CI/CD بیشتری را [&#8230;]</p>
<p>The post <a href="https://hamravesh.com/blog/cicd-tools-for-kubernetes/">آشنایی با ۷ ابزار CI/CD در کوبرنتیز</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>همانطور که می‌دانید <strong><a href="https://hamravesh.com/blog/what-is-kubernetes/" target="_blank" rel="noreferrer noopener">کوبرنتیز</a></strong> پلتفرمی برای ارکستریشن کانتینرهاست. منظور از عبارت ارکستریشن در این جمله، مدیریت چرخه‌ زندگی کانتینرها در محیط‌های پویا و مبتنی بر تعامل است. با در نظر گرفتن ویژگی‌ها و مزایایی که کوبرنتیز به‌ ما ارائه می‌دهد، شاید کار اشتباهی نباشد اگر یک قدم به جلو رفته و ابزارهای CI/CD بیشتری را در کنار کوبرنتیز استفاده کنیم.</p>



<p>با کنار هم قرار هم دادن ابزارهای CI/CD در کنار کوبرنتیز، بسیاری از فرایندها با سادگی و سرعت بیشتری پیش رفته و حجم انجام کارهای دستی نیز کاهش پیدا می‌کند. در نتیجه شما روی خودکارسازی بیشتر کارها تمرکز خواهید کرد. </p>



<p>در این مطلب از وبلاگ‌ هم‌روش قصد داریم شما را با ۷ ابزار CI/CD در کوبرنتیز آشنا کرده و استفاده‌های هر کدام را به‌صورت مختصر بررسی کنیم. همچنین اگر قصد آشنایی کامل با چیستی CI/CD را دارید می‌توانید مطلب «<strong><a href="https://hamravesh.com/blog/what-is-ci-cd/" target="_blank" rel="noreferrer noopener">CI/CD چیست؟</a></strong>» را مطالعه کنید. </p>



<h2 class="wp-block-heading" id="h-معرفی-ابزارهای-ci-cd-در-کوبرنتیز">معرفی ابزارهای CI/CD در کوبرنتیز</h2>


<div class="wp-block-image">
<figure class="alignleft size-full"><img loading="lazy" decoding="async" width="280" height="280" src="https://hamravesh.com/blog/wp-content/uploads/2024/05/tekton.png" alt="لوگو Tekton ابزاری برای CI/CD" class="wp-image-2649" srcset="https://hamravesh.com/blog/wp-content/uploads/2024/05/tekton.png 280w, https://hamravesh.com/blog/wp-content/uploads/2024/05/tekton-150x150.png 150w, https://hamravesh.com/blog/wp-content/uploads/2024/05/tekton-250x250.png 250w, https://hamravesh.com/blog/wp-content/uploads/2024/05/tekton-100x100.png 100w" sizes="auto, (max-width: 280px) 100vw, 280px" /></figure>
</div>


<h3 class="wp-block-heading" id="h-tekton">Tekton</h3>



<p>Tekton از سازگارترین ابزارهای ساخت سیستم‌های CI/CD در کوبرنتیز به‌شمار می‌رود، چرا که در همان اکوسیستم کوبرنتیز، توسعه یافته و ساخته شده است. برای استفاده از این ابزار می‌توانید به‌صورت مستقیم نسخه‌ای از آن را روی کلاستر فعلی کوبرنتیز‌تان دیپلوی و پیکربندی کنید. این فریمورک می‌تواند به‌خوبی با دیگر ابزارهای CI شما نیز کار کند. </p>



<p>از آنجایی که این ابزار از جمله ابزارهای Native برای کوبرنتیز به‌حساب می‌آید، شما می‌توانید از عملکرد آن در کنار کوبرنتیز و در محیط‌های چند ابری مطمئن شوید. </p>



<h3 class="wp-block-heading" id="h-github-actions">GitHub Actions</h3>



<p><a href="https://github.com/features/actions" target="_blank" rel="noreferrer noopener">GitHub Actions</a> یک چهارچوب CI/CD کامل است که روی خودکارسازی فرایندهای Build، تست و دیپلویمنت تمرکز دارد. با راه‌اندازی این ابزار، هر Pull Requestیی که در مخزن اصلی اتفاق می‌افتد به‌صورت خودکار عملیات‌های Build و تست روی آن انجام شده و در صورت نیاز آن را با محیط پروداکشن ادغام می‌کند. </p>



<p>با استفاده از GitHub Actions، توسعه‌دهندگان می‌توانند ورک‌فلوها را در فایل‌های YAML تعریف کنند و آنها را در مخزن GitHub پروژه ذخیره کنند. این ورک‌فلوها می‌توانند بر اساس رویدادهای مختلفی مانند پوش کردن کدها به شاخه‌ای خاص، ایجاد پول ریکوئست، و یا حتی برنامه‌ریزی زمانی فعال شوند.</p>



<h3 class="wp-block-heading" id="h-jenkins-x">Jenkins X</h3>



<p>Jenkins از جمله محبوب‌ترین پلتفرم‌های متن‌باز CI/CD است که با زبان برنامه‌نویسی جاوا ساخته شده است. وجود اکوسیستمی بزرگ در این ابزار باعث شده تا به‌سادگی بتوان آن را با ابزارهای دیگر برای تست و دیپلوی ادغام کرد.</p>



<p>این نکته را در نظر داشته باشید که با وجود اینکه Jenkins ابزاری قدرتمند است اما به‌دلیل پیچیدگی‌هایی که دارد نرخ خطاپذیری در آن بالا بوده و نیاز است به دقت پیکربندی شود.</p>



<h3 class="wp-block-heading" id="h-gitlab">Gitlab</h3>



<p><strong>گیت‌لب</strong> از جمله قدرتمندترین ابزارهای CI/CD و DevOps به‌شمار می‌رود که به شما اجازه انجام کارهای متنوعی را در این حوزه‌ها می‌دهد. در واقع اگر دنبال محیطی یکپارچه برای انجام کارهای مختلف مربوط به CI/CD و همچنین ادغام با کوبرنتیز هستید می‌توانید روی گیت‌لب حساب کنید. </p>



<p>با ادغام کوبرنتیز و گیت‌لب شما امکان مانیتور کلاسترهای کوبرنتیز و کنترل تمام دیپلویمنت‌ها را در اختیار بگیرید. قابلیت Auto DevOps به شما امکان ساخت پایپ‌لاین‌های CI/CD را به‌سرعت می‌دهد. در نتیجه فرایند پیکربندی این ابزار بسیار سریع خواهد بود. اگر به‌دنبال روشی ساده برای دسترسی به گیت‌لب در ایران هستید می‌توانید از سرویس <strong><a href="https://docs.hamravesh.com/hamgit/intro/" target="_blank" rel="noreferrer noopener">هم‌گیت</a></strong> استفاده کنید. </p>



<h3 class="wp-block-heading" id="h-circleci">CircleCI</h3>



<p>CircleCI ابزاری مبتنی بر ابر است که با دارا بودن API اختصاصی، به خودکار کردن دیپلویمنت‌ها در کوبرنتیز کمک می‌کند. از مزیت‌های اصلی این ابزار ابری بودن آن و در نتیجه نیاز نداشتن به یک سرور اختصاصی و یا چیزی شبیه به آن است. </p>



<p>با استفاده از این ابزار شما می‌توانید پیش از دیپلوی کردن کدها، آن‌ها را به‌صورت خودکار در مقابل تست‌های مختلفی مانند تست واحد، فانکشنال و ادغام‌سازی قرار دهید. یکی از معایب این ابزار نداشتن ویژگی‌های کامل برای مدیریت عملیات‌های CD یا تحویل مداوم است. در نتیجه این ابزار بیشتر تلاش خود را روی بخش CI گذاشته است. </p>



<h3 class="wp-block-heading" id="h-ocean-cd">Ocean CD</h3>



<p><a href="https://spot.io/product/ocean-cd/" target="_blank" rel="noreferrer noopener">Ocean CD</a> یکی دیگر از ابزارهای اکوسیستم کوبرنتیز است که روی موضوع Continuous Delivery یا تحویل مداوم تمرکز دارد. <strong>Ocean CD</strong> یکی از ابزارهای نوظهور در زمینه CI/CD است که برای بهینه‌سازی استقرارها و مدیریت نرم‌افزار در محیط‌های کوبرنتیز طراحی شده است. این ابزار توسط شرکت Spot.io که اکنون بخشی از NetApp است، توسعه یافته و به‌خصوص برای تسهیل فرآیندهای استقرار در محیط‌های کوبرنتیز به کار می‌رود. Ocean CD با ارائه راهکارهای مبتنی بر مدیریت هوشمند منابع، به بهینه‌سازی استفاده از منابع و کاهش هزینه‌ها کمک می‌کند.</p>



<h3 class="wp-block-heading" id="h-travis">Travis</h3>



<p>Travis یک ابزار ادغام مداوم مبتنی بر فضای ابری است که به‌صورت خودکار تغییرات کدها را تست و Build می‌کند. تراویس با ابزارهایی مانند گیت‌هاب و بیت‌باکت به‌خوبی کار می‌کند در نتیجه می‌توانید بعد از وارد شدن به آن، تراویس را به ریپازیتوری خود متصل کنید. </p>



<p>یکی از تفاوت‌های اصلی این ابزار با دیگر مواردی که مطرح کردیم در پلن‌های آن است. اپلیکیشن‌های متن‌باز می‌توانند از پلن رایگان تراویس استفاده کنند اما اگر به‌دنبال ساخت یک اپلیکیشن سازمانی و بزرگ هستید نیاز است که پلن Commercial آن را تهیه کنید. </p>



<h2 class="wp-block-heading" id="h-مزایا-استفاده-از-ابزارهای-ci-cd-در-کنار-کوبرنتیز">مزایا استفاده از ابزارهای CI/CD در کنار کوبرنتیز</h2>



<p>استفاده از ابزارهای CI/CD در کنار کوبرنتیز دارای مزایای متعددی است که به افزایش کارآمدی و بهره‌وری در فرآیندهای توسعه و استقرار نرم‌افزار کمک می‌کند. در اینجا برخی از مزایای اصلی این ترکیب را بررسی می‌کنیم:</p>



<ol class="wp-block-list">
<li><strong class="global-rtl">خودکارسازی فرآیندها:</strong> ابزارهای CI/CD به طور خودکار تغییرات کد را از مخزن گرفته، آن‌ها را Build کرده و تست می‌کنند، و در نهایت به صورت خودکار در محیط‌های مختلف کوبرنتیز استقرار می‌دهند. این خودکارسازی می‌تواند زمان راه‌اندازی محصول جدید را کاهش دهد و به سرعت بخشیدن به دوره‌های توسعه کمک کند.</li>



<li><strong>کاهش خطاهای انسانی:</strong> با کاهش دخالت دستی در فرآیندهای توسعه و استقرار، خطاهای انسانی نیز به طور قابل توجهی کاهش می‌یابند. این امر به افزایش دقت و قابلیت اطمینان در استقرارها کمک می‌کند.</li>



<li><strong class="global-rtl">توانایی استقرار مداوم:</strong> ابزارهای CI/CD امکان تحویل مداوم (CD) را فراهم می‌آورند، که به معنای امکان به‌روزرسانی و استقرار نرم‌افزار در هر زمان با کمترین تأخیر و تداخل با کاربران است.</li>



<li><strong>افزایش ثبات و امنیت:</strong> با انجام تست‌های خودکار و دقیق در هر مرحله از فرآیند CI/CD، اطمینان حاصل می‌شود که برنامه‌ها پیش از استقرار نهایی، پایدار و امن هستند. همچنین، کوبرنتیز مکانیسم‌های امنیتی مانند مدیریت دسترسی‌های کنترل شده و شبکه‌های ایزوله را ارائه می‌دهد.</li>



<li><strong>مقیاس‌پذیری:</strong> کوبرنتیز به طور خودکار برنامه‌ها را بر اساس نیازهای ترافیکی مقیاس می‌دهد. ترکیب این ویژگی با پایپ‌لاین‌های CI/CD به شرکت‌ها امکان می‌دهد به راحتی برنامه‌های خود را مقیاس‌بندی و بهینه کنند.</li>



<li><strong>بهبود مستمر:</strong> فرآیندهای CI/CD امکان آزمایش و بازخورد مداوم را فراهم می‌آورند، که به تیم‌های توسعه امکان می‌دهد به سرعت به مشکلات پاسخ دهند و بهبودهای مداوم را در محصول نهایی اعمال کنند.</li>
</ol>



<h2 class="wp-block-heading" id="h-در-پایان">در پایان</h2>



<p>استفاده از ابزارهای CI/CD (توسعه مداوم و تحویل مداوم) در کنار کوبرنتیز (Kubernetes) می‌تواند به بهبود فرآیندهای توسعه و تحویل نرم‌افزار کمک کند. کوبرنتیز به عنوان یک پلتفرم مدیریت کانتینر، امکان استقرار، مقیاس‌بندی و مدیریت خودکار برنامه‌های کانتینری را فراهم می‌کند، در حالی که ابزارهای CI/CD فرآیندهای توسعه نرم‌افزار را خودکار سازی می‌کنند تا سرعت توسعه و کیفیت نهایی محصول را افزایش دهند.</p>



<p>در این مطلب از وبلاگ هم‌روش شما را با ۷ ابزار CI/CD در کوبرنتیز آشنا کردیم. مطمئنا موارد بیشتری را می‌توانید برای این موضوع پیدا کنید اما موارد ذکر شده در این مطلب از جمله محبوب‌ترین و پر استفاده‌ترین موارد است. </p>
<p>The post <a href="https://hamravesh.com/blog/cicd-tools-for-kubernetes/">آشنایی با ۷ ابزار CI/CD در کوبرنتیز</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://hamravesh.com/blog/cicd-tools-for-kubernetes/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>آشنایی با چرخه زندگی پاد‌ها یا Pod Lifecycle</title>
		<link>https://hamravesh.com/blog/pod-lifecycle/</link>
					<comments>https://hamravesh.com/blog/pod-lifecycle/#respond</comments>
		
		<dc:creator><![CDATA[ارسطو عباسی]]></dc:creator>
		<pubDate>Mon, 05 Aug 2024 11:16:14 +0000</pubDate>
				<category><![CDATA[مقالات]]></category>
		<category><![CDATA[کوبرنتیز]]></category>
		<guid isPermaLink="false">https://hamravesh.com/blog/?p=3029</guid>

					<description><![CDATA[<p>منظور از چرخه زندگی یا Lifecycle پادها چیست و آشنایی با آن چه کمکی به ما می‌کند؟ در این مطلب به‌صورت کامل با Pod Lifecycle آشنا می‌شویم.</p>
<p>The post <a href="https://hamravesh.com/blog/pod-lifecycle/">آشنایی با چرخه زندگی پاد‌ها یا Pod Lifecycle</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>آشنایی و درک چرخه زندگی پادها (Pod Lifecycle) برای مدیریت کانتینرها در محیط کوبرنتیز از اهمیت بالایی برخوردار است. اهمیت اصلی این موضوع نیز به درک فرایندهایی برمی‌گردد که یک پاد از زمان ایجاد شدن تا بسته یا Terminate شدن طی می‌کند. </p>



<p>فهم این مسئله به ما کمک می‌کند تا اپلیکیشن‌های کانتینرسازی شده را بهتر مدیریت کنیم و در محیط‌های Production درک درستی از شیوه کاری و رفتاری آن‌ها بدست بیاوریم. </p>



<p> برای آشنایی کامل‌تر با مفهوم پاد‌ها (Pod) می‌توانید مطلب «<strong><a href="https://hamravesh.com/blog/what-is-kubernetes-pod/" target="_blank" rel="noreferrer noopener">پاد (Pod) در کوبرنتیز</a></strong>» را مطالعه کنید. </p>



<h2 class="wp-block-heading" id="h-آشنایی-با-وضعیت-status-و-stageهای-مختلف-پادها">آشنایی با وضعیت (Status) و Stageهای مختلف پادها</h2>



<p>هر پاد در فرایند اجرا شدن در Stageها یا مراحل مختلفی قرار می‌گیرد. آشنایی با این Stageها (اشاره به همان مفهوم چرخه زندگی) به چند دلیل مهم است:</p>



<ul class="wp-block-list">
<li><strong>مشاهده وضعیت پاد</strong>: چرخه زندگی پاد به ما اطلاعات کاملی از وضعیت فعلی پادها می‌دهد. وضعیت هر پاد می‌تواند معلق (Pending)، در حال اجرا (Running)، شکست خورده (Failed) و متوقف شده (Terminated) باشد. </li>



<li><strong>رفع خطا و دیباگینگ</strong>: زمانی که شما وضعیت فعلی پاد را درک کنید، می‌توانید در صورت بروز خطا یا مشکلی آن را بهتر مدیریت کنید. برای مثال اگر یک پاد Fail شده، چرا و چگونه باید آن را درست کنیم.</li>



<li><strong>مدیریت منابع</strong>: درک وضعیت یک پاد می‌تواند به مدیریت منابع به‌صورت بهینه کمک کند. برای مثال اگر یک پاد در وضعیت معلق یا Pending باشد، به این معناست که منتظر Schedule شدن بوده و منابعی در حال استفاده نیست. </li>



<li><strong><a href="https://hamravesh.com/blog/what-is-scheduling-in-kubernetes/">Scheduling</a></strong>: با درک وضعیت فعلی پاد شما می‌توانید فرایند Scheduling پادها را به‌صورت بهینه‌تر انجام دهید. </li>
</ul>



<h2 class="wp-block-heading" id="h-وضعیت-ها-یا-stateهای-یک-pod">وضعیت‌ها یا Stateهای یک Pod</h2>



<p>هر پاد شامل آبجکتی با عنوان <a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.20/#podstatus-v1-core" target="_blank" rel="noreferrer noopener">PodStatus</a> می‌شود که فیلدی با عنوان <code>status</code> در اختیار داشته و وضعیت پادها را در خود نگهداری می‌کند. براساس نحوه کارکرد پاد، فیلد status می‌تواند ۶ وضعیت زیر را داشته باشد:</p>



<ol class="wp-block-list">
<li><strong><code>Pending</code>: </strong>بعد از ایجاد پاد، وضعیت اولیه آن معلق یا Pending خواهد بود. تا زمانی که پاد به یک Node متصل یا Scheduled نشود این وضعیت تغییری نخواهد کرد. </li>



<li><strong><code>Running</code></strong>: هر پادی که به یک Node متصل بوده و کانتینر آن فعال باشد وضعیت در حال اجرا یا Running را دریافت می‌کند.</li>



<li><strong>Succeeded</strong>: هر زمان که تمام کانتینرهای داخل یک پاد به‌صورت موفقیت‌آمیز Terminate شده و در آینده restart نشوند وضعیت Succeeded نمایش داده می‌شود. </li>



<li><strong>Failed: </strong>اگر کانتینرهای داخل پاد به درستی اجرا نشوند و یا وضعیت non-zero را برگردانند وضعیت پاد Failed می‌شود. </li>



<li><strong>Unknown</strong>: زمانی که هیچ شفافیتی راجع به چگونه و کجایی عملکرد پاد وجود نداشته باشد وضعیت Unknown یا ناشناخته ایجاد خواهد شد. </li>



<li><strong><code>CrashLoopBackoff</code></strong>: زمانی که کانتینر fail شده و به‌صورت مرتب تلاش می‌کند که از اول شروع به کار کند این وضعیت نمایش داده می‌شود. </li>
</ol>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="960" height="288" src="https://hamravesh.com/blog/wp-content/uploads/2024/06/pod-state.webp" alt="وضعیت‌های مختلف پاد" class="wp-image-3033" srcset="https://hamravesh.com/blog/wp-content/uploads/2024/06/pod-state.webp 960w, https://hamravesh.com/blog/wp-content/uploads/2024/06/pod-state-300x90.webp 300w, https://hamravesh.com/blog/wp-content/uploads/2024/06/pod-state-768x230.webp 768w" sizes="auto, (max-width: 960px) 100vw, 960px" /></figure>



<h2 class="wp-block-heading" id="h-ساخت-یک-پاد-جدید">ساخت یک پاد جدید</h2>



<p>برای درک بهتر کلیت چرخه زندگی بیایید با فرایند ساخت یک پاد جدید در کوبرنتیز آشنا شویم و سپس به شرح مراحل مختلف آن بپردازیم.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="684" src="https://hamravesh.com/blog/wp-content/uploads/2024/06/create-pod-1024x684.webp" alt="ساخت پاد جدید - دیاگرام" class="wp-image-3034" srcset="https://hamravesh.com/blog/wp-content/uploads/2024/06/create-pod-1024x684.webp 1024w, https://hamravesh.com/blog/wp-content/uploads/2024/06/create-pod-300x200.webp 300w, https://hamravesh.com/blog/wp-content/uploads/2024/06/create-pod-768x513.webp 768w, https://hamravesh.com/blog/wp-content/uploads/2024/06/create-pod.webp 1204w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>در دیاگرام بالا فرایند استاندارد Scheduling یک پاد نمایش داده شده است. البته در این دیاگرام سناریو ساخته شدن پاد به‌صورت مستقیم توسط کاربر به تصویر کشیده شده است که البته به‌ندرت اتفاق می‌افتد، چرا که در فرایند درست، کاربر یک <strong>ReplicaSet</strong> را ایجاد می‌کند و این ReplicaSet است که فرایند ساختن پاد را جلو می‌برد. در ادامه مراحل ذکر شده در دیاگرام بالا را قدم به قدم بررسی می‌کنیم:</p>



<ul class="wp-block-list">
<li>در ابتدا kubectl یا هر API Client دیگری مشخصات پاد را برای API Server ارسال و مشخص می‌کند. </li>



<li>API Server آبجکت پاد را در etcd می‌نویسد (برای آشنایی بیشتر با etcd مطلب «<strong><a href="https://hamravesh.com/blog/what-is-etcd-in-kubernetes/" target="_blank" rel="noreferrer noopener">etcd در کوبرنتیز چیست؟</a></strong>» را مطالعه کنید).</li>



<li>بعد از این اتفاق Kube-Scheduler متوجه ساخته شدن یک پاد جدید می‌شود اما می‌بیند که پاد جدید به هیچ Nodeی متصل نیست. </li>



<li>در مرحله بعد Kube-Scheduler نود جدیدی را به پاد متصل کرده و API Server را به‌روزرسانی می‌کند.</li>



<li>این تغییر در حوزه etcd نیز تکثیر می‌شود و API Server نیز اتصال نود جدید به پاد را در آبجکت Pod اعمال می‌کند. </li>



<li>حال kubelet پاد را اجرا کرده و وضعیت کانتینر را به‌روزرسانی می‌کند. </li>



<li>در نهایت API Server براساس داده‌های دریافت شده، وضعیت پاد را در etcd قرار می‌دهد. </li>
</ul>



<h2 class="wp-block-heading" id="h-آشنایی-با-container-probes-یا-کاوشگران-کانتینر">آشنایی با Container Probes یا کاوشگران کانتینر</h2>



<p>در محیط کوبرنتیز برای مانیتور سلامت و وضعیت کانتینرها در پاد از Container probes استفاده می‌شود. Probeها اطلاعات مفیدی را به Control Plane ارائه می‌دهند که در نهایت منجر به تصمیم‌گیری‌هایی در زمینه اجرا درست کانتینرها و پادها می‌شود. </p>



<p>در این فرایند kubelet براساس سه نوع از Probeها عملیات‌های مختلفی را روی کانتینرها انجام می‌دهد. در ادامه با این سه Probe آشنا می‌شویم:</p>



<ul class="wp-block-list">
<li><strong>Liveness probes</strong>: برای بررسی در حال اجرا و سالم بودن کانتینرها از این probe استفاده می‌شود. اگر این probe با خطا روبه‌رو شود، کانتینر به‌صورت خودکار ری‌استارت می‌شود. </li>



<li><strong>Readiness probes</strong>: از این probe برای بررسی امکان ورود ترافیک به کانتینر استفاده می‌شود. زمانی از این probe استفاده می‌شود که بخواهیم بدانیم آیا کانتینر به زمانی برای شروع یا اتمام فرایندی نیاز دارد یا نه.</li>



<li><strong>Startup probes</strong>: از این probe برای بررسی راه‌اندازی موفقیت‌آمیز کانتینر استفاده می‌شود. برعکس دو مورد قبلی، این probes تنها یک‌بار، در زمان Startup شدن کانتینر اجرا می‌شود.</li>
</ul>



<p>همانطور که مشاهده کردید هر کدام از این Probeها برای هدف خاصی ساخته شده‌اند و در Stageهای متفاوتی استفاده می‌شوند. </p>



<h2 class="wp-block-heading" id="h-در-پایان"><strong>در پایان</strong></h2>



<p>پیدا کردن درک درست از رفتار و چرخه زندگی پادها به شما این امکان را می‌دهد تا بهتر بتوانید در رفع اشکال کانتینرها و اپلیکیشن‌های در حال اجرا مشارکت داشته باشید و به‌سرعت مشکلات را حل کنید. در این مطلب شما را با کلیات چرخه زندگی پاد‌ها آشنا کردیم. برای مطالعه بیشتر در ارتباط با این موضوع می‌توانید مستندات رسمی کوبرنتیز <strong><a href="https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/">Pod Lifecycle</a></strong> را مطالعه کنید. </p>
<p>The post <a href="https://hamravesh.com/blog/pod-lifecycle/">آشنایی با چرخه زندگی پاد‌ها یا Pod Lifecycle</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://hamravesh.com/blog/pod-lifecycle/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>آشنایی با معماری کوبرنتیز</title>
		<link>https://hamravesh.com/blog/kubernetes-architecture/</link>
					<comments>https://hamravesh.com/blog/kubernetes-architecture/#respond</comments>
		
		<dc:creator><![CDATA[ارسطو عباسی]]></dc:creator>
		<pubDate>Mon, 29 Jul 2024 07:58:12 +0000</pubDate>
				<category><![CDATA[مقالات]]></category>
		<category><![CDATA[کوبرنتیز]]></category>
		<guid isPermaLink="false">https://hamravesh.com/blog/?p=3244</guid>

					<description><![CDATA[<p>در این مقاله به بررسی معماری کوبرنتیز خواهیم پرداخت و تلاش می‌کنیم تا مفاهیم اصلی آن را به زبانی ساده توضیح دهیم.</p>
<p>The post <a href="https://hamravesh.com/blog/kubernetes-architecture/">آشنایی با معماری کوبرنتیز</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>در دنیای فناوری اطلاعات و به ویژه در حوزه <strong><a href="https://hamravesh.com/blog/what-is-devops/" target="_blank" rel="noreferrer noopener">DevOps</a></strong>، کوبرنتیز یکی از ابزارهای کلیدی برای مدیریت و ارکستریشن کانتینرها محسوب می‌شود. در این مقاله از وبلاگ هم‌روش به بررسی معماری کوبرنتیز خواهیم پرداخت و تلاش می‌کنیم تا مفاهیم اصلی آن را به زبانی ساده توضیح دهیم.</p>



<h2 class="wp-block-heading" id="h-کوبرنتیز-چیست">کوبرنتیز چیست؟</h2>



<p>کوبرنتیز (Kubernetes) یک پلتفرم متن‌باز برای مدیریت کانتینرها است که توسط گوگل توسعه یافته و اکنون توسط بنیاد Cloud Native Computing Foundation (CNCF) نگهداری می‌شود. این پلتفرم امکان خودکارسازی فرایند استقرار، مدیریت و مقیاس‌پذیری برنامه‌های کانتینری را فراهم می‌کند.</p>



<p>برای مطالعه بیشتر در ارتباط با چیستی کوبرنتیز می‌توانید مقاله «<strong><a href="https://hamravesh.com/blog/what-is-kubernetes/">راهنمای کوبرنتیز به زبان ساده</a></strong>» را مطالعه کنید. </p>



<h2 class="wp-block-heading" id="h-اجزای-اصلی-معماری-کوبرنتیز">اجزای اصلی معماری کوبرنتیز</h2>



<h3 class="wp-block-heading" id="h-1-کلاستر-cluster">1. کلاستر (Cluster)</h3>



<p>کلاستر مجموعه‌ای از ماشین‌ها (یا نودها) است که کوبرنتیز بر روی آن‌ها اجرا می‌شود. یک کلاستر شامل دو نوع نود اصلی است:</p>



<ul class="wp-block-list">
<li><strong>نود مستر (Master Node)</strong>: مسئول مدیریت کلاستر و هماهنگی بین نودهای کاری است.</li>



<li><strong>نود کارگر (Worker Node)</strong>: مسئول اجرای کانتینرها و اپلیکیشن‌ها است.</li>
</ul>



<h3 class="wp-block-heading" id="h-2-نود-مستر-master-node">2. نود مستر (Master Node)</h3>



<p>نود مستر شامل چندین کامپوننت کلیدی است:</p>



<ul class="wp-block-list">
<li><strong>API Server</strong>: نقطه ورودی اصلی برای تمام کامپوننت‌ها و کاربرانی است که با کوبرنتیز تعامل دارند.</li>



<li><strong><a href="https://hamravesh.com/blog/what-is-etcd-in-kubernetes/">Etcd</a></strong>: یک دیتابیس کلید-مقدار (Key-Value) برای ذخیره‌سازی تمام داده‌های کلاستر. </li>



<li><strong>Controller Manager</strong>: مسئول مدیریت کنترلرهای مختلفی است که رفتار کلاستر را کنترل می‌کنند.</li>



<li><strong>Scheduler</strong>: مسئول تخصیص پادها به نودهای کاری است.</li>
</ul>



<h3 class="wp-block-heading" id="h-3-نود-کارگر-worker-node">3. نود کارگر (Worker Node)</h3>



<p>نودهای کاری نیز شامل چندین کامپوننت هستند:</p>



<ul class="wp-block-list">
<li><strong>Kubelet</strong>: یک سرویس که بر روی هر نود اجرا می‌شود و مسئولیت برقراری ارتباط بین نود و مستر را بر عهده دارد.</li>



<li><strong>Kube-proxy</strong>: مسئول مدیریت شبکه و مسیریابی درخواست‌ها به کانتینرهای مناسب.</li>



<li><strong>Container Runtime</strong>: نرم‌افزاری که کانتینرها را اجرا می‌کند، مانند <strong><a href="https://hamravesh.com/blog/what-is-docker/">Docker</a></strong>.</li>
</ul>



<h2 class="wp-block-heading" id="h-مفاهیم-کلیدی-در-کوبرنتیز">مفاهیم کلیدی در کوبرنتیز</h2>



<h3 class="wp-block-heading" id="h-1-پاد-pod">1. پاد (Pod)</h3>



<p>پادها با ایزوله کردن یک (یا چند) کانتینر، اصلی‌ترین بخش اجرای یک برنامه در ساختار کوبرنتیز را شکل می‌دهند. هر پاد شامل کد و منابع ذخیره‌سازی مورد نیاز برای اجرا بوده و دارای آدرس IP مخصوص به خود است. پادها همچنین گزینه‌های پیکربندی را شامل می‌شوند. معمولاً، یک پاد شامل یک کانتینر یا چند کانتینر است که به یک برنامه یا عملکرد کسب و کار مرتبط هستند و مجموعه‌ای از منابع و داده‌ها را به اشتراک می‌گذارند.</p>



<p>برای مطالعه کامل‌تر در ارتباط با Pod می‌توانید مطلب «<strong><a href="https://hamravesh.com/blog/what-is-kubernetes-pod/">پاد در کوبرنتیز</a></strong>» را مطالعه کنید. </p>



<h3 class="wp-block-heading" id="h-اجزاء-پاد">اجزاء پاد</h3>



<ul class="wp-block-list">
<li><strong>کانتینرها</strong>: یک پاد ممکن است شامل یک یا چند کانتینر باشد که معمولاً به یکدیگر وابسته‌اند و برای انجام یک وظیفه خاص طراحی شده‌اند.</li>



<li><strong>منابع ذخیره‌سازی</strong>: پادها دسترسی به منابع ذخیره‌سازی را فراهم می‌کنند که به کانتینرها اجازه می‌دهد داده‌ها را به اشتراک بگذارند.</li>



<li><strong>آدرس IP منحصر به فرد</strong>: هر پاد دارای آدرس IP خاص خود است که امکان ارتباط مستقل را فراهم می‌کند.</li>



<li><strong>گزینه‌های پیکربندی</strong>: پادها می‌توانند شامل گزینه‌های پیکربندی باشند که عملکرد و رفتار کانتینرها را تنظیم می‌کنند.</li>
</ul>



<h3 class="wp-block-heading" id="h-2-سرویس-service">2. سرویس (Service)</h3>



<p>سرویس یک لایه انتزاعی است که به کانتینرهای اجرا شده در پادها امکان می‌دهد تا بدون توجه به نودهایی که روی آن‌ها مستقر شده‌اند، به صورت پایدار با یکدیگر ارتباط برقرار کنند.</p>



<h3 class="wp-block-heading" id="h-3-دیپلویمنت-deployment">3. دیپلویمنت (Deployment)</h3>



<p>دیپلویمنت‌ها یکی از مهم‌ترین ابزارها در Kubernetes برای استقرار پادهای برنامه‌های کانتینری هستند. در دیپلویمنت، یک وضعیت مطلوب توصیف می‌شود که باعث می‌شود کنترل‌کننده‌ها وضعیت واقعی کلاستر را به صورت منظم تغییر دهند تا به آن وضعیت مطلوب برسند.</p>



<h4 class="wp-block-heading">ویژگی‌های کلیدی دیپلویمنت‌ها</h4>



<ul class="wp-block-list">
<li><strong>وضعیت مطلوب</strong>: دیپلویمنت‌ها به شما امکان می‌دهند تا وضعیت مطلوبی را برای برنامه‌های خود توصیف کنید، مانند تعداد پادها، نسخه‌ای که باید اجرا شود و سایر تنظیمات.</li>



<li><strong>مدیریت خودکار</strong>: کنترلرهای Kubernetes به طور خودکار وضعیت واقعی کلاستر را بررسی کرده و تغییرات لازم را اعمال می‌کنند تا با وضعیت مطلوب مطابقت داشته باشد.</li>



<li><strong>به‌روزرسانی‌ها و رول‌بک‌ها</strong>: دیپلویمنت‌ها به شما امکان می‌دهند تا به‌روزرسانی‌های پیوسته و بدون وقفه را انجام دهید و در صورت نیاز، به نسخه‌های قبلی بازگردید.</li>



<li><strong>مقیاس‌پذیری</strong>: می‌توانید به راحتی تعداد پادها را افزایش یا کاهش دهید تا با نیازهای ترافیکی برنامه هماهنگ شوید.</li>
</ul>



<h2 class="wp-block-heading" id="h-نحوه-کار-کوبرنتیز">نحوه کار کوبرنتیز</h2>



<h3 class="wp-block-heading" id="h-1-استقرار-deployment">1. استقرار (Deployment)</h3>



<p>زمانی که یک برنامه جدید قرار است مستقر شود، فایل‌های پیکربندی YAML ایجاد و به API Server ارسال می‌شوند. این فایل‌ها شامل مشخصات مورد نیاز برای پادها، سرویس‌ها و دیپلویمنت‌ها هستند.</p>



<h3 class="wp-block-heading" id="h-2-مقیاس-پذیری-scaling">2. مقیاس‌پذیری (Scaling)</h3>



<p>کوبرنتیز به صورت خودکار و یا دستی امکان مقیاس‌پذیری پادها را فراهم می‌کند تا بتواند بار ترافیکی را به خوبی مدیریت کند.</p>



<h3 class="wp-block-heading" id="h-3-خودترمیمی-self-healing">3. خودترمیمی (Self-healing)</h3>



<p>کوبرنتیز به طور خودکار وضعیت پادها را بررسی و در صورت بروز مشکل، آن‌ها را جایگزین یا مجددا راه‌اندازی می‌کند.</p>



<h2 class="wp-block-heading" id="h-نکاتی-برای-استفاده-بهتر-از-کوبرنتیز">نکاتی برای استفاده بهتر از کوبرنتیز</h2>



<p>طراحی و پیاده‌سازی کلاسترهای کوبرنتیز با توجه به بهترین استانداردها، می‌تواند به بهبود عملکرد، امنیت و مدیریت بهتر کمک کند. در ادامه، به برخی از اصلی‌ترین نکات برای استفاده بهتر از Kubernetes اشاره خواهیم کرد. </p>



<h3 class="wp-block-heading" id="h-۱-به-روزرسانی-به-آخرین-نسخه-kubernetes">۱. به‌روزرسانی به آخرین نسخه Kubernetes</h3>



<p>اطمینان حاصل کنید که همیشه از آخرین نسخه کوبرنتیز استفاده می‌کنید تا از جدیدترین ویژگی‌ها، بهبودهای امنیتی و رفع اشکالات بهره‌مند شوید. </p>



<h3 class="wp-block-heading" id="h-۲-سرمایه-گذاری-در-آموزش">۲. سرمایه‌گذاری در آموزش</h3>



<p>سرمایه‌گذاری در آموزش تیم‌های توسعه‌دهنده و عملیات از همان ابتدا بسیار مهم است. آموزش مناسب می‌تواند باعث کاهش خطاها و افزایش کارایی تیم‌ها شود.</p>



<h3 class="wp-block-heading" id="h-۳-افزایش-امنیت">۳. افزایش امنیت</h3>



<ul class="wp-block-list">
<li><strong>اسکن تصاویر</strong>: فرآیندهای اسکن تصویر را در بخشی از فرآیند CI/CD ادغام کنید، هم در مراحل ساخت و هم اجرا. کدهای متن‌باز که از مخازن Github دانلود می‌شوند همیشه باید با دقت بررسی شوند.</li>



<li><strong>کنترل دسترسی مبتنی بر نقش (RBAC)</strong>: RBAC را در کل کلاستر اعمال کنید. مدل‌های دسترسی کمترین حق (Least privilege) و اعتماد صفر (Zero-trust) باید استاندارد باشند.</li>



<li><strong>عدم استفاده از کاربران ریشه</strong>: تنها از کاربران غیرریشه (non-root) استفاده کنید و فایل سیستم را به صورت فقط خواندنی (read-only) تنظیم کنید.</li>
</ul>



<h3 class="wp-block-heading" id="h-۴-اجتناب-از-استفاده-از-مقادیر-پیش-فرض">۴. اجتناب از استفاده از مقادیر پیش‌فرض</h3>



<p>استفاده از مقادیر پیش‌فرض را به حداقل برسانید، زیرا دستورات ساده و واضح‌تر کمتر مستعد خطا هستند و هدف را بهتر نشان می‌دهند.</p>



<h3 class="wp-block-heading" id="h-۵-دقت-در-استفاده-از-تصاویر-docker-hub">۵. دقت در استفاده از تصاویر Docker Hub</h3>



<p>تصاویر Docker Hub ممکن است حاوی بدافزار یا کدهای غیرضروری باشند. با کدهای کوچک و تمیز شروع کرده و پکیج‌ها را براساس آن‌ها ایجاد کنید. تصاویر کوچک‌تر سریع‌تر ساخته شده و سریع‌تر دیپلوی می‌شوند.</p>



<h2 class="wp-block-heading" id="h-جمع-بندی">جمع‌بندی</h2>



<p>کوبرنتیز یکی از قدرتمندترین ابزارهای مدیریت کانتینر است که با فراهم کردن امکاناتی چون مقیاس‌پذیری، استقرار سریع و خودترمیمی، به تیم‌های DevOps کمک می‌کند تا برنامه‌های خود را به شکلی کارآمد و موثر مدیریت کنند. با درک اصول معماری کوبرنتیز، افراد تازه‌کار می‌توانند گام‌های اولیه را برای استفاده موثر از این پلتفرم بردارند.</p>
<p>The post <a href="https://hamravesh.com/blog/kubernetes-architecture/">آشنایی با معماری کوبرنتیز</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://hamravesh.com/blog/kubernetes-architecture/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
