<?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/feed/" rel="self" type="application/rss+xml" />
	<link>https://hamravesh.com/blog/</link>
	<description>بلاگ رسمی هم‌روش</description>
	<lastBuildDate>Wed, 05 Aug 2026 13:19:26 +0000</lastBuildDate>
	<language>fa-IR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0.2</generator>

<image>
	<url>https://hamravesh.com/blog/wp-content/uploads/2026/05/cropped-typeGeneral-32x32.png</url>
	<title>بلاگ هم‌روش</title>
	<link>https://hamravesh.com/blog/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>سنتری چیست؟ از پایش خطای اپلیکیشن تا تحلیل عملکرد در سطح کد</title>
		<link>https://hamravesh.com/blog/what-is-sentry/</link>
					<comments>https://hamravesh.com/blog/what-is-sentry/#respond</comments>
		
		<dc:creator><![CDATA[هم‌روش]]></dc:creator>
		<pubDate>Wed, 05 Aug 2026 08:27:51 +0000</pubDate>
				<category><![CDATA[دواپس]]></category>
		<category><![CDATA[مشاهده‌پذیری]]></category>
		<category><![CDATA[مقالات]]></category>
		<guid isPermaLink="false">https://hamravesh.com/blog/?p=5564</guid>

					<description><![CDATA[<p>Sentry (سنتری) با جمع‌آوری و ارتباط‌دادن این داده‌ها، دید یکپارچه‌تری از رفتار اپلیکیشن در زمان وقوع مشکل ارائه می‌دهد. به همین دلیل، Sentry فقط یک ابزار ثبت خطا نیست، بلکه داده‌های مرتبط با خطاها، Traceها، لاگ‌ها و مشاهده رفتار واقعی کاربران را در کنار یکدیگر قرار می‌دهد تا عیب‌یابی بر پایه شواهد کامل‌تری انجام شود. </p>
<p>The post <a href="https://hamravesh.com/blog/what-is-sentry/">سنتری چیست؟ از پایش خطای اپلیکیشن تا تحلیل عملکرد در سطح کد</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">فرض کنید نسخه جدید یک اپلیکیشن منتشر شده، اما پس از انتشار، بخشی از درخواست‌های پرداخت کامل نمی‌شوند. در رابط کاربری هم خطای مشخصی دیده نمی‌شود و گزارش کاربران هم اطلاعات کافی برای بازتولید مشکل در اختیار تیم فنی قرار نمی‌دهد. در نتیجه، مشخص نیست اختلال دقیقا از کدام بخش سیستم آغاز شده است. برای پیدا کردن علت مشکل، فقط مشاهده یک پیام خطا کافی نیست. تیم فنی باید بداند خطا برای کدام کاربران، در کدام نسخه و در امتداد کدام درخواست رخ داده است. همچنین لازم است ارتباط میان خطاها، ردیابی توزیع‌شده یا Distributed Tracing، لاگ‌ها و سایر شواهد فنی را بررسی کند تا مسیر رسیدن به علت اصلی کوتاه‌تر شود.</p>



<p class="wp-block-paragraph">Sentry (سنتری) با جمع‌آوری و ارتباط‌دادن این داده‌ها، دید یکپارچه‌تری از رفتار اپلیکیشن در زمان وقوع مشکل ارائه می‌دهد. به همین دلیل، Sentry فقط ابزار ثبت خطا نیست، بلکه خطاها، Traceها (مسیر اجرای درخواست‌ها)، لاگ‌ها و بازپخش تعاملات کاربر را در کنار یکدیگر قرار می‌دهد تا تیم فنی بتواند مشکل را با شواهد کامل‌تری بررسی کند. در ادامه بررسی می‌کنیم که Sentry چیست، چه قابلیت‌ها و محدودیت‌هایی دارد و روش‌های استقرار آن چه تفاوتی با یکدیگر دارند.</p>



<h2 id="h-sentry-چیست" class="wp-block-heading"><strong>Sentry چیست؟</strong></h2>



<p class="wp-block-paragraph">Sentry پلتفرمی برای پایش، تحلیل و عیب‌یابی مشکلات اپلیکیشن است. این پلتفرم داده‌هایی مانند خطاها، Traceها، لاگ‌ها، اطلاعات عملکردی و اطلاعات زمینه‌ای (Context) رخدادها را جمع‌آوری و به یکدیگر مرتبط می‌کند تا بررسی علت مشکلات با شواهد کامل‌تری انجام شود.</p>



<p class="wp-block-paragraph">نرم‌افزار Sentry فعالیت خود را به‌عنوان ابزاری برای پایش خطا آغاز کرد، اما در سال‌های اخیر قابلیت‌هایی مانند Logs ،Tracing ،Profiling و Session Replay هم به آن اضافه شدند.</p>



<p class="wp-block-paragraph">هدف و کاربرد Sentry کاهش حدس‌وگمان در فرایند عیب‌یابی و فراهم‌کردن اطلاعات لازم برای تحلیل سریع‌تر مشکلات است. بااین‌حال، این پلتفرم جایگزین همه ابزارهای مشاهده‌پذیری نیست و در بسیاری از معماری‌ها، برای پایش کامل زیرساخت و منابع اجرایی، همچنان از ابزارهای دیگری در کنار آن استفاده می‌شود.</p>



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



<p class="wp-block-paragraph">فرایند کار Sentry را می‌توان در چهار مرحله بررسی کرد:</p>



<h3 id="h-۱-اتصال-اپلیکیشن-به-sentry-از-طریق-sdk" class="wp-block-heading"><strong>۱. اتصال اپلیکیشن به Sentry از طریق SDK</strong></h3>



<p class="wp-block-paragraph">نخستین گام، نصب و پیکربندی کیت توسعه نرم‌افزار (SDK) متناسب با زبان و فریم‌ورک اپلیکیشن است. سنتری برای بسیاری از پلتفرم‌های بک‌اِند، فرانت‌اِند، موبایل، دسکتاپ و توسعه بازی‌ها پشتیبانی می‌کند. <a href="https://docs.sentry.io/platforms" data-type="link" data-id="https://docs.sentry.io/platforms" target="_blank" rel="noreferrer noopener">لیست کامل پلتفرم‌های پشتیبانی شده توسط سنتری</a> در وب‌سایت سنتری قابل مشاهده است. پس از انجام تنظیمات اولیه، SDK رخدادها و اطلاعات زمینه‌ای مرتبط را از اپلیکیشن جمع‌آوری و به پروژه Sentry ارسال می‌کند.</p>



<h3 id="h-۲-جمع-آوری-خطا-و-اطلاعات-زمینه-ای" class="wp-block-heading"><strong>۲. جمع‌آوری خطا و اطلاعات زمینه‌ای</strong></h3>



<p class="wp-block-paragraph">هنگام وقوع یک خطا، Sentry تنها پیام خطا را ثبت نمی‌کند. این پلتفرم اطلاعاتی مانند نوع و پیام خطا، Stack Trace، زمان و محیط وقوع، نسخه اپلیکیشن، مسیر یا درخواست مرتبط و اطلاعات زمینه‌ای کاربر (در صورت پیکربندی مجاز) را ذخیره می‌کند. علاوه بر این، تیم توسعه می‌تواند Tagها و داده‌های تکمیلی را ارسال کند تا فیلتر، جست‌وجو و تحلیل رخدادها ساده‌تر شود.</p>



<h3 id="h-۳-ارتباط-خطاها-و-لاگ-ها-با-trace-و-span" class="wp-block-heading"><strong>۳. ارتباط خطاها و لاگ‌ها با Trace و Span</strong></h3>



<p class="wp-block-paragraph">نمایش یک خطا به‌تنهایی همیشه برای یافتن علت اصلی کافی نیست. در Sentry می‌توان لاگ‌ها را در ارتباط با Trace و Span مربوط به همان جریان بررسی کرد. در نتیجه، تیم توسعه علاوه بر رخداد خطا، Trace و لاگ‌های مرتبط با عملیات موردنظر را نیز در اختیار دارد.</p>



<p class="wp-block-paragraph"><strong>تفاوت Error و Span چیست؟</strong></p>



<p class="wp-block-paragraph">Error وقوع یک خطا یا استثنا را همراه با اطلاعات زمینه‌ای آن ثبت می‌کند؛ اما Span نمایانگر یک عملیات مشخص در مسیر اجرای درخواست است و مدت اجرای آن عملیات را نشان می‌دهد. به‌طور خلاصه، Error نشان می‌دهد چه مشکلی رخ داده است و Span نشان می‌دهد درخواست چه مسیری را طی کرده و زمان در کدام عملیات صرف شده است.</p>



<h3 id="h-۴-تحلیل-عملکرد-در-سطح-trace-و-تابع" class="wp-block-heading"><strong>۴. تحلیل عملکرد در سطح Trace و تابع</strong></h3>



<p class="wp-block-paragraph">Tracing و Profiling دو نقش متفاوت در تحلیل عملکرد دارند. قابلیت Tracing نشان می‌دهد زمان اجرای یک درخواست میان عملیات یا سرویس‌های مختلف چگونه توزیع شده و کدام بخش بیشترین زمان را مصرف کرده است. اگر برای یافتن علت کندی به جزئیات بیشتری نیاز باشد، Profiling بررسی را تا سطح تابع‌ها و میزان مصرف پردازنده ادامه می‌دهد.</p>



<h2 id="h-قابلیت-های-اصلی-sentry-چیست" class="wp-block-heading"><strong>قابلیت‌های اصلی Sentry چیست؟</strong></h2>



<p class="wp-block-paragraph">هر یک از قابلیت‌های Sentry برای پاسخ به یک نیاز مشخص در فرایند پایش، عیب‌یابی یا تحلیل عملکرد طراحی شده‌اند که در ادامه آن‌ها را جداگانه بررسی می‌کنیم.</p>



<h3 id="h-پایش-و-تحلیل-خطاها" class="wp-block-heading"><strong>پایش و تحلیل خطاها</strong></h3>



<p class="wp-block-paragraph">یکی از مهم‌ترین کاربردهای Sentry، پایش خطای اپلیکیشن در محیط عملیاتی است. زمانی که یک خطای مدیریت‌نشده در محیط عملیاتی رخ می‌دهد، این پلتفرم علاوه بر ثبت پیام خطا، اطلاعاتی مانند Stack Trace، نسخه اپلیکیشن، محیط اجرا و زمان وقوع را هم ثبت می‌کند. همچنین در صورت پیکربندی پروژه، می‌توان اطلاعات زمینه‌ای و Tagهای موردنیاز را همراه هر رخداد ارسال کرد تا بررسی علت مشکل با جزئیات بیشتری انجام شود.</p>



<figure class="wp-block-image size-large"><img fetchpriority="high" decoding="async" width="1024" height="569" src="https://hamravesh.com/blog/wp-content/uploads/2026/08/hamravesh-sentry-01-1024x569.webp" alt="شناسایی و اولویت‌بندی مشکلات در سنتری" class="wp-image-5582" srcset="https://hamravesh.com/blog/wp-content/uploads/2026/08/hamravesh-sentry-01-1024x569.webp 1024w, https://hamravesh.com/blog/wp-content/uploads/2026/08/hamravesh-sentry-01-300x167.webp 300w, https://hamravesh.com/blog/wp-content/uploads/2026/08/hamravesh-sentry-01-768x427.webp 768w, https://hamravesh.com/blog/wp-content/uploads/2026/08/hamravesh-sentry-01-1536x853.webp 1536w, https://hamravesh.com/blog/wp-content/uploads/2026/08/hamravesh-sentry-01-2048x1138.webp 2048w, https://hamravesh.com/blog/wp-content/uploads/2026/08/hamravesh-sentry-01-120x67.webp 120w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">سنتری، اطلاعات موردنیاز برای بررسی هر مشکل عملکردی را در نمای یکپارچه ارائه می‌دهد. تیم فنی می‌تواند گستره تأثیر، روند تکرار و شواهد فنی مشکل را بررسی کند. همچنین امکان بررسی روند تکرار مشکل و ارتباط آن با نسخه‌های منتشرشده و نیز شناسایی تابع و کوئری‌های تکرارشونده موثر در افت عملکرد فراهم شده است.</figcaption></figure>



<p class="wp-block-paragraph">Sentry اطلاعاتی مانند تعداد دفعات وقوع و تعداد کاربران تحت‌تأثیر را در اختیار تیم قرار می‌دهد تا مشکلات بر اساس دامنه اثر آن‌ها اولویت‌بندی شوند. البته این پلتفرم معمولا خطاها را پس از وقوع در محیط عملیاتی ثبت و تحلیل می‌کند؛ بنابراین هدف آن، فراهم‌کردن اطلاعات لازم برای تشخیص و رفع سریع‌تر مشکلات است، نه جلوگیری از وقوع آن‌ها.</p>



<h3 id="h-پایش-عملکرد-و-distributed-tracing" class="wp-block-heading"><strong>پایش عملکرد و Distributed Tracing</strong></h3>



<p class="wp-block-paragraph">بررسی خطاها همیشه برای تشخیص علت کندی یک درخواست کافی نیست. Sentry با قابلیت ردیابی توزیع شده، مسیر اجرای هر درخواست را در میان سرویس‌ها و عملیات مختلف نمایش می‌دهد و مشخص می‌کند هر Span چه میزان زمان صرف کرده است.</p>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="569" src="https://hamravesh.com/blog/wp-content/uploads/2026/08/hamravesh-sentry-02-1024x569.webp" alt="تحلیل مسیر اجرای درخواست‌ها در سنتری" class="wp-image-5584" srcset="https://hamravesh.com/blog/wp-content/uploads/2026/08/hamravesh-sentry-02-1024x569.webp 1024w, https://hamravesh.com/blog/wp-content/uploads/2026/08/hamravesh-sentry-02-300x167.webp 300w, https://hamravesh.com/blog/wp-content/uploads/2026/08/hamravesh-sentry-02-768x427.webp 768w, https://hamravesh.com/blog/wp-content/uploads/2026/08/hamravesh-sentry-02-1536x853.webp 1536w, https://hamravesh.com/blog/wp-content/uploads/2026/08/hamravesh-sentry-02-2048x1138.webp 2048w, https://hamravesh.com/blog/wp-content/uploads/2026/08/hamravesh-sentry-02-120x67.webp 120w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">سنتری با نمای آبشاری یک Trace، مسیر اجرای درخواست را از فرانت‌اند، سرویس‌های مختلف و پایگاه داده نمایش می‌دهد. مقایسه زمان اجرای عملیات مختلف به تیم فنی کمک می‌کند منشأ کندی را در میان اجزای وابسته پیدا کند، ارتباط والد و فرزند میان درخواست‌ها، توابع و کوئری‌ها را مشاهده کند و عملکرد صفحه را با شاخص‌های LCP ،FCP ،CLS و TTFB بسنجد.</figcaption></figure>



<p class="wp-block-paragraph">این قابلیت به تیم فنی کمک می‌کند سرویس یا بخشی از فرایند را که باعث افزایش زمان پاسخ شده شناسایی کند. در معماری‌های چندسرویسی هم می‌توان مسیر کامل یک درخواست را از ابتدا تا انتها مشاهده و ارتباط مشکلات عملکردی با خطاهای ثبت‌شده را دقیق‌تر بررسی کرد.</p>



<h3 id="h-بررسی-عملکرد-در-سطح-کد-با-profiling" class="wp-block-heading"><strong>بررسی عملکرد در سطح کد با Profiling</strong></h3>



<p class="wp-block-paragraph">قابلیت Tracing نشان می‌دهد کندی در کدام بخش از مسیر اجرای درخواست رخ داده است، اما همیشه علت دقیق آن را در سطح کد مشخص نمی‌کند. Profiling این بررسی را تا سطح فراخوانی تابع‌ها، فایل‌ها و خطوط کد ادامه می‌دهد و بخش‌هایی را نشان می‌دهد که بیشترین سهم را در مصرف CPU دارند.</p>



<p class="wp-block-paragraph">در Sentry، قابلیت Continuous Profiling برای تحلیل سرویس‌های بک‌اند و پردازش‌های طولانی‌مدت کاربرد دارد. همچنین UI Profiling عملکرد رابط کاربری را بررسی می‌کند تا عواملی که باعث کاهش پاسخ‌گویی یا روان بودن رابط کاربری می‌شوند، شناسایی شوند. ازآنجایی‌که Profiling می‌تواند حجم مصرف و نگهداری داده را افزایش دهد، Sentry امکان کنترل نحوه فعال‌سازی، چرخه اجرا و نرخ نمونه‌برداری این قابلیت را فراهم می‌کند.</p>



<h3 id="h-مشاهده-لاگ-های-ساختاریافته" class="wp-block-heading"><strong>مشاهده لاگ‌های ساختاریافته</strong></h3>



<p class="wp-block-paragraph">لاگ‌های ساختاریافته در Sentry می‌توانند همراه با فیلدهایی مانند شناسه کاربر، شناسه سفارش یا نام قابلیت ارسال شوند. وجود این فیلدها امکان جست‌وجو، فیلتر، گروه‌بندی و تعریف هشدار بر اساس ویژگی‌های مشخص را فراهم می‌کند.</p>



<p class="wp-block-paragraph">لاگ‌های ساختاریافته را می‌توان به Trace و Span مربوط به همان درخواست متصل کرد. به این ترتیب، هنگام بررسی یک خطا یا مشکل عملکردی، می‌توان لاگ‌های مرتبط با همان درخواست را در کنار سایر شواهد مشاهده کرد و مسیر رسیدن به علت اصلی را سریع‌تر دنبال کرد. Sentry همچنین امکان مشاهده زنده لاگ‌ها (Live Tail) و ساخت Alert و Dashboard بر اساس الگوهای ثبت‌شده را فراهم می‌کند.</p>



<p class="wp-block-paragraph">البته Sentry همه لاگ‌های اپلیکیشن را به‌صورت خودکار جمع‌آوری نمی‌کند. نحوه ثبت و ارسال لاگ‌ها به زبان برنامه‌نویسی، SDK و تنظیمات انجام‌شده در پروژه بستگی دارد.</p>



<h3 id="h-بازسازی-مسیر-کاربر-با-session-replay" class="wp-block-heading"><strong>بازسازی مسیر کاربر با Session Replay</strong></h3>



<p class="wp-block-paragraph">قابلیت مشاهده رفتار واقعی کاربران (Session Replay) به تیم فنی کمک می‌کند تعاملات کاربر با اپلیکیشن را پیش از بروز خطا مشاهده کند. در بسیاری از موارد، توضیحات کاربران برای بازتولید یک مشکل کافی نیست؛ اما با مشاهده روند واقعی استفاده از اپلیکیشن، می‌توان مراحل منتهی به خطا را دقیق‌تر بررسی کرد.</p>



<p class="wp-block-paragraph">ارزش این قابلیت زمانی بیشتر می‌شود که Session Replay در کنار خطاها، Trace و سایر داده‌های فنی تحلیل شود. در این شرایط، تیم توسعه علاوه بر مشاهده رفتار کاربر، می‌تواند رخداد ثبت‌شده و اطلاعات مربوط به همان درخواست را بررسی کند و با اتکا به شواهد کامل‌تر، علت مشکل را سریع‌تر تشخیص دهد.</p>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="569" src="https://hamravesh.com/blog/wp-content/uploads/2026/08/hamravesh-sentry-03-1024x569.webp" alt="قابلیت Session Replay در سنتری" class="wp-image-5583" srcset="https://hamravesh.com/blog/wp-content/uploads/2026/08/hamravesh-sentry-03-1024x569.webp 1024w, https://hamravesh.com/blog/wp-content/uploads/2026/08/hamravesh-sentry-03-300x167.webp 300w, https://hamravesh.com/blog/wp-content/uploads/2026/08/hamravesh-sentry-03-768x427.webp 768w, https://hamravesh.com/blog/wp-content/uploads/2026/08/hamravesh-sentry-03-1536x853.webp 1536w, https://hamravesh.com/blog/wp-content/uploads/2026/08/hamravesh-sentry-03-2048x1138.webp 2048w, https://hamravesh.com/blog/wp-content/uploads/2026/08/hamravesh-sentry-03-120x67.webp 120w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">قابلیت Session Replay در سنتری، تعامل کاربر با اپلیکیشن را در کنار رویدادهای فنی بازسازی می‌کند. تیم توسعه می‌تواند ببیند کاربر چه اقداماتی انجام داده، در کدام مرحله با مشکل مواجه شده و هم‌زمان چه خطایی در برنامه ثبت شده است. Session Replay همچنین امکان شناسایی کلیک‌های بی‌نتیجه یا عصبی را فراهم می‌کند و قابلیت محافظت از اطلاعات حساس کاربران با پنهان‌سازی خودکار محتوای صفحه دارد.</figcaption></figure>



<p class="wp-block-paragraph">ازآنجایی‌که این قابلیت با تعاملات واقعی کاربران سروکار دارد، هنگام استفاده از آن باید به حفاظت از داده‌های حساس و رعایت حریم خصوصی توجه شود. جزئیات نحوه مدیریت این داده‌ها به تنظیمات و مستندات رسمی Session Replay وابسته است.</p>



<h3 id="h-تحلیل-نسخه-های-منتشرشده" class="wp-block-heading"><strong>تحلیل نسخه‌های منتشرشده</strong></h3>



<p class="wp-block-paragraph">قابلیت تحلیل انتشار نسخه‌ها (Release Health) به تیم توسعه کمک می‌کند اثر هر نسخه جدید را پس از انتشار بررسی کند. با نسبت‌دادن خطاها و داده‌های عملکردی به هر Release، می‌توان مشاهده کرد که آیا انتشار یک نسخه جدید، با افزایش خطاها، تغییر روند عملکرد یا بروز مشکلات جدید همراه بوده است یا خیر.</p>



<p class="wp-block-paragraph">این قابلیت زمانی ارزش بیشتری پیدا می‌کند که اطلاعات نسخه در زمان پیکربندی پروژه به Sentry ارسال شده باشد. در این صورت، تیم فنی می‌تواند روند تغییرات هر Release را با نسخه‌های قبلی مقایسه کند و اگر پس از انتشار، خطاهایی که قبلا برطرف شده بودند دوباره ظاهر شوند، احتمال بروز Regression (بازگشت مشکلی که در نسخه‌های قبلی برطرف شده بود) را سریع‌تر بررسی کند. این مقایسه به تیم کمک می‌کند اثر نسخه جدید بر پایداری اپلیکیشن را ارزیابی و در صورت مشاهده تغییرات غیرمنتظره، انتشار اصلاحیه را بررسی کند.</p>



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



<p class="wp-block-paragraph">فرض کنید پس از انتشار نسخه جدید یک اپلیکیشن، بخشی از پرداخت‌ها کامل نمی‌شوند. برخی کاربران پس از ثبت اطلاعات پرداخت، تایید نهایی سفارش را دریافت نمی‌کنند و تیم پشتیبانی هم فقط با گزارش‌هایی پراکنده روبه‌رو است. هم‌زمان، نرخ یکی از خطاهای مرتبط با فرایند پرداخت در Sentry افزایش پیدا می‌کند.</p>



<p class="wp-block-paragraph">در مرحله اول، تیم توسعه رخداد ثبت‌شده را بررسی می‌کند. Trace مربوط به درخواست نشان می‌دهد بخش ابتدایی فرایند در زمان معمول اجرا شده است، اما ارتباط با یکی از سرویس‌های پایین‌دستی زمان بیشتری مصرف می‌کند. این داده مشخص می‌کند که کندی در کدام بخش از مسیر درخواست رخ داده است، اما هنوز علت دقیق آن را نشان نمی‌دهد.</p>



<p class="wp-block-paragraph">در مرحله بعد، تیم، لاگ‌های متصل به Span همان عملیات را بررسی می‌کند. لاگ ساختاریافته شامل فیلدهایی مانند شناسه سفارش و وضعیت پرداخت است و نشان می‌دهد درخواست برای پردازش ارسال شده، اما پاسخ سرویس پایین‌دستی در زمان مورد انتظار دریافت نشده است.</p>



<p class="wp-block-paragraph">برای مشخص‌شدن علت کندی، داده‌های Profiling بررسی می‌شوند. این قابلیت نشان می‌دهد آیا زمان پاسخ طولانی به اجرای یک تابع پرمصرف یا افزایش مصرف CPU در کد اپلیکیشن مربوط است یا مشکل در بخش دیگری از مسیر قرار دارد. اگر Profiling مصرف غیرعادی در سطح تابع را نشان ندهد، دامنه بررسی بیشتر روی ارتباط با سرویس پایین‌دستی متمرکز می‌شود.</p>



<p class="wp-block-paragraph">پس از شناسایی تغییر مرتبط با نسخه جدید، کد یا تنظیمات مرتبط، اصلاح و نسخه تازه‌ای منتشر می‌شود. سپس روند خطاها، زمان اجرای Traceها و لاگ‌های مرتبط دوباره بررسی می‌شوند تا مشخص شود اختلال، کاهش یافته و عملکرد فرایند پرداخت به وضعیت مورد انتظار بازگشته است.</p>



<h2 id="h-مزایای-استفاده-از-sentry-برای-تیم-های-فنی" class="wp-block-heading"><strong>مزایای استفاده از Sentry برای تیم‌های فنی</strong></h2>



<p class="wp-block-paragraph">بررسی موارد زیر نشان می‌دهد مزایای Sentry چیست و این پلتفرم چگونه فرایند عیب‌یابی و اولویت‌بندی مشکلات را برای تیم‌های فنی ساده‌تر می‌کند. مهم‌ترین مزایای Sentry عبارت‌اند از:</p>



<h3 id="h-کاهش-زمان-رسیدن-به-علت-مشکل" class="wp-block-heading"><strong>کاهش زمان رسیدن به علت مشکل</strong></h3>



<p class="wp-block-paragraph">وقتی خطاها، لاگ‌ها، Traceها و داده‌های Profiling در ارتباط با یکدیگر بررسی شوند، تیم فنی شواهد مرتبط با یک مشکل را در کنار هم می‌بیند. این ارتباط میان داده‌ها می‌تواند مسیر رسیدن از مشاهده نشانه‌های مشکل به یافتن علت آن را کوتاه‌تر و فرایند عیب‌یابی را هدفمندتر کند.</p>



<h3 id="h-کاهش-نیاز-به-بازتولید-دستی-تمام-خطاها" class="wp-block-heading"><strong>کاهش نیاز به بازتولید دستی تمام خطاها</strong></h3>



<p class="wp-block-paragraph">Sentry همراه هر رخداد، اطلاعاتی مانند Stack Trace، نسخه اپلیکیشن، محیط اجرا و سایر داده‌های زمینه‌ای را ثبت می‌کند. این اطلاعات به تیم توسعه کمک می‌کنند شرایط وقوع خطا را بهتر درک کند و در بسیاری از موارد، بدون تکرار کامل همان سناریو، بررسی اولیه را آغاز کند. البته این موضوع به معنی حذف کامل نیاز به بازتولید خطا نیست و در برخی مشکلات، همچنان انجام آزمون‌های تکمیلی ضروری خواهد بود.</p>



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



<p class="wp-block-paragraph">همه خطاها اهمیت یکسانی ندارند. Sentry امکان بررسی عواملی مانند تعداد رخدادها، کاربران تحت‌تاثیر و نسخه‌ای که مشکل در آن مشاهده شده است را فراهم می‌کند. این دید به تیم کمک می‌کند که تشخیص دهد کدام مشکلات باید زودتر بررسی شوند و منابع فنی را بر اساس میزان تاثیر هر مسئله مدیریت کند.</p>



<h3 id="h-ایجاد-دید-مشترک-میان-تیم-ها" class="wp-block-heading"><strong>ایجاد دید مشترک میان تیم‌ها</strong></h3>



<p class="wp-block-paragraph">اطلاعات یکپارچه می‌تواند همکاری میان توسعه‌دهندگان، تیم‌های DevOps، تضمین کیفیت (QA) و پشتیبانی را ساده‌تر کند. زمانی که همه این تیم‌ها به داده‌های مشترکی مانند خطاها، Traceها، لاگ‌ها و اطلاعات عملکردی دسترسی داشته باشند، بررسی مشکلات با برداشت یکسان‌تری انجام می‌شود و هماهنگی میان اعضای تیم افزایش پیدا می‌کند.</p>



<h2 id="h-محدودیت-ها-و-ملاحظات-استفاده-از-sentry" class="wp-block-heading"><strong>محدودیت‌ها و ملاحظات استفاده از Sentry</strong></h2>



<p class="wp-block-paragraph">در کنار آشنایی با قابلیت‌ها و مزایا، لازم است بدانید محدودیت‌های Sentry چیست و در چه شرایطی استفاده از آن به برنامه‌ریزی و پیکربندی دقیق‌تری نیاز دارد. بسیاری از مواردی که در ادامه بررسی می‌کنیم، ضعف ذاتی Sentry نیستند؛ بلکه ملاحظاتی هستند که باید هنگام استفاده از یک پلتفرم جامع برای پایش خطا و عملکرد اپلیکیشن در نظر گرفته شوند.</p>



<h3 id="h-sentry-جایگزین-تمام-ابزارهای-مانیتورینگ-نیست" class="wp-block-heading"><strong>Sentry جایگزین تمام ابزارهای مانیتورینگ نیست</strong></h3>



<p class="wp-block-paragraph">تمرکز اصلی Sentry بر پایش خطاها، عملکرد اپلیکیشن و تجربه اجرای کد است. این پلتفرم اطلاعاتی مانند خطاها، Traceها، لاگ‌ها و داده‌های عملکردی را در کنار یکدیگر قرار می‌دهد تا عیب‌یابی ساده‌تر شود، اما هدف آن پوشش تمام جنبه‌های مشاهده‌پذیری نیست.</p>



<p class="wp-block-paragraph">اگر سازمان به مشاهده کامل زیرساخت، وضعیت هاست‌ها، تجهیزات شبکه یا شاخص‌های عملیاتی گسترده نیاز داشته باشد، ممکن است همچنان از ابزارهای دیگری در کنار Sentry استفاده کند.</p>



<h3 id="h-جمع-آوری-داده-بیشتر-همیشه-به-عیب-یابی-بهتر-منجر-نمی-شود" class="wp-block-heading"><strong>جمع‌آوری داده بیشتر، همیشه به عیب‌یابی بهتر منجر نمی‌شود</strong></h3>



<p class="wp-block-paragraph">ثبت حجم بیشتری از داده‌ها لزوما به معنای تحلیل دقیق‌تر نیست. اگر بدون برنامه، تعداد زیادی خطا، لاگ، Trace  یا داده‌های تحلیل عملکرد جمع‌آوری شود، ممکن است حجم اطلاعات غیرضروری افزایش پیدا کند و یافتن رخدادهای مهم دشوارتر شود.</p>



<p class="wp-block-paragraph">برای جلوگیری از این وضعیت، معمولا تیم فنی باید درباره مواردی مانند داده‌های قابل جمع‌آوری، نرخ نمونه‌برداری، قوانین هشدار و اطلاعاتی که نباید به Sentry ارسال شوند، تصمیم‌گیری کند. چنین تنظیماتی کمک می‌کند که داده‌های ثبت‌شده برای عیب‌یابی مفید باقی بمانند و از ایجاد نویز جلوگیری شود.</p>



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



<p class="wp-block-paragraph">در مدل‌های قیمت‌گذاری مبتنی بر مصرف، حجم داده‌های ثبت‌شده می‌تواند بر هزینه استفاده اثر بگذارد. افزایش تعداد Errorها، Spanها، Replayها یا حجم Logها ممکن است مصرف را افزایش دهد؛ به‌ویژه اگر افزایش ناگهانی خطا یا ارسال بی‌ضابطه داده رخ دهد. مشخص‌کردن داده‌های ضروری و کنترل نحوه ارسال آن‌ها می‌تواند به مدیریت مصرف کمک کند.</p>



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



<p class="wp-block-paragraph">نصب و پیکربندی SDK فقط نخستین مرحله استفاده از Sentry است. برای دستیابی به داده‌های مفید، تیم باید اطلاعات نسخه و محیط اجرا را به‌درستی تنظیم کند، درباره نرخ نمونه‌برداری تصمیم بگیرد، داده‌های حساس را کنترل کند و هشدارهای متناسب با نیاز پروژه را تعریف کند. بدون این تنظیمات، ممکن است داده‌های جمع‌آوری‌شده بیش از حد گسترده یا فاقد زمینه کافی برای عیب‌یابی باشند.</p>



<h3 id="h-گستردگی-قابلیت-ها-می-تواند-برای-برخی-تیم-ها-بیش-از-نیاز-باشد" class="wp-block-heading"><strong>گستردگی قابلیت‌ها می‌تواند برای برخی تیم‌ها بیش از نیاز باشد</strong></h3>



<p class="wp-block-paragraph">گستردگی قابلیت‌های Sentry برای بسیاری از تیم‌ها مزیت است، اما پروژه‌ای که فقط به ثبت ساده خطا نیاز دارد، ممکن است به همه این امکانات احتیاج نداشته باشد. در چنین شرایطی، انتخاب و پیکربندی قابلیت‌ها بر اساس نیاز واقعی پروژه، از پیچیدگی غیرضروری جلوگیری می‌کند.</p>



<h2 id="h-استقرار-شخصی-sentry-چیست" class="wp-block-heading"><strong>استقرار شخصی Sentry چیست؟</strong></h2>



<p class="wp-block-paragraph">در مدل Self-hosted یا استقرار شخصی، سازمان، Sentry را روی زیرساخت خود مستقر می‌کند و مدیریت همه اجزای آن را بر عهده می‌گیرد. در این روش، کنترل محل نگهداری داده‌ها، منابع زیرساختی و تنظیمات استقرار در اختیار خود سازمان است و علاوه بر این، مسئولیت نصب، نگهداری، به‌روزرسانی، پایش و بهره‌برداری از سرویس هم بر عهده همان تیم خواهد بود.</p>



<p class="wp-block-paragraph">این مدل برای برخی سازمان‌ها مزایای مهمی دارد. برای مثال، اگر الزامات امنیتی، حاکمیتی یا قانونی ایجاب کند که داده‌ها فقط در زیرساخت داخلی نگهداری شوند، استقرار شخصی می‌تواند انتخاب مناسبی باشد. همچنین سازمان می‌تواند کنترل بیشتری بر نحوه تخصیص منابع، تنظیمات استقرار و برخی سیاست‌های عملیاتی داشته باشد. بنابراین، انتخاب این مدل به الزامات سازمان و ظرفیت عملیاتی تیم زیرساخت بستگی دارد.</p>



<h2 id="h-چالش-های-راه-اندازی-و-نگهداری-استقرار-شخصی-sentry" class="wp-block-heading"><strong>چالش‌های راه‌اندازی و نگهداری استقرار شخصی Sentry</strong></h2>



<p class="wp-block-paragraph">در بسیاری از سازمان‌ها، استفاده از مدل Self-hosted تنها به نصب Sentry محدود نمی‌شود و مدیریت زیرساخت، نگهداری سرویس و برنامه‌ریزی برای توسعه آینده بخشی از مسئولیت تیم فنی خواهد بود. در ادامه مهم‌ترین چالش‌های راه‌اندازی و نگهداری مدل Self-hosted را بررسی می‌کنیم.</p>



<h3 id="h-معماری-چندجزئی-sentry" class="wp-block-heading"><strong>معماری چندجزئی Sentry</strong></h3>



<p class="wp-block-paragraph">استقرار شخصی Sentry به چند سرویس زیرساختی وابسته است که از جمله آن‌ها می‌توان به PostgreSQL ،Redis ،Kafka ،ClickHouse و Relay اشاره کرد.</p>



<p class="wp-block-paragraph">استفاده از این فناوری‌ها به‌خودی‌خود یک نقطه‌ضعف محسوب نمی‌شود، اما هر کدام نیازمند نصب، پیکربندی، پایش و نگهداری هستند. در نتیجه، مدیریت مدل Self-hosted تنها به خود Sentry محدود نیست و تیم باید سلامت تمام اجزای وابسته را هم مدیریت کند.</p>



<p class="wp-block-paragraph">چندجزئی‌بودن این معماری باعث می‌شود تیم داخلی علاوه بر خود Sentry، مسئولیت عملیاتی سرویس‌های وابسته را هم بر عهده داشته باشد.</p>



<h3 id="h-نیاز-به-منابع-زیرساختی" class="wp-block-heading"><strong>نیاز به منابع زیرساختی</strong></h3>



<p class="wp-block-paragraph">استقرار شخصی Sentry به منابع پردازشی و فضای ذخیره‌سازی نیاز دارد و میزان این منابع با حجم داده‌های دریافتی ارتباط دارد. بنابراین، سازمان باید پیش از استقرار، حجم تقریبی رخدادها و ظرفیت زیرساخت موردنیاز را ارزیابی کند.</p>



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



<p class="wp-block-paragraph">در مدل Self-hosted، مسئولیت برنامه‌ریزی و اجرای ارتقای Sentry بر عهده سازمان است. تیم فنی باید برای بررسی تغییرات نسخه، اجرای به‌روزرسانی و اطمینان از ادامه کار سرویس‌های وابسته زمان در نظر بگیرد. بنابراین، ارتقای نسخه را باید بخشی از هزینه و مسئولیت عملیاتی Self-hosting دانست، نه فعالیتی که پس از نصب اولیه خودبه‌خود انجام می‌شود.</p>



<h3 id="h-پشتیبان-گیری-و-بازیابی" class="wp-block-heading"><strong>پشتیبان‌گیری و بازیابی</strong></h3>



<p class="wp-block-paragraph">در استقرار مدل Self-hosted، تهیه نسخه پشتیبان تنها به ذخیره یک فایل محدود نمی‌شود. برنامه پشتیبان‌گیری باید مشخص کند چه داده‌هایی، با چه دوره زمانی و به چه روشی ذخیره می‌شوند.</p>



<p class="wp-block-paragraph">علاوه بر این، فرایند بازیابی (Restore) باید آزمایش شود تا در صورت بروز مشکل، امکان بازگرداندن سرویس وجود داشته باشد. در عمل، تنظیمات، داده‌های ثبت‌شده و وابستگی‌های مختلف باید در برنامه بازیابی در نظر گرفته شوند، زیرا داشتن نسخه پشتیبان بدون اطمینان از امکان بازیابی، تضمینی برای تداوم سرویس ایجاد نمی‌کند.</p>



<h3 id="h-پایش-خود-sentry" class="wp-block-heading"><strong>پایش خود Sentry</strong></h3>



<p class="wp-block-paragraph">مدل Self-hosted پس از راه‌اندازی به پایش و رسیدگی عملیاتی نیاز دارد. تیم داخلی باید سلامت سرویس و اجزای وابسته را بررسی کند و در صورت بروز اختلال، مسئولیت تشخیص و رفع مشکل را بر عهده بگیرد. در نتیجه، سازمان علاوه بر استفاده از Sentry برای عیب‌یابی اپلیکیشن، باید زمانی را به نگهداری خود این سامانه اختصاص دهد.</p>



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



<p class="wp-block-paragraph">هزینه استقرار مدل Self-hosted فقط به تهیه سرور و منابع زیرساختی محدود نمی‌شود. تیم‌های DevOps یا Platform باید برای نگهداری Sentry، رسیدگی به رخدادهای خود سرویس، ارتقای نسخه‌ها، پشتیبان‌گیری، ظرفیت‌سنجی و مدیریت امنیت و دسترسی‌ها زمان صرف کنند.</p>



<p class="wp-block-paragraph">این فعالیت‌ها به نیروی متخصص نیاز دارند و بخشی از زمان تیم فنی را می‌گیرند. این زمان می‌تواند صرف توسعه محصول یا رفع مشکلات اپلیکیشن شود، بنابراین هنگام مقایسه روش‌های استقرار، باید هزینه نیروی فنی را هم در کنار هزینه زیرساخت در نظر گرفت.</p>



<h2 id="h-چه-زمانی-استقرار-شخصی-sentry-انتخاب-مناسبی-است" class="wp-block-heading"><strong>چه زمانی استقرار شخصی Sentry انتخاب مناسبی است؟</strong></h2>



<p class="wp-block-paragraph">استقرار شخصی Sentry زمانی انتخاب مناسبی است که سازمان الزام مشخصی برای نگهداری داده‌ها در زیرساخت خود داشته باشد یا به دلایل امنیتی، حاکمیتی یا انطباق با مقررات، نتواند از سرویس‌های میزبانی‌شده استفاده کند. همچنین اگر تیم زیرساخت تجربه کافی در مدیریت سرویس‌های مختلف، پایش آن‌ها و اجرای فرایندهای نگهداری را داشته باشد، مدل Self-hosted می‌تواند کنترل بیشتری بر نحوه استقرار و مدیریت سامانه در اختیار سازمان قرار دهد. در چنین شرایطی، سازمان از ابتدا هزینه‌ها و مسئولیت‌های عملیاتی این مدل را نیز پذیرفته است.</p>



<p class="wp-block-paragraph">در مقابل، اگر تیم زیرساخت کوچک باشد، هدف صرفا استفاده از قابلیت‌های Sentry باشد یا زمان کافی برای نگهداری، ارتقای نسخه و مدیریت زیرساخت وجود نداشته باشد، احتمالا استقرار شخصی انتخاب مناسبی نیست. همچنین سازمان‌هایی که تمایلی به پایش و نگهداری سامانه مانیتورینگ خود ندارند یا برآورد می‌کنند هزینه نیروی فنی آن‌ها از هزینه استفاده از یک سرویس مدیریت‌شده بیشتر خواهد شد، معمولا گزینه‌های دیگری را بررسی می‌کنند.</p>



<p class="wp-block-paragraph">این مدل زمانی بیشترین ارزش را ایجاد می‌کند که نیازهای فنی و الزامات سازمان با مسئولیت‌های عملیاتی آن هم‌خوانی داشته باشند؛ در غیر این صورت، استفاده از یک سرویس مدیریت‌شده می‌تواند انتخاب عملی‌تری باشد.</p>



<h2 id="h-سرویس-مدیریت-شده-sentry-چه-تفاوتی-با-self-hosted-دارد" class="wp-block-heading"><strong>سرویس مدیریت‌شده Sentry چه تفاوتی با Self-hosted دارد؟</strong></h2>



<p class="wp-block-paragraph">تفاوت اصلی این دو مدل در نحوه تقسیم مسئولیت‌های عملیاتی است. در مدل Self-hosted، سازمان مسئول راه‌اندازی، نگهداری و ارتقای سرویس است؛ اما در سرویس سنتری مدیریت شده، این فعالیت‌ها توسط میزبان ارائه دهنده سنتری، مدیریت می‌شوند.</p>



<p class="wp-block-paragraph">در مدل Self-hosted، سازمان علاوه بر استفاده از قابلیت‌های Sentry، مدیریت زیرساخت، ارتقای نسخه، پایش سرویس و سایر فعالیت‌های عملیاتی را هم بر عهده می‌گیرد. در مقابل، در سنتری مدیریت شده (از جمله سنتری مدیریت‌شده هم‌روش)، این مسئولیت‌ها توسط ارائه‌دهنده انجام می‌شوند تا تیم فنی بتواند زمان بیشتری را صرف توسعه محصول و عیب‌یابی اپلیکیشن کند. جدول زیر تفاوت کلی استقرار Self-hosted و سرویس سنتری مدیریت‌شده هم‌روش را نشان می‌دهد.</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th><strong>معیار</strong></th><th><strong>استقرار Self-hosted</strong></th><th><strong>سرویس سنتری هم‌روش</strong></th></tr></thead><tbody><tr><td>استقرار اولیه</td><td>بر عهده تیم داخلی</td><td>بر عهده هم‌روش</td></tr><tr><td>نگهداری زیرساخت</td><td>بر عهده تیم داخلی</td><td>مدیریت‌شده توسط هم‌روش</td></tr><tr><td>ارتقای نسخه</td><td>نیازمند برنامه‌ریزی و اجرا</td><td>مدیریت‌شده توسط هم‌روش</td></tr><tr><td>پایش سرویس</td><td>بر عهده سازمان</td><td>بر عهده هم‌روش</td></tr><tr><td>پشتیبان‌گیری</td><td>نیازمند طراحی و اجرا</td><td>خودکار و بر عهده هم‌روش</td></tr><tr><td>ظرفیت‌سنجی</td><td>بر عهده سازمان</td><td>در چارچوب پلن و سرویس</td></tr><tr><td>زمان تیم فنی</td><td>بیشتر صرف عملیات می‌شود</td><td>تمرکز بیشتر بر توسعه و عیب‌یابی</td></tr><tr><td>استقرار اختصاصی</td><td>با اجرای کامل سازمان</td><td>امکان استقرار توسط هم‌روش و با رعایت الزامات فنی، امنیتی و حاکمیتی سازمان</td></tr></tbody></table></figure>



<div class="wp-block-dh-blog-card-database-block card database">
<div class="wp-block-group row align-items-center is-nowrap is-layout-flex wp-container-core-group-is-layout-8f761849 wp-block-group-is-layout-flex">
<div class="wp-block-group col-md"><div class="wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow">
<h3 id="h-سنتری-هم-روش-مشاهده-تحلیل-و-رفع-مشکلات-اپلیکیشن-در-یک-پلتفرم-یکپارچه" class="wp-block-heading">💡 سنتری هم‌روش؛ مشاهده، تحلیل و رفع مشکلات اپلیکیشن در یک پلتفرم یکپارچه</h3>



<p class="wp-block-paragraph">استفاده از Sentry بدون پذیرش بار عملیاتی Self-hosting</p>



<p class="wp-block-paragraph"><br>✅ راه‌اندازی و نگهداری زیرساخت توسط هم‌روش<br>✅ کاهش بار عملیاتی تیم‌های توسعه، DevOps و Platform<br>✅ امکان استقرار و نگهداری روی زیرساخت اختصاصی سازمان</p>



<p class="wp-block-paragraph"></p>
</div></div>
</div>



<div class="wp-block-group col-md-auto"><div class="wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow">
<p class="btn btn--main btn--wide wp-block-paragraph"><a href="https://hamravesh.com/sentry" target="_blank" rel="noreferrer noopener">مشاهده سرویس سنتری هم‌روش</a></p>
</div></div>
</div>



<h2 id="h-سرویس-سنتری-هم-روش-چه-مسئله-ای-را-حل-می-کند" class="wp-block-heading"><strong>سرویس سنتری هم‌روش چه مسئله‌ای را حل می‌کند؟</strong></h2>



<p class="wp-block-paragraph">برای بسیاری از تیم‌های فنی، چالش اصلی استفاده از Sentry خودِ قابلیت‌های آن نیست؛ بلکه زمان و منابعی است که باید برای نصب، نگهداری، ارتقای نسخه‌ها و مدیریت زیرساخت صرف شود. سنتری هم‌روش این مسئولیت‌های عملیاتی را بر عهده می‌گیرد تا تیم‌ها بتوانند بدون درگیر شدن با مدیریت زیرساخت، از Sentry استفاده کنند.</p>



<p class="wp-block-paragraph">در این سرویس، راه‌اندازی، نگهداری و ارتقای نسخه‌های Sentry توسط هم‌روش انجام می‌شود. در نتیجه، تیم‌های توسعه و DevOps می‌توانند زمان بیشتری را به توسعه محصول، عیب‌یابی و بهبود عملکرد اپلیکیشن اختصاص دهند.</p>



<p class="wp-block-paragraph">به‌دلیل استقرار سرویس در داخل کشور، ارتباط اپلیکیشن با سنتری هم‌روش در شبکه‌های داخلی، پایدارتر انجام می‌شود و داده‌های مانیتورینگ با اطمینان بیشتری در دسترس قرار می‌گیرند. برای سازمان‌هایی با الزامات فنی، امنیتی یا حاکمیتی مشخص امکان استقرار و نگهداری Sentry روی زیرساخت اختصاصی سازمان نیز فراهم است.</p>



<p class="wp-block-paragraph">سنتری هم‌روش علاوه بر سرویس مدیریت‌شده، پلن‌های متناسب با حجم Error ،Span و Replay ارائه می‌کند تا هر سازمان بتواند متناسب با نیاز خود از این سرویس استفاده کند.</p>



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



<p class="wp-block-paragraph">Sentry فقط ابزاری برای ثبت خطاها نیست، بلکه با کنار هم قرار دادن خطاها، لاگ‌ها، Traceها و داده‌های Profiling، دید دقیق‌تری برای بررسی مشکلات اپلیکیشن در اختیار تیم فنی قرار می‌دهد. البته استفاده موثر از این قابلیت‌ها به پیکربندی مناسب، مدیریت داده‌های ارسالی و انتخاب آگاهانه اطلاعاتی که باید جمع‌آوری شوند، وابسته است.</p>



<p class="wp-block-paragraph">در مقابل، مدل Self-hosted کنترل بیشتری بر زیرساخت و محل نگهداری داده‌ها فراهم می‌کند، اما مسئولیت‌هایی مانند نصب، نگهداری، ارتقای نسخه، پشتیبان‌گیری و پایش سرویس را نیز به سازمان منتقل می‌کند. به همین دلیل، انتخاب میان استقرار شخصی و سرویس مدیریت‌شده باید بر اساس نیازهای فنی، الزامات سازمان و توان عملیاتی تیم انجام شود.</p>



<p class="wp-block-paragraph">در این مطلب بررسی کردیم که Sentry چیست و چه قابلیت‌ها و محدودیت‌هایی دارد و به چه روش‌هایی ارائه می‌شود. همچنین توضیح دادیم سرویس مدیریت‌شده می‌تواند برای تیم‌هایی مناسب باشد که می‌خواهند از قابلیت‌های Sentry استفاده کنند، اما نمی‌خواهند زمان تیم فنی خود را صرف نگهداری زیرساخت آن کنند.</p>
<p>The post <a href="https://hamravesh.com/blog/what-is-sentry/">سنتری چیست؟ از پایش خطای اپلیکیشن تا تحلیل عملکرد در سطح کد</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://hamravesh.com/blog/what-is-sentry/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>کارمادا چیست؟ آشنایی با ابزار مدیریت چند کلاستر کوبرنتیز</title>
		<link>https://hamravesh.com/blog/what-is-karmada/</link>
					<comments>https://hamravesh.com/blog/what-is-karmada/#respond</comments>
		
		<dc:creator><![CDATA[هم‌روش]]></dc:creator>
		<pubDate>Sun, 02 Aug 2026 12:30:48 +0000</pubDate>
				<category><![CDATA[کوبرنتیز]]></category>
		<guid isPermaLink="false">https://hamravesh.com/blog/?p=5448</guid>

					<description><![CDATA[<p>Karmada که مخفف Kubernetes Armada است، یک سیستم ارکستریشن چندکلاستری برای کوبرنتیز به‌حساب می‌آید. این ابزار به شما کمک می‌کند بارهای کاری (Workloadها) را میان چند کلاستر کوبرنتیز مدیریت کنید، بدون اینکه لازم باشد برنامه‌های خود را برای اجرا در چند کلاستر تغییر دهید.</p>
<p>The post <a href="https://hamravesh.com/blog/what-is-karmada/">کارمادا چیست؟ آشنایی با ابزار مدیریت چند کلاستر کوبرنتیز</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">با گسترش زیرساخت‌های ابری، برخی سازمان‌ها بارهای کاری خود را در چند کلاستر کوبرنتیز اجرا می‌کنند. این کلاسترها ممکن است در چند ابر عمومی، دیتاسنتر خصوصی یا محیط Edge قرار داشته باشند. با افزایش تعداد کلاسترها، هماهنگ‌سازی استقرارها، انتخاب مقصد مناسب برای هر بار کاری (workload) و واکنش به کاهش ظرفیت یا خرابی یک کلاستر دشوارتر می‌شود. در چنین شرایطی، کارمادا یک لایه هماهنگ‌سازی مرکزی برای مدیریت بارهای کاری میان چند کلاستر کوبرنتیز فراهم می‌کند. این سیستم با استفاده از APIهای آشنای کوبرنتیز و سیاست‌های تعریف‌شده، درباره محل اجرای بارهای کاری و نحوه توزیع آن‌ها میان کلاسترهای عضو تصمیم می‌گیرد. در ادامه بررسی می‌کنیم که کارمادا چیست، معماری آن چگونه کار می‌کند و استفاده از آن در چه شرایطی توجیه دارد.</p>



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



<p class="wp-block-paragraph">با افزایش مقیاس زیرساخت، ممکن است سازمان‌ها بارهای کاری خود را در چند دیتاسنتر، ابر عمومی یا محیط Edge اجرا کنند. در این وضعیت، هر کلاستر همچنان یک مقصد اجرایی مستقل است و تیم عملیات باید استقرارها، تنظیمات و وضعیت آن را در کنار کلاسترهای دیگر مدیریت کند. افزایش تعداد کلاسترها در عمل چالش‌های زیر را ایجاد می‌کند:</p>



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



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



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



<p class="wp-block-paragraph">در نتیجه، چند کلاستر مستقل به‌تنهایی دسترس‌پذیری بالا سراسری ایجاد نمی‌کنند. در زیرساخت‌هایی که محل اجرا، توزیع ظرفیت و انتقال خودکار در زمان خرابی باید میان چند کلاستر هماهنگ شود، به یک لایه هماهنگ‌سازی مرکزی نیاز است. کارمادا برای پاسخ به این نیازها طراحی شده است.</p>



<h2 id="h-karmada-چیست" class="wp-block-heading">Karmada چیست؟</h2>



<p class="wp-block-paragraph">کارمادا (Karmada)، کوتاه‌شده عبارت Kubernetes Armada، یک سیستم مدیریت و ارکستریشن چندکلاستری برای کوبرنتیز است. این سیستم امکان اجرای برنامه‌های Cloud-Native را در چند کلاستر و چند محیط ابری فراهم می‌کند، بدون آنکه برای این منظور لازم باشد تعریف اصلی برنامه‌ها تغییر کند.</p>



<p class="wp-block-paragraph">کلاسترهای عضو کارمادا می‌توانند در ابر عمومی، دیتاسنتر خصوصی یا محیط Edge قرار داشته باشند. کارمادا با APIهای بومی کوبرنتیز کار می‌کند و یک کنترل‌پلین (Control Plane) بالاتر از کلاسترهای عضو در اختیار تیم قرار می‌دهد تا تعریف بارهای کاری و قواعد توزیع آن‌ها به‌صورت متمرکز مدیریت شود.</p>



<p class="wp-block-paragraph">کارمادا جایگزین کوبرنتیز نیست؛ بلکه روی کلاسترهای آن یک لایه مدیریتی و هماهنگ‌سازی ایجاد می‌کند. همچنین کارمادا ابزار ایجاد یا تأمین کلاسترهای کوبرنتیز و جایگزین Service Mesh نیست و به‌تنهایی ارتباط شبکه‌ای میان کلاسترها را برقرار نمی‌کند. مدیریت بار کاری هم با مدیریت داده یکسان نیست؛ بنابراین کارمادا داده‌های برنامه را به‌طور خودکار میان کلاسترها همانندسازی نمی‌کند و دسترسی کلاستر مقصد به داده‌های موردنیاز را نیز تضمین نمی‌کند. علاوه بر این، معماری ذخیره‌سازی، همانندسازی و حفظ سازگاری داده‌ها باید جداگانه طراحی شود.</p>



<p class="wp-block-paragraph">کارمادا یک پروژه Incubating در بنیاد CNCF است. این عنوان وضعیت بلوغ و پذیرش پروژه را در چرخه CNCF نشان می‌دهد و به معنای بتا بودن نرم‌افزار نیست. برای آشنایی بیشتر با این پروژه، می‌توانید به <a href="https://karmada.io/" target="_blank" rel="noreferrer noopener">وب‌سایت رسمی Karmada</a> مراجعه کنید.</p>



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



<p class="wp-block-paragraph">معماری کارمادا بر یک کنترل‌پلین مرکزی استوار است که منابع، سیاست‌ها و تصمیم‌های مربوط به توزیع بارهای کاری را مدیریت می‌کند. API Server&nbsp;نقطه ورود درخواست‌ها و APIهای کارمادا است و etcd اشیای API را نگهداری می‌کند. Controller Manager مجموعه‌ای از کنترل‌گرها را اجرا می‌کند که منابع کارمادا را مشاهده و عملیات لازم برای انتشار آن‌ها در کلاسترهای عضو را هماهنگ می‌کنند. Scheduler هم بر اساس سیاست‌های تعریف‌شده، دربارهٔ محل اجرای بارهای کاری در کلاسترهای عضو تصمیم می‌گیرد و به عبارتی فرایند زمان‌بندی را انجام می‌دهد.</p>



<p class="wp-block-paragraph">کلاسترهای عضو، کلاسترهای مستقلی هستند که بارهای کاری توزیع‌شده از سوی کارمادا را اجرا می‌کنند. چرخه ساده انتشار یک بار کاری به این صورت است:</p>



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



<li>مرحله ۲: سیاست انتشار (PropagationPolicy) مشخص می‌کند چه منابعی انتخاب شوند و در کدام کلاسترها انتشار یابند.</li>



<li>مرحله ۳: Scheduler بر اساس سیاست و اطلاعات کلاسترها درباره محل اجرای منبع تصمیم می‌گیرد.</li>



<li>مرحله ۴: نتیجه Scheduler در یک ResourceBinding ثبت می‌شود.</li>



<li>مرحله ۵: کنترل‌گرهای کارمادا بر اساس این Binding، منابع Work موردنیاز کلاسترهای مقصد را ایجاد می‌کنند.</li>



<li>مرحله ۶: منابع تعریف‌شده از طریق Work در کلاسترهای عضو مقصد اعمال می‌شوند و بار کاری در آن کلاسترها اجرا می‌شود.</li>
</ul>



<p class="wp-block-paragraph">در این مدل، تعریف اصلی بار کاری از قواعد محل اجرا جدا می‌شود. کاربر منبع و سیاست مربوط به آن را در کنترل‌پلین ثبت می‌کند و کارمادا بر اساس همان سیاست، تصمیم زمان‌بندی را ثبت و منابع موردنیاز را در کلاسترهای مقصد منتشر می‌کند.</p>



<p class="wp-block-paragraph">کارمادا از دو مدل برای اتصال کلاسترهای عضو پشتیبانی می‌کند. در حالت Push، کنترل‌پلین مستقیماً به API Server کلاستر عضو (Member Cluster) متصل می‌شود و منابع را در آن منتشر می‌کند. در حالت Pull، مؤلفه karmada-agent داخل کلاستر عضو اجرا می‌شود، از همان‌جا با کنترل‌پلین ارتباط برقرار می‌کند و منابع تخصیص‌یافته را دریافت و در کلاستر عضو اجرا می‌کند. این عامل جزء ثابت کنترل‌پلین نیست و فقط در مدل Pull کاربرد دارد. انتخاب میان این دو مدل به توپولوژی شبکه، محدودیت‌های فایروال و الزامات امنیتی بستگی دارد.</p>



<h2 id="h-قابلیت-ها-و-کاربردهای-اصلی-karmada" class="wp-block-heading">قابلیت‌ها و کاربردهای اصلی Karmada</h2>



<p class="wp-block-paragraph">قابلیت اصلی کارمادا، جداسازی تعریف بار کاری از قواعد انتخاب کلاستر، توزیع Replicaها و اعمال تنظیمات وابسته به محیط است. در ادامه مهم‌ترین قابلیت‌ها و سناریوهای کاربرد آن را بررسی می‌کنیم.</p>



<h3 id="h-استقرار-بارهای-کاری-بر-اساس-سیاست-انتشار-policy" class="wp-block-heading">استقرار بارهای کاری بر اساس سیاست انتشار (Policy)</h3>



<p class="wp-block-paragraph">سیاست انتشار (PropagationPolicy) مشخص می‌کند چه منابعی انتخاب شوند، در کدام کلاسترها انتشار یابند و Replicaهای آن‌ها چگونه میان کلاسترهای مقصد توزیع شوند. به این ترتیب، مانیفست اصلی بار کاری، از قواعد محل اجرا جدا باقی می‌ماند.</p>



<p class="wp-block-paragraph">اگر مقصد اجرای بار کاری تغییر کند یا کلاسترهای دیگری به مجموعه مقصد اضافه شوند، می‌توان سیاست را تغییر داد؛ بدون آنکه لزوما مانیفست اصلی بار کاری ویرایش شود.</p>



<h3 id="h-توزیع-replicaها-میان-کلاسترها" class="wp-block-heading">توزیع Replicaها میان کلاسترها</h3>



<p class="wp-block-paragraph">در حالت Duplicated، تعداد Replica تعریف‌شده در هر کلاستر مقصد ایجاد می‌شود. برای مثال، اگر یک Deployment با ۵ عدد Replica در ۳ کلاستر توزیع شود، هر کلاستر، ۵ عدد Replica و در مجموع ۱۵ عدد Replica دریافت می‌کند.</p>



<p class="wp-block-paragraph">در حالت Divided، تعداد کل Replicaها میان کلاسترهای مقصد تقسیم می‌شود. برای مثال، اگر تعداد کل ۱۵ عدد Replica باشد و ۳ کلاستر با شرایط یکسان انتخاب شوند، ممکن است در هر کلاستر ۵ عدد Replica اجرا شود. این توزیع می‌تواند با توجه به سیاست و وضعیت منابع کلاسترها متفاوت باشد.</p>



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



<p class="wp-block-paragraph">یک مانیفست یکسان همیشه برای تمام کلاسترها مناسب نیست. ممکن است StorageClass ،Container Registry ،IngressClass ،Annotationهای وابسته به Cloud Provider یا تنظیمات مرتبط با Region در کلاسترهای مختلف تفاوت داشته باشند.</p>



<p class="wp-block-paragraph">سیاست بازنویسی (OverridePolicy) امکان می‌دهد پیش از انتشار منبع در کلاستر مقصد، بخش‌های مشخصی از آن برای همان محیط تغییر کنند. در نتیجه، مانیفست پایه در کنترل‌پلین ثابت می‌ماند و نسخه منتشرشده در کلاستر مقصد تنظیمات متناسب با آن محیط را دریافت می‌کند.</p>



<h3 id="h-failover" class="wp-block-heading">Failover</h3>



<p class="wp-block-paragraph">کارمادا می‌تواند وضعیت کلاسترهای عضو را در تصمیم‌های Placement و Failover لحاظ کند و بر اساس سیاست‌های پیکربندی‌شده، بارهای کاری را در کلاسترهای سالم اجرا کند. اگر یک کلاستر ناموفق تشخیص داده شود، کارمادا می‌تواند بر اساس سیاست‌های پیکربندی‌شده، بارهای کاری آن را برای اجرا در کلاستر سالم دیگری در نظر بگیرد.</p>



<p class="wp-block-paragraph">انتقال بار کاری به کلاستر دیگر، به‌تنهایی بازیابی کامل برنامه‌های Stateful را تضمین نمی‌کند. اگر هنگام اختلال شبکه، برنامه هم‌زمان در کلاستر مبدأ و مقصد فعال بماند، ممکن است هر دو نسخه به‌طور مستقل، داده‌ها را تغییر دهند و باعث ناسازگاری یا خرابی داده شوند؛ وضعیتی که به آن Split-Brain می‌گویند. علاوه بر جلوگیری از این وضعیت، کلاستر مقصد نیز باید ظرفیت کافی برای اجرای بار کاری منتقل‌شده داشته باشد.</p>



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



<p class="wp-block-paragraph">سناریوهای کاربرد کارمادا شامل Multi-Cloud ،Hybrid Cloud ،Cloud Bursting، بازیابی بار کاری پس از خرابی یک کلاستر، استقرار جغرافیایی و کاهش دامنه خرابی از طریق توزیع بارهای کاری میان چند کلاستر است.</p>



<p class="wp-block-paragraph">این سناریوها هزینه و پیچیدگی عملیاتی خاص خود را دارند و البته ارتباط شبکه میان کلاسترها، مانیتورینگ چندلایه، کنترل دسترسی و مدیریت Failover باید جداگانه طراحی و نگهداری شوند. در نتیجه، استفاده از کارمادا زمانی توجیه دارد که مسئله واقعی Placement یا Failover در چند کلاستر مطرح باشد.</p>



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



<p class="wp-block-paragraph">ابزارهای <a href="https://hamravesh.com/blog/what-is-gitops" data-type="link" data-id="https://hamravesh.com/blog/what-is-gitops" target="_blank" rel="noreferrer noopener">GitOps</a> مانند <a href="https://hamravesh.com/blog/what-is-argocd" data-type="link" data-id="https://hamravesh.com/blog/what-is-argocd" target="_blank" rel="noreferrer noopener">Argo CD</a> و Flux بر تحویل تعریفی و همگام‌سازی وضعیت مقصد با منابع ثبت‌شده در Git تمرکز دارند. این ابزارها می‌توانند چند کلاستر را نیز مدیریت کنند، اما مقصدها و وضعیت مطلوب معمولاً در پیکربندی GitOps تعریف می‌شوند.</p>



<p class="wp-block-paragraph">کارمادا بر محل اجرا، زمان‌بندی و انتشار بار کاری میان کلاسترهای عضو تمرکز دارد. این سیستم با استفاده از سیاست‌ها و اطلاعات کلاسترها تعیین می‌کند بار کاری در کدام مقصدها اجرا شود و Replicaهای آن چگونه میان کلاسترها توزیع شوند.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="449" src="https://hamravesh.com/blog/wp-content/uploads/2026/07/hamravesh-what-is-karmada-2-1024x449.webp" alt="تفاوت GitOps با کارمادا چیست؟" class="wp-image-5551" srcset="https://hamravesh.com/blog/wp-content/uploads/2026/07/hamravesh-what-is-karmada-2-1024x449.webp 1024w, https://hamravesh.com/blog/wp-content/uploads/2026/07/hamravesh-what-is-karmada-2-300x132.webp 300w, https://hamravesh.com/blog/wp-content/uploads/2026/07/hamravesh-what-is-karmada-2-768x337.webp 768w, https://hamravesh.com/blog/wp-content/uploads/2026/07/hamravesh-what-is-karmada-2-120x53.webp 120w, https://hamravesh.com/blog/wp-content/uploads/2026/07/hamravesh-what-is-karmada-2.webp 1201w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">بنابراین، تفاوت اصلی این نیست که GitOps از چند کلاستر پشتیبانی نمی‌کند، بلکه تفاوت اصلی در این است که کارمادا یک موتور زمان‌بندی و محل‌یابی چندکلاستری در اختیار می‌گذارد، در حالی‌که GitOps اساسا وضعیت تعریف‌شده در Git را با مقصدهای تعیین‌شده همگام می‌کند.</p>



<p class="wp-block-paragraph">کارمادا و GitOps می‌توانند در کنار یکدیگر استفاده شوند. برای مثال، ابزار GitOps می‌تواند بارهای کاری، سیاست‌های انتشار (PropagationPolicy) و سیاست‌های بازنویسی (OverridePolicy) را با کنترل‌پلین کارمادا همگام کند و کارمادا هم محل اجرا و انتشار آن‌ها در کلاسترهای عضو را بر عهده بگیرد.</p>



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



<p class="wp-block-paragraph">کارمادا قابلیت‌های مشخصی را برای هماهنگ‌سازی چندکلاستری ارائه می‌کند، اما در عین حال یک کنترل‌پلین و لایه عملیاتی جدید به زیرساخت اضافه می‌کند. به‌این‌ترتیب، ارزیابی آن باید هم‌زمان بر اساس مزایای زمان‌بندی و هزینه نگهداری این لایه انجام شود.</p>



<h3 id="h-مزایای-کارمادا" class="wp-block-heading">مزایای کارمادا</h3>



<p class="wp-block-paragraph">اگر بدانید مهم‌ترین مزایای کارمادا چیست، می‌توانید تشخیص دهید که آیا این ابزار برای مدیریت چند کلاستر کوبرنتیز در سازمان شما مناسب است یا خیر. مهم‌ترین مزایای آن عبارت‌اند از:</p>



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



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



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



<li><strong>توزیع و زمان‌بندی Replicaها: </strong>کارمادا از توزیع Duplicated و Divided پشتیبانی می‌کند و می‌تواند Replicaهای یک بار کاری را بر اساس سیاست میان کلاسترهای مقصد توزیع کند.</li>



<li><strong>پشتیبانی از معماری‌های Multi-Cloud و Hybrid Cloud: </strong>کارمادا برای اجرای بارهای کاری در چند ابر یا ترکیب ابر عمومی و دیتاسنتر خصوصی طراحی شده است.</li>



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



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



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



<p class="wp-block-paragraph">شناخت مزایا به‌تنهایی کافی نیست و در کنار آن باید بدانید محدودیت‌های کارمادا چیست. از جمله این محدودیت‌ها، می‌توان موارد زیر را نام برد:</p>



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



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



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



<li><strong>پیچیده‌ترشدن <a href="https://hamravesh.com/blog/what-is-kubernetes-rbac/" data-type="link" data-id="https://hamravesh.com/blog/what-is-kubernetes-rbac/" target="_blank" rel="noreferrer noopener">RBAC</a> و مدیریت دسترسی:</strong> با اضافه‌شدن یک لایه مدیریتی جدید، مدیریت مجوزهای دسترسی هم پیچیده‌تر می‌شود.</li>



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



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



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



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



<p class="wp-block-paragraph">راه‌اندازی کارمادا شامل استقرار کنترل‌پلین، آماده‌سازی Kubeconfig، ثبت کلاسترهای عضو و بررسی انتشار بار کاری است. دستورها و جزئیات این فرایند ممکن است در نسخه‌های مختلف تغییر کنند؛ بنابراین برای اجرای عملی باید از مستند رسمی همان نسخه استفاده شود. در ادامه هر یک از این بخش‌ها را مرور می‌کنیم.</p>



<h3 id="h-مراحل-کلی-راه-اندازی-کارمادا" class="wp-block-heading">مراحل کلی راه‌اندازی کارمادا</h3>



<p class="wp-block-paragraph">برای راه‌اندازی کارمادا، ابتدا باید با مراحل کلی این فرایند آشنا شوید:</p>



<ul class="wp-block-list">
<li>آماده‌سازی یک کلاستر Kubernetes برای میزبانی کنترل‌پلین کارمادا</li>



<li>نصب اجزای کنترل‌پلین، از جمله API Server ،Controller Manager ،Scheduler و etcd</li>



<li>آماده‌سازی Kubeconfig مربوط به کارمادا</li>



<li>اتصال کلاسترهای عضو به روش Push یا Pull</li>



<li>بررسی سلامت و دسترس‌پذیری کلاسترهای عضو</li>



<li>تعریف بار کاری در کنترل‌پلین کارمادا</li>



<li>تعریف سیاست انتشار (PropagationPolicy) برای مشخص‌کردن کلاسترهای مقصد</li>



<li>بررسی انتشار بار کاری در کلاسترهای عضو</li>
</ul>



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



<p class="wp-block-paragraph">کارمادا از چند مسیر نصب از جمله ابزار خط فرمان کارمادا، Helm ،Karmada Operator، نصب از باینری، نصب از سورس و محیط توسعه پشتیبانی می‌کند. هیچ‌یک از این مسیرها را نمی‌توان بدون در نظر گرفتن معماری سازمان، به‌طور مطلق بهترین گزینه برای محیط تولید دانست. انتخاب روش عملیاتی به طراحی دسترس‌پذیری بالا، امنیت، پشتیبان‌گیری، به‌روزرسانی و مدل نگهداری زیرساخت بستگی دارد.</p>



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



<p class="wp-block-paragraph">اگر هدفتان فقط آشنایی با کارمادا یا اجرای یک نمونه آزمایشی (Proof of Concept) است، می‌توانید از محیط توسعه رسمی استفاده کنید. کد منبع و اسکریپت راه‌اندازی محیط توسعه کارمادا در <a href="https://github.com/karmada-io/karmada" target="_blank" rel="noreferrer noopener">مخزن رسمی Karmada در GitHub</a> در دسترس است. این محیط، Control Plane و کلاسترهای عضو آزمایشی را به‌صورت خودکار آماده می‌کند و فرایند یادگیری را ساده‌تر می‌سازد. البته این محیط برای توسعه و آزمایش طراحی شده است و الگوی مناسبی برای استقرار در محیط عملیاتی نیست.</p>



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



<p class="wp-block-paragraph">کارمادا برای هر زیرساخت کوبرنتیز ضروری نیست. مزیت اصلی آن زمانی آشکار می‌شود که محل اجرا، توزیع Replicaها یا انتقال خودکار در زمان خرابی باید میان چند کلاستر هماهنگ شود. اگر مقصد بارهای کاری ثابت باشد و ابزارهای موجود نیاز عملیاتی را پوشش دهند، افزودن کارمادا ممکن است فقط پیچیدگی بیشتری ایجاد کند.</p>



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



<p class="wp-block-paragraph">اگر شرایط زیر را دارید، کارمادا می‌تواند انتخاب مناسبی برای مدیریت زیرساخت شما باشد:</p>



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



<li>مقصد اجرای بارهای کاری همیشه ثابت نیست و باید با توجه به شرایط، میان کلاسترهای مختلف انتخاب شود.</li>



<li>در چند ابر، منطقه جغرافیایی یا دیتاسنتر فعالیت می‌کنید.</li>



<li>به توزیع Replicaهای یک بار کاری میان چند کلاستر نیاز دارید.</li>



<li>Failover در سطح کلاستر و اجرای مجدد بارهای کاری در کلاستر سالم، یکی از نیازهای واقعی شماست.</li>



<li>تیم Platform Engineering یا SRE توانایی نگهداری و پایش یک Control Plane جدید را دارد.</li>
</ul>



<div class="wp-block-dh-blog-card-database-block card database">
<div class="wp-block-group row align-items-center is-nowrap is-layout-flex wp-container-core-group-is-layout-8f761849 wp-block-group-is-layout-flex">
<div class="wp-block-group col-md"><div class="wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow">
<h3 id="h-کوبرنتیز-مدیریت-شده-هم-روش-راهی-مطمئن-برای-رشد-بی-وقفه" class="wp-block-heading">💡 کوبرنتیز مدیریت‌شده هم‌روش، راهی مطمئن برای رشد بی‌وقفه</h3>



<p class="wp-block-paragraph">راهکار کوبرنتیز مدیریت شده، بر بستر ابر اختصاصی یا به صورت On-Premises</p>



<p class="wp-block-paragraph"><br>✅ کاهش هزینه‌های عملیاتی<br>✅ احراز هویت یکپارچه با اتصال به SSO سازمانی<br>✅ قابل استقرار روی سرورهای on-premises</p>



<p class="wp-block-paragraph"></p>
</div></div>
</div>



<div class="wp-block-group col-md-auto"><div class="wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow">
<p class="btn btn--main btn--wide wp-block-paragraph"><a type="link" href="https://hamravesh.com/managed-kubernetes" id="https://hamravesh.com/managed-kubernetes" target="_blank" rel="noreferrer noopener">کوبرنتیز مدیریت‌شده هم‌روش</a></p>
</div></div>
</div>



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



<p class="wp-block-paragraph">در برخی سناریوها، استفاده از کارمادا نه‌تنها مزیت قابل‌توجهی ایجاد نمی‌کند، بلکه می‌تواند هزینه و پیچیدگی بیشتری به زیرساخت اضافه کند. برای مثال، اگر شرایط زیر را دارید، احتمالا به کارمادا نیازی ندارید:</p>



<ul class="wp-block-list">
<li>فقط یک کلاستر یا چند کلاستر ساده دارید.</li>



<li>مقصد استقرار بارهای کاری همیشه مشخص و ثابت است.</li>



<li>ابزار GitOps فعلی تمام نیازهای شما را پوشش می‌دهد.</li>



<li>چالش اصلی شما مدیریت فضای ذخیره‌سازی یا انتقال و همگام‌سازی داده‌هاست.</li>



<li>تیم شما ظرفیت نگهداری، مانیتورینگ و عیب‌یابی یک Control Plane دیگر را ندارد.</li>



<li>هنوز مسئله واقعی Multi-Cluster ندارید و صرفا به‌دلیل جذابیت فناوری به استفاده از آن فکر می‌کنید.</li>
</ul>



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



<p class="wp-block-paragraph">کارمادا یک لایه مدیریت و هماهنگ‌سازی برای انتشار بارهای کاری میان چند کلاستر کوبرنتیز است. قابلیت محوری آن، جداسازی تعریف بار کاری از قواعد محل اجرا و زمان‌بندی است؛ به‌طوری‌که سیاست‌ها مشخص می‌کنند منابع در کدام کلاسترها اجرا شوند و Replicaها چگونه میان آن‌ها توزیع شوند.</p>



<p class="wp-block-paragraph">این قابلیت‌ها می‌توانند در سناریوهای Multi-Cloud ،Hybrid Cloud، استقرار جغرافیایی متنوع و انتقال خودکار در زمان خرابی در سطح بار کاری مفید باشند. بااین‌حال، کارمادا یک کنترل‌پلین جدید به زیرساخت اضافه می‌کند و مسائل شبکه، ذخیره‌سازی و Replication داده را به‌تنهایی حل نمی‌کند.</p>



<p class="wp-block-paragraph">کارمادا برای سازمان‌هایی ارزشمند است که با مسائل محل اجرا، ظرفیت و انتقال خودکار در زمان خرابی در چند کلاستر کوبرنتیز روبه‌رو هستند و همچنین توان نگهداری لایهٔ مدیریتی جدید را دارند. در زیرساخت‌های ساده‌تر، اضافه‌کردن آن احتمالاً مزیتی متناسب با پیچیدگی ایجادشده نخواهد داشت.</p>
<p>The post <a href="https://hamravesh.com/blog/what-is-karmada/">کارمادا چیست؟ آشنایی با ابزار مدیریت چند کلاستر کوبرنتیز</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://hamravesh.com/blog/what-is-karmada/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>راکت چت چیست؟ بررسی قابلیت‌ها، امنیت و روش‌های استقرار</title>
		<link>https://hamravesh.com/blog/what-is-rocketchat/</link>
					<comments>https://hamravesh.com/blog/what-is-rocketchat/#respond</comments>
		
		<dc:creator><![CDATA[هم‌روش]]></dc:creator>
		<pubDate>Wed, 29 Jul 2026 12:30:00 +0000</pubDate>
				<category><![CDATA[مقالات]]></category>
		<guid isPermaLink="false">https://hamravesh.com/blog/?p=5417</guid>

					<description><![CDATA[<p>Rocket.Chat یکی از شناخته‌شده‌ترین پلتفرم‌های متن‌باز در این حوزه است که امکان راه‌اندازی یک پیام‌رسان سازمانی روی زیرساخت اختصاصی یا محیط‌های ابری را فراهم می‌کند. </p>
<p>The post <a href="https://hamravesh.com/blog/what-is-rocketchat/">راکت چت چیست؟ بررسی قابلیت‌ها، امنیت و روش‌های استقرار</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">ارتباطات داخلی یکی از بخش‌های مهم زیرساخت فناوری اطلاعات در بسیاری از سازمان‌ها است. استفاده از ابزارهای عمومی پیام‌رسان همیشه پاسخگوی نیاز سازمان‌هایی که به کنترل بیشتر روی داده‌ها، امنیت ارتباطات و استقرار در زیرساخت اختصاصی نیاز دارند نیست. به همین دلیل، بسیاری از سازمان‌ها به سراغ راهکارهای پیام‌رسان سازمانی می‌روند. معمولا این نیاز زمانی جدی‌تر می‌شود که سازمان بخواهد داده‌های ارتباطی خود را روی زیرساخت اختصاصی نگه دارد یا با محدودیت‌های انطباق و حریم خصوصی سروکار داشته باشد. Rocket Chat یکی از شناخته‌شده‌ترین پلتفرم‌های متن‌باز در این حوزه است که امکان راه‌اندازی یک پیام‌رسان سازمانی روی زیرساخت اختصاصی یا محیط‌های ابری را فراهم می‌کند. در این مقاله بررسی می‌کنیم راکت چت چیست، چه قابلیت‌هایی دارد، برای چه سازمان‌هایی مناسب است، چه مزایا و محدودیت‌هایی دارد و تفاوت آن با ابزارهایی مانند Slack و Mattermost چیست.</p>



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



<p class="wp-block-paragraph" id="h-راکت-چت-چیست-یک-پلتفرم-ارتباطات-سازمانی-متن-باز-است-که-قابلیت-هایی-مانند-پیام-رسانی-کانال-های-تیمی-تماس-صوتی-و-تصویری-اپلیکیشن-های-قابل-توسعه-و-برخی-امکانات-مبتنی-بر-هوش-مصنوعی-را-ارائه-می-دهد-دسترسی-به-بعضی-از-این-قابلیت-ها-به-پلن-شیوه-استقرار-و-پیکربندی-سازمان-بستگی-دارد">راکت چت یک پلتفرم ارتباطات سازمانی متن‌باز است که قابلیت‌هایی مانند پیام‌رسانی، کانال‌های تیمی، تماس صوتی و تصویری، اپلیکیشن‌های قابل توسعه و برخی امکانات مبتنی بر هوش مصنوعی را ارائه می‌دهد. دسترسی به بعضی از این قابلیت‌ها به پلن، شیوه استقرار و پیکربندی سازمان بستگی دارد. این پلتفرم امکان استقرار در محیط‌های مختلف، از جمله زیرساخت‌های اختصاصی و استقرارهای ابری را هم فراهم می‌کند.</p>



<p class="wp-block-paragraph">راکت چت به‌عنوان یک پیام‌رسان سازمانی متن‌باز، به سازمان‌ها کمک می‌کند ارتباطات داخلی، همکاری تیمی و تبادل اطلاعات را در بستری تحت کنترل خود مدیریت کنند. این پلتفرم به طور ویژه برای محیط‌هایی طراحی شده است که امنیت، محل نگهداری داده‌ها و کنترل بر زیرساخت ارتباطی برایشان اهمیت دارد، بنابراین علاوه بر سازمان‌های تجاری، مورد توجه برخی سازمان‌های دولتی و زیرساختی هم قرار گرفته است.</p>



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



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



<p class="wp-block-paragraph">این نیاز، در کنار الزاماتی که برخی سازمان‌ها از نظر انطباق با مقررات یا حساسیت اطلاعاتی با آن‌ها روبه‌رو هستند، انتخاب یک نرم‌افزار چت سازمانی را به یکی از بخش‌های مهم زیرساخت فناوری اطلاعات تبدیل کرده است.</p>



<h2 id="h-قابلیت-های-اصلی-راکت-چت" class="wp-block-heading">قابلیت‌های اصلی راکت چت</h2>



<p class="wp-block-paragraph">Rocket Chat مجموعه‌ای از قابلیت‌های ارتباطی، مدیریتی و امنیتی را در یک پلتفرم واحد ارائه می‌دهد تا سازمان‌ها بتوانند ارتباطات داخلی و بین‌سازمانی خود را بدون نیاز به استفاده از چند ابزار مختلف مدیریت کنند. مهم‌ترین قابلیت‌های این نرم‌افزار چت سازمانی عبارت‌اند از:</p>



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



<p class="wp-block-paragraph">راکت چت امکانات مختلفی برای ارتباط و همکاری میان اعضای تیم فراهم می‌کند. کاربران می‌توانند از کانال‌های عمومی و خصوصی، گروه‌ها، پیام‌های مستقیم (Direct Message) و گفتگوهای رشته‌ای (Thread) برای مدیریت مکالمات استفاده کنند. همچنین امکان ارسال فایل، جستجو در تاریخچه پیام‌ها و مشاهده وضعیت خواندن پیام‌ها و مدیریت اعلان‌ها وجود دارد.</p>



<p class="wp-block-paragraph">این پلتفرم می‌تواند از طریق قابلیت‌های داخلی یا یکپارچه‌سازی با ابزارهای کنفرانس ویدئویی (مانند Jitsi،Google Meet ،Zoom و Pexip)، تماس صوتی، تماس تصویری و اشتراک‌گذاری صفحه را در اختیار کاربران قرار دهد. سرویس‌های قابل اتصال و سطح امکانات آن‌ها ممکن است با توجه به نسخه، پلن و تنظیمات محیط کاری، متفاوت باشد.</p>



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



<p class="wp-block-paragraph">راکت چت از قابلیت‌هایی مانند مدیریت دسترسی مبتنی بر نقش و اتصال به سامانه‌های هویت سازمانی مانند LDAP ،Active Directory و راهکارهای ورود یکپارچه (SSO) پشتیبانی می‌کند. بعضی از روش‌های احراز هویت و کنترل دسترسی پیشرفته ممکن است تنها در پلن‌های مشخص در دسترس باشند.</p>



<h3 id="h-یکپارچه-سازی-و-توسعه-پذیری" class="wp-block-heading">یکپارچه‌سازی و توسعه‌پذیری</h3>



<p class="wp-block-paragraph">این پیام‌رسان سازمانی امکان اتصال به ابزارها و سرویس‌های دیگر را فراهم می‌کند. سازمان‌ها می‌توانند از اپلیکیشن‌های آماده Marketplace استفاده کنند یا با کمک Apps Engine، برنامه‌ها، بات‌ها و گردش‌کارهای اختصاصی خود را توسعه دهند. راکت چت همچنین API و SDKهایی برای اتصال به سامانه‌های دیگر ارائه می‌دهد. قابلیت‌هایی مانند Matrix Federation و پل‌های ارتباطی Microsoft Teams و XMPP نیز در پلن‌های سازمانی این پلتفرم ارائه شده‌اند.</p>



<h3 id="h-قابلیت-های-مبتنی-بر-هوش-مصنوعی" class="wp-block-heading">قابلیت‌های مبتنی بر هوش مصنوعی</h3>



<p class="wp-block-paragraph">راکت چت مجموعه‌ای از قابلیت‌های مبتنی بر هوش مصنوعی را با عنوان Sovereign AI ارائه می‌دهد. این قابلیت‌ها شامل استفاده از مدل‌های زبانی خودمیزبان (Self-hosted LLM)، خلاصه‌سازی گفتگوهای کانال‌ها و رشته‌ها، پرسش‌وپاسخ و جست‌وجوی هوشمند در محتوای سازمانی است. براساس صفحه پلن‌ها، Sovereign AI به‌صورت افزونه ارائه می‌شود و نباید آن را قابلیت پیش‌فرض تمام نسخه‌های Rocket Chat در نظر گرفت.</p>



<h3 id="h-سفارشی-سازی-و-شخصی-سازی" class="wp-block-heading">سفارشی‌سازی و شخصی‌سازی</h3>



<p class="wp-block-paragraph">Rocket Chat امکاناتی برای سفارشی‌سازی ظاهر و عملکرد محیط کاری ارائه می‌دهد. این امکانات شامل تغییر قالب و چیدمان، استفاده از CSS و JavaScript سفارشی، تغییر برند، تعریف Emoji، صدا و وضعیت‌های اختصاصی و توسعه اپلیکیشن‌ها و گردش‌کارهای سفارشی با Apps Engine است. دسترسی به هر یک از این امکانات باید براساس پلن مورد استفاده بررسی شود.</p>



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



<p class="wp-block-paragraph">این پیام‌رسان برای iOS و Android اپلیکیشن موبایل ارائه می‌دهد. قابلیت‌های امنیتی موبایل شامل احراز هویت بیومتریک، رمزنگاری پیام‌ها و فایل‌های ذخیره‌شده روی دستگاه، اعلان‌های Push بدون نمایش محتوای پیام و امکان استفاده از درگاه Push اختصاصی است. </p>



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



<p class="wp-block-paragraph">این چت سازمانی متن باز مجموعه‌ای از قابلیت‌های مرتبط با حفاظت از داده، مدیریت هویت، کنترل دسترسی و حسابرسی ارائه می‌دهد. سطح دسترسی به این قابلیت‌ها در پلن‌های مختلف یکسان نیست و باید متناسب با پلن انتخاب‌شده بررسی شود. مهم‌ترین قابلیت‌های امنیتی راکت چت عبارت‌اند از:</p>



<h3 id="h-مدل-امنیتی-zero-trust" class="wp-block-heading">مدل امنیتی Zero-Trust</h3>



<p class="wp-block-paragraph">Rocket Chat از قابلیت‌های مدل امنیتی Zero-Trust (اعتماد صفر) پشتیبانی می‌کند. از جمله این قابلیت‌ها می‌توان به کنترل دسترسی مبتنی بر ویژگی و به‌روزرسانی پویای دسترسی براساس اطلاعات هویتی اشاره کرد. این امکانات در پلن‌های سازمانی و دفاعی ارائه می‌شوند و سطح دسترسی به آن‌ها در همه پلن‌ها یکسان نیست.</p>



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



<p class="wp-block-paragraph">سازمان‌ها می‌توانند در این پلتفرم تعیین کنند که داده‌هایشان کجا و چگونه ذخیره شوند. این موضوع به آن‌ها امکان می‌دهد زیرساخت ارتباطی خود را مطابق با الزامات امنیتی و مقررات داخلی مدیریت کنند و کنترل بیشتری بر دسترسی به اطلاعات داشته باشند.</p>



<h3 id="h-استقرار-در-محیط-های-ایزوله" class="wp-block-heading">استقرار در محیط‌های ایزوله</h3>



<p class="wp-block-paragraph">Rocket Chat علاوه بر استقرار روی سرورهای داخلی، از اجرای Self-Hosted و محیط‌های کاملا ایزوله از اینترنت (Air-gapped) هم پشتیبانی می‌کند. این روش استقرار برای سازمان‌هایی که نیازمند سطح بالاتری از حفاظت داده‌ها هستند، در نسخه‌های سازمانی در دسترس است.</p>



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



<p class="wp-block-paragraph">این پیام‌رسان سازمانی از رمزنگاری سرتاسری (End-to-End Encryption) برای محافظت از محرمانگی ارتباطات پشتیبانی می‌کند. همچنین مکالمات به‌صورت رمزگذاری‌شده منتقل می‌شوند تا امنیت تبادل اطلاعات افزایش پیدا کند.</p>



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



<p class="wp-block-paragraph">Rocket Chat قابلیت‌هایی مانند کنترل دسترسی مبتنی بر نقش، ورود یکپارچه، احراز هویت چندعاملی و اتصال به Active Directory و LDAP را برای مدیریت هویت و دسترسی ارائه می‌دهد. در پلن‌های پیشرفته‌تر، کنترل دسترسی مبتنی بر ویژگی و اتصال به Policy Decision Point نیز در دسترس است (Policy Decision Point یا PDP بخشی از سامانه کنترل دسترسی است که براساس ویژگی‌های کاربر و سیاست‌های امنیتی سازمان، درباره مجاز یا غیرمجاز بودن دسترسی تصمیم می‌گیرد).</p>



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



<p class="wp-block-paragraph">راکت چت برای نظارت بر فعالیت‌های کاربران، امکان ثبت لاگ‌های حسابرسی (Audit Logs) را فراهم می‌کند. همچنین مدیران می‌توانند سیاست‌های نگهداری داده (Data Retention Policies) را تعریف&nbsp; کرده و از قابلیت‌هایی مانند جلوگیری از نشت اطلاعات (Data Loss Prevention) و ابزارهای پایش محتوا استفاده کنند.</p>



<h3 id="h-پشتیبانی-از-الزامات-انطباق" class="wp-block-heading">پشتیبانی از الزامات انطباق</h3>



<p class="wp-block-paragraph">براساس صفحه پلن‌های Rocket Chat، این شرکت دارای گواهی ISO 27001 (استاندارد بین‌المللی مدیریت امنیت اطلاعات) است و ارزیابی SOC 2 Type 2 (گزارش ارزیابی اثربخشی کنترل‌های امنیتی یک شرکت در یک دوره زمانی مشخص) را تکمیل کرده است. راکت چت همچنین خود را HIPAA-supportive (پشتیبانی از الزامات قانونی آمریکا برای حفاظت از اطلاعات سلامت) معرفی می‌کند و امکان ارائه Business Associate Agreement (قراردادی که مسئولیت‌های راکت چت و سازمان را درباره نگهداری و حفاظت از اطلاعات سلامت مشخص می‌کند) را دارد. برای GDPR (مقررات حفاظت از داده‌های شخصی در اتحادیه اروپا) نیز قابلیت‌هایی در زمینه مدیریت، نگهداری و محل پردازش داده ارائه می‌دهد. سطح این امکانات و شرایط استفاده از آن‌ها به پلن و مدل استقرار بستگی دارد.</p>



<h2 id="h-روش-های-استقرار-راکت-چت" class="wp-block-heading">روش‌های استقرار راکت چت</h2>



<p class="wp-block-paragraph">پلتفرم راکت چت به‌گونه‌ای طراحی شده است که سازمان‌ها بتوانند آن را متناسب با نیازهای زیرساختی، الزامات امنیتی و سیاست‌های نگهداری داده خود راه‌اندازی کنند. بر اساس پلن‌های رسمی، Rocket Chat از چندین روش استقرار پشتیبانی می‌کند که مهم‌ترین آن‌ها عبارت‌اند از:</p>



<h3 id="h-استقرار-روی-زیرساخت-اختصاصی-on-premises" class="wp-block-heading">استقرار روی زیرساخت اختصاصی (On-Premises)</h3>



<p class="wp-block-paragraph">راکت چت را می‌توان روی زیرساخت داخلی سازمان، مرکز داده اختصاصی یا محیط ابری خصوصی اجرا کرد. در استقرار Self-managed، سازمان کنترل محل میزبانی داده‌ها و زیرساخت اجرایی را در اختیار دارد. دسترسی به بعضی گزینه‌های پیشرفته استقرار و پشتیبانی رسمی به پلن انتخاب‌شده بستگی دارد.</p>



<h3 id="h-استقرار-در-محیط-های-ابری" class="wp-block-heading">استقرار در محیط‌های ابری</h3>



<p class="wp-block-paragraph">«Rocket Chat امکان استقرار در محیط‌های ابری را نیز فراهم می‌کند. گزینه‌های سازمانی آن شامل Sovereign Cloud و میزبانی اختصاصی مدیریت‌شده است. در مدل Dedicated Cloud Hosting، زیرساخت اختصاصی همراه با کمک تخصصی برای استقرار در اختیار سازمان قرار می‌گیرد.</p>



<h3 id="h-استقرار-در-شبکه-های-ایزوله-air-gapped" class="wp-block-heading">استقرار در شبکه‌های ایزوله (Air-gapped)</h3>



<p class="wp-block-paragraph">راکت چت از استقرار در شبکه‌های Air-gapped و محیط‌های بدون اتصال به اینترنت پشتیبانی می‌کند. این گزینه برای محیط‌های ایزوله و شبکه‌های دارای محدودیت ارتباطی طراحی شده و در پلن‌های سازمانی مشخص، ارائه می‌شود.</p>



<h3 id="h-استفاده-از-اپلیکیشن-های-آماده-one-click" class="wp-block-heading">استفاده از اپلیکیشن‌های آماده (One-Click)</h3>



<p class="wp-block-paragraph">برخی ارائه‌دهندگان زیرساخت ابری، Rocket Chat را برای راه‌اندازی سریع‌تر به‌صورت اپلیکیشن آماده نصب (One-Click App) ارائه می‌کنند. هم‌روش هم در نسخه‌های رایگان و پریمیوم این پلتفرم را به همین شکل در اختیار کاربران قرار می‌دهد.</p>



<h3 id="h-قابلیت-های-مرتبط-با-استقرار-در-نسخه-های-سازمانی" class="wp-block-heading">قابلیت‌های مرتبط با استقرار در نسخه‌های سازمانی</h3>



<p class="wp-block-paragraph">Rocket Chat در پلن‌های سازمانی قابلیت‌هایی مانند معماری <a href="https://hamravesh.com/blog/what-is-high-availability/" data-type="link" data-id="https://hamravesh.com/blog/what-is-high-availability/" target="_blank" rel="noreferrer noopener">دسترسی‌پذیری بالا</a> با Failover خودکار را ارائه می‌دهد. <a href="https://hamravesh.com/blog/what-is-disaster-recovery/" data-type="link" data-id="https://hamravesh.com/blog/what-is-disaster-recovery/" target="_blank" rel="noreferrer noopener">بازیابی از فاجعه</a> نیز در صفحه پلن‌ها برای Workspaceهای ابری ذکر شده است. دسترسی به این قابلیت‌ها در پلن‌های مختلف یکسان نیست و باید پیش از انتخاب پلن بررسی شود.</p>



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



<p class="wp-block-paragraph">راکت چت برای سه گروه اصلی پلن‌های مجزا معرفی کرده است: سازمان‌های تجاری، نهادهای دولتی و مجموعه‌های دفاعی و اطلاعاتی. پلن Commercial بر استقرار انعطاف‌پذیر، ارتباطات سازمانی و الزامات قانونی شرکت‌ها تمرکز دارد. پلن Government برای حاکمیت داده، حسابرسی و ارتباطات مستقل بخش عمومی طراحی شده است و پلن Defense نیز استقرار در شبکه‌های ایزوله و محیط‌های دارای الزامات امنیتی سخت‌گیرانه را هدف قرار می‌دهد.</p>



<p class="wp-block-paragraph">بر این‌اساس، Rocket Chat بیشتر برای سازمان‌هایی قابل بررسی است که کنترل محل میزبانی داده، استقرار روی زیرساخت اختصاصی، مدیریت هویت، حسابرسی و ارتباطات بین‌سازمانی برایشان اهمیت دارد. تیم‌های کوچک و سازمان‌های غیرانتفاعی نیز می‌توانند برای ارزیابی اولیه از پلن Starter استفاده کنند</p>



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



<p class="wp-block-paragraph">مزیت‌های راکت چت باعث شده‌اند که این پلتفرم به گزینه‌ای جذاب برای سازمان‌ها و تیم‌های مختلف تبدیل شود. بررسی موارد زیر به‌خوبی نشان می‌دهند که دلیل اصلی محبوبیت راکت چت چیست:</p>



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



<li><strong>انعطاف در استقرار:</strong> Rocket Chat گزینه‌هایی مانند On-premises، ابر خصوصی، میزبانی اختصاصی و در پلن‌های مشخص، استقرار Air-gapped را ارائه می‌دهد.</li>



<li><strong>توسعه‌پذیری: </strong>سازمان‌ها می‌توانند از اپلیکیشن‌های آماده، API و SDK یا Apps Engine برای اتصال Rocket Chat به ابزارها و فرایندهای داخلی استفاده کنند.</li>



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



<li><strong>پشتیبانی از معماری‌های سازمانی:</strong> High Availability ،Failover خودکار، Launchpad Deployment و در Workspaceهای ابری، Disaster Recovery در میان قابلیت‌های سازمانی راکت چت قرار دارند.</li>



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



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



<p class="wp-block-paragraph">در کنار قابلیت‌ها و مزایای Rocket Chat، برخی کاربران در بررسی‌ها و تجربه‌های خود به چالش‌هایی هم اشاره کرده‌اند. البته همه این موارد برای تمام سازمان‌ها یکسان نیست و بسیاری از آن‌ها به نوع استقرار، نسخه مورد استفاده و میزان دانش فنی تیم بستگی دارد. مهم‌ترین چالش‌هایی که در تجربه کاربران تکرار شده‌اند عبارت‌اند از:</p>



<ul class="wp-block-list">
<li>پیچیدگی راه‌اندازی و نگهداری: برخی کاربران معتقدند نصب، پیکربندی و سفارشی‌سازی راکت چت (مخصوصا در حالت Self-hosted)، نسبت به ابزارهای ساده‌تر به دانش فنی بیشتری نیاز دارد و نگهداری آن برای تیم‌های بدون نیروی متخصص IT یا DevOps، ممکن است زمان‌بر باشد.</li>



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



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



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



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



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



<li>قابلیت تماس صوتی در صفحه پلن‌ها به‌عنوان Add-on معرفی شده است. ویدئوکنفرانس نیز از طریق یکپارچه‌سازی با سرویس‌هایی مانند Jitsi،Google Meet ،Zoom و Pexip ارائه می‌شود.</li>
</ul>



<h2 id="h-مقایسه-rocket-chat-با-slack-و-mattermost" class="wp-block-heading">مقایسه Rocket Chat با Slack و Mattermost</h2>



<p class="wp-block-paragraph">RocketChat ،Slack و Mattermost تمرکز و مدل استقرار یکسانی ندارند. Slack خود را یک پلتفرم متمرکز برای گردآوری افراد، فرایندها، داده‌ها، ابزارها و قابلیت‌های هوش مصنوعی در یک رابط گفت‌وگومحور معرفی می‌کند Mattermost نیز یک پلتفرم Open Core با تمرکز بر عملیات‌های حیاتی، DevSecOps، پاسخ به رخداد و استقرار روی زیرساخت اختصاصی یا ابر خصوصی است Rocket Chat بر ارتباطات سازمانی، حاکمیت داده و امکان استقرار در زیرساخت اختصاصی، محیط‌های ابری و شبکه‌های ایزوله تمرکز دارد.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="449" src="https://hamravesh.com/blog/wp-content/uploads/2026/07/hamravesh-what-is-rocketchat2-1024x449.webp" alt="مقایسه Rocket Chat با Slack و Mattermost" class="wp-image-5523" srcset="https://hamravesh.com/blog/wp-content/uploads/2026/07/hamravesh-what-is-rocketchat2-1024x449.webp 1024w, https://hamravesh.com/blog/wp-content/uploads/2026/07/hamravesh-what-is-rocketchat2-300x132.webp 300w, https://hamravesh.com/blog/wp-content/uploads/2026/07/hamravesh-what-is-rocketchat2-768x337.webp 768w, https://hamravesh.com/blog/wp-content/uploads/2026/07/hamravesh-what-is-rocketchat2-120x53.webp 120w, https://hamravesh.com/blog/wp-content/uploads/2026/07/hamravesh-what-is-rocketchat2.webp 1201w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">جدول زیر تفاوت این سه پلتفرم را به‌خوبی نشان می‌دهد:</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th><strong>معیار</strong></th><th><strong>Rocket Chat</strong></th><th><strong>Slack</strong></th><th><strong>Mattermost</strong></th></tr></thead><tbody><tr><td>تعریف محصول</td><td>پلتفرم ارتباطات سازمانی با تمرکز بر حاکمیت داده، امنیت و انعطاف‌پذیری در استقرار</td><td>پلتفرمی برای گردآوری افراد، فرایندها، داده‌ها، عامل‌های هوش مصنوعی و ابزارها در یک رابط گفت‌وگومحور</td><td>پلتفرم Open Core برای همکاری سازمانی و گردش‌کارهای عملیاتی حساس</td></tr><tr><td>شیوه استقرار</td><td>قابل‌استقرار روی زیرساخت اختصاصی، ابر خصوصی، میزبانی اختصاصی، Sovereign Cloud و در پلن‌های مشخص، شبکه‌های Air-gapped</td><td>ارائه به‌عنوان یک سرویس ابری</td><td>قابل‌استقرار روی زیرساخت داخلی، ابر خصوصی و گزینه‌های ابری</td></tr><tr><td>قابلیت‌های ارتباطی</td><td>پیام‌رسانی، تماس صوتی، اشتراک‌گذاری صفحه‌نمایش و اتصال به سرویس‌های ویدئوکنفرانس</td><td>کانال‌های کاری، اطلاعات مشترک و قابل جست‌وجو و ابزارهای بهره‌وری</td><td>پیام‌رسانی فردی و گروهی، تماس صوتی و اشتراک‌گذاری صفحه‌نمایش</td></tr><tr><td>توسعه‌پذیری</td><td>Marketplace ،API ،SDK و Apps Engine برای ساخت اپلیکیشن‌ها، بات‌ها و گردش‌کارهای اختصاصی</td><td>بیش از ۲۶۰۰ اپلیکیشن سازمانی و API برای اتصال ابزارهای داخلی</td><td>افزونه‌ها، Webhook ،Slash Command ،RESTful API و یکپارچه‌سازی‌های آماده</td></tr><tr><td>تمرکز اصلی</td><td>حاکمیت داده، ارتباطات سازمانی و استقرار در محیط‌های حساس</td><td>متمرکزکردن پروژه‌ها، اطلاعات، داده‌ها و ابزارهای کاری</td><td>عملیات‌های حیاتی، DevSecOps، پاسخ‌گویی به رخداد و گردش‌کارهای سازمانی</td></tr></tbody></table></figure>



<h2 id="h-پلن-های-rocket-chat-چه-تفاوتی-دارند" class="wp-block-heading">پلن‌های Rocket Chat چه تفاوتی دارند؟</h2>



<p class="wp-block-paragraph">راکت چت پلن‌های خود را در دو صفحه و براساس دو کاربرد «همکاری امن تیمی» و «تعامل با شهروندان» معرفی می‌کند. این تقسیم‌بندی به کاربرد و قابلیت‌های هر پلن مربوط است و نباید آن‌ها را صرفاً نسخه‌های ضعیف‌تر و قوی‌تر یکدیگر دانست.</p>



<h3 id="h-پلن-های-citizen-engagement" class="wp-block-heading">پلن‌های Citizen Engagement</h3>



<p class="wp-block-paragraph">پلن‌های Citizen Engagement برای سازمان‌ها و نهادهایی ارائه شده‌اند که می‌خواهند پیام‌های شهروندان یا دیگر مخاطبان بیرونی را از کانال‌هایی مانند Live Chat، ایمیل، SMS و WhatsApp دریافت و در یک محیط واحد مدیریت کنند. البته در Citizen Engagement، قابلیت همکاری تیمی نیز وجود دارد؛ بنابراین کاربران Workspace می‌توانند در کنار رسیدگی به پیام‌های بیرونی، با همکاران خود همکاری کنند یا درخواست‌ها را در همان پلتفرم به بخش‌های دیگر ارجاع دهند.</p>



<p class="wp-block-paragraph">این دسته شامل دو پلن است:</p>



<ul class="wp-block-list">
<li>Starter</li>



<li>Enterprise</li>
</ul>



<p class="wp-block-paragraph">پلن Starter به‌صورت رایگان و Self-managed ارائه می‌شود و حداکثر ۱۰۰ مخاطب فعال ماهانه را پوشش می‌دهد. منظور از مخاطب فعال ماهانه یا MAC، مخاطب ثبت‌نام‌نشده‌ای است که از یک کانال بیرونی مانند Live Chat ،WhatsApp، ایمیل یا SMS پیام می‌فرستد و یکی از کاربران Workspace به پیام او پاسخ می‌دهد یا آن را ارجاع می‌دهد. این پلن قابلیت‌هایی مانند اتصال کانال‌های ارتباطی، تعریف دپارتمان و واحد سازمانی، مسیریابی هوشمند مکالمات، انتقال درخواست‌ها، تعیین ساعات کاری، پاسخ‌های آماده و گزارش‌های تحلیلی را ارائه می‌دهد.</p>



<p class="wp-block-paragraph">پلن Enterprise تمام قابلیت‌های Starter را دارد و امکانات بیشتری مانند شناسایی هویت مخاطبان، ایجاد تاریخچه یکپارچه از تعاملات آن‌ها در کانال‌های مختلف، ادغام مخاطبان تکراری، مسدودکردن مخاطبان ناشناس یا تأییدنشده، نقش‌ها و مجوزهای سفارشی، مدیریت دستگاه‌ها، گزینه‌های مقیاس‌پذیری پیشرفته و حسابرسی پیام‌ها را اضافه می‌کند. تعداد مخاطبان فعال ماهانه و قیمت این پلن براساس قرارداد تعیین می‌شود.</p>



<h3 id="h-پلن-های-secure-commsos-enterprise" class="wp-block-heading">پلن‌های Secure CommsOS Enterprise</h3>



<p class="wp-block-paragraph">Rocket Chat پلن‌های Secure CommsOS Enterprise را برای سازمان‌هایی معرفی می‌کند که حاکمیت داده، انطباق و تداوم عملیات برایشان اهمیت دارد. این دسته شامل سه پلن است:</p>



<ul class="wp-block-list">
<li>Commercial</li>



<li>Government</li>



<li>Defense</li>
</ul>



<p class="wp-block-paragraph">پلن Commercial برای سازمان‌های تجاری ارائه شده است. از امکانات شاخص آن می‌توان به استقرار روی زیرساخت داخلی، ابر خصوصی یا شبکه‌های VPC و VPN ایزوله، میزبانی ابری اختصاصی، High Availability ،Disaster Recovery، پیام‌رسانی، تماس، اشتراک‌گذاری صفحه‌نمایش، همکاری با مجموعه‌های بیرونی، اپلیکیشن موبایل و APIهای باز اشاره کرد.</p>



<p class="wp-block-paragraph">پلن Government برای سازمان‌ها و نهادهای بخش عمومی طراحی شده و بر حاکمیت داده، کنترل حوزه قضایی، حسابرسی و مدیریت دسترسی تمرکز دارد. از قابلیت‌های معرفی‌شده برای آن می‌توان به استقرار On-premises یا Sovereign Cloud، کنترل دسترسی مبتنی بر نقش، رمزنگاری سرتاسری، اتصال به SSO ،LDAP ،SAML 2.0 و Active Directory، لاگ‌های حسابرسی، سیاست‌های نگهداری داده، Matrix Federation و قابلیت‌های Sovereign AI اشاره کرد.</p>



<p class="wp-block-paragraph">پلن Defense برای سازمان‌های دفاعی و اطلاعاتی و استقرار در محیط‌های ایزوله طراحی شده است. راکت چت برای این پلن قابلیت‌هایی مانند استقرار Air-gapped، استقرار در محیط‌های SCIF، کنترل دسترسی مبتنی بر ویژگی، رمزنگاری FIPS 140-3، ارتباط میان شبکه‌های دفاعی و سازگاری با بعضی الزامات امنیتی و عملیاتی وزارت دفاع آمریکا را معرفی کرده است. بعضی از قابلیت‌های درج‌شده برای این پلن هنوز برای ارائه در آینده برنامه‌ریزی‌شده‌اند و در صفحه رسمی با علامت ستاره مشخص شده‌اند.</p>



<p class="wp-block-paragraph">قیمت پلن‌های Commercial ،Government و Defense به‌صورت عمومی اعلام نشده است و برای دریافت قیمت باید با تیم فروش راکت چت تماس گرفت.</p>



<p class="wp-block-paragraph">در جدول زیر مقایسه‌ای بین مهم‌ترین امکانات پلن راکت چت پریمویم هم‌روش با نسخه Starter و Enterprise را مشاهده می‌کنید.</p>



<p class="wp-block-paragraph"></p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th class="has-text-align-right" data-align="right"><strong>قابلیت</strong></th><th class="has-text-align-center" data-align="center"><strong>نسخه Starter</strong></th><th class="has-text-align-center" data-align="center"><strong>نسخه Enterprise</strong></th><th class="has-text-align-center" data-align="center"><strong>نسخه پریمیوم هم‌روش</strong></th><th class="has-text-align-center" data-align="center"><strong>توضیحات قابلیت</strong></th></tr></thead><tbody><tr><td class="has-text-align-right" data-align="right">تعداد کاربران دارای حساب کاربری</td><td class="has-text-align-center" data-align="center">تا ۵۰ کاربر</td><td class="has-text-align-center" data-align="center">وابسته به قرارداد</td><td class="has-text-align-center" data-align="center">نامحدود</td><td class="has-text-align-center" data-align="center"></td></tr><tr><td class="has-text-align-right" data-align="right">مخاطبان فعال ماهانه</td><td class="has-text-align-center" data-align="center">تا ۱۰۰ مخاطب</td><td class="has-text-align-center" data-align="center">وابسته به قرارداد</td><td class="has-text-align-center" data-align="center">نامحدود</td><td class="has-text-align-center" data-align="center">تعداد مخاطبان منحصربه‌فردی که در هر ماه از طریق واتس‌اپ، پیامک، ایمیل یا چت آنلاین با سازمان تعامل می‌کنند.</td></tr><tr><td class="has-text-align-right" data-align="right">یکپارچه‌سازی کانال‌های ارتباطی</td><td class="has-text-align-center" data-align="center">✅</td><td class="has-text-align-center" data-align="center">✅</td><td class="has-text-align-center" data-align="center">✅</td><td class="has-text-align-center" data-align="center">اتصال Rocket.Chat به واتس‌اپ، ایمیل، پیامک و Live Chat و مدیریت پیام‌ها در یک رابط یکپارچه</td></tr><tr><td class="has-text-align-right" data-align="right">بارگذاری لیست مخاطبان</td><td class="has-text-align-center" data-align="center">✅</td><td class="has-text-align-center" data-align="center">✅</td><td class="has-text-align-center" data-align="center">✅</td><td class="has-text-align-center" data-align="center"></td></tr><tr><td class="has-text-align-right" data-align="right">اشتراک‌گذاری فایل، لینک و موقعیت مکانی</td><td class="has-text-align-center" data-align="center">✅</td><td class="has-text-align-center" data-align="center">✅</td><td class="has-text-align-center" data-align="center">✅</td><td class="has-text-align-center" data-align="center"></td></tr><tr><td class="has-text-align-right" data-align="right">منشن، واکنش، سنجاق‌کردن و ذخیره پیام‌ها</td><td class="has-text-align-center" data-align="center">✅</td><td class="has-text-align-center" data-align="center">✅</td><td class="has-text-align-center" data-align="center">✅</td><td class="has-text-align-center" data-align="center"></td></tr><tr><td class="has-text-align-right" data-align="right">فرمت‌بندی محتوای پیام‌ها</td><td class="has-text-align-center" data-align="center">✅</td><td class="has-text-align-center" data-align="center">✅</td><td class="has-text-align-center" data-align="center">✅</td><td class="has-text-align-center" data-align="center"></td></tr><tr><td class="has-text-align-right" data-align="right">پیام‌های صوتی و ویدئویی</td><td class="has-text-align-center" data-align="center">✅</td><td class="has-text-align-center" data-align="center">✅</td><td class="has-text-align-center" data-align="center">✅</td><td class="has-text-align-center" data-align="center"></td></tr><tr><td class="has-text-align-right" data-align="right">تاریخچه نامحدود گفتگوها</td><td class="has-text-align-center" data-align="center">✅</td><td class="has-text-align-center" data-align="center">✅</td><td class="has-text-align-center" data-align="center">✅</td><td class="has-text-align-center" data-align="center"></td></tr><tr><td class="has-text-align-right" data-align="right">پاسخ‌های آماده</td><td class="has-text-align-center" data-align="center">✅</td><td class="has-text-align-center" data-align="center">✅</td><td class="has-text-align-center" data-align="center">✅</td><td class="has-text-align-center" data-align="center">استفاده از پاسخ‌های از پیش نوشته‌شده برای پرسش‌های تکراری</td></tr><tr><td class="has-text-align-right" data-align="right">اپلیکیشن‌های دسکتاپ و موبایل</td><td class="has-text-align-center" data-align="center">✅</td><td class="has-text-align-center" data-align="center">✅</td><td class="has-text-align-center" data-align="center">✅</td><td class="has-text-align-center" data-align="center">اپلیکیشن‌های ویندوز، لینوکس، macOS و iOS</td></tr><tr><td class="has-text-align-right" data-align="right">سفارشی‌سازی ظاهری</td><td class="has-text-align-center" data-align="center">✅</td><td class="has-text-align-center" data-align="center">✅</td><td class="has-text-align-center" data-align="center">✅</td><td class="has-text-align-center" data-align="center">شخصی‌سازی تم، چیدمان، محتوا، CSS سفارشی و JavaScript</td></tr><tr><td class="has-text-align-right" data-align="right">پشتیبانی رابط کاربری از ۶۴ زبان</td><td class="has-text-align-center" data-align="center">✅</td><td class="has-text-align-center" data-align="center">✅</td><td class="has-text-align-center" data-align="center">✅</td><td class="has-text-align-center" data-align="center"></td></tr><tr><td class="has-text-align-right" data-align="right">کنترل دسترسی دقیق مبتنی بر نقش</td><td class="has-text-align-center" data-align="center">✅</td><td class="has-text-align-center" data-align="center">✅</td><td class="has-text-align-center" data-align="center">✅</td><td class="has-text-align-center" data-align="center"></td></tr><tr><td class="has-text-align-right" data-align="right">تحلیل‌ها و گزارش‌ها</td><td class="has-text-align-center" data-align="center">✅</td><td class="has-text-align-center" data-align="center">✅</td><td class="has-text-align-center" data-align="center">✅</td><td class="has-text-align-center" data-align="center">بررسی شاخص‌های خدمات‌رسانی، داده‌های مکالمات و عملکرد کارشناسان در بازه‌های زمانی مختلف</td></tr><tr><td class="has-text-align-right" data-align="right">تاریخچه فایل‌ها</td><td class="has-text-align-center" data-align="center">✅</td><td class="has-text-align-center" data-align="center">✅</td><td class="has-text-align-center" data-align="center">✅</td><td class="has-text-align-center" data-align="center">دسترسی به سوابق فایل‌های به‌اشتراک‌گذاشته‌شده</td></tr><tr><td class="has-text-align-right" data-align="right">قابلیت ارسال اعلان در سیستم‌عامل</td><td class="has-text-align-center" data-align="center">✅</td><td class="has-text-align-center" data-align="center">✅</td><td class="has-text-align-center" data-align="center">❌</td><td class="has-text-align-center" data-align="center"></td></tr><tr><td class="has-text-align-right" data-align="right">تاریخچه یکپارچه مخاطب در کانال‌های مختلف</td><td class="has-text-align-center" data-align="center">❌</td><td class="has-text-align-center" data-align="center">✅</td><td class="has-text-align-center" data-align="center">✅</td><td class="has-text-align-center" data-align="center"></td></tr><tr><td class="has-text-align-right" data-align="right">امکان حذف واترمارک نشان تجاری Rocket.Chat</td><td class="has-text-align-center" data-align="center">❌</td><td class="has-text-align-center" data-align="center">✅</td><td class="has-text-align-center" data-align="center">✅</td><td class="has-text-align-center" data-align="center"></td></tr><tr><td class="has-text-align-right" data-align="right">نقش‌ها و مجوزهای سفارشی</td><td class="has-text-align-center" data-align="center">❌</td><td class="has-text-align-center" data-align="center">✅</td><td class="has-text-align-center" data-align="center">✅</td><td class="has-text-align-center" data-align="center">ایجاد نقش‌های جدید و اختصاص مجوزهای مشخص برای کنترل اقدامات و دسترسی کاربران</td></tr><tr><td class="has-text-align-right" data-align="right">مدیریت دستگاه‌ها</td><td class="has-text-align-center" data-align="center">❌</td><td class="has-text-align-center" data-align="center">✅</td><td class="has-text-align-center" data-align="center">✅</td><td class="has-text-align-center" data-align="center">نظارت و کنترل دسترسی دستگاه‌ها به پلتفرم و امکان قطع اتصال دستگاه‌ها</td></tr><tr><td class="has-text-align-right" data-align="right">ممیزی پیام‌ها</td><td class="has-text-align-center" data-align="center">❌</td><td class="has-text-align-center" data-align="center">✅</td><td class="has-text-align-center" data-align="center">✅</td><td class="has-text-align-center" data-align="center">جست‌وجو و بازبینی مکالمات براساس کانال، کاربر یا پیام مستقیم توسط کاربران دارای نقش ممیز</td></tr><tr><td class="has-text-align-right" data-align="right">پشتیبانی از دامنه اختصاصی</td><td class="has-text-align-center" data-align="center">❌</td><td class="has-text-align-center" data-align="center">✅</td><td class="has-text-align-center" data-align="center">✅</td><td class="has-text-align-center" data-align="center"></td></tr><tr><td class="has-text-align-right" data-align="right">هوش مصنوعی با اولویت حفظ حریم خصوصی</td><td class="has-text-align-center" data-align="center">❌</td><td class="has-text-align-center" data-align="center">در مارکت‌پلیس راکت‌چت</td><td class="has-text-align-center" data-align="center">امکان نصب توسط هم‌روش بر اساس درخواست</td><td class="has-text-align-center" data-align="center">استفاده از مدل زبانی بزرگ self host و غنی‌سازی آن با دانش داخلی سازمان از طریق پایپ‌لاین RAG</td></tr><tr><td class="has-text-align-right" data-align="right">امکان آپدیت</td><td class="has-text-align-center" data-align="center">❌</td><td class="has-text-align-center" data-align="center">آپدیت خودکار</td><td class="has-text-align-center" data-align="center">آپدیت ساده با یک کلیک</td><td class="has-text-align-center" data-align="center"></td></tr><tr><td class="has-text-align-right" data-align="right">امکان بازگشت به نسخه قبل از آپدیت</td><td class="has-text-align-center" data-align="center">❌</td><td class="has-text-align-center" data-align="center">نیاز به ارتباط با تیم پشتیبانی راکت‌چت</td><td class="has-text-align-center" data-align="center">بازگشت با یک کلیک</td><td class="has-text-align-center" data-align="center">امکان بازگشت به بکاپِ قبل از آپدیت، تا ۳ روز پس از آپدیت (در سرویس هم‌روش)</td></tr><tr><td class="has-text-align-right" data-align="right">پشتیبان‌گیری خودکار</td><td class="has-text-align-center" data-align="center">❌</td><td class="has-text-align-center" data-align="center">بسته به قرارداد</td><td class="has-text-align-center" data-align="center">بکاپ خودکار روزانه به صورت Off-Site (نگهداری بکاپ در دیتاسنتر دیگر)</td><td class="has-text-align-center" data-align="center"></td></tr><tr><td class="has-text-align-right" data-align="right">پشتیبانی از ابزارهای مارکت‌پلیس راکت چت</td><td class="has-text-align-center" data-align="center">از طریق مارکت‌پلیس</td><td class="has-text-align-center" data-align="center">از طریق مارکت‌پلیس</td><td class="has-text-align-center" data-align="center">نصب توسط هم‌روش بر اساس درخواست</td><td class="has-text-align-center" data-align="center">شامل افزونه‌های فیلتر محتوای نامناسب مانند هرزنامه، جلوگیری از نشت داده‌ها (DLP)، فریم‌ورک توسعه برنامه‌های سفارشی با کدنویسی محدود و ماژول‌های قابل استفاده مجدد و &#8230;</td></tr><tr><td class="has-text-align-right" data-align="right">نحوه پشتیبانی</td><td class="has-text-align-center" data-align="center">پشتیبانی در انجمن راکت چت</td><td class="has-text-align-center" data-align="center">پشتیبانی توسط راکت چت</td><td class="has-text-align-center" data-align="center">پشتیبانی توسط هم‌روش</td><td class="has-text-align-center" data-align="center"></td></tr></tbody></table></figure>



<p class="wp-block-paragraph"></p>



<div class="wp-block-dh-blog-card-database-block card database">
<div class="wp-block-group row align-items-center is-nowrap is-layout-flex wp-container-core-group-is-layout-8f761849 wp-block-group-is-layout-flex">
<div class="wp-block-group col-md"><div class="wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow">
<h3 id="h-راه-اندازی-ساده-و-سریع-راکت-چت-سازمانی" class="wp-block-heading">💡 راه‌اندازی ساده و سریع راکت‌چت سازمانی</h3>



<p class="wp-block-paragraph">پلتفرم امن برای ارتباطات سازمانی</p>



<div class="wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-8f761849 wp-block-group-is-layout-flex">
<div class="wp-block-group is-vertical is-layout-flex wp-container-core-group-is-layout-4fc3f8e1 wp-block-group-is-layout-flex">
<p class="wp-block-paragraph">✅ راه‌اندازی به‌صورت پرداخت به میزان مصرف (PAYG)<br>✅ امنیت و پایداری در سطح سازمانی</p>



<p class="wp-block-paragraph">✅ امکان انتخاب منابع زیرساختی متناسب با نیاز سازمان<br>✅ بکاپ‌گیری خودکار روزانه</p>
</div>
</div>
</div></div>
</div>



<div class="wp-block-group col-md-auto"><div class="wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow">
<p class="btn btn--main btn--wide wp-block-paragraph"><a href="https://console.hamravesh.com/marketplace/explore/oneclick_rocketchatp" target="_blank" rel="noreferrer noopener">راه‌اندازی راکت چت پریمیوم هم‌روش</a><a type="link" href="https://hamravesh.com/managed-kubernetes" id="https://hamravesh.com/managed-kubernetes" target="_blank" rel="noreferrer noopener"></a></p>
</div></div>
</div>



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



<p class="wp-block-paragraph">راکت چت (Rocket Chat) یک پیام‌رسان سازمانی متن‌باز است که با تمرکز بر امنیت، حاکمیت داده و انعطاف‌پذیری در استقرار، نیازهای طیف گسترده‌ای از سازمان‌ها را پوشش می‌دهد. این ویژگی‌ها آن را برای سازمان‌هایی که کنترل کامل بر داده‌ها و زیرساخت ارتباطی برایشان اهمیت دارد، به یک گزینه مناسب و کاربردی تبدیل می‌کند.</p>



<p class="wp-block-paragraph">البته در کنار این نقاط قوت، راه‌اندازی و نگهداری Rocket Chat (مخصوصا در نسخه‌های خودمیزبان)، به دانش فنی بیشتری نسبت به برخی پیام‌رسان‌های سازمانی نیاز دارد و ممکن است برای تیم‌های کوچک یا سازمان‌هایی که زیرساخت فناوری اطلاعات محدودی دارند، چالش‌برانگیز باشد.</p>



<p class="wp-block-paragraph">در نهایت، انتخاب Rocket Chat به نیازهای هر سازمان بستگی دارد. اگر امنیت، حاکمیت داده، امکان استقرار در زیرساخت اختصاصی و سفارشی‌سازی گسترده از اولویت‌های اصلی شما هستند، این پلتفرم می‌تواند یکی از گزینه‌های مناسب برای پیاده‌سازی یک سیستم ارتباطات سازمانی باشد. البته اگر استفاده آسان و راه‌اندازی سریع برای شما اهمیت بیشتری دارد، بهتر است در کنار Rocket Chat، سایر راهکارهای موجود را هم باتوجه‌به نیازهای سازمان خود بررسی و مقایسه کنید.</p>



<p class="wp-block-paragraph"></p>
<p>The post <a href="https://hamravesh.com/blog/what-is-rocketchat/">راکت چت چیست؟ بررسی قابلیت‌ها، امنیت و روش‌های استقرار</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://hamravesh.com/blog/what-is-rocketchat/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>جیتسی چیست؟ آشنایی با پلتفرم متن‌باز ویدئوکنفرانس</title>
		<link>https://hamravesh.com/blog/what-is-jitsi/</link>
					<comments>https://hamravesh.com/blog/what-is-jitsi/#respond</comments>
		
		<dc:creator><![CDATA[هم‌روش]]></dc:creator>
		<pubDate>Tue, 28 Jul 2026 12:30:15 +0000</pubDate>
				<category><![CDATA[مقالات]]></category>
		<guid isPermaLink="false">https://hamravesh.com/blog/?p=5498</guid>

					<description><![CDATA[<p>جیتسی یکی از شناخته‌شده‌ترین گزینه‌های متن‌باز در این حوزه است که امکان راه‌اندازی یک سرویس ویدئوکنفرانس اختصاصی را فراهم می‌کند.</p>
<p>The post <a href="https://hamravesh.com/blog/what-is-jitsi/">جیتسی چیست؟ آشنایی با پلتفرم متن‌باز ویدئوکنفرانس</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">بسیاری از سرویس‌های ویدئوکنفرانس رایج، وابستگی کامل به زیرساخت شرکت ارائه‌دهنده دارند و کاربران امکان استقرار یا پیکربندی عمیق آنها را در اختیار ندارند. به همین دلیل، برخی سازمانها به‌دنبال راهکاری هستند که بتوانند ابزار ارتباط تصویری را روی زیرساخت اختصاصی خود اجرا و مدیریت کنند. جیتسی یکی از شناخته‌شده‌ترین مجموعه پروژه‌های متن‌باز در این حوزه است که امکان ایجاد و استقرار سرویس ویدئوکنفرانس اختصاصی را فراهم می‌کند. در ادامه بررسی می‌کنیم که جیتسی چیست، جیتسی میت (Jitsi Meet) چه تفاوتی با جیتسی (Jitsi) دارد، این پلتفرم چگونه کار می‌کند و چه قابلیت‌ها و ویژگی‌های امنیتی دارد.</p>



<h2 class="wp-block-heading" id="h-جیتسی-چیست">جیتسی چیست؟</h2>



<p class="wp-block-paragraph">جیتسی (Jitsi) مجموعه‌ای از پروژه‌های متن‌باز است که برای ایجاد و استقرار راهکارهای ارتباط تصویری و ویدئوکنفرانس توسعه یافته‌اند. جیتسی میت شناخته‌شده‌ترین پروژه این مجموعه است و امکان برگزاری جلسه‌های صوتی و تصویری را از طریق مرورگر، اپلیکیشن‌های اندروید و iOS و همچنین نمایش و اجرا در وب‌سایت‌ها و برنامه‌های دیگر فراهم می‌کند. </p>



<p class="wp-block-paragraph">نکته مهمی که گاهی باعث سردرگمی می‌شود، سرویس عمومی meet.jit.si است. این سرویس، خودِ جیتسی یا جیتسی میت نیست؛ بلکه یکی از نمونه‌های اجراشده جیتسی میت به شمار می‌آید که تیم توسعه جیتسی آن را به‌صورت عمومی و رایگان در اختیار کاربران قرار داده است. سازمان‌ها نیز می‌توانند به‌جای استفاده از این سرویس عمومی، نمونه اختصاصی خودشان از جیتسی میت را روی دامنه دلخواه راه‌اندازی و مدیریت کنند.</p>



<h3 class="wp-block-heading" id="h-تفاوت-jitsi-و-jitsi-meet-چیست">تفاوت Jitsi و Jitsi Meet چیست؟</h3>



<p class="wp-block-paragraph">جیتسی اکوسیستمی از چند پروژه است، اما جیتسی میت رابط و پلتفرمی است که کاربران برای برگزاری جلسه با آن سروکار دارند. به بیان ساده‌تر، وقتی کاربران وارد یک جلسه آنلاین می‌شوند، معمولا با جیتسی میت سروکار دارند.&nbsp;</p>



<p class="wp-block-paragraph">جیتسی میت برای برگزاری جلسه از مؤلفه‌هایی مانند Jitsi Videobridge ،Jicofo (یا به اختصار JVB) و Prosody استفاده می‌کند. مؤلفه‌های Jibri و Jigasi نیز در صورت نیاز به ضبط، پخش زنده یا اتصال تماس‌های SIP به این معماری اضافه می‌شوند.</p>



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



<p class="wp-block-paragraph">وقتی کاربر از طریق مرورگر یا اپلیکیشن جیتسی میت وارد جلسه می‌شود، ارتباط رسانه‌ای با استفاده از فناوری WebRTC برقرار می‌شود. مولفه Prosody به‌عنوان سرور XMPP (پروتکلی برای تبادل پیام و سیگنالینگ میان اجزای جیتسی) سیگنالینگ لازم برای ارتباط میان اجزای جیتسی را انجام می‌دهد. پیام‌های سیگنالینگ برای هماهنگی جلسه استفاده می‌شوند و حامل جریان‌های صوتی و تصویری نیستند.</p>



<p class="wp-block-paragraph"> مولفه Jicofo نشست‌های رسانه‌ای را مدیریت می‌کند و برای هر کنفرانس یک Jitsi Videobridge در نظر می‌گیرد. Jitsi Videobridge نیز جریان‌های صوتی و تصویری را میان شرکت‌کنندگان جلسه مسیریابی می‌کند. در صورت نیاز، Jibri برای ضبط یا پخش زنده و Jigasi برای اتصال تماس‌های مبتنی بر پروتکل SIP به این معماری اضافه می‌شوند.</p>



<h3 class="wp-block-heading" id="h-نقش-jitsi-videobridge-و-معماری-sfu">نقش Jitsi Videobridge و معماری SFU</h3>



<p class="wp-block-paragraph">Jitsi Videobridge یکی از مهم‌ترین اجزای جیتسی است. در این معماری، Videobridge به‌جای ترکیب و تولید مجدد همه جریان‌های ویدئویی، آن‌ها را به‌صورت انتخابی میان شرکت‌کنندگان مسیریابی می‌کند. در استقرار تک‌سروری نیز Videobridge معمولاً نخستین عامل محدودکننده ظرفیت است؛ زیرا ترافیک صوتی و تصویری را مدیریت می‌کند.</p>



<h3 class="wp-block-heading" id="h-اجزای-اصلی-معماری-جیتسی">اجزای اصلی معماری جیتسی</h3>



<p class="wp-block-paragraph">در جدول زیر می‌توانید اجزای اصلی معماری جیتسی را به همراه نقش هریک از آن‌ها مشاهده کنید:&nbsp;</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td><strong>مولفه</strong></td><td><strong>نقش</strong></td></tr><tr><td>Jitsi Meet</td><td>رابط وب و موبایل برای برگزاری و مدیریت جلسه</td></tr><tr><td>Jitsi Videobridge</td><td>هدایت جریان‌های صوتی و تصویری میان شرکت‌کنندگان</td></tr><tr><td>Jicofo</td><td>مدیریت نشست و انتخاب Videobridge مناسب</td></tr><tr><td>Prosody</td><td>انجام سیگنالینگ مبتنی بر سرور XMPP برای برقراری جلسه و برقراری ارتباط میان اجزای جیتسی</td></tr><tr><td>Jibri</td><td>ضبط جلسه و پخش زنده (در صورت فعال بودن)</td></tr><tr><td>Jigasi</td><td>اتصال تماس‌های SIP به جلسه</td></tr></tbody></table></figure>



<h2 class="wp-block-heading" id="h-مهم-ترین-قابلیت-های-jitsi-meet">مهم‌ترین قابلیت‌های Jitsi Meet</h2>



<p class="wp-block-paragraph">جیتسی میت به‌عنوان یکی از شناخته‌شده‌ترین پلتفرم‌های تماس تصویری متن‌باز، امکانات متنوعی را برای برگزاری و مدیریت جلسه‌های آنلاین در اختیار کاربران قرار می‌دهد. این قابلیت‌ها را می‌توان در چند گروه اصلی دسته‌بندی کرد.</p>



<h3 class="wp-block-heading" id="h-ارتباط-صوتی-و-تصویری">ارتباط صوتی و تصویری</h3>



<p class="wp-block-paragraph">مهم‌ترین قابلیت جیتسی میت، برقراری تماس‌های صوتی و تصویری است. کاربران می‌توانند از طریق بیشتر مرورگرهای رایج به جلسه ملحق شوند و حتی از اپلیکیشن‌های اختصاصی اندروید و iOS هم برای استفاده از این پلتفرم استفاده کنند. همچنین در صورت نیاز، امکان استفاده از حالت فقط صوت (Audio-only) وجود دارد.</p>



<h3 class="wp-block-heading" id="h-ابزارهای-همکاری-در-جلسه">ابزارهای همکاری در جلسه</h3>



<p class="wp-block-paragraph">جیتسی میت علاوه بر برقراری تماس تصویری، امکاناتی را برای همکاری بهتر میان شرکت‌کنندگان ارائه می‌دهد. از جمله این قابلیت‌ها می‌توان به اشتراک‌گذاری صفحه، گفت‌وگوی متنی در طول جلسه و نمایش خودکار سخن‌گوی فعال اشاره کرد. همچنین امکان بالا بردن دست برای درخواست صحبت، استفاده از سند متنی مشترک، قابلیت Push-to-talk، پخش هم‌زمان ویدئوهای YouTube برای همه شرکت‌کنندگان، مشاهده آمار زمان صحبت شرکت‌کنندگان و قفل کردن جلسه با گذرواژه در این پلتفرم وجود دارد.</p>



<h3 class="wp-block-heading" id="h-ضبط-پخش-زنده-و-اتصال-تلفنی">ضبط، پخش زنده و اتصال تلفنی</h3>



<p class="wp-block-paragraph">جیتسی میت از ضبط جلسه، پخش زنده و اتصال تماس‌های تلفنی مبتنی بر SIP پشتیبانی می‌کند، اما این قابلیت‌ها در همه استقرارها به‌صورت پیش‌فرض فعال نیستند. برای ضبط یا پخش زنده (مانند YouTube Live)، باید Jibri راه‌اندازی و پیکربندی شود. همچنین اگر بخواهید کاربران از طریق خطوط تلفن مبتنی بر SIP به جلسه بپیوندند یا از داخل جلسه با آن‌ها تماس بگیرید، به Jigasi نیاز دارید.</p>



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



<p class="wp-block-paragraph">یکی از قابلیت‌های مهم پلتفرم جیتسی، امکان استفاده از آن به‌عنوان زیرساخت تماس تصویری در سایر محصولات است. برای مثال، توسعه‌دهندگان می‌توانند جلسه‌های جیتسی میت را در وب‌سایت یا اپلیکیشن خود جاسازی کنند و بدون توسعه یک سامانه ویدئوکنفرانس از ابتدا، قابلیت تماس تصویری را به محصول خود اضافه کنند. برای این کار، جیتسی امکان استفاده از IFrame API ،SDKهای اندروید و iOS را فراهم کرده است. همچنین برای برنامه‌های مبتنی بر React هم React SDK را ارائه می‌دهد.</p>



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



<p class="wp-block-paragraph">برای استفاده از جیتسی میت، می‌توانید بسته به نیاز سازمان، میزان کنترل مورد انتظار روی زیرساخت و توانایی تیم فنی، از سرویس عمومی جیتسی، استقرار روی زیرساخت اختصاصی یا یک سرویس مدیریت‌شده استفاده کنید.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="753" src="https://hamravesh.com/blog/wp-content/uploads/2026/07/hamravesh-what-is-jitsi-02-1024x753.png" alt="نمایی از سرویس جیتسی میت در مرورگر" class="wp-image-5531" srcset="https://hamravesh.com/blog/wp-content/uploads/2026/07/hamravesh-what-is-jitsi-02-1024x753.png 1024w, https://hamravesh.com/blog/wp-content/uploads/2026/07/hamravesh-what-is-jitsi-02-300x221.png 300w, https://hamravesh.com/blog/wp-content/uploads/2026/07/hamravesh-what-is-jitsi-02-768x565.png 768w, https://hamravesh.com/blog/wp-content/uploads/2026/07/hamravesh-what-is-jitsi-02-1536x1130.png 1536w, https://hamravesh.com/blog/wp-content/uploads/2026/07/hamravesh-what-is-jitsi-02-120x88.png 120w, https://hamravesh.com/blog/wp-content/uploads/2026/07/hamravesh-what-is-jitsi-02.png 1600w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h3 class="wp-block-heading" id="h-استفاده-از-سرویس-عمومی-meet-jit-si">استفاده از سرویس عمومی meet.jit.si</h3>



<p class="wp-block-paragraph">اگر هدفتان راه‌اندازی سریع یک جلسه باشد، meet.jit.si ساده‌ترین گزینه است. این سرویس توسط پروژه جیتسی میزبانی می‌شود و کاربران می‌توانند بدون راه‌اندازی سرور اختصاصی از آن استفاده کنند. البته از سال ۲۰۲۳، ایجادکننده جلسه برای شروع یک اتاق جدید باید حساب کاربری داشته باشد. هرچند سایر شرکت‌کنندگان همچنان می‌توانند بدون حساب به جلسه بپیوندند. توجه داشته باشید که در این مدل، کنترل زیرساخت و پیکربندی‌های سمت سرور در اختیار کاربر نیست.</p>



<h3 class="wp-block-heading" id="h-استقرار-جیتسی-روی-زیرساخت-اختصاصی">استقرار جیتسی روی زیرساخت اختصاصی</h3>



<p class="wp-block-paragraph">سازمان‌هایی که به کنترل بیشتر روی داده‌ها و زیرساخت نیاز دارند، می‌توانند جیتسی را روی زیرساخت اختصاصی خود مستقر کنند. در این مدل، امکان اتصال به سامانه‌های احراز هویت سازمانی و تعیین سیاست‌های دسترسی و مدیریت جلسه وجود دارد. برای مثال، می‌توان تنظیمات را طوری پیکربندی کرد که فقط کاربران مجاز نقش مدیریت جلسه را داشته باشند. در سمت مقابل، نگهداری، به‌روزرسانی، امنیت و مقیاس‌پذیری زیرساخت بر عهده سازمان است.</p>



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



<p class="wp-block-paragraph">برخی سازمان‌ها ترجیح می‌دهند که بدون درگیر شدن با فرایندهای نصب، پیکربندی و نگهداری، از قابلیت‌های جیتسی استفاده کنند. در این حالت، سرویس‌های مدیریت‌شده یا اپلیکیشن آماده جیتسی می‌توانند انتخاب مناسبی باشند. در این مدل، بخش قابل‌توجهی از مسئولیت‌های استقرار و نگهداری بر عهده ارائه‌دهنده سرویس است. می‌توانید مقایسه این سه راهکار را در جدول زیر مشاهده کنید:</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td><strong>مدل استفاده</strong></td><td><strong>سرعت شروع</strong></td><td><strong>کنترل زیرساخت</strong></td><td><strong>مسئولیت نگهداری</strong></td></tr><tr><td>سرویس عمومی</td><td>زیاد</td><td>کم</td><td>ارائه‌دهنده</td></tr><tr><td>استقرار شخصی (Self-hosted)</td><td>کم</td><td>زیاد</td><td>سازمان</td></tr><tr><td>اپلیکیشن آماده و مدیریت‌شده</td><td>زیاد</td><td>وابسته به سرویس</td><td>ارائه‌دهنده و پلتفرم</td></tr></tbody></table></figure>



<div class="wp-block-dh-blog-card-database-block card database">
<div class="wp-block-group row align-items-center is-nowrap is-layout-flex wp-container-core-group-is-layout-8f761849 wp-block-group-is-layout-flex">
<div class="wp-block-group col-md"><div class="wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow">
<h3 class="wp-block-heading" id="h-سرویس-جیتسی-هم-روش">💡 سرویس جیتسی هم‌روش</h3>



<p class="wp-block-paragraph">راه‌اندازی سریع ابزار متن‌باز کنفرانس ویدیویی </p>



<p class="wp-block-paragraph"><br>✅ ارائه سرویس روی زیر ساخت ابری مبتنی بر کوبرنتیز<br>✅ کاهش نیاز به مدیریت مستقیم زیرساخت<br>✅ امکان انتخاب منابع دلخواه</p>



<p class="wp-block-paragraph"></p>
</div></div>
</div>



<div class="wp-block-group col-md-auto"><div class="wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow">
<p class="btn btn--main btn--wide wp-block-paragraph"><a href="https://console.hamravesh.com/marketplace/explore/oneclick_jitsi" target="_blank" rel="noreferrer noopener">راه‌اندزای سرور جیتسی</a><a type="link" href="https://hamravesh.com/managed-kubernetes" id="https://hamravesh.com/managed-kubernetes" target="_blank" rel="noreferrer noopener"></a></p>
</div></div>
</div>



<h2 class="wp-block-heading" id="h-امنیت-و-حریم-خصوصی-در-جیتسی-چگونه-است">امنیت و حریم خصوصی در جیتسی چگونه است؟</h2>



<p class="wp-block-paragraph">رمزنگاری جیتسی و سطح امنیت آن به عواملی مانند نحوه راه‌اندازی، تنظیمات امنیتی و قابلیت‌های فعال‌شده بستگی دارد. به همین دلیل، نمی‌توان همه استقرارهای جیتسی را از نظر امنیتی یکسان دانست.</p>



<h3 class="wp-block-heading" id="h-رمزنگاری-تماس-ها">رمزنگاری تماس‌ها</h3>



<p class="wp-block-paragraph">در جیتسی، صدا و تصویر هنگام انتقال در شبکه با پروتکل DTLS-SRTP رمزنگاری می‌شوند تا از شنود اطلاعات در مسیر ارتباط جلوگیری شود. البته ترافیک جلسه از طریق سرور هدایت می‌شود، به همین دلیل نباید تصور کرد که همه جلسه‌ها به‌صورت پیش‌فرض از رمزنگاری سرتاسری (End-to-End Encryption یا E2EE) استفاده می‌کنند.</p>



<p class="wp-block-paragraph">در صورت نیاز، می‌توان رمزنگاری سرتاسری (E2EE) را برای صدا، تصویر و اشتراک‌گذاری صفحه فعال کرد. توجه داشته باشید که این قابلیت همه اطلاعات جلسه را پوشش نمی‌دهد و مواردی مانند گفت‌وگوی متنی و برخی داده‌های جانبی همچنان خارج از محدوده این نوع رمزنگاری قرار می‌گیرند. نکته مهمی که باید در این بخش بدانید این است که فعال‌سازی E2EE به مرورگرهای سازگار هم وابسته است. E2EE فقط روی مرورگرهایی که از Insertable Streams پشتیبانی می‌کنند فعال می‌شود (Insertable Streams رابطی در WebRTC برای دسترسی و پردازش فریم‌های رمزگذاری‌شده صدا و تصویر، پیش از ارسال یا پس از دریافت آن‌ها است).</p>



<h3 class="wp-block-heading" id="h-میزبانی-اختصاصی-چه-تاثیری-بر-حریم-خصوصی-دارد">میزبانی اختصاصی چه تاثیری بر حریم خصوصی دارد؟</h3>



<p class="wp-block-paragraph">استقرار جیتسی روی زیرساخت اختصاصی، وابستگی به ارائه‌دهنده عمومی را کاهش می‌دهد و کنترل بیشتری بر محل پردازش داده‌ها، سیاست‌های دسترسی، احراز هویت و ابزارهای مانیتورینگ و تحلیل داده در اختیار سازمان قرار می‌دهد. البته دستیابی به این مزایا به پیکربندی و مدیریت صحیح زیرساخت وابسته است.</p>



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



<p class="wp-block-paragraph">امنیت نرم‌افزار جیتسی تا حد زیادی به نحوه استقرار و پیکربندی آن وابسته است. برای مثال، انتخاب نام‌های ساده و قابل حدس برای اتاق‌های جلسه می‌تواند احتمال ورود افراد ناخواسته را افزایش دهد. همچنین، گذرواژه اتاق و اطلاعات موقتی مربوط به جلسه، مانند پیام‌های متنی، پس از پایان جلسه باقی نمی‌مانند و برای جلسه بعدی باید دوباره تنظیم شوند.</p>



<p class="wp-block-paragraph">از سوی دیگر، حتی در صورت فعال بودن E2EE، همه قابلیت‌های جلسه تحت پوشش رمزنگاری سرتاسری قرار نمی‌گیرند. در نهایت، اگر تنظیمات امنیتی، احراز هویت و سیاست‌های دسترسی به‌درستی پیاده‌سازی نشوند، اجرای جیتسی روی زیرساخت اختصاصی هم لزوما به معنای امنیت بیشتر نیست.</p>



<h2 class="wp-block-heading" id="h-آیا-جیتسی-مقیاس-پذیر-است">آیا جیتسی مقیاس‌پذیر است؟</h2>



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



<p class="wp-block-paragraph">در معماری جیتسی، معمولا Jitsi Videobridge نخستین مولفه‌ای است که به محدودکننده‌ اصلی ظرفیت تبدیل می‌شود؛ زیرا تمام جریان‌های صوتی و تصویری از طریق آن هدایت می‌شوند. برای افزایش ظرفیت می‌توان چند Videobridge راه‌اندازی کرد تا Jicofo کنفرانس‌های جدید را روی Videobridgeهای در دسترس زمان‌بندی کند.</p>



<p class="wp-block-paragraph">در زیرساخت‌های ابری هم می‌توان باتوجه‌به میزان بار، تعداد Videobridgeها را افزایش یا کاهش داد. البته ظرفیت واقعی ویدئوکنفرانس جیتسی فقط به تعداد این مولفه‌ها وابسته نیست و عواملی مانند توان پردازشی (CPU و RAM)، پهنای باند شبکه، تعداد جلسه‌های هم‌زمان، تعداد شرکت‌کنندگان هر جلسه، کیفیت ویدئو و تنظیمات مقیاس‌دهی بر عملکرد نهایی تاثیر می‌گذارند.</p>



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



<p class="wp-block-paragraph">استقرار جیتسی روی کوبرنتیز، مدیریت زیرساخت را ساده‌تر می‌کند، اما به‌تنهایی ظرفیت جیتسی را نامحدود نمی‌سازد. کوبرنتیز یک ابزار ارکستریشن است که اجرای سرویس‌ها، مدیریت منابع و مقیاس‌دهی را آسان‌تر می‌کند و همچنان ظرفیت نهایی به منابع و طراحی زیرساخت بستگی دارد.</p>



<p class="wp-block-paragraph">در این مدل، مولفه‌های مختلف جیتسی در قالب کانتینر اجرا می‌شوند و کوبرنتیز بسیاری از فرایندهای اجرایی مانند مدیریت سرویس‌ها، بازیابی خودکار، مقیاس‌دهی و مدیریت متمرکز منابع را ساده‌تر می‌کند.</p>



<h2 class="wp-block-heading" id="h-مزایا-و-محدودیت-های-جیتسی">مزایا و محدودیت‌های جیتسی</h2>



<p class="wp-block-paragraph">جیتسی به‌عنوان یک پلتفرم متن‌باز برای برگزاری جلسه‌های آنلاین، امکانات متنوعی در اختیار کاربران و سازمان‌ها قرار می‌دهد؛ اما مانند هر پلتفرم دیگری، در کنار مزایای خود محدودیت‌هایی هم دارد که بهتر است پیش از انتخاب آن در نظر گرفته شوند.</p>



<h3 class="wp-block-heading" id="h-مزایای-جیتسی">مزایای جیتسی</h3>



<p class="wp-block-paragraph">در قدم اول باید بدانید که مهم‌ترین مزایای جیتسی چیست. در ادامه این مزایا را معرفی می‌کنیم: </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> علاوه بر نسخه وب، اپلیکیشن‌های اندروید و iOS هم برای استفاده از جیتسی میت در دسترس هستند.</li>



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



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



<h3 class="wp-block-heading" id="h-محدودیت-های-جیتسی">محدودیت‌های جیتسی</h3>



<p class="wp-block-paragraph">در کنار آشنایی با مزایا، باید بدانید که محدودیت‌های جیتسی چیست؛ زیرا بخشی از عملکرد این پلتفرم به نحوه استقرار و مدیریت آن وابسته است. مهم‌ترین محدودیت‌های جیتسی عبارت‌اند از:</p>



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



<li><strong>مقیاس‌پذیری بر اساس زیرساخت: </strong>مقیاس‌پذیری، به طراحی مناسب و مدیریت زیرساخت وابسته است.</li>



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



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



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



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



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



<p class="wp-block-paragraph">جیتسی در سناریوهای زیر می‌تواند گزینه مناسبی باشد:</p>



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



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



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



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



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



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



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



<h3 class="wp-block-heading" id="h-جیتسی-برای-چه-مجموعه-هایی-انتخاب-مناسبی-نیست">جیتسی برای چه مجموعه‌هایی انتخاب مناسبی نیست؟</h3>



<p class="wp-block-paragraph">جیتسی در همه شرایط بهترین انتخاب نیست. در سناریوهای زیر بهتر است پیش از تصمیم‌گیری، محدودیت‌ها و هزینه‌های عملیاتی آن را هم در نظر بگیرید:</p>



<ul class="wp-block-list">
<li>تیم‌هایی که دانش زیرساخت و مدیریت سرور ندارند، اما قصد راه‌اندازی نسخه استقرار شخصی را دارند.&nbsp;</li>



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



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



<li>مجموعه‌هایی که تصور می‌کنند متن‌باز بودن به معنای حذف هزینه‌های عملیاتی است. </li>
</ul>



<h2 class="wp-block-heading" id="h-جمع-بندی-آیا-جیتسی-انتخاب-مناسبی-است">جمع‌بندی؛ آیا جیتسی انتخاب مناسبی است؟</h2>



<p class="wp-block-paragraph">جیتسی (Jitsi) مجموعه‌ای از پروژه‌های متن‌باز برای ارتباط صوتی و تصویری است که شناخته‌شده‌ترین پروژه آن یعنی جیتسی میت (Jitsi Meet)، امکان برگزاری جلسه‌های آنلاین را فراهم می‌کند. این پلتفرم برای سازمان‌هایی که به کنترل بیشتر بر زیرساخت، استقرار اختصاصی و قابلیت یکپارچه‌سازی نیاز دارند، یکی از گزینه‌های انعطاف‌پذیر در حوزه ویدئوکنفرانس متن‌باز محسوب می‌شود.&nbsp;</p>



<p class="wp-block-paragraph">البته استقرار Production و مقیاس‌پذیر جیتسی به دانش زیرساخت نیاز دارد و نمی‌توان آن را یک راه‌حل آماده و بدون چالش تصور کرد. برای سازمان‌هایی که نمی‌خواهند با پیچیدگی‌های استقرار دستی درگیر شوند، اپلیکیشن‌های آماده جیتسی روی بستر کوبرنتیز، گزینه‌ای عملی برای شروع سریع ارائه می‌دهد. در نهایت، انتخاب بین استقرار مستقل یا استفاده از سرویس آماده، به منابع فنی، نیازهای امنیتی و الزامات سازمان بستگی دارد.</p>
<p>The post <a href="https://hamravesh.com/blog/what-is-jitsi/">جیتسی چیست؟ آشنایی با پلتفرم متن‌باز ویدئوکنفرانس</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://hamravesh.com/blog/what-is-jitsi/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>آموزش K9s؛ راهنمای نصب و استفاده از ابزار مدیریت کوبرنتیز در ترمینال</title>
		<link>https://hamravesh.com/blog/k9s-kubernetes-guide/</link>
					<comments>https://hamravesh.com/blog/k9s-kubernetes-guide/#respond</comments>
		
		<dc:creator><![CDATA[هم‌روش]]></dc:creator>
		<pubDate>Wed, 22 Jul 2026 12:30:00 +0000</pubDate>
				<category><![CDATA[دواپس]]></category>
		<category><![CDATA[مقالات]]></category>
		<category><![CDATA[کوبرنتیز]]></category>
		<guid isPermaLink="false">https://hamravesh.com/blog/?p=5428</guid>

					<description><![CDATA[<p>ابزار K9s کوبرنتیز دقیقا برای رفع همین چالش توسعه داده شده است. این ابزار با ارائه یک رابط کاربری مبتنی بر ترمینال، فرایند مشاهده (Observe)، پیمایش (Navigate) و مدیریت (Manage) منابع و اپلیکیشن‌های Kubernetes را ساده‌تر می‌کند تا بسیاری از عملیات روزمره، بدون نیاز به اجرای مکرر دستورهای مختلف، از طریق یک محیط یکپارچه انجام شوند.</p>
<p>The post <a href="https://hamravesh.com/blog/k9s-kubernetes-guide/">آموزش K9s؛ راهنمای نصب و استفاده از ابزار مدیریت کوبرنتیز در ترمینال</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">اگر به‌صورت روزانه با کوبرنتیز کار کرده باشید، احتمالا بارها خودتان را در حال اجرای مجموعه‌ای از دستورهای تکراری kubectl دیده‌اید. معمولا برای بررسی وضعیت یک سرویس باید ابتدا فهرست پادها را دریافت کنید، نام پاد موردنظر را پیدا یا کپی کنید، لاگ آن را مشاهده کنید، در صورت نیاز خروجی describe را بررسی کنید و گاهی هم فایل YAML منبع را ویرایش کنید. تکرار مداوم این مراحل (به‌خصوص در محیط‌های عملیاتی)، به‌مرور روند بررسی و عیب‌یابی را کند و آزاردهنده می‌کند. این مسئله زمانی پررنگ‌تر است که با یک حادثه یا فرایند عیب‌یابی روبه‌رو باشید. در چنین شرایطی، جابه‌جایی مداوم بین دستورهای مختلف برای یافتن علت مشکل می‌تواند روند عیب‌یابی را کندتر کرده و زمان رسیدن به پاسخ را افزایش دهد. K9s کوبرنتیز دقیقا برای رفع همین چالش توسعه داده شده است. </p>



<p class="wp-block-paragraph">K9s ابزاری ترمینال‌محور برای کوبرنتیز است که مشاهده، پیمایش و مدیریت اپلیکیشن‌های مستقر روی کلاستر را ساده‌تر می‌کند. این ابزار با ارائه یک رابط کاربری مبتنی بر ترمینال، فرایند مشاهده (Observe)، پیمایش (Navigate) و مدیریت (Manage) منابع و اپلیکیشن‌های کوبرنتیز را ساده‌تر می‌کند تا بسیاری از عملیات روزمره، بدون نیاز به اجرای مکرر دستورهای مختلف، از طریق یک محیط یکپارچه انجام شوند. در این آموزش K9s، ابتدا به این سوال پاسخ می‌دهیم که K9s چیست و سپس به نحوه نصب، رابط کاربری، کارهای عملی با K9s و برخی قابلیت‌های پیشرفته آن را می‌پردازیم.</p>



<h2 class="wp-block-heading" id="h-k9s-چیست">K9s چیست؟</h2>



<p class="wp-block-paragraph">K9s یک رابط کاربری متنی (Terminal-based UI) برای تعامل با کلاسترهای کوبرنتیز است که به‌طور کامل داخل ترمینال اجرا می‌شود. این ابزار مدیریت کوبرنتیز، با هدف ساده‌تر کردن مشاهده، پیمایش و مدیریت اپلیکیشن‌ها و منابع مستقر روی کلاستر توسعه یافته است. کد منبع و روند توسعه این ابزار در <a href="https://github.com/derailed/k9s" target="_blank" rel="noreferrer noopener">مخزن رسمی K9s در GitHub</a> در دسترس است.</p>



<p class="wp-block-paragraph">برخلاف کار با kubectl که معمولا نیازمند اجرای چندین دستور متوالی است، K9s بسیاری از عملیات روزمره را در یک محیط تعاملی در اختیار کاربر قرار می‌دهد. پس از اجرای برنامه، می‌توانید پادها، دیپلویمنت‌ها، سرویس‌ها و سایر منابع کوبرنتیز را به‌صورت زنده مشاهده کنید و تنها با استفاده از میانبرهای صفحه‌کلید، اقداماتی مانند مشاهده لاگ‌ها، اجرای describe، ویرایش YAML یا مدیریت منابع را انجام دهید.</p>



<p class="wp-block-paragraph">یکی دیگر از ویژگی‌های مهم K9s این است که تغییرات کلاستر را به‌صورت مداوم پایش می‌کند و متناسب با منابعی که مشاهده می‌کنید، دستورها و عملیات مرتبط را در اختیار شما قرار می‌دهد. در نتیجه، مدیریت کوبرنتیز با K9s به شما امکان می‌دهد هنگام مانیتورینگ یا عیب‌یابی، وضعیت منابع را تقریبا به‌صورت لحظه‌ای دنبال کنید و بدون جابه‌جایی بین چندین دستور مختلف، عملیات موردنیاز را انجام دهید.</p>



<h2 class="wp-block-heading" id="h-k9s-چگونه-با-kubeconfig-kubernetes-api-و-rbac-کار-می-کند">K9s چگونه با kubeconfig ،Kubernetes API و RBAC کار می‌کند؟</h2>



<p class="wp-block-paragraph">یکی از مزیت‌های K9s این است که برای اتصال به کلاستر کوبرنتیز از همان Kubernetes API استفاده می‌کند که ابزار kubectl هم بر پایه آن کار می‌کند. به همین دلیل، اگر kubeconfig معتبر باشد و context انتخاب‌شده امکان اتصال به کلاستر را داشته باشد، K9s می‌تواند از همان پیکربندی برای اتصال استفاده کند.</p>



<p class="wp-block-paragraph">نکته مهم این است که K9s مجوز یا سیاست دسترسی مستقلی ایجاد نمی‌کند. این ابزار با استفاده از اطلاعات اتصال و احراز هویت موجود در kubeconfig به Kubernetes API متصل می‌شود و سطح دسترسی آن را مجوزهای تعریف‌شده در <a href="https://hamravesh.com/blog/what-is-kubernetes-rbac/" data-type="link" data-id="https://hamravesh.com/blog/what-is-kubernetes-rbac/" target="_blank" rel="noreferrer noopener">RBAC</a> (مخفف Role-Based Access Control) کلاستر تعیین می‌کنند. بنابراین، کاربر یا ServiceAccount مرتبط با context فعال فقط می‌تواند عملیاتی را در K9s انجام دهد که طبق سیاست‌های RBAC اجازه انجام آن‌ها را دارد. برای مثال، اگر مجوز کاربر به مشاهده منابع محدود باشد، امکان ویرایش یا حذف آن‌ها را از طریق K9s نیز نخواهد داشت. به بیان دیگر، K9s محدودیت‌های دسترسی کوبرنتیز را دور نمی‌زند و در همان محدوده مجاز تعریف‌شده برای هویت فعلی کار می‌کند.</p>



<p class="wp-block-paragraph">همچنین هنگام اجرای K9s، می‌توانید یک context مشخص از فایل kubeconfig را انتخاب کنید یا برنامه را به‌طور مستقیم در یک <a href="https://hamravesh.com/blog/what-is-kubernetes-namespace/" data-type="link" data-id="https://hamravesh.com/blog/what-is-kubernetes-namespace/">namespace</a> خاص اجرا کنید.</p>



<h2 class="wp-block-heading" id="h-تفاوت-k9s-و-kubectl-چیست">تفاوت K9s و kubectl چیست؟</h2>



<p class="wp-block-paragraph">K9s و kubectl نقش یکسانی ندارند و K9s را نباید جایگزین کامل kubectl دانست. kubectl ابزار خط فرمان استاندارد کوبرنتیز است، اما K9s یک رابط کاربری متنی (Terminal-based UI) برای انجام سریع‌تر عملیات روزمره و تعاملی به شمار می‌آید.&nbsp;</p>



<p class="wp-block-paragraph">بسیاری از کارهایی که در kubectl نیازمند اجرای چندین دستور هستند، در K9s تنها با میانبرهای صفحه‌کلید انجام می‌شوند؛ به همین دلیل برای فعالیت‌هایی مانند بررسی پادها، مشاهده لاگ‌ها، اجرای describe و عیب‌یابی، سریع‌تر و ساده‌تر است.&nbsp;</p>



<p class="wp-block-paragraph">ازآنجایی‌که K9s کاملاً در ترمینال اجرا می‌شود، می‌توان آن را روی Bastion Host یا سرور واسطی اجرا کرد که کاربران از طریق SSH به آن متصل می‌شوند و از آنجا به کلاستر کوبرنتیز دسترسی دارند. در مقابل، اگر هدف خودکارسازی عملیات، استفاده در اسکریپت‌ها یا ادغام با فرایندهای CI/CD باشد، همچنان kubectl انتخاب اصلی است. جدول زیر مهم‌ترین تفاوت‌های این دو ابزار را نشان می‌دهد:</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td class="has-text-align-center" data-align="center"><strong>معیار</strong></td><td class="has-text-align-center" data-align="center"><strong>kubectl</strong></td><td class="has-text-align-center" data-align="center"><strong>K9s</strong></td></tr><tr><td class="has-text-align-center" data-align="center">نوع ابزار</td><td class="has-text-align-center" data-align="center">ابزار خط فرمان (CLI)</td><td class="has-text-align-center" data-align="center">رابط کاربری متنی (Terminal-based UI)</td></tr><tr><td class="has-text-align-center" data-align="center">کاربرد اصلی</td><td class="has-text-align-center" data-align="center">اجرای دستورها و Automation</td><td class="has-text-align-center" data-align="center">مدیریت و مشاهده تعاملی کلاستر</td></tr><tr><td class="has-text-align-center" data-align="center">مناسب برای</td><td class="has-text-align-center" data-align="center">اسکریپت‌نویسی، CI/CD و Cron Job</td><td class="has-text-align-center" data-align="center">مانیتورینگ، عیب‌یابی و مدیریت روزمره</td></tr><tr><td class="has-text-align-center" data-align="center">نحوه کار</td><td class="has-text-align-center" data-align="center">اجرای دستورهای متنی</td><td class="has-text-align-center" data-align="center">استفاده از میانبرهای صفحه‌کلید</td></tr></tbody></table></figure>



<h2 class="wp-block-heading" id="h-پیش-نیازهای-استفاده-از-k9s">پیش‌نیازهای استفاده از K9s</h2>



<p class="wp-block-paragraph">پیش از نصب K9s، بهتر است مطمئن شوید محیط کاری شما برای اتصال به کلاستر کوبرنتیز آماده است. این ابزار روی سیستم‌عامل‌های لینوکس، macOS و ویندوز اجرا می‌شود. پیش‌نیازهای نصب و استفاده از این ابزار عبارت‌اند از:</p>



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



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



<li><strong>فایل kubeconfig معتبر:</strong> فایل kubeconfig باید به‌درستی تنظیم و به کلاستر موردنظر متصل شده باشد تا K9s بدون نیاز به تنظیمات اضافی بتواند به آن متصل شود.</li>



<li><strong>دسترسی‌های لازم مطابق RBAC:</strong> چون سطح دسترسی K9s تابع همان قوانین RBAC تعریف‌شده برای کاربر است، باید مطمئن شوید مجوزهای لازم برای مشاهده یا مدیریت منابع موردنظرتان از قبل برایتان تعریف شده باشد.</li>



<li><strong>ترمینال با پشتیبانی از ۲۵۶ رنگ:</strong> K9s برای نمایش صحیح رابط کاربری به حالت ۲۵۶ رنگ ترمینال نیاز دارد. اکثر ترمینال‌های مدرن به‌صورت پیش‌فرض از این قابلیت پشتیبانی می‌کنند، اما در سیستم‌های مبتنی بر یونیکس مانند لینوکس و macOS، در صورت نیاز می‌توانید متغیر محیطی TERM را به‌صورت زیر تنظیم کنید:</li>
</ul>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:clamp(24px, 1.5rem, 36px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2d333d;color:#9eadbd">Bash</span><span role="button" tabindex="0" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly> export TERM=xterm-256color</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #F69D50"> export</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">TERM=xterm-256color</span></span></code></pre></div>



<ul class="wp-block-list">
<li><strong>تنظیم EDITOR یا KUBE_EDITOR:</strong> برای ویرایش مستقیم منابع کوبرنتیز از داخل K9s، لازم است یکی از متغیرهای محیطی <code>EDITOR</code> یا <code>KUBE_EDITOR</code> روی ویرایشگر دلخواه شما تنظیم شده باشد، مثلاً:</li>
</ul>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:clamp(24px, 1.5rem, 36px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2d333d;color:#9eadbd">Bash</span><span role="button" tabindex="0" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>export KUBE_EDITOR=vim</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #F47067">export</span><span style="color: #ADBAC7"> KUBE_EDITOR</span><span style="color: #F47067">=</span><span style="color: #96D0FF">vim</span></span></code></pre></div>



<h2 class="wp-block-heading" id="h-روش-های-نصب-k9s-روی-لینوکس-macos-و-ویندوز">روش‌های نصب K9s روی لینوکس، macOS و ویندوز</h2>



<p class="wp-block-paragraph">K9s روی سیستم‌عامل‌های لینوکس، macOS و ویندوز در دسترس است. می‌توانید علاوه بر استفاده از Package Manager، فایل‌های Binary رسمی را هم از صفحه انتشار (Release) پروژه دریافت و نصب کنید. همچنین در صورت نیاز، امکان کامپایل برنامه از سورس هم وجود دارد.</p>



<h3 class="wp-block-heading" id="h-نصب-k9s-روی-macos">نصب K9s روی macOS</h3>



<p class="wp-block-paragraph">در مستندات رسمی، دو روش برای نصب K9s روی مک معرفی شده است:</p>



<p class="wp-block-paragraph">برای نصب با Homebrew:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:clamp(24px, 1.5rem, 36px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2d333d;color:#9eadbd">Bash</span><span role="button" tabindex="0" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>brew install derailed/k9s/k9s</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #F69D50">brew</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">install</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">derailed/k9s/k9s</span></span></code></pre></div>



<p class="wp-block-paragraph">برای نصب با MacPorts:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:clamp(24px, 1.5rem, 36px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2d333d;color:#9eadbd">Bash</span><span role="button" tabindex="0" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>sudo port install k9s</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #F69D50">sudo</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">port</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">install</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">k9s</span></span></code></pre></div>



<h3 class="wp-block-heading" id="h-نصب-k9s-روی-لینوکس">نصب K9s روی لینوکس</h3>



<p class="wp-block-paragraph">برای نصب K9s روی لینوکس، مستندات رسمی K9s روش‌های زیر را پیشنهاد می‌کنند:</p>



<p class="wp-block-paragraph">برای نصب با LinuxBrew:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:clamp(24px, 1.5rem, 36px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2d333d;color:#9eadbd">Bash</span><span role="button" tabindex="0" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>brew install derailed/k9s/k9s</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #F69D50">brew</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">install</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">derailed/k9s/k9s</span></span></code></pre></div>



<p class="wp-block-paragraph">برای نصب با Pacman:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:clamp(24px, 1.5rem, 36px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2d333d;color:#9eadbd">Bash</span><span role="button" tabindex="0" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>pacman -S k9s</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #F69D50">pacman</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">-S</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">k9s</span></span></code></pre></div>



<h3 class="wp-block-heading" id="h-نصب-k9s-روی-ویندوز">نصب K9s روی ویندوز</h3>



<p class="wp-block-paragraph">برای نصب K9s روی ویندوز مستندات رسمی K9s روش‌های زیر را پیشنهاد می‌کنند:</p>



<p class="wp-block-paragraph">برای نصب با Scoop:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:clamp(24px, 1.5rem, 36px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2d333d;color:#9eadbd">Bash</span><span role="button" tabindex="0" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>scoop install k9s</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #F69D50">scoop</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">install</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">k9s</span></span></code></pre></div>



<p class="wp-block-paragraph">نصب با Chocolatey:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:clamp(24px, 1.5rem, 36px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2d333d;color:#9eadbd">Bash</span><span role="button" tabindex="0" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>choco install k9s</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #F69D50">choco</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">install</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">k9s</span></span></code></pre></div>



<h3 class="wp-block-heading" id="h-نصب-k9s-با-binary-رسمی-یا-ساخت-از-روی-سورس">نصب K9s با Binary رسمی یا ساخت از روی سورس</h3>



<p class="wp-block-paragraph">اگر نمی‌خواهید از Package Manager استفاده کنید، می‌توانید فایل اجرایی متناسب با سیستم‌عامل خود را از <a href="https://github.com/derailed/k9s/releases" data-type="link" data-id="https://github.com/derailed/k9s/releases" target="_blank" rel="noreferrer noopener">صفحه انتشارهای رسمی K9s در GitHub</a> دریافت کنید. فایل‌های رسمی K9s برای لینوکس، macOS و ویندوز در این صفحه در دسترس‌اند. همچنین، اگر قصد دارید K9s را از کد منبع بسازید، طبق مستندات نصب مورداستفاده در این مقاله باید Go نسخه ۱.۱۴ یا بالاتر روی سیستم نصب باشد. در این روش، ابتدا مخزن پروژه را Clone و سپس برنامه را با دستور زیر Build و اجرا کنید:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:clamp(24px, 1.5rem, 36px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2d333d;color:#9eadbd">Bash</span><span role="button" tabindex="0" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>make build &amp;&amp; ./execs/k9s</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #F69D50">make</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">build</span><span style="color: #ADBAC7"> &amp;&amp; </span><span style="color: #F69D50">./execs/k9s</span></span></code></pre></div>



<h2 class="wp-block-heading" id="h-اجرای-اولیه-k9s-و-گزینه-های-مهم-cli">اجرای اولیه K9s و گزینه‌های مهم CLI</h2>



<p class="wp-block-paragraph">پس از اینکه فرایند نصب را انجام دادید، کافی است دستور k9s را اجرا کنید تا محیط تعاملی برنامه باز شود. در بخش بالای صفحه، اطلاعاتی مانند نام کلاستر، Context فعلی، نسخه کوبرنتیز و میزان مصرف CPU و Memory نمایش داده می‌شود. همچنین در بخش میانی، فهرست منابع کوبرنتیز قرار دارد و در پایین صفحه، مسیر پیمایش (Breadcrumb) و پیام‌های وضعیت دیده می‌شوند. هر زمان کلید : یا / را فشار دهید، نوار فرمان برای اجرای دستورها یا جستجو ظاهر می‌شود.&nbsp;</p>



<p class="wp-block-paragraph">نکته کاربردی دیگر این است که کنار نام هر Namespace، عددی نمایش داده می‌شود. در اینجا عدد ۰ نمایانگر همه Namespaceها است و اعداد دیگر به‌ترتیب به Namespaceهایی اختصاص پیدا می‌کنند که در همان نشست کاری بازدید کرده‌اید.</p>



<p class="wp-block-paragraph">مستندات رسمی K9s چند گزینه مهم برای اجرای برنامه معرفی کرده است که در ادامه با آن‌ها آشنا می‌شوید.</p>



<h3 class="wp-block-heading" id="h-مشاهده-راهنما-و-اطلاعات-برنامه">مشاهده راهنما و اطلاعات برنامه</h3>



<p class="wp-block-paragraph">برای مشاهده همه گزینه‌های خط فرمان می‌توانید از دستور زیر استفاده کنید:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:clamp(24px, 1.5rem, 36px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2d333d;color:#9eadbd">Bash</span><span role="button" tabindex="0" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>k9s help</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #F69D50">k9s</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">help</span></span></code></pre></div>



<p class="wp-block-paragraph">اگر بخواهید اطلاعات Runtime برنامه، مانند مسیر فایل‌های پیکربندی و لاگ‌ها را مشاهده کنید، دستور زیر کاربرد دارد:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:clamp(24px, 1.5rem, 36px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2d333d;color:#9eadbd">Bash</span><span role="button" tabindex="0" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>k9s info</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #F69D50">k9s</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">info</span></span></code></pre></div>



<h3 class="wp-block-heading" id="h-اجرای-k9s-در-یک-namespace-مشخص">اجرای K9s در یک Namespace مشخص</h3>



<p class="wp-block-paragraph">اگر فقط قصد کار با یک Namespace خاص را دارید، می‌توانید K9s را به‌طور مستقیم در همان Namespace اجرا کنید:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:clamp(24px, 1.5rem, 36px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2d333d;color:#9eadbd">Bash</span><span role="button" tabindex="0" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>k9s -n &lt;namespace-name></textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #F69D50">k9s</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">-n</span><span style="color: #ADBAC7"> </span><span style="color: #F47067">&lt;</span><span style="color: #96D0FF">namespace-nam</span><span style="color: #ADBAC7">e</span><span style="color: #F47067">&gt;</span></span></code></pre></div>



<p class="wp-block-paragraph">اجرای K9s با گزینه <code>-n</code> باعث می‌شود برنامه کار را در namespace مشخص‌شده آغاز کند. این روش در کلاسترهای شلوغ، دسترسی به منابع namespace موردنظر را ساده‌تر می‌کند.</p>



<h3 class="wp-block-heading" id="h-اجرای-مستقیم-در-نمای-پاد">اجرای مستقیم در نمای پاد</h3>



<p class="wp-block-paragraph">برای اینکه K9s پس از اجرا به‌طور مستقیم نمای پادها را نمایش دهد، از دستور زیر استفاده کنید:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:clamp(24px, 1.5rem, 36px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2d333d;color:#9eadbd">Bash</span><span role="button" tabindex="0" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>k9s -c pod</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #F69D50">k9s</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">-c</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">pod</span></span></code></pre></div>



<h3 class="wp-block-heading" id="h-اجرای-k9s-با-context-دلخواه">اجرای K9s با Context دلخواه</h3>



<p class="wp-block-paragraph">اگر فایل kubeconfig شما شامل چند Context باشد، هنگام اجرای K9s، می‌توانید Context موردنظر را مشخص کنید:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:clamp(24px, 1.5rem, 36px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2d333d;color:#9eadbd">Bash</span><span role="button" tabindex="0" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>k9s --context &lt;context-name></textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #F69D50">k9s</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">--context</span><span style="color: #ADBAC7"> </span><span style="color: #F47067">&lt;</span><span style="color: #96D0FF">context-nam</span><span style="color: #ADBAC7">e</span><span style="color: #F47067">&gt;</span></span></code></pre></div>



<p class="wp-block-paragraph">این قابلیت زمانی مفید است که بین چند کلاستر کوبرنتیز جابه‌جا می‌شوید و نمی‌خواهید Context پیش‌فرض را تغییر دهید.</p>



<h3 class="wp-block-heading" id="h-اجرای-k9s-در-حالت-فقط-خواندنی">اجرای K9s در حالت فقط‌خواندنی</h3>



<p class="wp-block-paragraph">برای جلوگیری از هرگونه تغییر ناخواسته روی منابع، می‌توانید K9s را با گزینه <code>--readonly</code> اجرا کنید:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:clamp(24px, 1.5rem, 36px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2d333d;color:#9eadbd">Bash</span><span role="button" tabindex="0" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>k9s --readonly</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #F69D50">k9s</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">--readonly</span></span></code></pre></div>



<p class="wp-block-paragraph">در این حالت، تمام دستورهای ویرایش، حذف و سایر عملیات تغییردهنده غیرفعال می‌شوند.</p>



<h3 class="wp-block-heading" id="h-تغییر-context-و-namespace-در-زمان-اجرا">تغییر Context و Namespace در زمان اجرا</h3>



<p class="wp-block-paragraph">K9s علاوه بر گزینه‌های خط فرمان، امکان جابه‌جایی بین Contextها و Namespaceها را از داخل محیط برنامه هم فراهم می‌کند. برای مشاهده و تغییر Context فعال، دستور زیر را وارد کنید:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:clamp(24px, 1.5rem, 36px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2d333d;color:#9eadbd">Bash</span><span role="button" tabindex="0" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>:ctx</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #F69D50">:ctx</span></span></code></pre></div>



<p class="wp-block-paragraph">یا مستقیما به یک Context مشخص بروید:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:clamp(24px, 1.5rem, 36px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2d333d;color:#9eadbd">Bash</span><span role="button" tabindex="0" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>:ctx &lt;context-name></textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #F69D50">:ctx</span><span style="color: #ADBAC7"> </span><span style="color: #F47067">&lt;</span><span style="color: #96D0FF">context-nam</span><span style="color: #ADBAC7">e</span><span style="color: #F47067">&gt;</span></span></code></pre></div>



<p class="wp-block-paragraph">برای تغییر Namespace هم کافی است بنویسید:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:clamp(24px, 1.5rem, 36px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2d333d;color:#9eadbd">Bash</span><span role="button" tabindex="0" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>:ns</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #F69D50">:ns</span></span></code></pre></div>



<p class="wp-block-paragraph">همچنین می‌توانید با ساختار <code>:pod &lt;namespace-name&gt;</code>، پادهای یک Namespace مشخص را مشاهده کنید. برای نمایش پادها در یک Context دیگر نیز از ساختار <code>:pod @&lt;context-name&gt;</code> استفاده کنید. اجرای دستور دوم، Context فعال K9s را نیز به Context مشخص‌شده تغییر می‌دهد. توجه داشته باشید که این دستور دوم، Context فعلی شما را هم تغییر می‌دهد.</p>



<div class="wp-block-dh-blog-card-database-block card database">
<div class="wp-block-group row align-items-center is-nowrap is-layout-flex wp-container-core-group-is-layout-8f761849 wp-block-group-is-layout-flex">
<div class="wp-block-group col-md"><div class="wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow">
<h3 class="wp-block-heading" id="h-کوبرنتیز-مدیریت-شده-هم-روش-راهی-مطمئن-برای-رشد-بی-وقفه">💡 کوبرنتیز مدیریت‌شده هم‌روش، راهی مطمئن برای رشد بی‌وقفه</h3>



<p class="wp-block-paragraph">راهکار کوبرنتیز مدیریت شده، بر بستر ابر اختصاصی یا به صورت On-Premises</p>



<p class="wp-block-paragraph"><br>✅ کاهش هزینه‌های عملیاتی<br>✅ احراز هویت یکپارچه با اتصال به SSO سازمانی<br>✅ قابل استقرار روی سرورهای on-premises</p>



<p class="wp-block-paragraph"></p>
</div></div>
</div>



<div class="wp-block-group col-md-auto"><div class="wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow">
<p class="btn btn--main btn--wide wp-block-paragraph"><a href="https://hamravesh.com/managed-kubernetes" type="link" id="https://hamravesh.com/managed-kubernetes" target="_blank" rel="noreferrer noopener">کوبرنتیز مدیریت‌شده</a></p>
</div></div>
</div>



<h2 class="wp-block-heading" id="h-آشنایی-با-رابط-کاربری-k9s">آشنایی با رابط کاربری K9s</h2>



<p class="wp-block-paragraph">همان‌طور که در بخش قبل دیدیم، صفحه اصلی K9s شامل بخش بالایی (نام کلاستر، Context، نسخه کوبرنتیز و مصرف CPU/Memory)، جدول منابع در وسط و نوار پیمایش در پایین صفحه است. تصویر زیر نمونه‌ای از این چیدمان را در نمای پادها نشان می‌دهد:</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="539" src="https://hamravesh.com/blog/wp-content/uploads/2026/07/hamravesh-k9s-kubernetes-guide-02-1024x539.webp" alt="آشنایی با رابط کاربری K9s" class="wp-image-5470" srcset="https://hamravesh.com/blog/wp-content/uploads/2026/07/hamravesh-k9s-kubernetes-guide-02-1024x539.webp 1024w, https://hamravesh.com/blog/wp-content/uploads/2026/07/hamravesh-k9s-kubernetes-guide-02-300x158.webp 300w, https://hamravesh.com/blog/wp-content/uploads/2026/07/hamravesh-k9s-kubernetes-guide-02-768x404.webp 768w, https://hamravesh.com/blog/wp-content/uploads/2026/07/hamravesh-k9s-kubernetes-guide-02-1536x808.webp 1536w, https://hamravesh.com/blog/wp-content/uploads/2026/07/hamravesh-k9s-kubernetes-guide-02-2048x1078.webp 2048w, https://hamravesh.com/blog/wp-content/uploads/2026/07/hamravesh-k9s-kubernetes-guide-02-120x63.webp 120w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">نکته مهم درباره این رابط این است که میانبرهای نمایش‌داده‌شده در بالای صفحه، بسته به نوع منبعی که مشاهده می‌کنید تغییر می‌کنند. برای مثال، کلید s روی پادها به‌معنای Shell است، اما همین کلید روی دیپلویمنت‌ها به‌معنای Scale خواهد بود. به همین دلیل نیازی نیست این میانبرها را از قبل حفظ کنید، چون K9s همیشه میانبرهای مرتبط با نمای فعلی را نمایش می‌دهد.</p>



<p class="wp-block-paragraph">دو میانبر کاربردی که بهتر است به خاطر بسپارید، <code>?</code> و <code>Ctrl+a</code> هستند. کلید ? در هر بخشی از K9s راهنما را باز می‌کند و <code>Ctrl+a</code> فهرست تمام alias‌های منابع شناخته‌شده توسط K9s را نشان می‌دهد. اگر نام کوتاه یا alias یک منبع را نمی‌دانید، می‌توانید با فشردن <code>Ctrl+a</code> فهرست aliasهای موجود را مشاهده کنید.</p>



<p class="wp-block-paragraph">برای جابه‌جایی در محیط K9s هم می‌توانید از کلیدهای جهت‌دار یا <code>j</code>/<code>k</code> (مشابه Vim) استفاده کنید. علاوه بر این‌ها، با فشردن Enter وارد یک منبع می‌شوید و با Esc به نمای قبلی بازمی‌گردید.</p>



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



<p class="wp-block-paragraph">یکی از مهم‌ترین قابلیت‌های K9s، دسترسی سریع به منابع مختلف کوبرنتیز از طریق میانبرهای متنی (Resource Alias) است. به‌جای اجرای مداوم دستورهای kubectl، کافی است کلید <code>:</code> را فشار دهید و نام منبع موردنظر را وارد کنید تا همان نما در ترمینال باز شود. از پرکاربردترین میانبرهای K9s می‌توان به موارد زیر اشاره کرد:</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td><strong>میانبر</strong></td><td><strong>کاربرد</strong></td></tr><tr><td><code>:pod</code></td><td>نمایش Podها</td></tr><tr><td><code>:deploy</code></td><td>نمایش Deploymentها</td></tr><tr><td><code>:svc</code></td><td>نمایش Serviceها</td></tr><tr><td><code>:ns</code></td><td>نمایش Namespaceها</td></tr><tr><td><code>:node</code></td><td>نمایش Nodeها</td></tr><tr><td><code>:pvc</code></td><td>نمایش PersistentVolumeClaimها</td></tr><tr><td><code>:cm</code></td><td>نمایش ConfigMapها</td></tr><tr><td><code>:secret</code></td><td>نمایش Secretها</td></tr><tr><td><code>:ing</code></td><td>نمایش Ingressها</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">اگر بخواهید فقط منابع یک Namespace مشخص را مشاهده کنید، می‌توانید هنگام ورود به نمای پاد، نام Namespace را هم مشخص کنید:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:clamp(24px, 1.5rem, 36px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2d333d;color:#9eadbd">Bash</span><span role="button" tabindex="0" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>:pod kube-system</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #F69D50">:pod</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">kube-system</span></span></code></pre></div>



<p class="wp-block-paragraph">همچنین اگر بخواهید پادهای یک Context دیگر را ببینید، می‌توانید از دستور زیر استفاده کنید. این دستور، Context فعال را هم تغییر می‌دهد.</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:clamp(24px, 1.5rem, 36px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2d333d;color:#9eadbd">Bash</span><span role="button" tabindex="0" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>:pod @&lt;context-name></textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #F69D50">:pod</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">@</span><span style="color: #F47067">&lt;</span><span style="color: #96D0FF">context-nam</span><span style="color: #ADBAC7">e</span><span style="color: #F47067">&gt;</span></span></code></pre></div>



<h3 class="wp-block-heading" id="h-جابه-جایی-بین-context-و-namespace">جابه‌جایی بین Context و Namespace</h3>



<p class="wp-block-paragraph">در محیط‌هایی که چند کلاستر یا Namespace در اختیار دارید، جابه‌جایی سریع میان آن‌ها اهمیت زیادی دارد. K9s این کار را با چند دستور ساده امکان‌پذیر می‌کند:</p>



<ul class="wp-block-list">
<li><code>:ctx</code> برای مشاهده و تغییر Context</li>



<li><code>:ctx &lt;context-name&gt;</code> برای رفتن مستقیم به یک Context مشخص</li>



<li><code>:ns</code> برای مشاهده و تغییر Namespace</li>
</ul>



<p class="wp-block-paragraph">همچنین با فشردن کلید 0 می‌توانید منابع موجود در تمام Namespaceها را به‌صورت یکجا مشاهده کنید. این گزینه برای بررسی وضعیت کلی کلاستر بسیار کاربردی است.</p>



<h2 class="wp-block-heading" id="h-جست-وجو-و-فیلتر-کردن-منابع-در-k9s">جست‌وجو و فیلتر کردن منابع در K9s</h2>



<p class="wp-block-paragraph">در کلاسترهای کوبرنتیز که تعداد زیادی پاد، دیپلویمنت یا سایر منابع وجود دارد، پیدا کردن یک منبع مشخص می‌تواند زمان‌بر باشد. K9s با ارائه قابلیت‌های متنوع جست‌وجو و فیلتر، یافتن منابع را در نمای فعلی ساده‌تر می‌کند.</p>



<p class="wp-block-paragraph">برای فیلتر کردن منابع، کافی است کلید / را فشار دهید و عبارت موردنظر را وارد کنید. این فیلتر به‌صورت لحظه‌ای روی نمای فعلی اعمال می‌شود و تنها منابع منطبق با عبارت جست‌وجو را نمایش می‌دهد.</p>



<p class="wp-block-paragraph">یکی از قابلیت‌های کاربردی K9s، پشتیبانی از عبارت‌های منظم (Regular Expression یا Regex) است؛ بنابراین می‌توانید چند الگو را به‌طور هم‌زمان جست‌وجو کنید. برای مثال، دستور زیر تمام منابعی را که نام آن‌ها با یکی از دو عبارت مشخص‌شده مطابقت داشته باشد، نمایش می‌دهد:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:clamp(24px, 1.5rem, 36px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2d333d;color:#9eadbd">Bash</span><span role="button" tabindex="0" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>/fred|blee</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #F69D50">/fred</span><span style="color: #F47067">|</span><span style="color: #F69D50">blee</span></span></code></pre></div>



<p class="wp-block-paragraph">K9s علاوه بر جست‌وجوی متنی، روش‌های دیگری هم برای فیلتر کردن منابع در اختیار شما قرار می‌دهد. در جدول زیر می‌توانید این روش‌ها را ببینید:</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td><strong>روش</strong></td><td><strong>کاربرد</strong></td></tr><tr><td><code>/text</code></td><td>فیلتر منابع بر اساس متن</td></tr><tr><td><code>/-l app=nginx</code></td><td>فیلتر منابع بر اساس Label</td></tr><tr><td><code>/-f text</code></td><td>جست‌وجوی فازی (Fuzzy Search)</td></tr><tr><td><code>/!text</code></td><td>فیلتر معکوس و نمایش منابعی که با عبارت واردشده مطابقت ندارند</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">اگر بخواهید همه منابع، به‌جز مواردی که شامل عبارت <code>error</code> هستند، نمایش داده شوند، می‌توانید از دستور زیر استفاده کنید:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:clamp(24px, 1.5rem, 36px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2d333d;color:#9eadbd">Bash</span><span role="button" tabindex="0" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>/!error</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #F69D50">/!error</span></span></code></pre></div>



<p class="wp-block-paragraph">همچنین قابلیت فیلتر تنها به فهرست منابع محدود نمی‌شود. هنگام مشاهده لاگ پادها یا کانتینرها هم می‌توانید با وارد کردن عباراتی مانند <code>/error</code> یا <code>/timeout</code>، فقط خطوط مرتبط با خطاها یا وقفه‌های زمانی را نمایش دهید.</p>



<h2 class="wp-block-heading" id="h-کارهای-عملی-با-k9s-logs-describe-yaml-shell-و-port-forward">کارهای عملی با K9s؛ Logs ،Describe ،YAML ،Shell و Port Forward</h2>



<p class="wp-block-paragraph">K9s علاوه بر نمایش منابع کوبرنتیز، مجموعه‌ای از میانبرهای کاربردی را برای انجام عملیات روزمره در اختیار کاربران قرار می‌دهد. این میانبرها باعث می‌شوند بدون خروج از محیط ترمینال، بتوانید وضعیت منابع را بررسی کنید یا اقدامات مدیریتی موردنیاز را انجام دهید. از مهم‌ترین میانبرهای K9s می‌توان به موارد زیر اشاره کرد:</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td><strong>کلید</strong></td><td><strong>کاربرد</strong></td></tr><tr><td><code>d</code></td><td>نمایش اطلاعات کامل منبع (Describe)</td></tr><tr><td><code>y</code></td><td>مشاهده فایل YAML منبع</td></tr><tr><td><code>e</code></td><td>ویرایش منبع با ویرایشگر تنظیم‌شده</td></tr><tr><td><code>l</code></td><td>مشاهده لاگ‌های پاد یا کانتینر</td></tr><tr><td><code>s</code></td><td>اجرای Shell روی پاد یا Scale کردن دیپلویمنت</td></tr><tr><td><code>Shift+F</code></td><td>ایجاد Port Forward</td></tr><tr><td><code>Ctrl+d</code></td><td>حذف منبع با دریافت تأیید</td></tr><tr><td><code>Ctrl+k</code></td><td>حذف فوری منبع بدون دریافت تأیید</td></tr><tr><td><code>Ctrl+s</code></td><td>ذخیره نمای فعلی یا Logها روی دیسک</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">اگر پاد چند کانتینر داشته باشد، ابتدا می‌توانید کانتینر موردنظر را انتخاب و سپس با کلید l لاگ آن را مشاهده کنید. همچنین در شرایطی که یک کانتینر دچار Crash شده و پس از راه‌اندازی مجدد، لاگ فعلی اطلاعات کافی در اختیار شما قرار نمی‌دهد، می‌توانید با استفاده از <code>Shift+L</code> لاگ کانتینر قبلی را مشاهده و علت بروز خطا را بررسی کنید.</p>



<h3 class="wp-block-heading" id="h-نمونه-ای-از-عیب-یابی-یک-deployment">نمونه‌ای از عیب‌یابی یک Deployment</h3>



<p class="wp-block-paragraph">فرض کنید یکی از Deploymentهای کلاستر با مشکل مواجه شده است. در K9s می‌توان مراحل عیب‌یابی را به‌ترتیب زیر انجام داد:</p>



<ul class="wp-block-list">
<li>با دستور <code>:deploy</code> به نمای دیپلویمنت‌ها بروید و دیپلویمنت موردنظر را انتخاب کنید.</li>



<li>کلید <code>d</code> را فشار دهید و بخش Events را بررسی کنید تا علت اولیه خطا مشخص شود.</li>



<li>با فشردن Enter، پادهای مربوط به آن دیپلویمنت را مشاهده و پادی را که در وضعیت Running نیست، انتخاب کنید.</li>



<li>با کلید <code>l</code>، لاگ پاد را بررسی کنید تا خطاهایی مانند OOMKilled، نبود متغیرهای محیطی یا خطاهای ارتباطی را شناسایی کنید.</li>



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



<li>اگر مشکل مشخص شد، با کلید <code>e</code> منبع را ویرایش کرده و تغییرات را ذخیره کنید. K9s این تغییر را اعمال می‌کند و می‌توانید ری‌استارت شدن پاد را مشاهده کنید.</li>



<li>به نمای دیپلویمنت بازگردید و مطمئن شوید Replicaها به وضعیت سالم بازگشته‌اند.</li>
</ul>



<h2 class="wp-block-heading" id="h-مانیتورینگ-قابلیت-های-پیشرفته-pluginها-نکات-production-و-محدودیت-ها">مانیتورینگ، قابلیت‌های پیشرفته، Pluginها، نکات Production و محدودیت‌ها</h2>



<p class="wp-block-paragraph">ابزار K9s در کنار عملیات روزمره مشاهده و مدیریت منابع، مجموعه‌ای از قابلیت‌های تکمیلی هم در اختیار کاربران قرار می‌دهد که از پایش لحظه‌ای وضعیت کلاستر تا امکان تعریف Plugin اختصاصی را پوشش می‌دهند. در ادامه، این قابلیت‌ها را به همراه نکاتی برای استفاده در محیط Production و محدودیت‌های K9s بررسی می‌کنیم.</p>



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



<p class="wp-block-paragraph" id="h-مشاهده-وضعیت-real-time-و-metricها"></p>



<p class="wp-block-paragraph">K9s فعالیت منابع کلاستر و متریک‌های مرتبط با پادها، کانتینرها و نودها را به‌صورت زنده نمایش می‌دهد. در استفاده روزمره، یکی از اولین کارهایی که بسیاری از مدیران کلاستر انجام می‌دهند، بررسی سلامت کلی محیط است. برای این منظور می‌توان با دستور <code>:pulses</code> نمایی خلاصه از وضعیت کلاستر مشاهده کرد. این نما تعداد دیپلویمنت‌ها، پادها، StatefulSetها، DaemonSetها و جاب‌ها را نمایش می‌دهد و مشخص می‌کند چه تعداد از آن‌ها با مشکل مواجه هستند.</p>



<p class="wp-block-paragraph">پس از آن، معمولا وضعیت نودها با دستور <code>:node</code> بررسی می‌شود تا مشخص شود که آیا همه نودها در وضعیت Ready قرار دارند یا خیر. همچنین وجود وضعیت‌هایی مانند MemoryPressure یا DiskPressure می‌تواند نشانه بروز مشکل در اجرای Workloadها باشد.</p>



<p class="wp-block-paragraph">در ادامه هم با ورود به نمای پادها و فشردن کلید 0 برای نمایش همه Namespaceها، می‌توان ستون STATUS را بررسی کرد و پادهایی را که در وضعیت‌هایی مانند CrashLoopBackOff ،Error ،Pending یا ImagePullBackOff قرار دارند، به‌سرعت شناسایی کرد.</p>



<p class="wp-block-paragraph">نکته مهم این است که K9s برای مشاهده و بررسی تعاملی وضعیت فعلی کلاستر کاربرد دارد؛ اما برای ذخیره‌سازی و تحلیل تاریخچه متریک‌ها، ساخت داشبورد و هشداردهی مستمر طراحی نشده است. برای این کاربردها باید از ابزارهای تخصصی مانند Prometheus و Grafana استفاده کرد.</p>



<h3 class="wp-block-heading" id="h-pulses-xray-و-rbac">Pulses ،XRay و RBAC</h3>



<p class="wp-block-paragraph">K9s چند قابلیت پیشرفته برای تحلیل وضعیت کلاستر هم در اختیار کاربران قرار می‌دهد. قابلیت Pulses یک داشبورد سطح بالا از وضعیت کلی کلاستر ارائه می‌کند و برای بررسی سریع سلامت منابع بسیار کاربردی است. همان‌طور که در بخش قبل اشاره شد، اجرای دستور <code>:pulses</code> دید مناسبی از وضعیت دیپلویمنت‌ها، پادها و سایر منابع در اختیار مدیر کلاستر قرار می‌دهد.</p>



<p class="wp-block-paragraph">قابلیت XRay برای مشاهده وابستگی میان منابع کوبرنتیز طراحی شده است. برای مثال، با اجرای دستور زیر می‌توان ساختار یک دیپلویمنت را به‌صورت درختی مشاهده کرد:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:clamp(24px, 1.5rem, 36px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2d333d;color:#9eadbd">Bash</span><span role="button" tabindex="0" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>:xray deploy</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #F69D50">:xray</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">deploy</span></span></code></pre></div>



<p class="wp-block-paragraph">در این نما، ارتباط دیپلویمنت با ReplicaSetها، پادها و در نهایت کانتینرهای مرتبط، به‌صورت درختی نمایش داده می‌شود. این قابلیت برای منابع دیگری مانند Service ،StatefulSet ،DaemonSet و ReplicaSet هم قابل استفاده است و هنگام عیب‌یابی وابستگی‌ها، بسیار مفید خواهد بود.</p>



<h3 class="wp-block-heading" id="h-popeye-در-k9s">Popeye در K9s</h3>



<p class="wp-block-paragraph">با اجرای دستور <code>:popeye</code> می‌توانید بررسی کلاستر را براساس مجموعه‌ای از Best Practiceها آغاز کنید:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:clamp(24px, 1.5rem, 36px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2d333d;color:#9eadbd">Bash</span><span role="button" tabindex="0" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>:popeye</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #F69D50">:popeye</span></span></code></pre></div>



<p class="wp-block-paragraph">این قابلیت مواردی مانند نبود Probeهای لازم، مشکلات ایمیج‌ها، تخصیص نامناسب منابع و پیکربندی نادرست RBAC را بررسی و نتیجه را با وضعیت‌هایی مانند <code>OK</code> ،<code>Info</code> ،<code>Warn</code> یا <code>Error</code> نمایش می‌دهد.</p>



<h3 class="wp-block-heading" id="h-pluginها-در-k9s">Pluginها در K9s</h3>



<p class="wp-block-paragraph">یکی از قابلیت‌های توسعه‌پذیر K9s، پشتیبانی از Pluginهاست. با استفاده از Plugin می‌توانید فرمان‌های اختصاصی خود را تعریف کنید و آن‌ها را از طریق میانبرهای صفحه‌کلید روی منابع کوبرنتیز اجرا کنید. K9s برای پیدا کردن Pluginها ابتدا فایل زیر را بررسی می‌کند:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:clamp(24px, 1.5rem, 36px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2d333d;color:#9eadbd">Plaintext</span><span role="button" tabindex="0" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>$XDG_CONFIG_HOME/k9s/plugins.yaml</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #adbac7">$XDG_CONFIG_HOME/k9s/plugins.yaml</span></span></code></pre></div>



<p class="wp-block-paragraph">علاوه بر این فایل، K9s پوشه‌های زیر را نیز برای یافتن فایل‌های Plugin بررسی می‌کند:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:clamp(24px, 1.5rem, 36px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2d333d;color:#9eadbd">Plaintext</span><span role="button" tabindex="0" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>$XDG_CONFIG_HOME/k9s/plugins
$XDG_DATA_HOME/k9s/plugins
$XDG_DATA_DIRS/k9s/plugins</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #adbac7">$XDG_CONFIG_HOME/k9s/plugins</span></span>
<span class="line"><span style="color: #adbac7">$XDG_DATA_HOME/k9s/plugins</span></span>
<span class="line"><span style="color: #adbac7">$XDG_DATA_DIRS/k9s/plugins</span></span></code></pre></div>



<p class="wp-block-paragraph">امکان تعریف تنظیمات اختصاصی Plugin برای هر Context نیز وجود دارد. فایل مربوط به این تنظیمات در ساختار زیر قرار می‌گیرد:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:clamp(24px, 1.5rem, 36px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2d333d;color:#9eadbd">Plaintext</span><span role="button" tabindex="0" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>$XDG_DATA_HOME/k9s/clusters/&lt;cluster-name>/&lt;context-name>/plugins.yaml</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #adbac7">$XDG_DATA_HOME/k9s/clusters/&lt;cluster-name&gt;/&lt;context-name&gt;/plugins.yaml</span></span></code></pre></div>



<p class="wp-block-paragraph">در این مسیر، <code>&lt;cluster-name&gt;</code> و <code>&lt;context-name&gt;</code> مقادیر جایگزین‌شدنی هستند و باید با نام کلاستر و Context موردنظر جایگزین شوند. هر Plugin می‌تواند شامل میانبر اجرا، توضیح، دامنه منابع، فرمان اجرایی و آرگومان‌های موردنیاز باشد. گزینه <code>scopes</code> مشخص می‌کند که Plugin در نمای کدام منابع فعال باشد. برای مثال، اگر مقدار آن روی <code>pods</code> تنظیم شود، میانبر Plugin در نمای پادها در دسترس خواهد بود.</p>



<p class="wp-block-paragraph">نمونه زیر یک Plugin برای اجرای فرمان <code>kubectl debug</code> روی پاد انتخاب‌شده تعریف می‌کند:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:clamp(24px, 1.5rem, 36px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2d333d;color:#9eadbd">YAML</span><span role="button" tabindex="0" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>plugins:
  debug:
    shortCut: Shift-D
    description: Debug pod
    scopes:
      - pods
    command: kubectl
    background: false
    args:
      - debug
      - -it
      - $NAME
      - -n
      - $NAMESPACE
      - --image=busybox</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #8DDB8C">plugins</span><span style="color: #ADBAC7">:</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #8DDB8C">debug</span><span style="color: #ADBAC7">:</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #8DDB8C">shortCut</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">Shift-D</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #8DDB8C">description</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">Debug pod</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #8DDB8C">scopes</span><span style="color: #ADBAC7">:</span></span>
<span class="line"><span style="color: #ADBAC7">      - </span><span style="color: #96D0FF">pods</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #8DDB8C">command</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">kubectl</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #8DDB8C">background</span><span style="color: #ADBAC7">: </span><span style="color: #6CB6FF">false</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #8DDB8C">args</span><span style="color: #ADBAC7">:</span></span>
<span class="line"><span style="color: #ADBAC7">      - </span><span style="color: #96D0FF">debug</span></span>
<span class="line"><span style="color: #ADBAC7">      - </span><span style="color: #96D0FF">-it</span></span>
<span class="line"><span style="color: #ADBAC7">      - </span><span style="color: #96D0FF">$NAME</span></span>
<span class="line"><span style="color: #ADBAC7">      - </span><span style="color: #96D0FF">-n</span></span>
<span class="line"><span style="color: #ADBAC7">      - </span><span style="color: #96D0FF">$NAMESPACE</span></span>
<span class="line"><span style="color: #ADBAC7">      - </span><span style="color: #96D0FF">--image=busybox</span></span></code></pre></div>



<p class="wp-block-paragraph">در این مثال، با فشردن میانبر <code>Shift+D</code> در نمای پادها، فرمان تعریف‌شده برای Pod انتخاب‌شده اجرا می‌شود. متغیر <code>$NAME</code> نام منبع انتخاب‌شده و <code>$NAMESPACE</code> نام Namespace آن را در اختیار فرمان قرار می‌دهد. K9s متغیرهای دیگری مانند <code>$CONTEXT</code> و <code>$CLUSTER</code> را نیز برای استفاده در آرگومان‌های Plugin ارائه می‌کند. به این ترتیب، می‌توان فرمان‌هایی تعریف کرد که بر اساس منبع انتخاب‌شده، Namespace ،Context یا کلاستر فعال اجرا شوند.</p>



<h3 class="wp-block-heading" id="h-نکات-استفاده-از-k9s-در-محیط-production">نکات استفاده از K9s در محیط Production</h3>



<p class="wp-block-paragraph">اگر قصد استفاده از K9s در محیط‌های عملیاتی را دارید، رعایت چند نکته می‌تواند احتمال بروز خطا را کاهش دهد.</p>



<p class="wp-block-paragraph">مهم‌ترین توصیه، اجرای برنامه در حالت فقط‌خواندنی است:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:clamp(24px, 1.5rem, 36px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2d333d;color:#9eadbd">Bash</span><span role="button" tabindex="0" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>k9s --readonly</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #F69D50">k9s</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">--readonly</span></span></code></pre></div>



<p class="wp-block-paragraph">در این حالت، تمام عملیات‌های تغییردهنده مانند <code>Edit</code> ،<code>Delete</code> و <code>Kill</code> غیرفعال می‌شوند و تنها امکان مشاهده منابع وجود دارد. همچنین هنگام حذف منابع باید به تفاوت میان دو میانبر توجه داشت. کلید <code>Ctrl+d</code> قبل از حذف، از کاربر تایید می‌گیرد، اما <code>Ctrl+k</code> منبع را بدون نمایش پیام تأیید حذف می‌کند؛ بنابراین در محیط Production استفاده از <code>Ctrl+d</code> گزینه ایمن‌تری است.</p>



<p class="wp-block-paragraph">ازآنجایی‌که K9s کاملاً در ترمینال اجرا می‌شود، می‌توانید آن را از طریق SSH روی Bastion Host یا Jump Server نیز اجرا کنید. این موضوع در بسیاری از زیرساخت‌های سازمانی مزیت مهمی محسوب می‌شود.</p>



<p class="wp-block-paragraph">در کلاسترهای بزرگ که تعداد زیادی پاد در حال اجراست، می‌توانید مقدار <code>refreshRate</code> را در فایل تنظیمات افزایش دهید تا فاصله زمانی میان به‌روزرسانی‌ها بیشتر شود. همچنین می‌توانید K9s را با گزینه <code>-n</code> در Namespace موردنظر اجرا کنید:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:clamp(24px, 1.5rem, 36px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2d333d;color:#9eadbd">Bash</span><span role="button" tabindex="0" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>k9s -n &lt;namespace-name></textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #F69D50">k9s</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">-n</span><span style="color: #ADBAC7"> </span><span style="color: #F47067">&lt;</span><span style="color: #96D0FF">namespace-nam</span><span style="color: #ADBAC7">e</span><span style="color: #F47067">&gt;</span></span></code></pre></div>



<p class="wp-block-paragraph">در این دستور، <code>&lt;namespace-name&gt;</code> باید با نام Namespace موردنظر جایگزین شود. شروع کار در یک Namespace مشخص، دسترسی به منابع همان Namespace را در کلاسترهای شلوغ ساده‌تر می‌کند.</p>



<p class="wp-block-paragraph">در نهایت، اگر اعضای تیم به‌صورت مشترک از K9s استفاده می‌کنند، می‌توانید فایل‌های تنظیمات، میانبرها، Pluginها و Skinهای سفارشی را در یک مخزن Git نگهداری کنید تا امکان به‌اشتراک‌گذاری و هماهنگ‌سازی این تنظیمات میان اعضای تیم فراهم شود.</p>



<h3 class="wp-block-heading" id="h-محدودیت-های-k9s">محدودیت‌های K9s</h3>



<p class="wp-block-paragraph">K9s با وجود قابلیت‌های متعدد، محدودیت‌هایی نیز دارد که بهتر است پیش از استفاده از این ابزار از آن‌ها آگاه باشید. مهم‌ترین محدودیت این است که K9s برای Automation طراحی نشده است. خروجی آن قابل استفاده در Scriptها نیست و نمی‌توان از آن در Pipelineهای CI/CD یا Cron Jobها استفاده کرد. برای این سناریوها همچنان kubectl ابزار اصلی به شمار می‌آید.</p>



<p class="wp-block-paragraph">همچنین ناوبری K9s تا حدی از Vim الهام گرفته است؛ بنابراین اگر قبلا با کلیدهایی مانند <code>k</code> ،<code>j</code> یا فرمان‌های مبتنی بر <code>:</code> کار نکرده باشید، ممکن است در روزهای نخست برای یادگیری نحوه کار با آن به کمی زمان نیاز داشته باشید. از دیگر محدودیت‌ها می‌توان به موارد زیر اشاره کرد:</p>



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



<li>Port Forwardهایی که در K9s ایجاد می‌شوند، پس از بسته‌شدن برنامه متوقف می‌شوند. برای اتصال‌های پایدارتر باید از روش دیگری مانند <code>kubectl port-forward</code> استفاده کنید.</li>



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



<li>K9s قابلیت نگهداری History یا ارسال Alert ندارد و اگر بخواهید اطلاعاتی مانند لاگ‌ها یا خروجی Viewها را نگه دارید، باید قبل از خروج با <code>Ctrl+s</code> آن‌ها را ذخیره کنید.</li>



<li>اگرچه Pluginهای آماده‌ای برای K9s وجود دارد، اما تعداد آن‌ها محدود است و با وجود Pluginهای آماده، ممکن است برای پوشش نیازهای اختصاصی تیم به تعریف Plugin سفارشی نیاز داشته باشید.</li>
</ul>



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



<p class="wp-block-paragraph">در این راهنمای K9s توضیح دادیم که این ابزار چگونه مشاهده، پیمایش و مدیریت تعاملی منابع کوبرنتیز را از داخل ترمینال ساده‌تر می‌کند. K9s با دنبال‌کردن مداوم تغییرات کلاستر، انجام کارهای روزمره‌ای مانند بررسی پادها، مشاهده لاگ‌ها، اجرای <code>describe</code> و جابه‌جایی میان Namespaceها را سریع‌تر می‌کند.</p>



<p class="wp-block-paragraph">بااین‌حال، K9s جایگزین کامل <code>kubectl</code> نیست. برای اسکریپت‌نویسی، فرایندهای CI/CD و خودکارسازی عملیات همچنان باید از ابزارهایی مانند <code>kubectl</code> استفاده کنید. K9s همچنین قابلیت نگهداری تاریخچه داده‌ها یا ارسال هشدار را فراهم نمی‌کند.</p>



<p class="wp-block-paragraph">استفاده از K9s در محیط‌های Production باید با احتیاط همراه باشد. اجرای برنامه در حالت <code>readonly</code>، توجه به مجوزهای تعریف‌شده در RBAC و دقت در عملیات مخربی مانند <code>Delete</code> یا <code>Kill</code> می‌تواند احتمال ایجاد تغییرات ناخواسته در کلاستر را کاهش دهد.</p>



<p class="wp-block-paragraph"></p>
<p>The post <a href="https://hamravesh.com/blog/k9s-kubernetes-guide/">آموزش K9s؛ راهنمای نصب و استفاده از ابزار مدیریت کوبرنتیز در ترمینال</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://hamravesh.com/blog/k9s-kubernetes-guide/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>راهنمای عملی تنظیم CPU Limit در کوبرنتیز؛ از Request تا Throttling</title>
		<link>https://hamravesh.com/blog/how-to-manage-kubernetes-cpu-limits/</link>
					<comments>https://hamravesh.com/blog/how-to-manage-kubernetes-cpu-limits/#respond</comments>
		
		<dc:creator><![CDATA[هم‌روش]]></dc:creator>
		<pubDate>Wed, 15 Jul 2026 12:30:33 +0000</pubDate>
				<category><![CDATA[دواپس]]></category>
		<category><![CDATA[کوبرنتیز]]></category>
		<guid isPermaLink="false">https://hamravesh.com/blog/?p=5406</guid>

					<description><![CDATA[<p>CPU Request و CPU Limit در کوبرنتیز نقش‌های متفاوتی دارند و نباید آن‌ها را به‌جای یکدیگر در نظر گرفت. Request مقداری از منابع است که Kubernetes هنگام Scheduling برای Pod در نظر می‌گیرد. Scheduler هنگام انتخاب Node، مقدار Request را با ظرفیت Allocatable هر Node مقایسه می‌کند و مصرف لحظه‌ای CPU یا Memory را ملاک تصمیم‌گیری قرار نمی‌دهد.</p>
<p>The post <a href="https://hamravesh.com/blog/how-to-manage-kubernetes-cpu-limits/">راهنمای عملی تنظیم CPU Limit در کوبرنتیز؛ از Request تا Throttling</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">فرض کنید یکی از سرویس‌های مبتنی بر کوبرنتیز شما ناگهان کند شده است. کاربران از افزایش تاخیر شکایت می‌کنند، اما وقتی داشبوردهای مانیتورینگ را بررسی می‌کنید، همه‌چیز عادی به نظر می‌رسد. Podها در وضعیت Running هستند، مصرف CPU روی نود پایین است، Memory تحت فشار نیست و Alert غیرعادی هم دیده نمی‌شود. با این حال، زمان پاسخ‌دهی سرویس همچنان بیشتر از حد انتظار است. معمولا در چنین شرایطی پیدا کردن منشأ مشکل ساده نیست. یکی از دلایلی که کمتر مورد توجه قرار می‌گیرد، CPU Throttling ناشی از CPU Limit در کوبرنتیز است. این مسئله ممکن است در بررسی اولیه داشبوردها به‌وضوح دیده نشود و از چشم تیم عملیات پنهان بماند.</p>



<p class="wp-block-paragraph">نکته مهم اینجاست که وجود CPU آزاد روی نود، لزوما به این معنا نیست که همه کانتینرها بدون محدودیت از منابع پردازشی استفاده می‌کنند. حتی اگر بخشی از ظرفیت پردازشی نود هنوز آزاد باشد، اعمال CPU Limit می‌تواند باعث CPU Throttling در سرویس‌های حساس به تاخیر شود. در ادامه بررسی می‌کنیم که CPU Request و CPU Limit در کوبرنتیز چه تفاوتی با هم دارند، کوبرنتیز هرکدام را در چه مرحله‌ای به کار می‌گیرد و چرا این تنظیم به‌ظاهر ساده می‌تواند تاثیر زیادی بر عملکرد سرویس‌ها داشته باشد.</p>



<h2 class="wp-block-heading" id="h-cpu-request-و-cpu-limit-در-کوبرنتیز-چه-تفاوتی-دارند">CPU Request و CPU Limit در کوبرنتیز چه تفاوتی دارند؟</h2>



<p class="wp-block-paragraph">CPU Request و CPU Limit دو کاربرد متفاوت دارند. CPU Request مشخص می‌کند یک <a href="https://hamravesh.com/blog/what-is-kubernetes-pod" data-type="link" data-id="https://hamravesh.com/blog/what-is-kubernetes-pod" target="_blank" rel="noreferrer noopener">پاد</a> برای اجرا به چه میزان CPU نیاز دارد. کوبرنتیز هنگام انتخاب نود (در فرایند Scheduling)، بررسی می‌کند که با توجه به Request پادهای مستقرشده، کدام نود ظرفیت کافی برای پاد جدید دارد. در این تصمیم، مصرف لحظه‌ای CPU ملاک نیست؛ بنابراین ممکن است CPU یک نود در عمل کم‌مصرف باشد، اما به‌دلیل مجموع Requestهای ثبت‌شده، پاد جدید روی آن اجرا نشود.</p>



<p class="wp-block-paragraph">در مقابل، CPU Limit سقف مصرف CPU کانتینر را پس از اجرا مشخص می‌کند. اگر کانتینر به این سقف برسد، کرنل لینوکس دسترسی آن به CPU را موقتاً محدود می‌کند؛ حتی اگر نود همچنان CPU آزاد داشته باشد.</p>



<p class="wp-block-paragraph">برای درک بهتر تفاوت Request و Limit، در مثال زیر مقدار منابع موردنیاز کانتینر برای انتخاب نود و همچنین سقف مصرف آن پس از اجرا مشخص شده است:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:clamp(24px, 1.5rem, 36px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2d333d;color:#9eadbd">YAML</span><span role="button" tabindex="0" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>apiVersion: v1
kind: Pod
metadata:
  name: demo-app
spec:
  containers:
    - name: web
      image: nginx
      resources:
        requests:
          cpu: "500m"
          memory: "512Mi"
        limits:
          cpu: "1"
          memory: "512Mi"</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #8DDB8C">apiVersion</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">v1</span></span>
<span class="line"><span style="color: #8DDB8C">kind</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">Pod</span></span>
<span class="line"><span style="color: #8DDB8C">metadata</span><span style="color: #ADBAC7">:</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #8DDB8C">name</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">demo-app</span></span>
<span class="line"><span style="color: #8DDB8C">spec</span><span style="color: #ADBAC7">:</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #8DDB8C">containers</span><span style="color: #ADBAC7">:</span></span>
<span class="line"><span style="color: #ADBAC7">    - </span><span style="color: #8DDB8C">name</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">web</span></span>
<span class="line"><span style="color: #ADBAC7">      </span><span style="color: #8DDB8C">image</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">nginx</span></span>
<span class="line"><span style="color: #ADBAC7">      </span><span style="color: #8DDB8C">resources</span><span style="color: #ADBAC7">:</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #8DDB8C">requests</span><span style="color: #ADBAC7">:</span></span>
<span class="line"><span style="color: #ADBAC7">          </span><span style="color: #8DDB8C">cpu</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">&quot;500m&quot;</span></span>
<span class="line"><span style="color: #ADBAC7">          </span><span style="color: #8DDB8C">memory</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">&quot;512Mi&quot;</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #8DDB8C">limits</span><span style="color: #ADBAC7">:</span></span>
<span class="line"><span style="color: #ADBAC7">          </span><span style="color: #8DDB8C">cpu</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">&quot;1&quot;</span></span>
<span class="line"><span style="color: #ADBAC7">          </span><span style="color: #8DDB8C">memory</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">&quot;512Mi&quot;</span></span></code></pre></div>



<p class="wp-block-paragraph">در این مثال:</p>



<ul class="wp-block-list">
<li>requests.cpu: 500m یعنی پاد برای زمان‌بندی به نیم هسته CPU نیاز دارد.</li>



<li>requests.memory: 512Mi یعنی Scheduler باید نودی را انتخاب کند که بتواند حداقل 512Mi حافظه را برای این پاد در نظر بگیرد.</li>



<li>limits.cpu: 1 یعنی کانتینر در زمان اجرا نمی‌تواند بیش از یک هسته CPU مصرف کند.</li>



<li>limits.memory: 512Mi سقف مصرف حافظه را مشخص می‌کند و عبور از این مقدار می‌تواند به OOM Kill منجر شود. در OOM Kill، کرنل به‌دلیل فشار حافظه یا عبور کانتینر از محدودیت حافظه، یکی از فرایندهای آن را متوقف می‌کند.</li>
</ul>



<h2 class="wp-block-heading" id="h-request-در-scheduling-چه-نقشی-دارد">Request در Scheduling چه نقشی دارد؟</h2>



<p class="wp-block-paragraph">یکی از رایج‌ترین سو برداشت‌ها درباره CPU Request در کوبرنتیز این است که آن را معادل مصرف واقعی برنامه در نظر می‌گیرند؛ درحالی‌که Request در اصل یک سیگنال برای زمان‌بندی (<a href="https://hamravesh.com/blog/what-is-scheduling-in-kubernetes/" data-type="link" data-id="https://hamravesh.com/blog/what-is-scheduling-in-kubernetes/" target="_blank" rel="noreferrer noopener">Scheduling در کوبرنتیز</a>) است و قرار نیست گزارشی از مصرف لحظه‌ای کانتینر ارائه دهد. به همین دلیل ممکن است نود از نظر مصرف واقعی CPU تقریبا بیکار به نظر برسد، اما Scheduler همچنان نتواند پاد جدیدی را روی آن قرار دهد.&nbsp;</p>



<p class="wp-block-paragraph">اگر مجموع CPU Request پادهای مستقر روی یک نود به ظرفیت قابل تخصیص (Allocatable) آن رسیده باشد، کوبرنتیز دیگر پاد جدیدی را روی آن نود قرار نمی‌دهد؛ حتی اگر نمودارهای مانیتورینگ نشان دهند که مصرف واقعی CPU پایین است. در چنین شرایطی، اگر نود مناسب دیگری هم وجود نداشته باشد، پاد جدید در وضعیت Pending باقی می‌ماند و اجرا نمی‌شود.</p>



<p class="wp-block-paragraph">تنظیم نادرست Requestها می‌تواند روی بهره‌وری کل کلاستر هم تاثیر بگذارد. اگر Requestها بیش از نیاز واقعی Workload تعیین شوند، Scheduler باید آن مقدار را در محاسبه ظرفیت قابل زمان‌بندی نود لحاظ کند. در نتیجه، بخشی از ظرفیت قابل زمان‌بندی (Schedulable Capacity) برای استقرار پادهای دیگر قابل استفاده نخواهد بود؛ حتی اگر مصرف واقعی CPU پایین باشد. پس بهتر است Request را بر اساس نیاز واقعی Workload تنظیم کنیم، زیرا Scheduler برای استقرار Podها به همین مقدار تکیه می‌کند و مصرف لحظه‌ای برنامه را معیار قرار نمی‌دهد.</p>



<h2 class="wp-block-heading" id="h-cpu-limit-در-کوبرنتیز-در-پشت-صحنه-چطور-اعمال-می-شود">CPU Limit در کوبرنتیز در پشت صحنه چطور اعمال می‌شود؟</h2>



<p class="wp-block-paragraph">برخلاف تصور رایج، کوبرنتیز مستقیماً مصرف CPU کانتینر را محدود نمی‌کند. پس از اینکه Scheduler نود مناسب را برای پاد انتخاب کرد، kubelet که روی آن نود اجرا می‌شود، مشخصات پاد را دریافت می‌کند. (عامل اجرایی کوبرنتیز روی هر نود است که پادها و کانتینرهای آن نود را راه‌اندازی و مدیریت می‌کند.) سپس kubelet از طریق Container Runtime (مانند containerd)، کانتینر را راه‌اندازی می‌کند.</p>



<p class="wp-block-paragraph">Container Runtime برای هر کانتینر یک cgroup ایجاد کرده و مقادیر Request و Limit را به آن‌ها اعمال می‌کند. cgroup قابلیتی در لینوکس است که برای مدیریت و محدودکردن منابع پردازشی کانتینرها به کار می‌رود. از این مرحله به بعد، اعمال محدودیت CPU بر عهده کرنل لینوکس است.</p>



<p class="wp-block-paragraph">در این فرایند، CPU Request و CPU Limit نقش‌های متفاوتی دارند. مقدار CPU Request معمولاً به <code>cpu.weight</code> تبدیل می‌شود و وزن نسبی کانتینر را هنگام رقابت بر سر CPU مشخص می‌کند. این مقدار به معنای اختصاص یا رزرو مقدار ثابتی از CPU نیست. در مقابل، CPU Limit به <code>cpu.max</code> تبدیل می‌شود و سقف سخت مصرف CPU کانتینر را تعیین می‌کند.</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:clamp(24px, 1.5rem, 36px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2d333d;color:#9eadbd">Bash</span><span role="button" tabindex="0" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>cpu.max = &lt;quota> &lt;period></textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #F69D50">cpu.max</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">=</span><span style="color: #ADBAC7"> </span><span style="color: #F47067">&lt;</span><span style="color: #96D0FF">quot</span><span style="color: #ADBAC7">a</span><span style="color: #F47067">&gt;</span><span style="color: #ADBAC7"> </span><span style="color: #F47067">&lt;</span><span style="color: #96D0FF">perio</span><span style="color: #ADBAC7">d</span><span style="color: #F47067">&gt;</span></span></code></pre></div>



<p class="wp-block-paragraph">برای مثال، اگر CPU Limit برابر 200m باشد، مقدار cpu.max به‌صورت زیر تنظیم می‌شود:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:clamp(24px, 1.5rem, 36px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2d333d;color:#9eadbd">Bash</span><span role="button" tabindex="0" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>cpu.max = 20000 100000</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #F69D50">cpu.max</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">20000</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">100000</span></span></code></pre></div>



<p class="wp-block-paragraph">در این مثال، کانتینر در هر بازه ۱۰۰،۰۰۰ میکروثانیه (معادل ۱۰۰ میلی‌ثانیه) فقط مجاز است ۲۰،۰۰۰ میکروثانیه (معادل ۲۰ میلی‌ثانیه) از CPU استفاده کند. اگر این سهم را پیش از پایان بازه مصرف کند، کرنل اجرای آن را تا شروع دوره بعدی متوقف می‌کند. همین توقف موقت را CPU Throttling در کوبرنتیز می‌نامند. رابطه میان Request و Limit با تنظیمات cgroup را می‌توان به‌صورت زیر خلاصه کرد:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:clamp(24px, 1.5rem, 36px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2d333d;color:#9eadbd">Plaintext</span><span role="button" tabindex="0" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>CPU request → cpu.weight → controls fairness
CPU limit   → cpu.max    → enforces a hard cap</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #adbac7">CPU request → cpu.weight → controls fairness</span></span>
<span class="line"><span style="color: #adbac7">CPU limit   → cpu.max    → enforces a hard cap</span></span></code></pre></div>



<p class="wp-block-paragraph">نکته مهم این است که CPU Throttling صرفا به معنای «کمی کندتر شدن» کانتینر نیست. اگر سهم CPU مجاز در یک بازه زمانی به‌طور کامل مصرف شود، کانتینر تا آغاز بازه بعدی، عملا امکان دریافت CPU بیشتری را نخواهد داشت.</p>



<h2 class="wp-block-heading" id="h-چرا-با-وجود-cpu-آزاد-روی-نود-باز-هم-پاد-throttle-می-شود">چرا با وجود CPU آزاد روی نود باز هم پاد Throttle می‌شود؟</h2>



<p class="wp-block-paragraph">شاید در نگاه اول این اتفاق غیرمنطقی به نظر برسد که اگر نود هنوز CPU آزاد دارد، چرا یک پاد باید با CPU Throttling مواجه شود؟ پاسخ این سوال را باید در نحوه اعمال CPU Limit در کوبرنتیز بررسی کنیم.&nbsp;</p>



<p class="wp-block-paragraph">همان‌طور که در بخش قبل گفتیم، CPU Limit در سطح cgroup اعمال می‌شود، نه در سطح کل نود. کرنل این محدودیت را براساس سهمیه زمانی CPU تعیین‌شده برای همان cgroup اعمال می‌کند و میزان CPU آزاد نود را در این تصمیم دخالت نمی‌دهد. به همین دلیل، پایین‌بودن مصرف CPU در سطح نود لزوماً به این معنا نیست که همه کانتینرها می‌توانند از ظرفیت آزاد آن استفاده کنند. ممکن است نود همچنان CPU آزاد داشته باشد، اما کانتینری که سهمیه زمانی CPU خود را مصرف کرده است، تا آغاز دوره بعدی نتواند CPU بیشتری دریافت کند.</p>



<p class="wp-block-paragraph">همین موضوع ممکن است باعث شود مشکل را به‌اشتباه به کمبود منابع نود نسبت دهیم. در واقع، نود با کمبود CPU مواجه نیست؛ بلکه کانتینر سهمیه زمانی CPU خود را در آن دوره مصرف کرده است و کرنل تا آغاز دوره بعدی اجازه استفاده بیشتر از CPU را به آن نمی‌دهد.</p>



<p class="wp-block-paragraph">در نتیجه، با وجود ظرفیت پردازشی بلااستفاده روی نود، سرویس ممکن است با افزایش تأخیر، تشکیل صف درخواست‌ها (Queue Buildup) و در نهایت Timeout مواجه شود.</p>



<h2 class="wp-block-heading" id="h-cpu-limit-با-memory-limit-چه-فرقی-دارد">CPU Limit با Memory Limit چه فرقی دارد؟</h2>



<p class="wp-block-paragraph">یکی از اشتباهات رایج درباره CPU Limit در کوبرنتیز این است که آن را با همان منطق Memory Limit در نظر می‌گیرند؛ درحالی‌که این دو از نظر نوع و رفتار هنگام رسیدن به Limit با هم متفاوت‌اند. جدول زیر این تفاوت را نشان می‌دهد:</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td class="has-text-align-center" data-align="center"><strong>منبع</strong></td><td class="has-text-align-center" data-align="center"><strong>رفتار هنگام عبور از Limit</strong></td><td class="has-text-align-center" data-align="center"><strong>نتیجه محتمل</strong></td></tr><tr><td class="has-text-align-center" data-align="center">CPU</td><td class="has-text-align-center" data-align="center">CPU Throttling</td><td class="has-text-align-center" data-align="center">افزایش Latency ،Timeout و کاهش Throughput</td></tr><tr><td class="has-text-align-center" data-align="center">Memory</td><td class="has-text-align-center" data-align="center">OOM Kill</td><td class="has-text-align-center" data-align="center">Restart کانتینر و اختلال در سرویس</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">این تفاوت در محیط‌های عملیاتی اهمیت زیادی دارد. اگر افزایش زمان پاسخ‌گویی مشاهده می‌کنید، ممکن است ریشه مشکل CPU Throttling باشد. اگر کانتینری به‌طور ناگهانی Restart می‌شود، ابتدا Last Termination Reason را بررسی کنید تا مشخص شود آیا دلیل توقف آن <code>OOMKilled</code> بوده است یا نه. در صورت مشاهده این وضعیت، Memory Limit و میزان واقعی مصرف حافظه را بررسی کنید.</p>



<h2 class="wp-block-heading" id="h-برای-سرویس-های-حساس-به-تاخیر-چه-الگویی-بهتر-است">برای سرویس‌های حساس به تاخیر چه الگویی بهتر است؟</h2>



<p class="wp-block-paragraph">اگر سرویسی به تاخیر حساس است، هدف فقط محدود کردن مصرف CPU نیست و باید تعادلی بین عملکرد و مدیریت منابع برقرار شود. پیشنهاد می‌شود که CPU Request بر اساس الگوی واقعی مصرف تنظیم شود و CPU Limit به‌صورت پیش‌فرض اعمال نشود؛ مگر اینکه واقعا به یک سقف سخت برای مصرف CPU نیاز باشد.</p>



<p class="wp-block-paragraph">همان‌طور که پیش‌تر دیدیم، CPU Limit سخت‌گیرانه می‌تواند حتی با وجود CPU آزاد روی نود باعث Throttling شود. به همین دلیل، برای بسیاری از سرویس‌های حساس به تاخیر، تنظیم یک CPU Request متناسب با مصرف واقعی و حذف CPU Limit می‌تواند به کانتینر اجازه دهد از CPU آزاد نود برای مدیریت Burstهای کوتاه‌مدت (افزایش ناگهانی و موقت مصرف CPU) استفاده کند. نمونه زیر همین رویکرد را نشان می‌دهد:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:clamp(24px, 1.5rem, 36px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2d333d;color:#9eadbd">YAML</span><span role="button" tabindex="0" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>apiVersion: apps/v1
kind: Deployment
metadata:
  name: checkout-api
spec:
  replicas: 3
  template:
    spec:
      containers:
      - name: checkout-api
        image: example.com/checkout-api:1.0.0
        resources:
          requests:
            cpu: "300m"
            memory: "512Mi"
          limits:
            memory: "512Mi"</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #8DDB8C">apiVersion</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">apps/v1</span></span>
<span class="line"><span style="color: #8DDB8C">kind</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">Deployment</span></span>
<span class="line"><span style="color: #8DDB8C">metadata</span><span style="color: #ADBAC7">:</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #8DDB8C">name</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">checkout-api</span></span>
<span class="line"><span style="color: #8DDB8C">spec</span><span style="color: #ADBAC7">:</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #8DDB8C">replicas</span><span style="color: #ADBAC7">: </span><span style="color: #6CB6FF">3</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #8DDB8C">template</span><span style="color: #ADBAC7">:</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #8DDB8C">spec</span><span style="color: #ADBAC7">:</span></span>
<span class="line"><span style="color: #ADBAC7">      </span><span style="color: #8DDB8C">containers</span><span style="color: #ADBAC7">:</span></span>
<span class="line"><span style="color: #ADBAC7">      - </span><span style="color: #8DDB8C">name</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">checkout-api</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #8DDB8C">image</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">example.com/checkout-api:1.0.0</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #8DDB8C">resources</span><span style="color: #ADBAC7">:</span></span>
<span class="line"><span style="color: #ADBAC7">          </span><span style="color: #8DDB8C">requests</span><span style="color: #ADBAC7">:</span></span>
<span class="line"><span style="color: #ADBAC7">            </span><span style="color: #8DDB8C">cpu</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">&quot;300m&quot;</span></span>
<span class="line"><span style="color: #ADBAC7">            </span><span style="color: #8DDB8C">memory</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">&quot;512Mi&quot;</span></span>
<span class="line"><span style="color: #ADBAC7">          </span><span style="color: #8DDB8C">limits</span><span style="color: #ADBAC7">:</span></span>
<span class="line"><span style="color: #ADBAC7">            </span><span style="color: #8DDB8C">memory</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">&quot;512Mi&quot;</span></span></code></pre></div>



<p class="wp-block-paragraph">در این مثال، برای هر پاد CPU Request برابر 300m و Memory Request برابر 512Mi تعریف شده است. Memory Limit نیز روی 512Mi قرار دارد، اما هیچ‌گونه CPU Limit تعریف نشده است. حذف CPU Limit به سرویس اجازه می‌دهد در صورت وجود ظرفیت آزاد روی نود، Burstهای کوتاه‌مدت مصرف CPU را بدون مواجهه با یک سقف سخت مدیریت کند.</p>



<p class="wp-block-paragraph">البته این توصیه به این معنا نیست که CPU Limit همیشه باید حذف شود. در برخی Workloadهای حساس به تاخیر، حذف CPU Limit می‌تواند گزینه مناسب‌تری باشد؛ اما تنها زمانی که CPU Request باتوجه‌به رفتار واقعی برنامه تنظیم شده و الگوی مصرف آن در محیط عملیاتی بررسی شده باشد.</p>



<h2 class="wp-block-heading" id="h-برای-عیب-یابی-request-و-limit-چه-مواردی-را-بررسی-کنیم">برای عیب‌یابی Request و Limit چه مواردی را بررسی کنیم؟</h2>



<p class="wp-block-paragraph">اگر احتمال می‌دهید مشکل به تنظیمات Request یا Limit مربوط باشد، چند بررسی اولیه می‌تواند سرنخ‌های مهمی در اختیارتان قرار دهد. ابتدا مصرف فعلی CPU و Memory هر پاد را بررسی کنید:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:clamp(24px, 1.5rem, 36px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2d333d;color:#9eadbd">Bash</span><span role="button" tabindex="0" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>kubectl top pod</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #F69D50">kubectl</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">top</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">pod</span></span></code></pre></div>



<p class="wp-block-paragraph">سپس جزئیات پاد را مشاهده کنید تا مقدار Request ،Limit، کلاس QoS، رویدادها (Events) و آخرین دلیل توقف کانتینر (Last Termination Reason) را ببینید:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:clamp(24px, 1.5rem, 36px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2d333d;color:#9eadbd">Bash</span><span role="button" tabindex="0" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>kubectl describe pod &lt;pod-name></textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #F69D50">kubectl</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">describe</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">pod</span><span style="color: #ADBAC7"> </span><span style="color: #F47067">&lt;</span><span style="color: #96D0FF">pod-nam</span><span style="color: #ADBAC7">e</span><span style="color: #F47067">&gt;</span></span></code></pre></div>



<p class="wp-block-paragraph">اگر احتمال می‌دهید پاد به‌دلیل کمبود منابع روی هیچ نودی زمان‌بندی نشده است، Eventهای مربوط به Scheduling را نیز بررسی کنید:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:clamp(24px, 1.5rem, 36px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2d333d;color:#9eadbd">Bash</span><span role="button" tabindex="0" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>kubectl describe pod frontend | grep -A 9999999999 Events</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #F69D50">kubectl</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">describe</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">pod</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">frontend</span><span style="color: #ADBAC7"> </span><span style="color: #F47067">|</span><span style="color: #ADBAC7"> </span><span style="color: #F69D50">grep</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">-A</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">9999999999</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">Events</span></span></code></pre></div>



<p class="wp-block-paragraph">به این نکته توجه داشته باشید که kubectl top pod فقط مصرف فعلی CPU و Memory را نمایش می‌دهد و به‌تنهایی برای تشخیص CPU Throttling کافی نیست. برای تشخیص این وضعیت باید متریک‌های مربوط به CPU Throttling را در ابزار مانیتورینگ بررسی کنید.</p>



<div class="wp-block-dh-blog-card-database-block card database">
<div class="wp-block-group row align-items-center is-nowrap is-layout-flex wp-container-core-group-is-layout-8f761849 wp-block-group-is-layout-flex">
<div class="wp-block-group col-md"><div class="wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow">
<h3 class="wp-block-heading" id="h-کوبرنتیز-مدیریت-شده-هم-روش-راهی-مطمئن-برای-رشد-بی-وقفه">💡 کوبرنتیز مدیریت‌شده هم‌روش، راهی مطمئن برای رشد بی‌وقفه</h3>



<p class="wp-block-paragraph">راهکار کوبرنتیز مدیریت شده، بر بستر ابر اختصاصی یا به صورت On-Premises</p>



<p class="wp-block-paragraph"><br>✅ کاهش هزینه‌های عملیاتی<br>✅ احراز هویت یکپارچه با اتصال به SSO سازمانی<br>✅ قابل استقرار روی سرورهای on-premises</p>



<p class="wp-block-paragraph"></p>
</div></div>
</div>



<div class="wp-block-group col-md-auto"><div class="wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow">
<p class="btn btn--main btn--wide wp-block-paragraph"><a href="https://hamravesh.com/managed-kubernetes" type="link" id="https://hamravesh.com/managed-kubernetes" target="_blank" rel="noreferrer noopener">کوبرنتیز مدیریت‌شده</a></p>
</div></div>
</div>



<h2 class="wp-block-heading" id="h-چه-زمانی-cpu-limit-نگذاریم">چه زمانی CPU Limit نگذاریم؟</h2>



<p class="wp-block-paragraph">CPU Limit در کوبرنتیز ممکن است حتی در صورت وجود CPU آزاد روی نود، باعث CPU Throttling و افزایش تاخیر شود. تعریف‌نکردن CPU Limit می‌تواند برای موارد زیر مناسب‌تر باشد:</p>



<ul class="wp-block-list">
<li>سرویس‌های حساس به تاخیر</li>



<li>Workloadهایی که برای مدیریت Burstهای کوتاه‌مدت (افزایش ناگهانی و موقت مصرف CPU) باید بتوانند از CPU آزاد نود استفاده کنند</li>



<li>سرویس‌هایی که CPU Throttling در آن‌ها باعث افزایش تاخیر، تشکیل صف درخواست‌ها، Timeout یا کاهش Throughput می‌شود</li>
</ul>



<p class="wp-block-paragraph">در این شرایط، CPU Request باید براساس مصرف واقعی Workload تنظیم شود. CPU Limit نیز فقط زمانی تعریف شود که Workload واقعاً به یک سقف سخت برای مصرف CPU نیاز داشته باشد.</p>



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



<p class="wp-block-paragraph">با اینکه حذف CPU Limit در کوبرنتیز می‌تواند برای بسیاری از سرویس‌های حساس به تأخیر مناسب‌تر باشد، استفاده از آن در برخی سناریوها همچنان قابل دفاع است. CPU Limit باید زمانی تعریف شود که Workload واقعاً به یک سقف سخت برای مصرف CPU نیاز داشته باشد، نه صرفاً به این دلیل که به‌صورت پیش‌فرض در یک الگوی پیکربندی قرار گرفته است. استفاده از CPU Limit در شرایط زیر می‌تواند مناسب باشد:</p>



<ul class="wp-block-list">
<li>کلاسترهای Multi-tenant که چند تیم یا چند سرویس از منابع مشترک استفاده می‌کنند</li>



<li>Workloadهای غیر قابل اعتماد (Untrusted) که باید مصرف CPU آن‌ها به‌طور سخت‌گیرانه کنترل شود</li>



<li>جاب‌های پردازش دسته‌ای (Batch Jobs) که به سقف مشخصی برای مصرف CPU نیاز دارند</li>



<li>محیط‌های Benchmark و Performance Test که تکرارپذیری نتایج اهمیت دارد</li>



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



<li>سناریوهایی که Strict Cost Control در آن‌ها اهمیت دارد و مصرف CPU باید در یک بودجه مشخص باقی بماند</li>



<li>محیط‌هایی که سیاست‌های پلتفرم، تعریف CPU Limit را الزامی می‌کنند</li>
</ul>



<p class="wp-block-paragraph">در این سناریوها، CPU Limit یک سقف مشخص برای مصرف CPU ایجاد می‌کند؛ هرچند ممکن است امکان استفاده Workload از CPU آزاد نود را در زمان Burst محدود کند. CPU Limit نیز باید فقط زمانی تعریف شود که Workload واقعاً به یک سقف سخت برای مصرف CPU نیاز داشته باشد.</p>



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



<p class="wp-block-paragraph">CPU Limit در کوبرنتیز همیشه به بهبود عملکرد و پایداری سرویس منجر نمی‌شود و حتی ممکن است با وجود CPU آزاد روی نود، باعث Throttling و افزایش تأخیر شود. بنابراین، Request و Limit را براساس رفتار واقعی هر Workload تنظیم کنید و CPU Limit را فقط زمانی به کار ببرید که به سقف سخت مصرف نیاز دارید. بررسی مصرف منابع و متریک‌های CPU Throttling نیز کمک می‌کند این تصمیم براساس داده‌های واقعی گرفته شود، نه تنظیمات پیش‌فرض.<br><br></p>
<p>The post <a href="https://hamravesh.com/blog/how-to-manage-kubernetes-cpu-limits/">راهنمای عملی تنظیم CPU Limit در کوبرنتیز؛ از Request تا Throttling</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://hamravesh.com/blog/how-to-manage-kubernetes-cpu-limits/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>آبجکت استورج چیست؟ آشنایی با مفاهیم متادیتا، باکت و S3</title>
		<link>https://hamravesh.com/blog/what-is-object-storage/</link>
					<comments>https://hamravesh.com/blog/what-is-object-storage/#respond</comments>
		
		<dc:creator><![CDATA[هم‌روش]]></dc:creator>
		<pubDate>Wed, 08 Jul 2026 12:30:00 +0000</pubDate>
				<category><![CDATA[مقالات]]></category>
		<category><![CDATA[فضای ابری]]></category>
		<guid isPermaLink="false">https://hamravesh.com/blog/?p=5369</guid>

					<description><![CDATA[<p>آبجکت استوریج (Object Storage) یا ذخیره‌سازی آبجکت، یک معماری ذخیره‌سازی داده است که برای ذخیره‌سازی، بایگانی، پشتیبان‌گیری و مدیریت حجم بالای داده‌های بدون‌ساختار (Unstructured Data) طراحی شده است.</p>
<p>The post <a href="https://hamravesh.com/blog/what-is-object-storage/">آبجکت استورج چیست؟ آشنایی با مفاهیم متادیتا، باکت و S3</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">تصاویر، ویدئوها، فایل‌های پشتیبان، لاگ‌ها و داده‌های تولیدشده توسط سرویس‌های ابری، معمولاً ساختار ثابتی ندارند و حجم آن‌ها به‌سرعت رشد می‌کند. مدیریت این نوع داده‌ها با روش‌های سنتی ذخیره‌سازی همیشه ساده یا مقرون‌به‌صرفه نیست. آبجکت استورج (Object Storage) معماری‌ای است که برای ذخیره‌سازی مقیاس‌پذیر داده‌های بدون‌ساختار طراحی شده است. در این مطلب بررسی می‌کنیم که آبجکت استورج چیست، چگونه کار می‌کند، چه تفاوتی با فایل استورج و بلاک استورج دارد و مفاهیمی مانند باکت، متادیتا و S3 چه نقشی در آن دارند.</p>



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



<p class="wp-block-paragraph">آبجکت استورج (Object Storage) یا ذخیره‌سازی آبجکت، یک معماری ذخیره‌سازی داده است که برای ذخیره‌سازی، بایگانی، پشتیبان‌گیری و مدیریت حجم بالای داده‌های بدون‌ساختار (Unstructured Data) طراحی شده است.</p>



<p class="wp-block-paragraph">داده‌های بدون‌ساختار شامل اطلاعاتی مانند تصاویر، ویدئوها، فایل‌های صوتی، ایمیل‌ها، صفحات وب و داده‌های حسگرها هستند که برخلاف داده‌های موجود در پایگاه‌های داده رابطه‌ای، ساختار ثابتی ندارند. این نوع داده‌ها بخش بزرگی از اطلاعات تولیدشده توسط کاربران و سازمان‌ها را تشکیل می‌دهند.&nbsp;</p>



<p class="wp-block-paragraph">در فضای ذخیره‌سازی آبجکت، هر فایل به‌عنوان یک آبجکت مستقل نگهداری می‌شود و هر آبجکت از سه بخش اصلی زیر تشکیل شده است:</p>



<ul class="wp-block-list">
<li><strong>داده (Data): </strong>محتوای اصلی فایل، مانند تصویر، ویدئو، سند یا هر نوع داده دیگر.</li>



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



<li><strong>کلید آبجکت (Object Key):</strong> نام یا شناسه‌ای است که برای دسترسی به آبجکت استفاده می‌شود. در سرویس‌هایی مانند S3، هر آبجکت معمولاً با ترکیب نام باکت و Object Key شناسایی می‌شود.</li>
</ul>



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



<p class="wp-block-paragraph">در آبجکت استورج، داده‌ها برخلاف فایل استورج در ساختار پوشه‌ها و زیرپوشه‌های تو در تو ذخیره نمی‌شوند. در این معماری، آبجکت‌ها در ساختاری مسطح نگهداری می‌شوند و در سرویس‌های رایجی مانند S3، درون مخزن‌های منطقی به نام باکت قرار می‌گیرند.</p>



<p class="wp-block-paragraph">برای درک بهتر این تفاوت، تصور کنید که در یک سیستم فایل سنتی، برای پیدا کردن یک تصویر باید مسیر مشخصی مانند Photos &gt; Travel &gt; Summer &gt; photo.jpg را دنبال کنید. اما در آبجکت استورج، برنامه با استفاده از نام باکت و Object Key به آبجکت دسترسی پیدا می‌کند. ممکن است کلید آبجکت ظاهری شبیه مسیر پوشه‌ای داشته باشد، اما این ساختار یک دایرکتوری واقعی نیست و معمولاً یک قرارداد نام‌گذاری است.</p>



<p class="wp-block-paragraph">معمولا دسترسی به آبجکت‌ها از طریق APIهای RESTful انجام می‌شود که بر پایه پروتکل HTTP کار می‌کنند. رایج‌ترین عملیات در این APIها عبارت‌اند از:</p>



<ul class="wp-block-list">
<li>PUT برای بارگذاری و ذخیره یک آبجکت</li>



<li>GET برای بازیابی آبجکت</li>



<li>DELETE برای حذف آبجکت</li>
</ul>



<h2 class="wp-block-heading" id="h-باکت-در-آبجکت-استورج-چیست">باکت در آبجکت استورج چیست؟</h2>



<p class="wp-block-paragraph">باکت (Bucket) یک مخزن منطقی برای نگهداری آبجکت‌ها در سیستم آبجکت استورج است. هر آبجکت درون یک باکت ذخیره می‌شود و باکت، محیطی را فراهم می‌کند که آبجکت‌های مرتبط با یک پروژه، سرویس یا مجموعه داده در کنار یکدیگر مدیریت شوند.</p>



<p class="wp-block-paragraph">باکت برخلاف پوشه‌های فایل استورج، ساختار سلسله‌مراتبی واقعی ندارد. در سرویس‌هایی مانند Amazon S3، آبجکت‌ها درون باکت در ساختاری مسطح نگهداری می‌شوند، اما می‌توان با استفاده از پیشوندها (Prefix) در نام آبجکت‌ها، ظاهری شبیه پوشه ایجاد کرد؛ برای مثال logs/2026/app.log. این ساختار در عمل یک روش نام‌گذاری و سازمان‌دهی منطقی است، نه یک دایرکتوری واقعی</p>



<p class="wp-block-paragraph">نقش اصلی باکت، ایجاد یک لایه منطقی برای سازمان‌دهی آبجکت‌ها است. برای مثال، یک سازمان می‌تواند برای بخش‌های مختلف یا انواع داده‌های خود باکت‌های جداگانه ایجاد کند تا مدیریت و تفکیک اطلاعات ساده‌تر شود.</p>



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



<p class="wp-block-paragraph">متادیتا (Metadata) اطلاعاتی است که درباره هر آبجکت ذخیره می‌شود و به توصیف، شناسایی و مدیریت آن کمک می‌کند. این اطلاعات می‌تواند شامل مواردی مانند نام فایل، نوع محتوا، اندازه، تاریخ ایجاد یا سایر ویژگی‌های مرتبط با داده شود. برای مثال، اگر آبجکت یک تصویر باشد، می‌توان اطلاعاتی مانند نوع فایل، زمان ثبت تصویر، نام پروژه یا موقعیت مکانی مرتبط با تصویر را به‌عنوان متادیتا در کنار آن نگهداری کرد.</p>



<p class="wp-block-paragraph">برخلاف بسیاری از روش‌های ذخیره‌سازی، متادیتا در آبجکت استورج تنها به اطلاعات پایه محدود نیست و قابلیت سفارشی‌سازی بالایی دارد. کاربران و برنامه‌ها می‌توانند متناسب با نیاز خود اطلاعات بیشتری به هر آبجکت اضافه کنند.</p>



<p class="wp-block-paragraph">متادیتای غنی به سازمان‌دهی و مدیریت بهتر آبجکت‌ها کمک می‌کند. البته جست‌وجو و فیلتر پیشرفته روی متادیتا معمولاً به قابلیت‌های سرویس یا ابزارهای جانبی ایندکس‌گذاری وابسته است.</p>



<h2 class="wp-block-heading" id="h-تفاوت-آبجکت-استورج-با-فایل-استورج-و-بلاک-استورج">تفاوت آبجکت استورج با فایل استورج و بلاک استورج</h2>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="616" src="https://hamravesh.com/blog/wp-content/uploads/2026/07/hamravesh-what-is-object-storage03-1024x616.webp" alt="تفاوت آبجکت استورج و بلاک استورج و فایل استورج" class="wp-image-5410" srcset="https://hamravesh.com/blog/wp-content/uploads/2026/07/hamravesh-what-is-object-storage03-1024x616.webp 1024w, https://hamravesh.com/blog/wp-content/uploads/2026/07/hamravesh-what-is-object-storage03-300x181.webp 300w, https://hamravesh.com/blog/wp-content/uploads/2026/07/hamravesh-what-is-object-storage03-768x462.webp 768w, https://hamravesh.com/blog/wp-content/uploads/2026/07/hamravesh-what-is-object-storage03-120x72.webp 120w, https://hamravesh.com/blog/wp-content/uploads/2026/07/hamravesh-what-is-object-storage03.webp 1201w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">برای انتخاب معماری مناسب ذخیره‌سازی، باید تفاوت آبجکت استورج و فایل استورج را بدانید. همچنین آشنایی با تفاوت آبجکت استورج و بلاک استورج کمک می‌کند که بتوانید متناسب با نوع داده و بار کاری، گزینه مناسب را انتخاب کنید.</p>



<p class="wp-block-paragraph"> در جدول زیر می‌توانید تفاوت این سه معماری را از نظر ساختار، متادیتا، روش دسترسی و کاربرد مشاهده کنید.</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td><strong>ویژگی</strong></td><td><strong>فایل استورج  (File Storage)</strong></td><td><strong>بلاک استورج (Block Storage)</strong></td><td><strong>آبجکت استورج (Object Storage)</strong></td></tr><tr><td><strong>ساختار ذخیره‌سازی</strong></td><td>سلسله‌مراتبی (پوشه و فایل)</td><td>بلوک‌های مستقل</td><td>ساختار مسطح (Flat)</td></tr><tr><td><strong>واحد ذخیره‌سازی</strong></td><td>فایل</td><td>بلوک</td><td>آبجکت</td></tr><tr><td><strong>متادیتا</strong></td><td>محدود</td><td>بسیار محدود</td><td>غنی و قابل سفارشی‌سازی</td></tr><tr><td><strong>روش دسترسی</strong></td><td>مسیر فایل (Path)</td><td>از طریق volume/disk در سطح سیستم‌عامل یا زیرساخت</td><td>APIهای HTTP و شناسه آبجکت</td></tr><tr><td><strong>مقیاس‌پذیری</strong></td><td>مناسب، اما در مقیاس‌های بسیار بزرگ با پیچیدگی بیشتر همراه است</td><td>وابسته به زیرساخت و معمولاً مناسب workloadهای عملکردمحور</td><td>بسیار مناسب برای مقیاس افقی و حجم‌های بزرگ داده</td></tr><tr><td><strong>مناسب برای</strong></td><td>اشتراک فایل و استفاده روزمره</td><td>پایگاه‌های داده و ماشین‌های مجازی</td><td>داده‌های بدون‌ساختار، آرشیو و فضای ابری</td></tr><tr><td><strong>محدودیت اصلی</strong></td><td>مدیریت پیچیده‌تر در مقیاس بسیار بزرگ</td><td>مقیاس‌پذیری و مدیریت متادیتای محدودتر نسبت به آبجکت استورج</td><td>مناسب نبودن برای ویرایش‌های کوچک و مکرر</td></tr></tbody></table></figure>



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



<p class="wp-block-paragraph">بررسی مزایای زیر به‌خوبی نشان می‌دهد که دلیل محبوبیت آبجکت استورج چیست:</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> آبجکت استورج از ابتدا برای محیط‌های ابری طراحی شده است و به همین دلیل یکی از رایج‌ترین گزینه‌ها برای پیاده‌سازی فضای ذخیره‌سازی ابری، سرویس‌های Cloud Native و ذخیره‌سازی مقیاس‌پذیر به‌حساب می‌آید.</li>
</ul>



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



<p class="wp-block-paragraph">برای انتخاب آگاهانه، تنها شناخت مزایا کافی نیست و باید بدانید چالش‌ها و محدودیت‌های Object Storage چیست. مهم‌ترین چالش‌های این روش ذخیره‌سازی عبارت‌اند از:</p>



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



<li><strong>هزینه خروج داده (Data Egress):</strong> برخی ارائه‌دهندگان سرویس‌های آبجکت استورج برای انتقال داده از فضای ذخیره‌سازی به خارج از سرویس هزینه دریافت می‌کنند. اگر داده‌ها به‌طور مداوم بازیابی شوند، این هزینه می‌تواند زیاد باشد.</li>



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



<h2 class="wp-block-heading" id="h-s3-چیست">S3 چیست؟</h2>



<p class="wp-block-paragraph">سرویس S3 یا Amazon S3 (مخفف Simple Storage Service) سرویس آبجکت استورج آمازون است که از سال ۲۰۰۶ ارائه شد و در حال حاضر به یکی از شناخته‌شده‌ترین نمونه‌های پیاده‌سازی Object Storage تبدیل شده است.&nbsp;</p>



<p class="wp-block-paragraph">با گذشت زمان، APIهای S3 در عمل به یکی از استانداردهای رایج صنعت برای کار با سرویس‌های آبجکت استورج تبدیل شدند. به همین دلیل، بسیاری از ارائه‌دهندگان فضای ذخیره‌سازی ابری و حتی راهکارهای متن‌باز، از API سازگار با S3 پشتیبانی می‌کنند. این سازگاری باعث می‌شود ابزارها، SDKها و برنامه‌هایی که برای Amazon S3 طراحی شده‌اند، با تغییرات کم یا بدون تغییر جدی بتوانند با سرویس‌های آبجکت استورج دیگر نیز کار کنند.</p>



<p class="wp-block-paragraph">برای مثال، عملیاتی مانند ساخت باکت، بارگذاری آبجکت، دریافت آبجکت و حذف آبجکت در بسیاری از سرویس‌های S3-compatible با همان منطق کلی S3 انجام می‌شود. این سرویس‌ها معمولاً با ابزارهایی مانند AWS CLI، ابزارهای خط فرمان مانند s3cmd و rclone و کلاینت‌هایی مانند MinIO Client قابل استفاده‌اند.</p>



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



<p class="wp-block-paragraph">امنیت در آبجکت استورج معمولاً با ترکیبی از کنترل دسترسی، رمزنگاری، ثبت لاگ، نسخه‌بندی و قابلیت‌های محافظت در برابر حذف یا تغییر ناخواسته داده‌ها پیاده‌سازی می‌شود. از آنجا که آبجکت استورج در بسیاری از سناریوها برای نگهداری داده‌های حساس، بکاپ‌ها، آرشیوها و فایل‌های سازمانی استفاده می‌شود، تنظیم درست این قابلیت‌ها اهمیت زیادی دارد.</p>



<p class="wp-block-paragraph">یکی از مهم‌ترین لایه‌های امنیتی، کنترل دسترسی است. در سرویس‌های آبجکت استورج می‌توان مشخص کرد چه کاربر، سرویس یا برنامه‌ای اجازه مشاهده، بارگذاری، حذف یا تغییر آبجکت‌ها را داشته باشد. این کنترل معمولاً از طریق سیاست‌های دسترسی در سطح باکت، سطح آبجکت یا حساب کاربری انجام می‌شود.</p>



<p class="wp-block-paragraph">رمزنگاری نیز نقش مهمی در حفاظت از داده‌ها دارد. بسیاری از سرویس‌های آبجکت استورج از رمزنگاری داده‌ها در زمان انتقال (Encryption in Transit) و رمزنگاری داده‌ها در حالت ذخیره‌شده (Encryption at Rest)، پشتیبانی می‌کنند. Encryption in Transit معمولاً با استفاده از پروتکل‌هایی مانند HTTPS/TLS انجام می‌شود تا داده هنگام انتقال بین کاربر، برنامه و سرویس ذخیره‌سازی محافظت شود. Encryption at Rest نیز برای محافظت از داده‌هایی است که روی زیرساخت ذخیره‌سازی نگهداری می‌شوند.</p>



<p class="wp-block-paragraph">قابلیت Versioning یا نسخه‌بندی یکی دیگر از امکانات مهم در بسیاری از سرویس‌های آبجکت استورج است. با فعال بودن Versioning، اگر یک آبجکت تغییر کند یا حتی حذف شود، نسخه‌های قبلی آن همچنان قابل نگهداری و بازیابی هستند. برای مثال، اگر فایلی به‌اشتباه با نسخه جدید جایگزین شود، می‌توان نسخه قبلی را بازیابی کرد. این قابلیت برای کاهش ریسک حذف ناخواسته، خطای انسانی، خراب شدن فایل‌ها و برخی سناریوهای بازیابی پس از حملات باج‌افزاری مفید است. با این حال، Versioning جایگزین کامل استراتژی پشتیبان‌گیری نیست و باید در کنار سیاست‌های نگهداری، کنترل دسترسی و در صورت نیاز replication استفاده شود.</p>



<p class="wp-block-paragraph">در برخی سرویس‌ها، قابلیت‌هایی مانند Object Lock برای پیاده‌سازی مدل WORM (مخفف Write Once, Read Many) وجود دارد. در این مدل، آبجکت پس از ذخیره شدن تا مدت مشخصی قابل حذف یا تغییر نیست. این قابلیت برای نگهداری داده‌های حساس، آرشیوهای قانونی، لاگ‌های مهم، فایل‌های پشتیبان و داده‌هایی که باید در برابر تغییر یا حذف محافظت شوند کاربرد دارد.</p>



<p class="wp-block-paragraph">البته سطح پشتیبانی از این قابلیت‌ها در همه سرویس‌های آبجکت استورج یکسان نیست. بنابراین هنگام انتخاب سرویس، باید بررسی شود که امکاناتی مانند کنترل دسترسی، Encryption at Rest ،Encryption in Transit ،Versioning ،Object Lock و WORM تا چه سطحی پشتیبانی می‌شوند.</p>



<h2 class="wp-block-heading" id="h-مدیریت-چرخه-عمر-داده-ها-در-آبجکت-استورج">مدیریت چرخه عمر داده‌ها در آبجکت استورج</h2>



<p class="wp-block-paragraph">یکی از قابلیت‌های مهم بسیاری از سرویس‌های آبجکت استورج، تعریف سیاست‌های چرخه عمر داده یا Lifecycle Policy است. با استفاده از این سیاست‌ها می‌توان مشخص کرد که آبجکت‌ها پس از مدت مشخصی به کلاس ذخیره‌سازی ارزان‌تر منتقل شوند، برای مدت طولانی آرشیو شوند یا در زمان تعیین‌شده به‌صورت خودکار حذف شوند.</p>



<p class="wp-block-paragraph">این قابلیت برای سازمان‌هایی که با حجم زیادی از داده‌های آرشیوی، لاگ‌ها، فایل‌های پشتیبان یا داده‌های کمتر استفاده‌شده سروکار دارند، اهمیت زیادی دارد. مدیریت چرخه عمر داده‌ها می‌تواند به کاهش هزینه ذخیره‌سازی و کنترل بهتر رشد داده‌ها کمک کند.</p>



<p class="wp-block-paragraph">البته مانند سایر قابلیت‌های آبجکت استورج، نحوه پیاده‌سازی Lifecycle Policy به سرویس‌دهنده و امکانات زیرساخت ذخیره‌سازی بستگی دارد.</p>



<h2 class="wp-block-heading" id="h-کاربردهای-آبجکت-استورج">کاربردهای آبجکت استورج</h2>



<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/07/hamravesh-what-is-object-storage01-1024x668.webp" alt="انواع کاربردهای آبجکت استورج" class="wp-image-5411" srcset="https://hamravesh.com/blog/wp-content/uploads/2026/07/hamravesh-what-is-object-storage01-1024x668.webp 1024w, https://hamravesh.com/blog/wp-content/uploads/2026/07/hamravesh-what-is-object-storage01-300x196.webp 300w, https://hamravesh.com/blog/wp-content/uploads/2026/07/hamravesh-what-is-object-storage01-768x501.webp 768w, https://hamravesh.com/blog/wp-content/uploads/2026/07/hamravesh-what-is-object-storage01-120x78.webp 120w, https://hamravesh.com/blog/wp-content/uploads/2026/07/hamravesh-what-is-object-storage01.webp 1201w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">آبجکت استورج به دلیل مزایا و قابلیت‌های خاصی که دارد، در سناریوهای مختلفی مورد استفاده قرار می‌گیرد. مهم‌ترین کاربردهای آن عبارت‌اند از:</p>



<ul class="wp-block-list">
<li><strong>پشتیبان‌گیری و بازیابی از فاجعه (Backup &amp; Disaster Recovery): </strong>نگهداری نسخه‌های پشتیبان و بازیابی اطلاعات در صورت خرابی سیستم یا از دست رفتن داده‌ها در فرایند <a href="https://hamravesh.com/blog/what-is-disaster-recovery/" type="link" id="https://hamravesh.com/blog/what-is-disaster-recovery/" target="_blank" rel="noreferrer noopener">بازیابی از فاجعه</a></li>



<li><strong>آرشیو داده (Data Archiving): </strong>ذخیره‌سازی بلندمدت داده‌هایی که به‌ندرت استفاده می‌شوند، اما نباید حذف شوند</li>



<li><strong>دریاچه داده (Data Lake):</strong> ایجاد مخزنی متمرکز برای نگهداری حجم بسیار زیادی از داده‌های ساخت‌یافته و بدون‌ساختار جهت تحلیل و پردازش</li>



<li><strong>برنامه‌های ابری (Cloud-Native Applications):</strong> ذخیره فایل‌ها و داده‌های موردنیاز برنامه‌های مبتنی بر فضای ابری، کانتینرها و معماری‌های Serverless</li>



<li><strong>هوش مصنوعی و یادگیری ماشین (AI / ML): </strong>نگهداری مجموعه‌داده‌های بزرگ برای آموزش مدل‌ها و ذخیره نتایج پردازش</li>



<li><strong>فایل‌های رسانه‌ای (Media):</strong> ذخیره تصاویر، ویدئوها، فایل‌های صوتی و سایر محتوای حجیم چندرسانه‌ای</li>



<li><strong>اینترنت اشیا (IoT):</strong> جمع‌آوری و ذخیره حجم بالای داده‌های تولیدشده توسط حسگرها و دستگاه‌های متصل برای تحلیل‌های بعدی</li>
</ul>



<div class="wp-block-dh-blog-card-database-block card database">
<div class="wp-block-group row align-items-center is-nowrap is-layout-flex wp-container-core-group-is-layout-8f761849 wp-block-group-is-layout-flex">
<div class="wp-block-group col-md"><div class="wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow">
<h3 class="wp-block-heading" id="h-آبجکت-استورج-هم-روش">💡 آبجکت استورج هم‌روش</h3>



<p class="wp-block-paragraph">فضای ذخیره‌سازی ابری پایدار و مطمئن</p>



<p class="wp-block-paragraph"><br>✅ سازگاری کامل با ابزارهای مبتنی بر S3<br>✅ امنیت و پایداری در سطح سازمانی<br>✅ کنترل سطح دسترسی کاربردی و پیشرفته</p>



<p class="wp-block-paragraph"></p>
</div></div>
</div>



<div class="wp-block-group col-md-auto"><div class="wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow">
<p class="btn btn--main btn--wide wp-block-paragraph"><a type="link" href="https://hamravesh.com/object-storage" id="https://hamravesh.com/managed-kubernetes" target="_blank" rel="noreferrer noopener">خرید آبجکت استورج</a><a type="link" href="https://hamravesh.com/managed-kubernetes" id="https://hamravesh.com/managed-kubernetes" target="_blank" rel="noreferrer noopener"></a></p>
</div></div>
</div>



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



<p class="wp-block-paragraph">آبجکت استورج معماری‌ای برای ذخیره‌سازی حجم بالای داده‌های بدون‌ساختار است که در آن هر فایل یا داده به‌صورت یک آبجکت، همراه با متادیتا و کلید شناسایی، درون باکت‌ها نگهداری می‌شود. ساختار مسطح، مقیاس‌پذیری بالا، دسترسی از طریق API و سازگاری با مدل‌های ابری باعث شده این روش برای سناریوهایی مانند بکاپ، آرشیو، ذخیره فایل‌های رسانه‌ای، لاگ‌ها، داده‌های IoT، دیتالِیک و پروژه‌های هوش مصنوعی گزینه‌ای کاربردی باشد.</p>



<p class="wp-block-paragraph">با این حال، آبجکت استورج برای همه نیازها مناسب نیست. در بارهای کاری با تغییرات کوچک و مکرر، نیاز به latency پایین یا عملکرد تراکنشی، معمولاً بلاک استورج انتخاب بهتری است. بنابراین انتخاب میان آبجکت استورج، فایل استورج و بلاک استورج باید براساس نوع داده، الگوی دسترسی، سطح امنیت، هزینه و نیازهای فنی هر پروژه انجام شود.</p>



<p class="wp-block-paragraph"></p>
<p>The post <a href="https://hamravesh.com/blog/what-is-object-storage/">آبجکت استورج چیست؟ آشنایی با مفاهیم متادیتا، باکت و S3</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://hamravesh.com/blog/what-is-object-storage/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>گزارش تغییرات سرویس‌های هم‌روش؛ بهار ۱۴۰۵</title>
		<link>https://hamravesh.com/blog/changelog-spring-1405/</link>
					<comments>https://hamravesh.com/blog/changelog-spring-1405/#respond</comments>
		
		<dc:creator><![CDATA[هم‌روش]]></dc:creator>
		<pubDate>Wed, 08 Jul 2026 08:02:00 +0000</pubDate>
				<category><![CDATA[اخبار هم‌روش]]></category>
		<guid isPermaLink="false">https://hamravesh.com/blog/?p=5388</guid>

					<description><![CDATA[<p>در بهار ۱۴۰۵، بخشی از تمرکز تیم هم‌روش روی بهبود تجربه کاربری کنسول، افزایش مشاهده‌پذیری سرویس‌ها، ارتقای امنیت و ساده‌تر کردن مدیریت اپلیکیشن‌ها بود. در این گزارش، مهم‌ترین تغییرات سرویس‌ها در فصلی که گذشت را مرور کرده‌ایم. کنسول هم‌روش در این فصل کنسول هم‌روش با تغییرات و بهبودهایی از جمله موارد زیر همراه بود. صفحه [&#8230;]</p>
<p>The post <a href="https://hamravesh.com/blog/changelog-spring-1405/">گزارش تغییرات سرویس‌های هم‌روش؛ بهار ۱۴۰۵</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">در بهار ۱۴۰۵، بخشی از تمرکز تیم هم‌روش روی بهبود تجربه کاربری کنسول، افزایش مشاهده‌پذیری سرویس‌ها، ارتقای امنیت و ساده‌تر کردن مدیریت اپلیکیشن‌ها بود. در این گزارش، مهم‌ترین <a href="https://docs.hamravesh.com/changelog" type="link" id="https://docs.hamravesh.com/changelog" target="_blank" rel="noreferrer noopener">تغییرات سرویس‌ها</a> در فصلی که گذشت را مرور کرده‌ایم.</p>



<h2 class="wp-block-heading" id="h-کنسول-هم-روش">کنسول هم‌روش</h2>



<p class="wp-block-paragraph">در این فصل کنسول هم‌روش با تغییرات و بهبودهایی از جمله موارد زیر همراه بود.</p>



<h3 class="wp-block-heading" id="h-صفحه-جدید-ترمینال-اپلیکیشن-ها">صفحه جدید ترمینال اپلیکیشن‌ها</h3>



<p class="wp-block-paragraph">امکان باز کردن ترمینال اپلیکیشن‌ها در پنجره جدید مرورگر به کنسول هم‌روش اضافه شد و به این ترتیب مشکلاتی که برخی کاربران حین کار با ترمینال در پنجره کنسول با آن مواجه می‌شدند، رفع شد. با این قابلیت، می‌توانید ترمینال اپلیکیشن خود را مستقل از سایر بخش‌های کنسول باز کنید و اندازه پنجره را متناسب با نیاز خود تغییر دهید. این تغییر به‌خصوص برای کاربرانی که به‌صورت مداوم با ترمینال اپلیکیشن‌ها کار می‌کنند، تجربه کاربری بهتری فراهم می‌کند.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="664" src="https://hamravesh.com/blog/wp-content/uploads/2026/07/terminal-in-external-window-1024x664.jpg" alt="امکان باز کردن ترمینال اپلیکیشن‌های دارکوب در پنجره مستقل" class="wp-image-5389" srcset="https://hamravesh.com/blog/wp-content/uploads/2026/07/terminal-in-external-window-1024x664.jpg 1024w, https://hamravesh.com/blog/wp-content/uploads/2026/07/terminal-in-external-window-300x194.jpg 300w, https://hamravesh.com/blog/wp-content/uploads/2026/07/terminal-in-external-window-768x498.jpg 768w, https://hamravesh.com/blog/wp-content/uploads/2026/07/terminal-in-external-window-1536x996.jpg 1536w, https://hamravesh.com/blog/wp-content/uploads/2026/07/terminal-in-external-window-2048x1327.jpg 2048w, https://hamravesh.com/blog/wp-content/uploads/2026/07/terminal-in-external-window-120x78.jpg 120w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">در حال حاضر، این قابلیت برای اپ‌های دارکوب فعال شده است و در ادامه برای اپلیکیشن‌های بازارچه و دیتابیس نیز فعال خواهد شد.</p>



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



<p class="wp-block-paragraph">قابلیت جدید دیگر در کنسول، انتقال مالکیت سازمان به یکی دیگر از اعضای سازمان بود. برای افزایش امنیت این فرایند، مالک فعلی سازمان پیش از تکمیل انتقال باید هویت خود را از طریق کد یک‌بارمصرف احراز هویت دو مرحله‌ای (2FA)، تأیید کند.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="523" src="https://hamravesh.com/blog/wp-content/uploads/2026/07/org-transfer-ownership-1024x523.png" alt="قابلیت انتقال مالکیت سازمان به دیگر اعضا در کنسول هم‌روش" class="wp-image-5392" srcset="https://hamravesh.com/blog/wp-content/uploads/2026/07/org-transfer-ownership-1024x523.png 1024w, https://hamravesh.com/blog/wp-content/uploads/2026/07/org-transfer-ownership-300x153.png 300w, https://hamravesh.com/blog/wp-content/uploads/2026/07/org-transfer-ownership-768x392.png 768w, https://hamravesh.com/blog/wp-content/uploads/2026/07/org-transfer-ownership-1536x784.png 1536w, https://hamravesh.com/blog/wp-content/uploads/2026/07/org-transfer-ownership-2048x1045.png 2048w, https://hamravesh.com/blog/wp-content/uploads/2026/07/org-transfer-ownership-120x61.png 120w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">در سازمان‌های رسمی، پس از تأیید مالک فعلی، انتقال مالکیت، نیازمند بررسی و تأیید تیم هم‌روش نیز هست. این مرحله برای جلوگیری از انتقال‌های ناخواسته یا غیرمجاز در سازمان‌های حقوقی در نظر گرفته شده است.</p>



<h3 class="wp-block-heading" id="h-بهبود-زیرساخت-صفحه-وضعیت-سرویس-ها">بهبود زیرساخت صفحه وضعیت سرویس‌ها</h3>



<p class="wp-block-paragraph">صفحه وضعیت سرویس‌های هم‌روش به زیرساخت جدیدی منتقل شد. این تغییر با هدف افزایش دسترس‌پذیری و کاهش وابستگی صفحه وضعیت به سایر اجزای زیرساخت انجام شد تا هنگام رخدادها، کاربران همچنان بتوانند وضعیت سرویس‌ها و اطلاعیه‌های مرتبط را پیگیری کنند. در نتیجه این انتقال، آدرس صفحه وضعیت از status.hamravesh.com به <a href="https://hamraveshstatus.com" type="link" id="https://hamraveshstatus.com" target="_blank" rel="noreferrer noopener">hamraveshstatus.com</a> تغییر کرد.</p>



<p class="wp-block-paragraph">از این پس برای مشاهده وضعیت سرویس‌های هم‌روش، اطلاع از اختلال‌ها، عملیات نگهداری و رخدادهای زیرساختی، باید از <a href="https://hamraveshstatus.com" type="link" id="https://hamraveshstatus.com" target="_blank" rel="noreferrer noopener">آدرس جدید</a> استفاده کنید.</p>



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



<p class="wp-block-paragraph">سرویس <a href="https://hamravesh.com/object-storage" type="link" id="https://hamravesh.com/object-storage" target="_blank" rel="noreferrer noopener">آبجکت استورج هم‌روش</a> پس از طی دوره بتا و اعمال بهبودهای لازم، اکنون به‌صورت پایدارتر و آماده استفاده در محیط‌های عملیاتی در دسترس کاربران قرار گرفته است. این سرویس، یک فضای ذخیره‌سازی ابری سازگار با S3 است که برای نگهداری فایل‌ها، تصاویر، آرشیوها، نسخه‌های پشتیبان، فایل‌های اپلیکیشن و داده‌های حجیم کاربرد دارد. آبجکت استورج هم‌روش از قابلیت‌هایی شامل امکان اتصال به دامنه اختصاصی با گواهی SSL، مدیریت کلیدها با سطوح دسترسی متفاوت برای باکت‌ها و ساخت لینک موقت زمان‌دار بهره می‌برد. </p>



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



<p class="wp-block-paragraph">در پلتفرم ابری دارکوب در این فصل تغییراتی شامل موارد زیر اعمال شد.</p>



<h3 class="wp-block-heading" id="h-امکان-دریافت-گواهی-ssl-از-طریق-dns-challenge">امکان دریافت گواهی SSL از طریق DNS Challenge</h3>



<p class="wp-block-paragraph">در گذشته، دریافت گواهی SSL معمولاً از طریق HTTP Challenge انجام می‌شد و در نتیجه مرجع صدور گواهی باید می‌توانست از طریق HTTP به دامنه متصل شود و مالکیت دامنه را اعتبارسنجی کند. اما در دوره‌هایی که دسترسی اینترنت بین‌الملل با اختلال یا محدودیت مواجه بود، این راهکار معمولا با مشکل مواجه می‌شد. با اضافه شدن DNS Challenge، می‌توانید مالکیت دامنه را از طریق رکوردهای DNS تأیید کنید. در این راهکار، اعتبارسنجی مالکیت دامنه از طریق رکوردهای DNS انجام می‌شود و نیازی نیست مرجع صدور گواهی، از مسیر HTTP به اپلیکیشن دسترسی داشته باشد.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="168" src="https://hamravesh.com/blog/wp-content/uploads/2026/07/darkube-dns-ssl-cert-1024x168.jpg" alt="اضافه شدن قابلیت دریافت گواهی SSL از طریق DNS Challenge" class="wp-image-5390" srcset="https://hamravesh.com/blog/wp-content/uploads/2026/07/darkube-dns-ssl-cert-1024x168.jpg 1024w, https://hamravesh.com/blog/wp-content/uploads/2026/07/darkube-dns-ssl-cert-300x49.jpg 300w, https://hamravesh.com/blog/wp-content/uploads/2026/07/darkube-dns-ssl-cert-768x126.jpg 768w, https://hamravesh.com/blog/wp-content/uploads/2026/07/darkube-dns-ssl-cert-120x20.jpg 120w, https://hamravesh.com/blog/wp-content/uploads/2026/07/darkube-dns-ssl-cert.jpg 1182w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">این قابلیت به‌ویژه در شرایط اختلال در ارتباطات بین‌الملل، محدودیت‌های شبکه یا سناریوهایی که امکان پاسخ‌گویی دامنه از مسیر HTTP وجود ندارد، انعطاف بیشتری برای فعال‌سازی SSL فراهم می‌کند.</p>



<h3 class="wp-block-heading" id="h-نمایش-تاریخ-انقضای-گواهی-دامنه-شخصی">نمایش تاریخ انقضای گواهی دامنه شخصی</h3>



<p class="wp-block-paragraph">نمایش تاریخ انقضای گواهی SSL دامنه در بخش دامنه‌های شخصی اپلیکیشن‌ها اضافه شد. این قابلیت برای دامنه‌هایی کاربرد دارد که گواهی wildcard آن‌ها توسط کاربر در دارکوب بارگذاری شده است. با نمایش تاریخ انقضا، می‌توانید زمان تمدید گواهی‌های خود را بهتر مدیریت کنید و از منقضی شدن ناخواسته گواهی جلوگیری کنید.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="905" height="148" src="https://hamravesh.com/blog/wp-content/uploads/2026/07/cert-expiry-datetime.webp" alt="اضافه شدن قابفلیت نمایش تاریخ انقضای گواهی دامنه شخصی" class="wp-image-5391" srcset="https://hamravesh.com/blog/wp-content/uploads/2026/07/cert-expiry-datetime.webp 905w, https://hamravesh.com/blog/wp-content/uploads/2026/07/cert-expiry-datetime-300x49.webp 300w, https://hamravesh.com/blog/wp-content/uploads/2026/07/cert-expiry-datetime-768x126.webp 768w, https://hamravesh.com/blog/wp-content/uploads/2026/07/cert-expiry-datetime-120x20.webp 120w" sizes="auto, (max-width: 905px) 100vw, 905px" /></figure>



<p class="wp-block-paragraph">برای دامنه‌هایی که گواهی SSL آن‌ها توسط دارکوب صادر می‌شود، فرایند تمدید به‌صورت خودکار انجام می‌شود و نیازی به پیگیری دستی از سمت کاربر نیست.</p>



<h2 class="wp-block-heading" id="h-بازارچه-ابری">بازارچه ابری</h2>



<p class="wp-block-paragraph">در فصل بهار، بازارچه ابری با قابلیت جدیدی هم‌راه شد.</p>



<h3 class="wp-block-heading" id="h-اضافه-شدن-تب-مصرف-منابع-به-بازارچه">اضافه شدن تب مصرف منابع به بازارچه</h3>



<p class="wp-block-paragraph">تب مصرف منابع به اپلیکیشن‌های بازارچه ابری اضافه شد. حالا، می‌توانید مصرف منابع اپلیکیشن‌های خود در بازارچه را مشاهده کنید و دید بهتری نسبت به وضعیت اجرای سرویس‌های خود داشته باشید. </p>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="775" height="365" src="https://hamravesh.com/blog/wp-content/uploads/2026/07/insight-marketplace.png" alt="اضافه شدن تب مصرف منابع به بازارچه هم‌روش" class="wp-image-5393" style="width:840px;height:auto" srcset="https://hamravesh.com/blog/wp-content/uploads/2026/07/insight-marketplace.png 775w, https://hamravesh.com/blog/wp-content/uploads/2026/07/insight-marketplace-300x141.png 300w, https://hamravesh.com/blog/wp-content/uploads/2026/07/insight-marketplace-768x362.png 768w, https://hamravesh.com/blog/wp-content/uploads/2026/07/insight-marketplace-614x289.png 614w, https://hamravesh.com/blog/wp-content/uploads/2026/07/insight-marketplace-120x57.png 120w" sizes="auto, (max-width: 775px) 100vw, 775px" /></figure>



<p class="wp-block-paragraph">این قابلیت کمک می‌کند مصرف منابع را بررسی کنید و در صورت نیاز، تصمیم‌های دقیق‌تری برای مدیریت یا بهینه‌سازی اپلیکیشن‌های خود بگیرید.</p>



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



<p class="wp-block-paragraph">در بهار ۱۴۰۵ نسخه سرویس سنتری هم‌روش ارتقا پیدا کرد.</p>



<h3 class="wp-block-heading" id="h-ارتقای-سنتری-به-نسخه-26-2-1">ارتقای سنتری به نسخه 26.2.1</h3>



<p class="wp-block-paragraph">سرویس سنتری هم‌روش به نسخه 26.2.1 ارتقا یافت. در این نسخه، رابط کاربری سنتری به‌روزرسانی شده و ظاهر پنل تغییر کرده است. علاوه بر تغییرات ظاهری، این ارتقا شامل رفع برخی باگ‌ها و به‌روزرسانی‌های امنیتی می‌شود.</p>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"></p>
<p>The post <a href="https://hamravesh.com/blog/changelog-spring-1405/">گزارش تغییرات سرویس‌های هم‌روش؛ بهار ۱۴۰۵</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://hamravesh.com/blog/changelog-spring-1405/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>GitOps چیست؟ آشنایی با معماری، اصول و روش عملکرد</title>
		<link>https://hamravesh.com/blog/what-is-gitops/</link>
					<comments>https://hamravesh.com/blog/what-is-gitops/#respond</comments>
		
		<dc:creator><![CDATA[هم‌روش]]></dc:creator>
		<pubDate>Wed, 01 Jul 2026 12:30:12 +0000</pubDate>
				<category><![CDATA[مقالات]]></category>
		<guid isPermaLink="false">https://hamravesh.com/blog/?p=5331</guid>

					<description><![CDATA[<p>وقتی تعداد سرورها، سرویس‌ها و محیط‌های استقرار افزایش پیدا می‌کند، مدیریت تغییرات زیرساخت به یکی از چالش‌های اصلی تیم‌های فنی تبدیل می‌شود. در چنین شرایطی، اعمال دستی تغییرات می‌تواند باعث ناهماهنگی بین محیط‌های مختلف، خطاهای پیکربندی و دشواری در ردیابی تغییرات شود، به همین دلیل در سال‌های اخیر رویکردی به نام گیت آپس (GitOps) مورد توجه بسیاری از تیم‌های DevOps و مهندسان رایانش ابری قرار گرفته است.</p>
<p>The post <a href="https://hamravesh.com/blog/what-is-gitops/">GitOps چیست؟ آشنایی با معماری، اصول و روش عملکرد</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">وقتی تعداد سرورها، سرویس‌ها و محیط‌های استقرار افزایش پیدا می‌کند، مدیریت تغییرات زیرساخت به یکی از چالش‌های اصلی تیم‌های فنی تبدیل می‌شود. اِعمال دستی تغییرات می‌تواند باعث ناهماهنگی میان محیط‌ها، خطاهای پیکربندی و دشواری در ردیابی تغییرات شود. گیت آپس (GitOps) رویکردی است که با استفاده از Git به‌عنوان تک‌منبع حقیقت (Single Source of Truth)، مدیریت زیرساخت و استقرار برنامه‌ها را خودکار، تکرارپذیر و قابل‌ردیابی می‌کند. این رویکرد با تکیه بر Infrastructure as Code و گردش کار مبتنی بر Git، به یکی از روش‌های رایج برای مدیریت زیرساخت در محیط‌های Cloud-Native، به‌ویژه کوبرنتیز، تبدیل شده است. در این مقاله بررسی می‌کنیم که گیت آپس چیست، چگونه کار می‌کند، چه مزایا و چالش‌هایی دارد، در کوبرنتیز چگونه پیاده‌سازی می‌شود و تفاوت GitOps با DevOps و CI/CD چیست.</p>



<h2 class="wp-block-heading" id="h-گیت-آپس-چیست">گیت آپس چیست؟</h2>



<p class="wp-block-paragraph">گیت آپس (GitOps) یک چارچوب عملیاتی و مجموعه‌ای از روش‌ها برای مدیریت زیرساخت و استقرار برنامه‌ها است که از Git به‌عنوان تک‌منبع حقیقت (Single Source of Truth) استفاده می‌کند. در این رویکرد، وضعیت مطلوب (Desired State) زیرساخت و برنامه‌ها به‌صورت اعلامی (Declarative) در مخزن Git تعریف و نگهداری می‌شود و Git مرجع اصلی ثبت و مدیریت تغییرات است.</p>



<p class="wp-block-paragraph">GitOps را می‌توان تکامل IaC (مخفف Infrastructure as Code به معنی <a href="https://hamravesh.com/blog/infrastructure-as-code/" type="link" id="https://hamravesh.com/blog/infrastructure-as-code/" target="_blank" rel="noreferrer noopener">زیرساخت به عنوان کد</a>) و یکی از بهترین شیوه‌های DevOps دانست. این رویکرد با استفاده از Git و اتوماسیون، امکان مدیریت زیرساخت و استقرار برنامه‌ها را به‌صورت سازگار، تکرارپذیر و قابل‌ردیابی فراهم می‌کند.</p>



<h2 class="wp-block-heading" id="h-اصول-gitops">اصول GitOps</h2>



<p class="wp-block-paragraph">گیت آپس بر مجموعه‌ای از اصول استوار است که نحوه مدیریت زیرساخت و استقرار برنامه‌ها را مشخص می‌کنند. مهم‌ترین اصول این رویکرد عبارت‌اند از:</p>



<ul class="wp-block-list">
<li>پیکربندی‌ها باید به‌صورت اعلامی (Declarative) تعریف شوند؛ یعنی وضعیت مطلوب سیستم در قالب فایل‌های پیکربندی در مخزن Git نگهداری شود.</li>



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



<li>تغییرات باید به‌صورت خودکار از مخزن Git دریافت و در محیط اعمال شوند تا وضعیت عملیاتی با وضعیت ثبت‌شده در Git همگام بماند.</li>



<li>سیستم باید به‌طور مداوم وضعیت واقعی را با وضعیت مطلوب مقایسه کند و در صورت وجود اختلاف، آن را اصلاح کند تا محیط عملیاتی همواره با وضعیت تعریف‌شده در Git منطبق باشد.</li>
</ul>



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



<p class="wp-block-paragraph">در GitOps، تمام تغییرات زیرساخت و استقرار برنامه‌ها ابتدا در مخزن Git ثبت می‌شوند. تیم‌ها تغییرات را در قالب Pull Request (درخواست بررسی و ادغام تغییرات) یا Merge Request (معادل Pull Request در GitLab) ایجاد می‌کنند و پس از بررسی و تأیید، آن‌ها را در شاخه اصلی مخزن ادغام می‌کنند. به این ترتیب، Git به‌عنوان تک‌منبع حقیقت، وضعیت مطلوب (Desired State) زیرساخت و برنامه‌ها را نگهداری می‌کند.</p>



<p class="wp-block-paragraph">پس از ادغام تغییرات، فرایندهای خودکار وضعیت ثبت‌شده در Git را روی محیط عملیاتی اعمال می‌کنند تا زیرساخت و برنامه‌ها با وضعیت تعریف‌شده در مخزن همگام شوند. این رویکرد باعث می‌شود استقرارها به‌صورت سازگار، تکرارپذیر و قابل‌ردیابی انجام شوند.</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/06/hamravesh-what-is-gitops-03-1024x668.webp" alt="تشریح نحوه عملکرد گیت آپس" class="wp-image-5360" srcset="https://hamravesh.com/blog/wp-content/uploads/2026/06/hamravesh-what-is-gitops-03-1024x668.webp 1024w, https://hamravesh.com/blog/wp-content/uploads/2026/06/hamravesh-what-is-gitops-03-300x196.webp 300w, https://hamravesh.com/blog/wp-content/uploads/2026/06/hamravesh-what-is-gitops-03-768x501.webp 768w, https://hamravesh.com/blog/wp-content/uploads/2026/06/hamravesh-what-is-gitops-03-120x78.webp 120w, https://hamravesh.com/blog/wp-content/uploads/2026/06/hamravesh-what-is-gitops-03.webp 1201w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">در GitOps، تمام تغییرات زیرساخت و برنامه‌ها ابتدا در قالب Pull Request یا Merge Request بررسی و پس از تأیید، در مخزن Git ثبت می‌شوند. مخزن Git به‌عنوان تک‌منبع حقیقت (Single Source of Truth)، وضعیت مطلوب (Desired State) سیستم را نگهداری می‌کند. سپس GitOps Agent یا Operator (مانند Argo CD یا Flux) به‌طور مداوم مخزن Git را پایش می‌کند، وضعیت مطلوب را با وضعیت واقعی (Actual State) در کلاستر کوبرنتیز مقایسه می‌کند و در صورت مشاهده هرگونه اختلاف، از طریق فرایند Continuous Reconciliation محیط عملیاتی را به‌صورت خودکار با وضعیت ثبت‌شده در Git همگام می‌کند.</figcaption></figure>



<p class="wp-block-paragraph">به‌طور کلی، گردش کار گیت آپس شامل مراحل زیر است:</p>



<ul class="wp-block-list">
<li>تعریف زیرساخت به‌صورت کد (IaC)</li>



<li>ثبت تغییرات در مخزن Git</li>



<li>ایجاد Pull Request یا Merge Request</li>



<li>بررسی و تأیید تغییرات</li>



<li>ادغام تغییرات در شاخه اصلی</li>



<li>اجرای خودکار فرایندهای CI/CD</li>



<li>همگام‌سازی محیط عملیاتی با وضعیت ثبت‌شده در Git</li>
</ul>



<h2 class="wp-block-heading" id="h-اجزای-اصلی-معماری-گیت-آپس">اجزای اصلی معماری گیت آپس </h2>



<p class="wp-block-paragraph">معماری GitOps بر چند مؤلفه اصلی استوار است که در کنار یکدیگر مدیریت و استقرار زیرساخت و برنامه‌ها را خودکار می‌کنند.</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th><strong>مؤلفه</strong></th><th class="has-text-align-center" data-align="center"><strong>نقش در معماری GitOps</strong></th></tr></thead><tbody><tr><td>مخزن گیت (Git Repository)</td><td class="has-text-align-center" data-align="center">تک‌منبع حقیقت (Single Source of Truth) برای نگهداری وضعیت مطلوب (Desired State)، فایل‌های پیکربندی و تعریف زیرساخت و برنامه‌ها</td></tr><tr><td>پیکربندی‌های اعلامی (Declarative Configuration)</td><td class="has-text-align-center" data-align="center">تعریف وضعیت مطلوب زیرساخت و برنامه‌ها به‌صورت فایل‌های اعلامی که در Git نسخه‌بندی می‌شوند</td></tr><tr><td>IaC</td><td class="has-text-align-center" data-align="center">مدیریت و نسخه‌بندی زیرساخت به‌صورت کد و نگهداری آن در مخزن Git</td></tr><tr><td>Pull Request / Merge Request</td><td class="has-text-align-center" data-align="center">مکانیزمی برای پیشنهاد، بررسی، تأیید و ادغام تغییرات پیش از اعمال آن‌ها</td></tr><tr><td>CI (اختیاری)</td><td class="has-text-align-center" data-align="center">اعتبارسنجی، تست و آماده‌سازی تغییرات پیش از استقرار؛ GitOps معمولاً در کنار فرایندهای CI استفاده می‌شود، اما به آن وابسته نیست</td></tr><tr><td>GitOps Agent یا Operator</td><td class="has-text-align-center" data-align="center">مقایسه مداوم وضعیت واقعی با وضعیت مطلوب موجود در Git و همگام‌سازی خودکار محیط در صورت وجود اختلاف</td></tr><tr><td>کوبرنتیز یا پلتفرم ارکستریشن</td><td class="has-text-align-center" data-align="center">بستر اجرای برنامه‌ها و اعمال خودکار تغییرات؛ اگرچه GitOps به کوبرنتیز محدود نیست، اما رایج‌ترین پیاده‌سازی‌های آن بر پایه کوبرنتیز هستند</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">در این معماری، مخزن Git وضعیت مطلوب سیستم را نگهداری می‌کند و GitOps Agent یا Operator به‌طور مداوم آن را با وضعیت واقعی محیط مقایسه می‌کند. هرگاه اختلافی میان این دو وجود داشته باشد، عامل گیت آپس (GitOps Agent) تغییرات لازم را اعمال می‌کند تا محیط عملیاتی دوباره با وضعیت ثبت‌شده در Git همگام شود.</p>



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



<p class="wp-block-paragraph">اگرچه گیت آپس به کوبرنتیز محدود نیست، اما ماهیت اعلامی (Declarative) این پلتفرم باعث شده است که یکی از رایج‌ترین بسترهای پیاده‌سازی گیت آپس باشد.</p>



<p class="wp-block-paragraph">در محیط‌های مبتنی بر کوبرنتیز، وضعیت مطلوب کلاستر، برنامه‌ها و فایل‌های پیکربندی در مخزن Git نگهداری می‌شود. سپس یک GitOps Agent یا Operator به‌طور مداوم وضعیت واقعی کلاستر را با وضعیت ثبت‌شده در Git مقایسه می‌کند و در صورت مشاهده هرگونه اختلاف، تغییرات لازم را برای همگام‌سازی محیط اعمال می‌کند. این رویکرد باعث می‌شود استقرارها به‌صورت خودکار، سازگار و قابل‌ردیابی انجام شوند و از بروز اختلاف میان وضعیت واقعی و وضعیت مطلوب جلوگیری شود.</p>



<p class="wp-block-paragraph">کاربردهای رایج گیت آپس در کوبرنتیز عبارت‌اند از:</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th><strong>کاربرد</strong></th><th class="has-text-align-center" data-align="center"><strong>توضیح</strong></th></tr></thead><tbody><tr><td>استقرار مداوم (Continuous Deployment)</td><td class="has-text-align-center" data-align="center">اعمال خودکار تغییرات ثبت‌شده در Git روی کلاستر کوبرنتیز </td></tr><tr><td>مدیریت پیکربندی</td><td class="has-text-align-center" data-align="center">نگهداری فایل‌های پیکربندی کوبرنتیز در Git و مدیریت تغییرات از طریق فرایندهای استاندارد Git</td></tr><tr><td>حفظ وضعیت مطلوب (Desired State)</td><td class="has-text-align-center" data-align="center">مقایسه مداوم وضعیت واقعی خوشه با وضعیت تعریف‌شده در Git و همگام‌سازی خودکار در صورت وجود اختلاف</td></tr><tr><td>قابلیت ردیابی تغییرات</td><td class="has-text-align-center" data-align="center">ثبت تمامی تغییرات در Git و امکان بررسی، حسابرسی و بازگشت به نسخه‌های قبلی</td></tr></tbody></table></figure>



<h2 class="wp-block-heading" id="h-ابزارهای-معروف-گیت-آپس">ابزارهای معروف گیت آپس</h2>



<p class="wp-block-paragraph">پیاده‌سازی گیت آپس  معمولاً با یک ابزار واحد انجام نمی‌شود، بلکه مجموعه‌ای از ابزارها در کنار یکدیگر برای مدیریت مخزن Git، اعتبارسنجی تغییرات، استقرار برنامه‌ها و همگام‌سازی محیط عملیاتی استفاده می‌شوند.</p>



<p class="wp-block-paragraph">در میان این ابزارها، <a href="https://hamravesh.com/blog/what-is-argocd/" type="link" id="https://hamravesh.com/blog/what-is-argocd/" target="_blank" rel="noreferrer noopener">Argo CD</a> و Flux از رایج‌ترین ابزارهای گیت آپس برای همگام‌سازی وضعیت کوبرنتیز با وضعیت ثبت‌شده در مخزن Git هستند. در محیط‌های مبتنی بر OpenShift نیز Red Hat OpenShift GitOps برای پیاده‌سازی این رویکرد ارائه شده است. علاوه بر این، ابزارهای CI مانند GitLab CI ،Jenkins ،Tekton و CircleCI معمولاً برای ساخت، تست و اعتبارسنجی تغییرات پیش از استقرار در کنار گیت آپس استفاده می‌شوند.</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th><strong>ابزار</strong></th><th class="has-text-align-center" data-align="center"><strong>دسته</strong></th><th class="has-text-align-center" data-align="center"><strong>کاربرد</strong></th></tr></thead><tbody><tr><td>Argo CD</td><td class="has-text-align-center" data-align="center">GitOps</td><td class="has-text-align-center" data-align="center">همگام‌سازی خودکار وضعیت کوبرنتیز با وضعیت ثبت‌شده در Git و مدیریت استقرار برنامه‌ها</td></tr><tr><td>Flux</td><td class="has-text-align-center" data-align="center">GitOps</td><td class="has-text-align-center" data-align="center">همگام‌سازی مداوم کلاستر کوبرنتیز با وضعیت مطلوب تعریف‌شده در مخزن Git</td></tr><tr><td>GitHub ،GitLab و Bitbucket</td><td class="has-text-align-center" data-align="center">مخزن Git</td><td class="has-text-align-center" data-align="center">نگهداری کد، فایل‌های پیکربندی و وضعیت مطلوب سیستم</td></tr><tr><td>GitLab CI ،Jenkins ،Tekton و CircleCI</td><td class="has-text-align-center" data-align="center">CI</td><td class="has-text-align-center" data-align="center">ساخت، تست و اعتبارسنجی تغییرات پیش از استقرار</td></tr><tr><td>Terraform</td><td class="has-text-align-center" data-align="center">IaC</td><td class="has-text-align-center" data-align="center">مدیریت و تأمین زیرساخت به‌صورت کد در کنار گردش کار GitOps</td></tr><tr><td>Kubernetes</td><td class="has-text-align-center" data-align="center">ارکستریشن</td><td class="has-text-align-center" data-align="center">اجرای بارهای کاری کانتینری و رایج‌ترین بستر پیاده‌سازی GitOps</td></tr><tr><td>Red Hat OpenShift GitOps</td><td class="has-text-align-center" data-align="center">پلتفرم GitOps</td><td class="has-text-align-center" data-align="center">پیاده‌سازی GitOps در محیط‌های مبتنی بر Red Hat OpenShift</td></tr></tbody></table></figure>



<div class="wp-block-dh-blog-card-database-block card database">
<div class="wp-block-group row align-items-center"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<div class="wp-block-group col-md"><div class="wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow">
<h3 class="wp-block-heading has-medium-font-size" id="h-گیت-لب-رانر-اختصاصی-هم-روش-سرویس-gitlab-مدیریت-شده-هم-روش">💡 گیت‌لب رانر اختصاصی هم‌روش؛ سرویس GitLab مدیریت‌شده هم‌روش</h3>



<p class="wp-block-paragraph">زیرساخت اختصاصی برای اجرای پایپ‌لاین‌های CI/CD</p>



<p class="wp-block-paragraph"><br>✅ اجرای Jobهای CI/CD روی Runner اختصاصی<br>✅ پشتیبانی از Docker، همراه با Image Layer Cache برای اجرای سریع‌تر پایپ‌لاین‌ها<br>✅ عبور از تحریم و راه‌اندازی ساده</p>



<p class="wp-block-paragraph"></p>
</div></div>



<div class="wp-block-group col-md-auto"><div class="wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow">
<p class="btn btn--main btn--wide wp-block-paragraph"><a href="https://hamravesh.com/gitlab-runner" type="link" id="https://hamravesh.com/gitlab-runner" target="_blank" rel="noreferrer noopener">گیت‌لب رانر</a></p>
</div></div>
</div></div>
</div>



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



<p class="wp-block-paragraph">گیت آپس زمانی بیشترین ارزش را ایجاد می‌کند که سازمان‌ها بخواهند زیرساخت و استقرار برنامه‌ها را به‌صورت خودکار، تکرارپذیر و قابل‌ردیابی مدیریت کنند. این رویکرد به‌ویژه در محیط‌هایی که از کوبرنتیز، زیرساخت به‌صورت کد (IaC) و فرایندهای استقرار مداوم (Continuous Deployment) استفاده می‌کنند، کاربرد گسترده‌ای دارد.</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th><strong>سناریو</strong></th><th class="has-text-align-center" data-align="center"><strong>دلیل استفاده از GitOps</strong></th></tr></thead><tbody><tr><td>استقرار برنامه‌ها در کوبرنتیز</td><td class="has-text-align-center" data-align="center">همگام‌سازی خودکار وضعیت کلاستر با وضعیت ثبت‌شده در Git</td></tr><tr><td>مدیریت زیرساخت و برنامه‌ها با Git</td><td class="has-text-align-center" data-align="center">نگهداری وضعیت مطلوب در یک مخزن مرکزی و قابل‌نسخه‌بندی</td></tr><tr><td>استفاده از IaC</td><td class="has-text-align-center" data-align="center">مدیریت تغییرات زیرساخت از طریق فایل‌های اعلامی و قابل‌ردیابی</td></tr><tr><td>استقرارهای مکرر</td><td class="has-text-align-center" data-align="center">خودکارسازی فرایند استقرار و کاهش نیاز به عملیات دستی</td></tr><tr><td>نیاز به قابلیت حسابرسی</td><td class="has-text-align-center" data-align="center">ثبت کامل تاریخچه تغییرات و امکان بررسی و بازبینی آن‌ها</td></tr><tr><td>مدیریت چند محیط استقرار</td><td class="has-text-align-center" data-align="center">حفظ سازگاری پیکربندی‌ها میان محیط‌های توسعه، آزمایش و تولید</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">اگر سازمان شما از کوبرنتیز و IaC استفاده می‌کند و به دنبال خودکارسازی استقرارها، مدیریت متمرکز پیکربندی‌ها و افزایش قابلیت ردیابی تغییرات است، GitOps می‌تواند مدل مناسبی برای مدیریت زیرساخت و استقرار برنامه‌ها باشد.</p>



<h2 class="wp-block-heading" id="h-مزایای-گیت-آپس-چیست">مزایای گیت آپس چیست؟</h2>



<p class="wp-block-paragraph">گیت آپس با استفاده از Git به‌عنوان تک‌منبع حقیقت و خودکارسازی فرایندهای استقرار، مدیریت زیرساخت و برنامه‌ها را ساده‌تر، قابل‌ردیابی‌تر و تکرارپذیرتر می‌کند. مهم‌ترین مزایای این رویکرد عبارت‌اند از:</p>



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



<li><strong>قابلیت حسابرسی و ردیابی تغییرات:</strong> تمام تغییرات در Git ثبت می‌شوند و تاریخچه کاملی از آن‌ها برای بررسی، بازبینی و ممیزی در دسترس است.</li>



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



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



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



<li><strong>استفاده از ابزارهای آشنا:</strong> گیت آپس بر پایه Git و فرایندهایی مانند Pull Request یا Merge Request بنا شده است؛ بنابراین بسیاری از توسعه‌دهندگان بدون نیاز به یادگیری ابزارها یا گردش کار کاملاً جدید می‌توانند از آن استفاده کنند.</li>
</ul>



<h2 class="wp-block-heading" id="h-چالش-های-گیت-آپس-چیست">چالش‌های گیت آپس چیست؟</h2>



<p class="wp-block-paragraph">با وجود مزایای متعدد، پیاده‌سازی گیت آپس می‌تواند با چالش‌هایی نیز همراه باشد. موفقیت این رویکرد تنها به انتخاب ابزارهای مناسب وابسته نیست، بلکه نیازمند تغییر در فرایندها، همکاری تیم‌ها و مدیریت صحیح زیرساخت است. مهم‌ترین چالش‌های GitOps عبارت‌اند از:</p>



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



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



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



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



<li><strong>مدیریت اطلاعات حساس (Secrets):</strong> از آنجا که Git به‌عنوان تک‌منبع حقیقت برای نگهداری پیکربندی‌ها استفاده می‌شود، نباید اطلاعات حساس به‌صورت مستقیم در مخزن ذخیره شوند. در عمل، معمولاً از راهکارهایی مانند Secret Managerها، Sealed Secrets یا External Secrets برای مدیریت امن این اطلاعات استفاده می‌شود.</li>



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



<h2 class="wp-block-heading" id="h-تفاوت-gitops-و-devops">تفاوت GitOps و DevOps</h2>



<p class="wp-block-paragraph">DevOps مجموعه‌ای از فرهنگ‌ها، اصول و روش‌ها برای افزایش همکاری میان تیم‌های توسعه و عملیات، خودکارسازی فرایندها و تسریع ارائه نرم‌افزار است. در مقابل، GitOps یک مدل عملیاتی و مجموعه‌ای از روش‌ها برای مدیریت زیرساخت و استقرار برنامه‌ها با استفاده از Git به‌عنوان تک‌منبع حقیقت محسوب می‌شود.</p>



<p class="wp-block-paragraph">به عبارت دیگر، GitOps جایگزین <a href="https://hamravesh.com/blog/what-is-devops/" type="link" id="https://hamravesh.com/blog/what-is-devops/" target="_blank" rel="noreferrer noopener">DevOps</a> نیست، بلکه رویکردی برای پیاده‌سازی بخشی از اصول DevOps با تکیه بر Git ،IaC و اتوماسیون است.</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th><strong>معیار</strong></th><th class="has-text-align-center" data-align="center"><strong>DevOps</strong></th><th class="has-text-align-center" data-align="center"><strong>GitOps</strong></th></tr></thead><tbody><tr><td>ماهیت</td><td class="has-text-align-center" data-align="center">فرهنگ و مجموعه‌ای از اصول و روش‌ها</td><td class="has-text-align-center" data-align="center">مدل عملیاتی و مجموعه‌ای از روش‌ها مبتنی بر Git</td></tr><tr><td>هدف اصلی</td><td class="has-text-align-center" data-align="center">افزایش همکاری، اتوماسیون و ارائه سریع‌تر نرم‌افزار</td><td class="has-text-align-center" data-align="center">مدیریت زیرساخت و استقرار برنامه‌ها بر پایه Git</td></tr><tr><td>منبع حقیقت</td><td class="has-text-align-center" data-align="center">می‌تواند ابزارها و منابع مختلفی داشته باشد</td><td class="has-text-align-center" data-align="center">Git تک‌منبع حقیقت است</td></tr><tr><td>مدیریت تغییرات</td><td class="has-text-align-center" data-align="center">وابسته به ابزارها و فرایندهای سازمان</td><td class="has-text-align-center" data-align="center">تمام تغییرات از طریق Git مدیریت می‌شوند</td></tr><tr><td>دامنه کاربرد</td><td class="has-text-align-center" data-align="center">توسعه، تست، استقرار و عملیات</td><td class="has-text-align-center" data-align="center">مدیریت زیرساخت، پیکربندی و استقرار برنامه‌ها</td></tr><tr><td>ارتباط با کوبرنتیز</td><td class="has-text-align-center" data-align="center">الزامی نیست</td><td class="has-text-align-center" data-align="center">یکی از رایج‌ترین بسترهای پیاده‌سازی GitOps است</td></tr><tr><td>رابطه با یکدیگر</td><td class="has-text-align-center" data-align="center">مفهوم گسترده‌تر</td><td class="has-text-align-center" data-align="center">روشی برای پیاده‌سازی بخشی از اصول DevOps</td></tr></tbody></table></figure>



<h2 class="wp-block-heading" id="h-تفاوت-gitops-و-ci-cd">تفاوت GitOps و CI/CD</h2>



<p class="wp-block-paragraph">در بررسی تفاوت GitOps و CI/CD باید توجه داشته باشید که GitOps و CI/CD مکمل یکدیگر هستند و معمولاً در کنار هم استفاده می‌شوند، اما وظایف متفاوتی دارند. CI/CD بر خودکارسازی فرایند ساخت، تست و استقرار نرم‌افزار تمرکز دارد، در حالی که GitOps مدیریت استقرار و زیرساخت را بر پایه Git و همگام‌سازی مداوم وضعیت مطلوب با محیط عملیاتی انجام می‌دهد.</p>



<p class="wp-block-paragraph">در بسیاری از پیاده‌سازی‌ها، ابزارهای CI مسئول ساخت، تست و انتشار Artifactها هستند و پس از آن، GitOps با استفاده از مخزن Git و ابزارهایی مانند Argo CD یا Flux، تغییرات را در محیط عملیاتی اعمال و وضعیت آن را با مخزن Git همگام نگه می‌دارد.</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th><strong>معیار</strong></th><th class="has-text-align-center" data-align="center"><strong>CI/CD</strong></th><th class="has-text-align-center" data-align="center"><strong>GitOps</strong></th></tr></thead><tbody><tr><td>تعریف</td><td class="has-text-align-center" data-align="center">مجموعه‌ای از فرایندها برای خودکارسازی ساخت، تست و استقرار نرم‌افزار</td><td class="has-text-align-center" data-align="center">مدل عملیاتی برای مدیریت استقرار و زیرساخت بر پایه Git</td></tr><tr><td>تمرکز اصلی</td><td class="has-text-align-center" data-align="center">ساخت، تست و آماده‌سازی نرم‌افزار برای انتشار</td><td class="has-text-align-center" data-align="center">مدیریت وضعیت مطلوب و استقرار زیرساخت و برنامه‌ها</td></tr><tr><td>منبع حقیقت</td><td class="has-text-align-center" data-align="center">وابسته به ابزارها و فرایندهای سازمان</td><td class="has-text-align-center" data-align="center">Git تک‌منبع حقیقت است</td></tr><tr><td>نحوه اعمال تغییرات</td><td class="has-text-align-center" data-align="center">معمولاً پایپ‌لاین تغییرات را به محیط هدف ارسال می‌کند (Push)</td><td class="has-text-align-center" data-align="center">عامل GitOps تغییرات را از مخزن Git دریافت و با محیط همگام می‌کند (Pull)</td></tr><tr><td>ابزارهای رایج</td><td class="has-text-align-center" data-align="center">GitLab CI،Jenkins ،CircleCI و Tekton</td><td class="has-text-align-center" data-align="center">Argo CD ،Flux و Red Hat OpenShift GitOps</td></tr><tr><td>نقش Git</td><td class="has-text-align-center" data-align="center">مخزن کد و یکی از اجزای فرایند توسعه</td><td class="has-text-align-center" data-align="center">مرجع نهایی وضعیت مطلوب سیستم</td></tr><tr><td>ارتباط با یکدیگر</td><td class="has-text-align-center" data-align="center">مسئول ساخت، تست و آماده‌سازی برای استقرار</td><td class="has-text-align-center" data-align="center">معمولاً پس از CI، استقرار و همگام‌سازی محیط را انجام می‌دهد</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">در عمل، بسیاری از سازمان‌ها از GitOps و CI/CD در کنار یکدیگر استفاده می‌کنند. ابزارهای CI مانند GitLab CI ،Jenkins یا Tekton کد را می‌سازند، تست می‌کنند و Artifactها را تولید می‌کنند. سپس ابزارهای GitOps مانند Argo CD یا Flux وضعیت ثبت‌شده در Git را با محیط عملیاتی همگام می‌کنند تا استقرارها به‌صورت خودکار، قابل‌ردیابی و سازگار انجام شوند.</p>



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



<p class="wp-block-paragraph">گیت آپس (GitOps) رویکردی برای مدیریت زیرساخت و استقرار برنامه‌ها است که با استفاده از Git، نسخه‌بندی تغییرات و اتوماسیون، مدیریت محیط‌های عملیاتی را ساده‌تر و قابل‌اعتمادتر می‌کند. در این مدل، تمام تغییرات از طریق مخزن Git مدیریت می‌شوند و وضعیت واقعی سیستم به‌طور مداوم با وضعیت مطلوب تعریف‌شده همگام می‌شود.</p>



<p class="wp-block-paragraph">این رویکرد به‌ویژه در محیط‌های مبتنی بر کوبرنتیز و معماری‌های Cloud-Native کاربرد گسترده‌ای دارد و با افزایش شفافیت، قابلیت ردیابی و تکرارپذیری، به تیم‌ها کمک می‌کند زیرساخت و استقرار برنامه‌ها را با کنترل بیشتری مدیریت کنند.</p>



<p class="wp-block-paragraph">با این حال، موفقیت گیت آپس تنها به انتخاب ابزارهایی مانند Argo CD یا Flux وابسته نیست؛ بلکه به استفاده صحیح از IaC، طراحی گردش کار مناسب و پایبندی تیم‌ها به مدیریت تغییرات از طریق Git نیز بستگی دارد.</p>
<p>The post <a href="https://hamravesh.com/blog/what-is-gitops/">GitOps چیست؟ آشنایی با معماری، اصول و روش عملکرد</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://hamravesh.com/blog/what-is-gitops/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>آشنایی با High Availability؛ بررسی معماری و مقایسه با Disaster Recovery</title>
		<link>https://hamravesh.com/blog/what-is-high-availability/</link>
					<comments>https://hamravesh.com/blog/what-is-high-availability/#respond</comments>
		
		<dc:creator><![CDATA[هم‌روش]]></dc:creator>
		<pubDate>Wed, 24 Jun 2026 12:30:49 +0000</pubDate>
				<category><![CDATA[مقالات]]></category>
		<guid isPermaLink="false">https://hamravesh.com/blog/?p=5307</guid>

					<description><![CDATA[<p>HA در ابر یکی از مهم‌ترین رویکردها برای کاهش زمان ازکارافتادگی سرویس‌ها و حفظ دسترسی مداوم به برنامه‌ها و داده‌ها است. با گسترش استفاده از رایانش ابری، سازمان‌ها انتظار دارند خدمات آن‌ها حتی در زمان بروز خرابی یا عملیات نگهداری هم تا حد امکان در دسترس باقی بماند.</p>
<p>The post <a href="https://hamravesh.com/blog/what-is-high-availability/">آشنایی با High Availability؛ بررسی معماری و مقایسه با Disaster Recovery</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">دسترسی مداوم به سرویس‌ها و داده‌ها به یکی از مهم‌ترین الزامات زیرساخت‌های مدرن تبدیل شده است. ازکارافتادگی حتی کوتاه‌مدت یک سرویس می‌تواند بر تجربه کاربران، تداوم فعالیت سازمان و تعهدات SLA تأثیر بگذارد. به همین دلیل، بسیاری از سازمان‌ها از معماری‌های High Availability (یا به اختصار HA) برای کاهش زمان ازکارافتادگی و حفظ پایداری سرویس‌ها استفاده می‌کنند. در این مقاله بررسی می‌کنیم که HA چیست، دسترس‌پذیری بالا چگونه محقق می‌شود و چه فاکتورهایی برای ارزیابی آن وجود دارد.</p>



<h2 class="wp-block-heading" id="h-ha-چیست">HA چیست؟</h2>



<p class="wp-block-paragraph">High Availability (به اختصار HA) یا دسترس‌پذیری بالا، به توانایی یک سیستم، سرویس یا برنامه کاربردی برای در دسترس ماندن و ادامه ارائه خدمات با حداقل وقفه گفته می‌شود. هدف HA این است که در صورت بروز خرابی‌های برنامه‌ریزی‌شده یا غیرمنتظره، زمان ازکارافتادگی (Downtime) به حداقل برسد و سرویس با کمترین نیاز به مداخله انسانی به فعالیت خود ادامه دهد.</p>



<p class="wp-block-paragraph">معماری‌های High Availability معمولا بر دو اصل کلیدی زیر استوار هستند:</p>



<ul class="wp-block-list">
<li>کاهش زمان ازکارافتادگی از طریق افزونگی (Redundancy)</li>



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



<h3 class="wp-block-heading" id="h-تفاوت-high-availability-با-uptime">تفاوت High Availability با Uptime</h3>



<p class="wp-block-paragraph">دسترس‌پذیری بالا را نباید با درصد Uptime یکی دانست. ممکن است یک سرویس بر اساس توافق‌نامه سطح خدمات (SLA) درصد مشخصی از Uptime را تضمین کند، اما HA به نحوه طراحی زیرساخت برای تحمل خرابی هم توجه دارد. در این رویکرد، استفاده از مؤلفه‌های پشتیبان، جابه‌جایی خودکار سرویس در زمان خرابی و توزیع منابع در بخش‌های مختلف زیرساخت، احتمال توقف سرویس را کاهش می‌دهد.</p>



<p class="wp-block-paragraph">در محیط‌های ابری، HA به سازمان‌ها کمک می‌کند برنامه‌ها و داده‌های خود را حتی در صورت از دسترس خارج شدن بخشی از زیرساخت، با کمترین اختلال در اختیار کاربران قرار دهند.</p>



<h2 class="wp-block-heading" id="h-معیارهای-اندازه-گیری-high-availability-فاکتورهای-ha">معیارهای اندازه‌گیری High Availability (فاکتورهای HA)</h2>



<p class="wp-block-paragraph">برای ارزیابی یک معماری HA، از شاخص‌های مختلفی برای اندازه‌گیری میزان در دسترس بودن سرویس، قابلیت اطمینان و سرعت بازیابی استفاده می‌شود. این شاخص‌ها به سازمان‌ها کمک می‌کنند عملکرد زیرساخت و میزان آمادگی آن در برابر خرابی‌ها را ارزیابی کنند. در ادامه، مهم‌ترین فاکتورهای HA را بررسی می‌کنیم.</p>



<h3 class="wp-block-heading" id="h-five-nines-99-999-یا-سطوح-دسترس-پذیری">Five Nines (99.999%) یا سطوح دسترس‌پذیری</h3>



<p class="wp-block-paragraph">یکی از رایج‌ترین معیارهای اندازه‌گیری دسترس‌پذیری بالا، درصد در دسترس بودن سرویس در یک بازه زمانی مشخص است. در این مدل، سطوحی مانند 99.9%، 99.99% و 99.999% برای بیان میزان uptime استفاده می‌شوند که به ترتیب با کاهش زمان ازکارافتادگی همراه هستند. استاندارد 99.999% که با عنوان «پنج ۹» شناخته می‌شود، یکی از اهداف متداول برای سرویس‌های حیاتی است و نشان می‌دهد سیستم در طول سال تنها چند دقیقه از دسترس خارج می‌شود.</p>



<h3 class="wp-block-heading" id="h-میانگین-زمان-بین-خرابی-ها-mtbf">میانگین زمان بین خرابی‌ها (MTBF)</h3>



<p class="wp-block-paragraph">MTBF یا Mean Time Between Failures، میانگین مدت زمانی را نشان می‌دهد که یک سیستم یا بخشی از آن، قبل از بروز خرابی به فعالیت خود ادامه می‌دهد. این معیار برای ارزیابی قابلیت اطمینان زیرساخت استفاده می‌شود. هرچه مقدار MTBF بیشتر باشد، فاصله بین خرابی‌ها افزایش پیدا می‌کند و پایداری سیستم بالاتر می‌رود.</p>



<h3 class="wp-block-heading" id="h-میانگین-زمان-تعمیر-mttr">میانگین زمان تعمیر (MTTR)</h3>



<p class="wp-block-paragraph">MTTR یا Mean Time to Repair، میانگین مدت زمان موردنیاز برای شناسایی، عیب‌یابی و بازگرداندن سیستم به حالت عملیاتی پس از خرابی را اندازه‌گیری می‌کند. کاهش MTTR نشان می‌دهد سازمان می‌تواند در زمان کوتاه‌تری به رخدادها پاسخ دهد و سرویس را دوباره در اختیار کاربران قرار دهد.</p>



<h3 class="wp-block-heading" id="h-هدف-زمان-بازیابی-rto">هدف زمان بازیابی (RTO)</h3>



<p class="wp-block-paragraph">RTO یا Recovery Time Objective، حداکثر زمانی است که برای بازیابی یک سیستم و بازگشت آن به شرایط عادی در نظر گرفته می‌شود. این معیار مشخص می‌کند که پس از وقوع یک اختلال، چه مدت زمان برای ازسرگیری عملیات قابل قبول است. هرچه مقدار RTO کمتر باشد، زیرساخت باید با سرعت بیشتری فرایند بازیابی را انجام دهد.</p>



<h3 class="wp-block-heading" id="h-هدف-نقطه-بازیابی-rpo">هدف نقطه بازیابی (RPO)</h3>



<p class="wp-block-paragraph">RPO یا Recovery Point Objective، حداکثر میزان از دست رفتن داده‌ای را مشخص می‌کند که سازمان می‌تواند در زمان خرابی تحمل کند. این معیار نشان می‌دهد سیستم باید تا چه نقطه‌ای از گذشته قابل بازیابی باشد. برای مثال، اگر به صورت روزانه از داده‌ها بکاپ گرفته شود، ممکن است تا یک روز از اطلاعات ثبت‌شده از آخرین نسخه پشتیبان تا زمان خرابی از دست برود. </p>



<h2 class="wp-block-heading" id="h-اجزای-کلیدی-و-مفاهیم-بنیادین-در-معماری-high-availability">اجزای کلیدی و مفاهیم بنیادین در معماری High Availability</h2>



<p class="wp-block-paragraph">پیاده‌سازی High Availability به مجموعه‌ای از فناوری‌ها و معماری‌ها متکی است که با همکاری یکدیگر، احتمال ازکارافتادگی سرویس را کاهش می‌دهند. این اجزا با حذف نقاط شکست تکی (SPOF مخفف Single Point of Failure)، تشخیص خرابی و بازیابی سریع سرویس، به افزایش دسترس‌پذیری کمک می‌کنند. در ادامه، مهم‌ترین مفاهیم معماری HA را بررسی می‌کنیم.</p>



<p class="wp-block-paragraph"><strong>افزونگی (Redundancy):</strong> افزونگی به معنای استفاده از مؤلفه‌های پشتیبان در لایه‌های مختلف زیرساخت است تا در صورت خرابی یک بخش، بخش دیگری بتواند همان وظیفه را انجام دهد. این رویکرد می‌تواند در سطح سخت‌افزار، نرم‌افزار و داده پیاده‌سازی شود و از ایجاد نقاط شکست تکی جلوگیری کند.</p>



<p class="wp-block-paragraph"><strong>Failover و Failback خودکار: </strong>Failover فرایندی است که در زمان بروز خرابی، بار کاری را به‌صورت خودکار از سیستم اصلی به یک سیستم پشتیبان منتقل می‌کند تا سرویس بدون وقفه ادامه پیدا کند. پس از رفع مشکل، فرایند Failback بار کاری را دوباره به سیستم اصلی بازمی‌گرداند. خودکار بودن این فرایندها اهمیت زیادی دارد، زیرا زمان بازیابی را کاهش می‌دهد و نیاز به مداخله انسانی را به حداقل می‌رساند.</p>



<p class="wp-block-paragraph"><strong>توزیع بار (Load Balancing):</strong> این بخش ترافیک و درخواست‌های ورودی را میان چند سرور یا نود توزیع می‌کند تا از ایجاد بار بیش از حد روی یک مؤلفه جلوگیری شود. در معماری‌های ابری، توزیع بار علاوه بر بهبود عملکرد، احتمال ایجاد نقطه شکست تکی را کاهش می‌دهد و به پایداری بیشتر سرویس‌ها کمک می‌کند.</p>



<p class="wp-block-paragraph"><strong>کلاسترهای HA:</strong> کلاسترهای HA یا Failover Clusters، مجموعه‌ای از سرورها هستند که به‌صورت یک سیستم واحد عمل می‌کنند و در صورت خرابی یکی از نودها، نود دیگری مسئولیت ارائه سرویس را بر عهده می‌گیرد. این کلاسترها به‌صورت مداوم وضعیت نودها و سرویس‌ها را پایش می‌کنند و برای حفظ آمادگی در شرایط خرابی، به‌طور منظم مورد آزمون قرار می‌گیرند.</p>



<p class="wp-block-paragraph"><strong>تکثیر داده (Replication):</strong> تکثیر داده به فرایند کپی و همگام‌سازی داده‌ها میان چند نود یا حتی چند کلاستر گفته می‌شود. این کار باعث می‌شود در صورت از دسترس خارج شدن یک سرور یا دیتاسنتر، داده‌های موردنیاز همچنان در محل دیگری در دسترس باشند. تکثیر داده می‌تواند به‌صورت همزمان (Synchronous) یا ناهمزمان (Asynchronous) انجام شود که هریک از نظر عملکرد و میزان ریسک از دست رفتن داده ویژگی‌های متفاوتی دارند.</p>



<p class="wp-block-paragraph"><strong>توزیع جغرافیایی (Geographic Distribution): </strong>در این رویکرد، منابع و سرویس‌ها در چند موقعیت جغرافیایی مختلف مستقر می‌شوند تا خرابی‌های محلی مانند قطعی برق، اختلال یک دیتاسنتر یا بلایای طبیعی باعث ازکارافتادگی کامل سرویس نشود. توزیع جغرافیایی یکی از راهکارهای رایج برای افزایش دسترس‌پذیری بالا در زیرساخت‌های ابری و ابر ترکیبی است.</p>



<p class="wp-block-paragraph"><strong>بررسی سلامت (Health Checks) و خودترمیمی (Self-healing): </strong>سیستم‌های HA به‌طور مداوم وضعیت سرورها، سرویس‌ها و برنامه‌های کاربردی را پایش می‌کنند تا خرابی‌ها در کوتاه‌ترین زمان ممکن شناسایی شوند. در بسیاری از معماری‌های مدرن، پس از تشخیص مشکل، فرایندهایی مانند اجرای Failover یا بازیابی خودکار سرویس بدون دخالت انسان انجام می‌شود که این امر به کاهش زمان ازکارافتادگی کمک می‌کند.</p>



<h2 class="wp-block-heading" id="h-روش-های-پیاده-سازی-high-availability">روش‌های پیاده‌سازی High Availability</h2>



<p class="wp-block-paragraph">برای دستیابی به High Availability، زیرساخت باید به‌گونه‌ای طراحی شود که در صورت بروز خرابی، سرویس با کمترین اختلال به کار خود ادامه دهد. این هدف معمولاً با حذف نقاط شکست تکی، استفاده از افزونگی، پیاده‌سازی Failover، محافظت از داده‌ها و پایش مداوم سرویس‌ها محقق می‌شود. در ادامه، مهم‌ترین مراحل و روش‌های پیاده‌سازی دسترس‌پذیری بالا را بررسی می‌کنیم.</p>



<h3 class="wp-block-heading" id="h-حذف-نقاط-شکست-تکی-spof">حذف نقاط شکست تکی (SPOF)</h3>



<p class="wp-block-paragraph">اولین گام، شناسایی مؤلفه‌هایی است که خرابی آن‌ها می‌تواند کل سرویس را از دسترس خارج کند. برای کاهش این ریسک، از افزونگی در بخش‌های حیاتی مانند سرورها، پایگاه‌های داده، تجهیزات شبکه و منابع تغذیه استفاده می‌شود. همچنین توزیع بار و استقرار منابع در چند منطقه جغرافیایی می‌تواند وابستگی به یک مؤلفه یا یک دیتاسنتر را کاهش دهد.</p>



<h3 class="wp-block-heading" id="h-پیاده-سازی-failover-قابل-اعتماد">پیاده‌سازی Failover قابل اعتماد</h3>



<p class="wp-block-paragraph">پس از حذف نقاط شکست تکی، باید مکانیزم Failover وجود داشته باشد که در صورت خرابی یک مؤلفه، بار کاری را به‌سرعت به سیستم پشتیبان منتقل کند. هدف این است که انتقال سرویس با حداقل downtime و بدون اختلال جدی در عملکرد یا داده‌ها انجام شود.</p>



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



<p class="wp-block-paragraph">یک معماری HA باید بتواند خرابی‌ها را در کوتاه‌ترین زمان ممکن شناسایی کند و در صورت نیاز، به‌صورت خودکار اقداماتی مانند Failover را اجرا کند. معمولا برای این منظور از ابزارهای مانیتورینگ، Health Check و مکانیزم‌های Heartbeat (مکانیزمی برای بررسی مداوم وضعیت و در دسترس بودن نودها) استفاده می‌شود.</p>



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



<p class="wp-block-paragraph">حفظ دسترس‌پذیری بدون محافظت از داده‌ها امکان‌پذیر نیست. تهیه نسخه پشتیبان، استفاده از Replication و آزمایش دوره‌ای فرایند بازیابی، به سازمان کمک می‌کند در زمان خرابی، داده‌ها و سرویس‌ها را در کوتاه‌ترین زمان ممکن بازیابی کند.</p>



<h3 class="wp-block-heading" id="h-استقرار-کلاسترهای-ha-و-load-balancing">استقرار کلاسترهای HA و Load Balancing</h3>



<p class="wp-block-paragraph">کلاسترهای High Availability امکان ادامه فعالیت سرویس را در صورت خرابی یک نود فراهم می‌کنند و Load Balancing هم ترافیک را میان نودهای مختلف توزیع می‌کند. ترکیب این دو راهکار مانع از ایجاد نقطه شکست تکی می‌شود و حتی باعث می‌شود که عملکرد سیستم در زمان افزایش بار حفظ شود.</p>



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



<p class="wp-block-paragraph">پس از استقرار زیرساخت، باید وضعیت برنامه‌ها، سرویس‌ها، شبکه و نودهای کلاستر به‌صورت مداوم پایش شود. علاوه بر این، مکانیزم‌های Failover و فرایندهای بازیابی باید به‌صورت دوره‌ای آزمایش شوند تا در زمان وقوع خرابی، عملکرد مورد انتظار را داشته باشند.</p>



<h2 class="wp-block-heading" id="h-مقایسه-high-availability-با-disaster-recovery">مقایسه High Availability با Disaster Recovery</h2>



<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/06/hamravesh-what-is-high-availability2-1024x668.webp" alt="مقایسه High Availability با Disaster Recovery" class="wp-image-5339" srcset="https://hamravesh.com/blog/wp-content/uploads/2026/06/hamravesh-what-is-high-availability2-1024x668.webp 1024w, https://hamravesh.com/blog/wp-content/uploads/2026/06/hamravesh-what-is-high-availability2-300x196.webp 300w, https://hamravesh.com/blog/wp-content/uploads/2026/06/hamravesh-what-is-high-availability2-768x501.webp 768w, https://hamravesh.com/blog/wp-content/uploads/2026/06/hamravesh-what-is-high-availability2-120x78.webp 120w, https://hamravesh.com/blog/wp-content/uploads/2026/06/hamravesh-what-is-high-availability2.webp 1201w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">تفاوت HA و DR یکی از موضوعات مهم در طراحی زیرساخت‌های پایدار است. High Availability بر کاهش زمان ازکارافتادگی و حفظ دسترس‌پذیری سرویس در زمان خرابی‌های معمول تمرکز دارد، در حالی که <a href="https://hamravesh.com/blog/what-is-disaster-recovery/" type="link" id="https://hamravesh.com/blog/what-is-disaster-recovery/" target="_blank" rel="noreferrer noopener">بازیابی از فاجعه</a> یا DR برای بازیابی سرویس‌ها و داده‌ها پس از رویدادهای گسترده و فاجعه‌بار به کار می‌رود. این دو رویکرد مکمل یکدیگر هستند و بسیاری از سازمان‌ها برای افزایش تداوم کسب‌وکار از هر دو استفاده می‌کنند. در جدول زیر بررسی کرده‌ایم که مهم‌ترین تفاوت‌های DR و HA چیست. </p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td class="has-text-align-center" data-align="center"><strong>ویژگی</strong></td><td class="has-text-align-center" data-align="center"><strong>High Availability (HA)</strong></td><td class="has-text-align-center" data-align="center"><strong>Disaster Recovery (DR)</strong></td></tr><tr><td class="has-text-align-center" data-align="center">تمرکز</td><td class="has-text-align-center" data-align="center">حفظ عملکرد پیوسته یک سیستم یا برنامه</td><td class="has-text-align-center" data-align="center">بازیابی عملیات حیاتی کسب‌وکار پس از فاجعه</td></tr><tr><td class="has-text-align-center" data-align="center">هدف</td><td class="has-text-align-center" data-align="center">کاهش downtime و حفظ دسترس‌پذیری سرویس</td><td class="has-text-align-center" data-align="center">بازیابی سریع سرویس‌ها با حداقل از دست رفتن داده</td></tr><tr><td class="has-text-align-center" data-align="center">روش‌های رایج</td><td class="has-text-align-center" data-align="center">افزونگی، Load Balancing ،Failover ،Replication و Clustering</td><td class="has-text-align-center" data-align="center">Backup و Restore، تکثیر بین سایت‌ها، بازیابی مبتنی بر ابر و برنامه‌ریزی مدیریت بحران</td></tr><tr><td class="has-text-align-center" data-align="center">دامنه پوشش</td><td class="has-text-align-center" data-align="center">یک سرویس یا برنامه مشخص</td><td class="has-text-align-center" data-align="center">کل زیرساخت و عملیات حیاتی سازمان</td></tr><tr><td class="has-text-align-center" data-align="center">بازه زمانی بازیابی</td><td class="has-text-align-center" data-align="center">معمولا در حد چند ثانیه یا چند دقیقه</td><td class="has-text-align-center" data-align="center">معمولا در حد ساعت، روز یا حتی هفته</td></tr><tr><td class="has-text-align-center" data-align="center">نوع رویداد اثرگذار</td><td class="has-text-align-center" data-align="center">خرابی سخت‌افزار، نرم‌افزار، شبکه یا سایر اختلالات محلی</td><td class="has-text-align-center" data-align="center">بلایای طبیعی، حملات سایبری گسترده، خرابی کامل دیتاسنتر یا از کار افتادن زیرساخت‌های اصلی</td></tr><tr><td class="has-text-align-center" data-align="center">استفاده از افزونگی و بکاپ</td><td class="has-text-align-center" data-align="center">از افزونگی و نسخه‌های پشتیبان برای کاهش اختلال استفاده می‌کند</td><td class="has-text-align-center" data-align="center">از افزونگی و نسخه‌های پشتیبان برای بازیابی عملیات پس از فاجعه استفاده می‌کند</td></tr><tr><td class="has-text-align-center" data-align="center">هزینه پیاده‌سازی</td><td class="has-text-align-center" data-align="center">معمولا در سطح مؤلفه‌ها و سرویس‌ها</td><td class="has-text-align-center" data-align="center">معمولا هزینه بیشتری دارد و ممکن است به زیرساخت بازیابی دوم نیاز داشته باشد</td></tr></tbody></table></figure>



<h2 class="wp-block-heading" id="h-تفاوت-high-availability-با-fault-tolerance">تفاوت High Availability با Fault Tolerance</h2>



<p class="wp-block-paragraph">High Availability و Fault Tolerance هر دو با هدف افزایش پایداری و تداوم سرویس طراحی می‌شوند، اما رویکرد آن‌ها متفاوت است. High Availability با استفاده از افزونگی و Failover تلاش می‌کند زمان ازکارافتادگی را به حداقل برساند، در حالی که Fault Tolerance به‌گونه‌ای طراحی می‌شود که سرویس حتی در صورت خرابی برخی مؤلفه‌ها نیز بدون وقفه به کار خود ادامه دهد. به همین دلیل، Fault Tolerance معمولاً به منابع بیشتر و معماری پیچیده‌تری نسبت به HA نیاز دارد. در جدول مقایسه کرده‌ایم که تفاوت‌های Fault Tolerance و HA چیست.</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td class="has-text-align-center" data-align="center"><strong>معیار</strong></td><td class="has-text-align-center" data-align="center"><strong>High Availability (HA)</strong></td><td class="has-text-align-center" data-align="center"><strong>Fault Tolerance (FT)</strong></td></tr><tr><td class="has-text-align-center" data-align="center">هدف</td><td class="has-text-align-center" data-align="center">به حداقل رساندن downtime</td><td class="has-text-align-center" data-align="center">دستیابی به صفر downtime</td></tr><tr><td class="has-text-align-center" data-align="center">زمان ازکارافتادگی</td><td class="has-text-align-center" data-align="center">معمولاً چند ثانیه یا چند دقیقه</td><td class="has-text-align-center" data-align="center">بدون وقفه در ارائه سرویس</td></tr><tr><td class="has-text-align-center" data-align="center">سطح افزونگی</td><td class="has-text-align-center" data-align="center">استفاده از مؤلفه‌های پشتیبان در بخش‌های کلیدی</td><td class="has-text-align-center" data-align="center">افزونگی کامل زیرساخت و مؤلفه‌های حیاتی</td></tr><tr><td class="has-text-align-center" data-align="center">هزینه و پیچیدگی</td><td class="has-text-align-center" data-align="center">متوسط و مناسب برای بسیاری از سامانه‌های سازمانی</td><td class="has-text-align-center" data-align="center">بالا و نیازمند سرمایه‌گذاری بیشتر</td></tr><tr><td class="has-text-align-center" data-align="center">نیاز به کپی کامل سخت‌افزار</td><td class="has-text-align-center" data-align="center">معمولاً خیر</td><td class="has-text-align-center" data-align="center">معمولاً بله</td></tr><tr><td class="has-text-align-center" data-align="center">کاربردهای رایج</td><td class="has-text-align-center" data-align="center">سامانه‌های سازمانی، تجارت الکترونیک، اینترنت اشیاء و بسیاری از سرویس‌های ابری</td><td class="has-text-align-center" data-align="center">سامانه‌هایی که توقف آن‌ها قابل قبول نیست، مانند برخی زیرساخت‌های صنعتی یا خدمات بسیار حیاتی</td></tr></tbody></table></figure>



<h2 class="wp-block-heading" id="h-مزایای-high-availability">مزایای High Availability</h2>



<p class="wp-block-paragraph">استفاده از High Availability علاوه بر کاهش زمان ازکارافتادگی، می‌تواند بر عملکرد زیرساخت، تجربه کاربران و تداوم فعالیت سازمان هم تاثیر بگذارد، بنابراین HA در ابر به یکی از الزامات بسیاری از سرویس‌های آنلاین و برنامه‌های حیاتی تبدیل شده است. مهم‌ترین مزایای HA عبارت‌اند از:</p>



<ul class="wp-block-list">
<li><strong>افزایش دسترس‌پذیری سرویس‌ها: </strong>HA امکان دسترسی مداوم کاربران و کارکنان به برنامه‌ها و داده‌های حیاتی را فراهم می‌کند و وابستگی به زمان یا مکان را کاهش می‌دهد.</li>



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



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



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



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



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



<li><strong>کمک به تداوم کسب‌وکار:</strong> High Availability به سازمان کمک می‌کند حتی در زمان خرابی مؤلفه‌ها یا انجام تعمیرات برنامه‌ریزی‌شده، فعالیت سرویس‌های اصلی بدون اختلال جدی ادامه پیدا کند.</li>
</ul>



<h2 class="wp-block-heading" id="h-چالش-های-high-availability">چالش‌های High Availability</h2>



<p class="wp-block-paragraph">افزایش سطح دسترس‌پذیری معمولاً با افزایش پیچیدگی، هزینه و نیازمندی‌های عملیاتی همراه است. به همین دلیل، پیاده‌سازی High Availability علاوه بر مزایا، چالش‌هایی نیز به همراه دارد که باید در طراحی و مدیریت زیرساخت در نظر گرفته شوند. در ادامه مهم‌ترین چالش‌های High Availability را بیان می‌کنیم:</p>



<ul class="wp-block-list">
<li><strong>دستیابی به ۱۰۰٪ Uptime عملاً امکان‌پذیر نیست:</strong> هیچ زیرساختی نمی‌تواند همیشه و بدون حتی یک لحظه اختلال فعال بماند. حتی استاندارد پنج ۹ (99.999%) هم چند دقیقه ازکارافتادگی مجاز در سال دارد.</li>



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



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



<li><strong>مقابله با خرابی‌های هم‌علت (Common-Cause Failures):</strong> گاهی یک عامل مشترک مانند قطعی برق، آتش‌سوزی یا خطای نرم‌افزاری می‌تواند چند مؤلفه را به‌طور هم‌زمان از کار بیندازد. کاهش این ریسک معمولاً به افزونگی و توزیع مناسب منابع نیاز دارد.</li>



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



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



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



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



<p class="wp-block-paragraph">High Availability (HA) مجموعه‌ای از رویکردها و فناوری‌ها برای کاهش زمان ازکارافتادگی و حفظ دسترس‌پذیری سرویس‌ها است. این هدف معمولاً با استفاده از افزونگی، Failover، توزیع بار، کلاسترینگ و تکثیر داده محقق می‌شود تا سرویس حتی در زمان بروز خرابی نیز با کمترین اختلال در دسترس باقی بماند.</p>



<p class="wp-block-paragraph">در طراحی معماری‌های HA، شاخص‌هایی مانند Availability، MTBF و MTTR برای ارزیابی عملکرد زیرساخت اهمیت دارند. همچنین، HA با وجود ارتباط نزدیک با مفاهیمی مانند Disaster Recovery و Fault Tolerance، هدف و کاربرد متفاوتی دارد؛ HA بر کاهش اختلال در سرویس تمرکز دارد، در حالی که DR برای بازیابی پس از حوادث گسترده و FT برای ادامه فعالیت بدون وقفه طراحی شده است.</p>



<p class="wp-block-paragraph">انتخاب سطح مناسب دسترس‌پذیری باید بر اساس نیازهای کسب‌وکار، میزان تحمل ازکارافتادگی و هزینه‌های پیاده‌سازی انجام شود تا میان پایداری سرویس و پیچیدگی زیرساخت تعادل برقرار شود.</p>



<p class="wp-block-paragraph"></p>
<p>The post <a href="https://hamravesh.com/blog/what-is-high-availability/">آشنایی با High Availability؛ بررسی معماری و مقایسه با Disaster Recovery</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://hamravesh.com/blog/what-is-high-availability/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>بازنشستگی Ingress NGINX؛ ریسک‌ها، جایگزین‌ها و مسیر مهاجرت</title>
		<link>https://hamravesh.com/blog/ingress-nginx-retirement/</link>
					<comments>https://hamravesh.com/blog/ingress-nginx-retirement/#respond</comments>
		
		<dc:creator><![CDATA[هم‌روش]]></dc:creator>
		<pubDate>Wed, 17 Jun 2026 12:30:07 +0000</pubDate>
				<category><![CDATA[دواپس]]></category>
		<category><![CDATA[مقالات]]></category>
		<category><![CDATA[کوبرنتیز]]></category>
		<guid isPermaLink="false">https://hamravesh.com/blog/?p=5247</guid>

					<description><![CDATA[<p>بازنشستگی ingress-nginx یکی از مهم‌ترین تغییرات اخیر در اکوسیستم Kubernetes به شمار می‌آید. این پروژه که سال‌ها یکی از رایج‌ترین Ingress Controllerهای Kubernetes بود، دیگر در مسیر توسعه عادی قرار ندارد و پس از پایان دوره پشتیبانی، به‌روزرسانی امنیتی و اصلاح باگ جدیدی برای آن منتشر نمی‌شود. </p>
<p>The post <a href="https://hamravesh.com/blog/ingress-nginx-retirement/">بازنشستگی Ingress NGINX؛ ریسک‌ها، جایگزین‌ها و مسیر مهاجرت</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">بازنشستگی ingress-nginx یکی از مهم‌ترین تغییرات اخیر در اکوسیستم کوبرنتیز به شمار می‌آید. این پروژه که سال‌ها یکی از رایج‌ترین Ingress Controllerهای کوبرنتیز بود، دیگر در مسیر توسعه عادی قرار ندارد و پس از پایان دوره پشتیبانی، به‌روزرسانی امنیتی و اصلاح باگ جدیدی برای آن منتشر نمی‌شود. این اتفاق باعث شده است که مهاجرت از ingress nginx و بررسی جایگزین به یکی از دغدغه‌های اصلی تیم‌های زیرساخت و DevOps تبدیل شود.</p>



<p class="wp-block-paragraph">در این مقاله بررسی می‌کنیم که ingress-nginx چیست، دقیقاً چه بخشی از این پروژه بازنشسته شده، چرا کوبرنتیز این تصمیم را گرفته است و ادامه استفاده از آن چه ریسک‌هایی دارد. همچنین گزینه‌های موجود برای جایگزین ingress-nginx، نقش Gateway API و مراحل مهاجرت از اینگرس nginx با استفاده از ابزار Ingress2Gateway را به‌صورت عملی آموزش می‌دهیم.</p>



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



<p class="wp-block-paragraph">بازنشستگی ingress-nginx صرفا پایان عمر یک پروژه متن‌باز نیست، بلکه به پایان چرخه نگهداری یکی از پرکاربردترین Ingress Controllerهای کوبرنتیز اشاره دارد. بر اساس بیانیه رسمی کوبرنتیز، ادامه استفاده از این پروژه پس از پایان دوره پشتیبانی، می‌تواند ریسک‌های امنیتی و عملیاتی جدیدی برای محیط‌های Production ایجاد کند.</p>



<p class="wp-block-paragraph">اهمیت این موضوع زمانی بیشتر مشخص می‌شود که بخش قابل توجهی از کلاسترهای کوبرنتیز همچنان از ingress-nginx برای مدیریت ترافیک HTTP و HTTPS استفاده می‌کنند. هرچند استقرارهای فعلی به کار خود ادامه می‌دهند، اما پس از بازنشستگی، هیچ وصله امنیتی، اصلاح باگ یا نسخه جدیدی برای پروژه منتشر نمی‌شود و آسیب‌پذیری‌های آینده ممکن است بدون راهکار رسمی باقی بمانند.</p>



<p class="wp-block-paragraph">تیم کوبرنتیز اعلام کرده است که این تصمیم نتیجه چالش‌های طولانی‌مدت در نگهداری پروژه، محدود بودن افراد مسئول نگهداری و افزایش پیچیدگی فنی آن بوده است، به همین دلیل، تیم کوبرنتیز به کاربران توصیه می‌کند که از همین حالا برای مهاجرت از ingress-nginx یا انتخاب جایگزین مناسب برنامه‌ریزی کنند.</p>



<h2 class="wp-block-heading" id="h-ingress-nginx-چیست">ingress-nginx چیست؟</h2>



<p class="wp-block-paragraph">ingress-nginx یک Ingress Controller مبتنی بر NGINX برای کوبرنتیز است که منابع Ingress را پایش کرده و بر اساس قوانین تعریف‌شده، پیکربندی NGINX را به‌صورت خودکار ایجاد و به‌روزرسانی می‌کند تا ترافیک HTTP و HTTPS به سرویس‌های مناسب هدایت شود.</p>



<p class="wp-block-paragraph">در کوبرنتیز، منبع Ingress فقط شامل قوانین مسیریابی است و به‌تنهایی درخواست‌ها را پردازش نمی‌کند. برای اعمال این قوانین به یک Ingress Controller نیاز است و ingress-nginx یکی از شناخته‌شده‌ترین پیاده‌سازی‌های این مدل به شمار می‌آید.</p>



<p class="wp-block-paragraph">یکی از دلایل محبوبیت ingress-nginx، متن‌باز بودن و امکان استفاده از آن در انواع محیط‌های کوبرنتیز، چه در سرویس‌های ابری و چه در زیرساخت‌های On-Premise، بود و به همین دلیل در میان تیم‌های DevOps و SRE جایگاه ویژه‌ای پیدا کرد.</p>



<h2 class="wp-block-heading" id="h-دقیقا-چه-چیزی-بازنشسته-شده-است">دقیقاً چه چیزی بازنشسته شده است؟</h2>



<p class="wp-block-paragraph">نکته مهمی که باید بدانید این است که قابلیت Ingress همچنان بخشی از کوبرنتیز  باقی می‌ماند، اما پروژه ingress-nginx پس از پایان دوره پشتیبانی دیگر به‌روزرسانی نمی‌شود. بر اساس اعلام رسمی کوبرنتیز ، پس از پایان نگهداری پروژه:</p>



<ul class="wp-block-list">
<li>نسخه جدیدی از ingress-nginx منتشر نمی‌شود</li>



<li>باگ‌های جدید برطرف نخواهند شد</li>



<li>برای آسیب‌پذیری‌های آینده وصله امنیتی ارائه نمی‌شود</li>



<li>مخازن GitHub پروژه در حالت فقط‌خواندنی (Read-only) قرار می‌گیرند.</li>
</ul>



<p class="wp-block-paragraph">در عین حال، استقرارهای فعلی همچنان به کار خود ادامه می‌دهند و آرتیفکت‌هایی مانند Helm Chartها و Container Imageهای موجود در دسترس هستند. البته با این حال استفاده از نرم‌افزاری که دیگر به‌روزرسانی امنیتی دریافت نمی‌کند، می‌تواند به مرور زمان ریسک‌های عملیاتی و امنیتی را افزایش دهد. اگر می‌خواهید بررسی کنید که آیا کلاستر شما از ingress-nginx استفاده می‌کند یا خیر، می‌توانید دستور زیر را اجرا کنید:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:clamp(24px, 1.5rem, 36px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2d333d;color:#9eadbd">Bash</span><span role="button" tabindex="0" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>kubectl get pods --all-namespaces --selector app.kubernetes.io/name=ingress-nginx</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #F69D50">kubectl</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">get</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">pods</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">--all-namespaces</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">--selector</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">app.kubernetes.io/name=ingress-nginx</span></span></code></pre></div>



<p class="wp-block-paragraph">اگر این دستور خروجی داشته باشد، کلاستر شما از ingress-nginx استفاده می‌کند و بهتر است وضعیت زیرساخت خود را ارزیابی و برای مهاجرت از ingress nginx یا انتخاب یک جایگزین ingress-nginx مناسب برنامه‌ریزی کنید.</p>



<h2 class="wp-block-heading" id="h-چرا-ingress-nginx-بازنشسته-شد">چرا ingress-nginx بازنشسته شد؟</h2>



<p class="wp-block-paragraph">بازنشستگی ingress-nginx نتیجه مجموعه‌ای از چالش‌های فنی و مدیریتی است که طی سال‌های گذشته شکل گرفته‌اند. تیم کوبرنتیز اعلام کرده است که نگهداری این پروژه برای مدت طولانی بر عهده تعداد محدودی افراد مسئول نگهداری بوده و این مدل برای یکی از پرکاربردترین اجزای اکوسیستم Cloud Native پایداری لازم را نداشته است.</p>



<p class="wp-block-paragraph">عامل مهم دیگر، انباشت بدهی فنی (Technical Debt) است. ingress-nginx در ابتدا به‌عنوان یکی از پیاده‌سازی‌های Ingress API توسعه یافت، اما به مرور زمان قابلیت‌ها و Annotationهای متعددی به آن اضافه شد. این انعطاف‌پذیری برای کاربران مفید بود، اما پیچیدگی نگهداری و مدیریت امنیت پروژه را افزایش داد.</p>



<p class="wp-block-paragraph">از سوی دیگر، جامعه کوبرنتیز در سال‌های اخیر به سمت معماری‌ها و استانداردهای جدیدتر مدیریت ترافیک حرکت کرده است؛ به همین دلیل، به جای توسعه بیشتر ingress-nginx، تمرکز اکوسیستم به سمت راهکارهایی مانند Gateway API و نسل جدید Ingress Controllerها معطوف شده است.</p>



<p class="wp-block-paragraph">در مجموع، بازنشستگی ingress-nginx را می‌توان حاصل سه عامل اصلی محدودیت در نگهداری پروژه، افزایش بدهی فنی و حرکت اکوسیستم کوبرنتیز به سمت مدل‌های جدیدتر مدیریت ترافیک دانست.</p>



<h2 class="wp-block-heading" id="h-اگر-مهاجرت-نکنیم-چه-اتفاقی-می-افتد">اگر مهاجرت نکنیم چه اتفاقی می‌افتد؟</h2>



<p class="wp-block-paragraph">بازنشستگی ingress-nginx باعث توقف ناگهانی سرویس‌های فعلی نمی‌شود و استقرارهای موجود همچنان به کار خود ادامه می‌دهند. با این حال، ادامه استفاده از این پروژه به‌معنای استفاده از نرم‌افزاری است که دیگر توسعه فعال و پشتیبانی امنیتی دریافت نمی‌کند.</p>



<p class="wp-block-paragraph">یکی از مهم‌ترین پیامدهای این وضعیت، افزایش ریسک امنیتی در طول زمان است. هر آسیب‌پذیری جدیدی که پس از پایان دوره پشتیبانی کشف شود، ممکن است بدون وصله امنیتی باقی بماند و سازمان‌ها ناچار باشند ریسک آن را بپذیرند یا راهکارهای موقت خود را پیاده‌سازی کنند.</p>



<p class="wp-block-paragraph">موضوع دیگر، افزایش بدهی فنی است. هرچه وابستگی سرویس‌ها به قابلیت‌های اختصاصی ingress-nginx، تنظیمات ویژه و Annotationها بیشتر شود، فرایند مهاجرت در آینده پیچیده‌تر و پرهزینه‌تر می‌شود. </p>



<p class="wp-block-paragraph">همچنین ممکن است به دلیل عدم به‌روزرسانی پروژه ingress-nginx برای سازگاری با تغییرات، در نسخه‌های آینده کوبرنتیز یا سایر اجزای اکوسیستم، ناسازگاری‌های جدیدی ایجاد شود. توصیه جامعه کوبرنتیز این است که سازمان‌ها پیش از تبدیل شدن این وابستگی به یک چالش عملیاتی، وضعیت کلاسترهای خود را بررسی و برای مهاجرت از ingress nginx یا انتخاب یک جایگزین ingress-nginx مناسب برنامه‌ریزی کنند.</p>



<h2 class="wp-block-heading" id="h-جایگزین-های-ingress-nginx-چیست">جایگزین‌های ingress-nginx چیست؟</h2>



<p class="wp-block-paragraph">بازنشستگی ingress-nginx به این معنا نیست که کوبرنتیز دیگر از مدیریت ترافیک ورودی پشتیبانی نمی‌کند. این اکوسیستم از مدت‌ها قبل گزینه‌های مختلفی برای این منظور در اختیار کاربران قرار داده است و در اطلاعیه‌های رسمی هم به مهاجرت از ingress nginx یا انتخاب یک جایگزین مناسب توصیه شده است.</p>



<p class="wp-block-paragraph">انتخاب بهترین گزینه به عواملی مانند معماری کلاستر، نیازهای عملیاتی و برنامه بلندمدت سازمان بستگی دارد. برخی تیم‌ها فقط به دنبال جایگزینی Ingress Controller فعلی هستند و برخی دیگر ترجیح می‌دهند هم‌زمان به سمت فناوری‌های جدیدتر حرکت کنند. در ادامه برخی از مهم‌ترین جایگزین‌های ingress-nginx را معرفی می‌کنیم.</p>



<p class="wp-block-paragraph" id="h-traefik"><strong>Traefik</strong></p>



<p class="wp-block-paragraph">Traefik یکی از شناخته‌شده‌ترین Ingress Controllerهای کوبرنتیز است که علاوه بر Ingress API، از Gateway API هم پشتیبانی می‌کند. این ویژگی امکان مهاجرت تدریجی را برای بسیاری از تیم‌ها فراهم می‌کند. همچنین راه‌اندازی ساده، یکپارچگی مناسب با کوبرنتیز و پشتیبانی هم‌زمان از مدل‌های مختلف مدیریت ترافیک، از مهم‌ترین دلایل محبوبیت این پروژه است.</p>



<p class="wp-block-paragraph">Traefik معمولاً برای تیم‌هایی مناسب است که به دنبال مهاجرت کم‌دردسر از ingress-nginx هستند و می‌خواهند علاوه بر Ingress API، به‌تدریج از Gateway API نیز استفاده کنند. سادگی راه‌اندازی و مدیریت، این گزینه را برای کلاسترهای کوچک و متوسط جذاب کرده است.</p>



<p class="wp-block-paragraph"><strong>Kong Gateway</strong></p>



<p class="wp-block-paragraph">Kong Gateway یکی دیگر از گزینه‌های شناخته‌شده برای مدیریت ترافیک در Kubernetes است که علاوه بر قابلیت‌های Ingress Controller، امکانات گسترده‌ای در حوزه API Gateway نیز ارائه می‌دهد. این پروژه از Gateway API پشتیبانی می‌کند و برای سازمان‌هایی که علاوه بر مسیریابی ترافیک، به قابلیت‌هایی مانند احراز هویت، Rate Limiting، مدیریت API و سیاست‌های امنیتی پیشرفته نیاز دارند، گزینه مناسبی محسوب می‌شود.</p>



<p class="wp-block-paragraph" id="h-envoy-gateway"><strong>Envoy Gateway</strong></p>



<p class="wp-block-paragraph">Envoy Gateway با تمرکز بر Gateway API توسعه یافته است و بیشتر برای سازمان‌هایی مناسب است که قصد دارند معماری مدیریت ترافیک خود را بر پایه استانداردهای جدید کوبرنتیز طراحی کنند. این پروژه یکی از گزینه‌هایی است که در سال‌های اخیر توانسته توجه بسیاری از تیم‌های Cloud Native را به خود جلب کند.</p>



<p class="wp-block-paragraph">Envoy Gateway بیشتر برای سازمان‌هایی مناسب است که قصد دارند از ابتدا بر پایه Gateway API حرکت کنند یا به قابلیت‌های پیشرفته مدیریت ترافیک در معماری‌های Cloud Native و Microservices نیاز دارند.</p>



<p class="wp-block-paragraph" id="h-nginx-gateway-fabric"><strong>NGINX Gateway Fabric</strong></p>



<p class="wp-block-paragraph">NGINX Gateway Fabric راهکار دیگری است که بر پایه Gateway API توسعه یافته است و توسط اکوسیستم NGINX ارائه می‌شود. این گزینه می‌تواند برای تیم‌هایی که تجربه کار با محصولات NGINX را دارند، مسیر مهاجرت آشناتری ایجاد کند.</p>



<p class="wp-block-paragraph">NGINX Gateway Fabric گزینه مناسبی برای تیم‌هایی است که تجربه کار با NGINX را دارند و می‌خواهند ضمن استفاده از Gateway API، همچنان در اکوسیستم محصولات NGINX باقی بمانند.</p>



<p class="wp-block-paragraph"><strong>نکته مهم:</strong> در اطلاعیه رسمی بازنشستگی ingress-nginx، تیم کوبرنتیز استفاده از Gateway API را به‌عنوان یکی از مسیرهای آینده مدیریت ترافیک معرفی کرده است. البته Gateway API جایگزین مستقیم و یک‌به‌یک Ingress نیست و معمولا مهاجرت به آن به بررسی دقیق معماری فعلی نیاز دارد.</p>



<div class="wp-block-dh-blog-card-database-block card database">
<div class="wp-block-group row align-items-center is-nowrap is-layout-flex wp-container-core-group-is-layout-8f761849 wp-block-group-is-layout-flex">
<div class="wp-block-group col-md"><div class="wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow">
<h3 class="wp-block-heading" id="h-راه-اندازی-سریع-سرور-nginx-در-بازارچه-هم-روش">💡 راه‌اندازی سریع سرور NGINX در بازارچه هم‌روش</h3>



<p class="wp-block-paragraph"><br>✅ پرداخت به میزان استفاده (PAYG)<br>✅ بدون دغدغه نگهداری زیرساخت<br>✅ بکاپ خودکار روزانه</p>
</div></div>
</div>



<div class="wp-block-group col-md-auto"><div class="wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow">
<p class="wp-block-paragraph" id="h-"></p>



<p class="btn btn--main btn--wide wp-block-paragraph"><a href="https://console.hamravesh.com/marketplace/explore/oneclick_nginx" target="_blank" rel="noreferrer noopener">راه‌اندازی NGINX</a><a href="#"></a></p>
</div></div>
</div>



<h2 class="wp-block-heading" id="h-gateway-api-چرا-در-آینده-کوبرنتیز-اهمیت-بیشتری-پیدا-می-کند">Gateway API؛ چرا در آینده کوبرنتیز اهمیت بیشتری پیدا می‌کند؟</h2>



<p class="wp-block-paragraph"><a href="https://hamravesh.com/blog/what-is-kubernetes-gateway-api/" id="https://hamravesh.com/blog/what-is-kubernetes-gateway-api/" target="_blank" rel="noreferrer noopener">Gateway API در کوبرنتیز</a> مجموعه‌ای از APIهای جدید برای مدیریت ترافیک در کوبرنتیز است که با هدف ایجاد انعطاف‌پذیری بیشتر و پوشش سناریوهای پیچیده‌تر طراحی شده است. بسیاری از پروژه‌های جدید اکوسیستم کوبرنتیز هم توسعه خود را بر اساس این استاندارد انجام می‌دهند.</p>



<p class="wp-block-paragraph">یکی از دلایل توجه گسترده به Gateway API، رفع برخی محدودیت‌های مدل سنتی Ingress است. در این استاندارد، قابلیت‌هایی که پیش‌تر معمولاً از طریق Annotationهای اختصاصی هر Ingress Controller پیاده‌سازی می‌شدند، به‌صورت استاندارد و قابل حمل تعریف می‌شوند. همچنین تفکیک مسئولیت‌ها بین تیم‌های زیرساخت و توسعه ساده‌تر شده و امکان مدیریت سناریوهای پیچیده‌تر ترافیک فراهم می‌شود.</p>



<p class="wp-block-paragraph">البته این موضوع به معنای حذف Ingress API نیست. در واقع Ingress همچنان بخشی از کوبرنتیز  محسوب می‌شود و بسیاری از کلاسترها به استفاده از آن ادامه می‌دهند. با این حال، جهت‌گیری کلی اکوسیستم به سمت استفاده گسترده‌تر از Gateway API است و به همین دلیل بسیاری از سازمان‌ها هنگام برنامه‌ریزی برای مهاجرت از ingress nginx، این استاندارد را هم در ارزیابی‌های خود در نظر می‌گیرند.</p>



<h2 class="wp-block-heading" id="h-چرا-مهاجرت-از-ingress-nginx-همیشه-ساده-نیست">چرا مهاجرت از ingress-nginx همیشه ساده نیست؟</h2>



<p class="wp-block-paragraph">مهاجرت از ingress-nginx به یک کنترلر دیگر یا Gateway API، پیچیدگی‌های خاص خود را دارد و فراتر از تبدیل چند فایل YAML است. طی سال‌های گذشته، ingress-nginx رفتارها و قابلیت‌های خاصی را از طریق Annotationها و تنظیمات اختصاصی ارائه کرده که بخشی از استاندارد کوبرنتیز نیستند و احتمالا در راهکارهای دیگر باید به شکل متفاوت یا بدون معادل مستقیم پیاده‌سازی شوند. حتی اگر تبدیلات ظاهرا درست انجام شوند، ممکن است رفتار سرویس‌ها تغییر کند یا اختلالی ایجاد شود. بر اساس مستندات رسمی کوبرنتیز، هنگام مهاجرت باید به موارد زیر توجه ویژه داشت:</p>



<ul class="wp-block-list">
<li>پردازش مسیرهای مبتنی بر Regular Expression</li>



<li>تاثیر Annotationهای اختصاصی مانند use-regex</li>



<li>رفتار وابسته به rewrite-target</li>



<li>مدیریت مسیرهای دارای یا فاقد / انتهایی</li>



<li>تفاوت در URL Normalization</li>
</ul>



<p class="wp-block-paragraph">این موارد ممکن است در کنترلر جدید یا پیاده‌سازی‌های Gateway API به شکل متفاوتی عمل کنند، بنابراین قبل از انتقال کامل ترافیک، تنظیمات جدید باید به‌دقت بررسی و آزمایش شوند. جامعه کوبرنتیز ابزارهایی برای ساده‌تر کردن این فرایند توسعه داده است که در بخش بعدی به مهم‌ترین آن‌ها، یعنی Ingress2Gateway، می‌پردازیم.</p>



<h2 class="wp-block-heading" id="h-مهاجرت-واقعی-و-ابزارها-آموزش-عملی-با-ingress2gateway">مهاجرت واقعی و ابزارها؛ آموزش عملی با Ingress2Gateway</h2>



<p class="wp-block-paragraph">تا اینجا دیدیم که مهاجرت از ingress-nginx همیشه یک تبدیل ساده و یک‌به‌یک نیست. در واقع تفاوت در Annotationها، رفتارهای خاص این کنترلر و تفاوت معماری Gateway API باعث می‌شود که انتقال بدون برنامه‌ریزی، ریسک ایجاد اختلال در سرویس را به همراه داشته باشد.</p>



<p class="wp-block-paragraph">تیم SIG Network ابزار رسمی Ingress2Gateway را معرفی کرده است. در مستندات رسمی، این ابزار به‌عنوان یک Migration Assistant یا دستیار مهاجرت معرفی می‌شود&nbsp;که می‌تواند بررسی Ingressهای فعلی را انجام دهد و آن‌ها را تا حد امکان به Gateway API تبدیل کند. همچنین می‌تواند در عین حال، در مورد بخش‌هایی که نیاز به بازبینی دستی دارند به شما هشدار ‌دهد. به طور کلی، Ingress2Gateway سه هدف اصلی زیر را دنبال می‌کند:&nbsp;</p>



<ul class="wp-block-list">
<li><strong>تبدیل پیکربندی: </strong>ترجمه Ingressها و Annotationهای پشتیبانی‌شده به Gateway API</li>



<li><strong>شناسایی مشکلات: </strong>تشخیص تنظیماتی که معادل مستقیمی ندارند</li>



<li><strong>ارائه پیشنهاد: </strong>اعلام هشدارها و پیشنهاد برای اصلاح دستی</li>
</ul>



<h3 class="wp-block-heading" id="h-نسخه-۱-۰-چه-قابلیت-هایی-دارد">نسخه ۱.۰ چه قابلیت‌هایی دارد؟</h3>



<p class="wp-block-paragraph">نسخه ۱.۰ که در مارس ۲۰۲۶ منتشر شد، نسبت به نسخه‌های قبلی پیشرفت قابل توجهی داشته است. مهم‌ترین تغییرات این نسخه عبارت‌اند از:</p>



<ul class="wp-block-list">
<li>پشتیبانی از بیش از ۳۰ Annotation رایج ingress-nginx&nbsp;</li>



<li>پشتیبانی از قابلیت‌هایی مانند CORS ،Backend TLS ،Regex Matching و Path Rewrite&nbsp;</li>



<li>تست‌های یکپارچگی برای اطمینان از یکسان بودن رفتار Ingress-NGINX و Gateway API&nbsp;</li>



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



<h3 class="wp-block-heading" id="h-مرحله-اول-نصب-ingress2gateway">مرحله اول: نصب Ingress2Gateway</h3>



<p class="wp-block-paragraph">برای استفاده از این ابزار، ابتدا باید آن را نصب کنید. اگر روی سیستم خود محیط Go را دارید، می‌توانید با دستور زیر آخرین نسخه پایدار را نصب کنید:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:clamp(24px, 1.5rem, 36px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2d333d;color:#9eadbd">Bash</span><span role="button" tabindex="0" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>go install github.com/kubernetes-sigs/ingress2gateway@v1.0.0</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #F69D50">go</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">install</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">github.com/kubernetes-sigs/ingress2gateway@v1.0.0</span></span></code></pre></div>



<p class="wp-block-paragraph">اگر از macOS و Homebrew استفاده می‌کنید، دستور نصب آن ساده‌تر است:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:clamp(24px, 1.5rem, 36px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2d333d;color:#9eadbd">Bash</span><span role="button" tabindex="0" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>brew install ingress2gateway</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #F69D50">brew</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">install</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">ingress2gateway</span></span></code></pre></div>



<p class="wp-block-paragraph">همچنین امکان دانلود فایل باینری از <a href="https://github.com/kubernetes-sigs/ingress2gateway/releases/tag/v1.0.0" id="https://github.com/kubernetes-sigs/ingress2gateway/releases/tag/v1.0.0">GitHub</a> یا <a href="https://github.com/kubernetes-sigs/ingress2gateway/" id="https://github.com/kubernetes-sigs/ingress2gateway/">کامپایل ابزار از سورس</a> هم وجود دارد.</p>



<h3 class="wp-block-heading" id="h-مرحله-دوم-اجرای-ingress2gateway">مرحله دوم: اجرای Ingress2Gateway</h3>



<p class="wp-block-paragraph">پس از نصب می‌توانید مانیفست‌های Ingress را به Ingress2Gateway ارسال کنید، یا ابزار را مستقیما از کلاستر خود بخوانید.</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:clamp(24px, 1.5rem, 36px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2d333d;color:#9eadbd">Bash</span><span role="button" tabindex="0" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly># ارسال به فایل
ingress2gateway print --input-file my-manifest.yaml,my-other-manifest.yaml --providers=ingress-nginx > gwapi.yaml
# استفاده از فضای نام در کلاستر خودتان
ingress2gateway print --namespace my-api --providers=ingress-nginx > gwapi.yaml
# یا برای کل کلاستر
ingress2gateway print --providers=ingress-nginx --all-namespaces > gwapi.yaml</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #768390"># ارسال به فایل</span></span>
<span class="line"><span style="color: #F69D50">ingress2gateway</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">print</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">--input-file</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">my-manifest.yaml,my-other-manifest.yaml</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">--providers=ingress-nginx</span><span style="color: #ADBAC7"> </span><span style="color: #F47067">&gt;</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">gwapi.yaml</span></span>
<span class="line"><span style="color: #768390"># استفاده از فضای نام در کلاستر خودتان</span></span>
<span class="line"><span style="color: #F69D50">ingress2gateway</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">print</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">--namespace</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">my-api</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">--providers=ingress-nginx</span><span style="color: #ADBAC7"> </span><span style="color: #F47067">&gt;</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">gwapi.yaml</span></span>
<span class="line"><span style="color: #768390"># یا برای کل کلاستر</span></span>
<span class="line"><span style="color: #F69D50">ingress2gateway</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">print</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">--providers=ingress-nginx</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">--all-namespaces</span><span style="color: #ADBAC7"> </span><span style="color: #F47067">&gt;</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">gwapi.yaml</span></span></code></pre></div>



<p class="wp-block-paragraph">نکته: همچنین می‌توانید <code>--emitter &lt;agentgateway|envoy-gateway|kgateway&gt;</code> را برای خروجی پسوندهای خاص پیاده‌سازی ارسال کنید.</p>



<h3 class="wp-block-heading" id="h-مرحله-سوم-بررسی-خروجی">مرحله سوم: بررسی خروجی</h3>



<p class="wp-block-paragraph">این مهم‌ترین مرحله است. دستورات بخش قبلی یک مانیفست Gateway API را در gwapi.yaml خروجی می‌دهند. همچنین هشدارهایی منتشر می‌کنند که توضیح می‌دهند چه چیزی دقیقا ترجمه نشده است و چه چیزی را باید به صورت دستی مرور کنید.</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:clamp(24px, 1.5rem, 36px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2d333d;color:#9eadbd">Bash</span><span role="button" tabindex="0" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
  annotations:
    gateway.networking.k8s.io/generator: ingress2gateway-dev
  name: nginx
  namespace: my-ns
spec:
  gatewayClassName: nginx
  listeners:
  - hostname: my-host.example.com
    name: my-host-example-com-http
    port: 80
    protocol: HTTP
  - hostname: my-host.example.com
    name: my-host-example-com-https
    port: 443
    protocol: HTTPS
    tls:
      certificateRefs:
      - group: ""
        kind: Secret
        name: my-secret
---
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
  annotations:
    gateway.networking.k8s.io/generator: ingress2gateway-dev
  name: my-ingress-my-host-example-com
  namespace: my-ns
spec:
  hostnames:
  - my-host.example.com
  parentRefs:
  - name: nginx
    port: 443
  rules:
  - backendRefs:
    - name: website-service
      port: 80
    filters:
    - cors:
        allowCredentials: true
        allowHeaders:
        - DNT
        - Keep-Alive
        - User-Agent
        - X-Requested-With
        - If-Modified-Since
        - Cache-Control
        - Content-Type
        - Range
        - Authorization
        allowMethods:
        - GET
        - PUT
        - POST
        - DELETE
        - PATCH
        - OPTIONS
        allowOrigins:
        - '*'
        maxAge: 1728000
      type: CORS
    matches:
    - path:
        type: RegularExpression
        value: (?i)/users/(\d+).*
    name: rule-0
    timeouts:
      request: 10s
---
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
  annotations:
    gateway.networking.k8s.io/generator: ingress2gateway-dev
  name: my-ingress-my-host-example-com-ssl-redirect
  namespace: my-ns
spec:
  hostnames:
  - my-host.example.com
  parentRefs:
  - name: nginx
    port: 80
  rules:
  - filters:
    - requestRedirect:
        scheme: https
        statusCode: 308
      type: RequestRedirect</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #F69D50">apiVersion:</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">gateway.networking.k8s.io/v1</span></span>
<span class="line"><span style="color: #F69D50">kind:</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">Gateway</span></span>
<span class="line"><span style="color: #F69D50">metadata:</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F69D50">annotations:</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F69D50">gateway.networking.k8s.io/generator:</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">ingress2gateway-dev</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F69D50">name:</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">nginx</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F69D50">namespace:</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">my-ns</span></span>
<span class="line"><span style="color: #F69D50">spec:</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F69D50">gatewayClassName:</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">nginx</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F69D50">listeners:</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F69D50">-</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">hostname:</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">my-host.example.com</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F69D50">name:</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">my-host-example-com-http</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F69D50">port:</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">80</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F69D50">protocol:</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">HTTP</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F69D50">-</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">hostname:</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">my-host.example.com</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F69D50">name:</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">my-host-example-com-https</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F69D50">port:</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">443</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F69D50">protocol:</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">HTTPS</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F69D50">tls:</span></span>
<span class="line"><span style="color: #ADBAC7">      </span><span style="color: #F69D50">certificateRefs:</span></span>
<span class="line"><span style="color: #ADBAC7">      </span><span style="color: #F69D50">-</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">group:</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">&quot;&quot;</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #F69D50">kind:</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">Secret</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #F69D50">name:</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">my-secret</span></span>
<span class="line"><span style="color: #F69D50">---</span></span>
<span class="line"><span style="color: #F69D50">apiVersion:</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">gateway.networking.k8s.io/v1</span></span>
<span class="line"><span style="color: #F69D50">kind:</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">HTTPRoute</span></span>
<span class="line"><span style="color: #F69D50">metadata:</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F69D50">annotations:</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F69D50">gateway.networking.k8s.io/generator:</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">ingress2gateway-dev</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F69D50">name:</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">my-ingress-my-host-example-com</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F69D50">namespace:</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">my-ns</span></span>
<span class="line"><span style="color: #F69D50">spec:</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F69D50">hostnames:</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F69D50">-</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">my-host.example.com</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F69D50">parentRefs:</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F69D50">-</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">name:</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">nginx</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F69D50">port:</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">443</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F69D50">rules:</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F69D50">-</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">backendRefs:</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F69D50">-</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">name:</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">website-service</span></span>
<span class="line"><span style="color: #ADBAC7">      </span><span style="color: #F69D50">port:</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">80</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F69D50">filters:</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F69D50">-</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">cors:</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #F69D50">allowCredentials:</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">true</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #F69D50">allowHeaders:</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #F69D50">-</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">DNT</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #F69D50">-</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">Keep-Alive</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #F69D50">-</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">User-Agent</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #F69D50">-</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">X-Requested-With</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #F69D50">-</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">If-Modified-Since</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #F69D50">-</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">Cache-Control</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #F69D50">-</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">Content-Type</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #F69D50">-</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">Range</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #F69D50">-</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">Authorization</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #F69D50">allowMethods:</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #F69D50">-</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">GET</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #F69D50">-</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">PUT</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #F69D50">-</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">POST</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #F69D50">-</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">DELETE</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #F69D50">-</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">PATCH</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #F69D50">-</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">OPTIONS</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #F69D50">allowOrigins:</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #F69D50">-</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">&#39;*&#39;</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #F69D50">maxAge:</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">1728000</span></span>
<span class="line"><span style="color: #ADBAC7">      </span><span style="color: #6CB6FF">type</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">CORS</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F69D50">matches:</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F69D50">-</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">path:</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #6CB6FF">type</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">RegularExpression</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #F69D50">value:</span><span style="color: #ADBAC7"> (?i)/users/(</span><span style="color: #F69D50">\d+</span><span style="color: #ADBAC7">).</span><span style="color: #F47067">*</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F69D50">name:</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">rule-0</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F69D50">timeouts:</span></span>
<span class="line"><span style="color: #ADBAC7">      </span><span style="color: #F69D50">request:</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">10</span><span style="color: #96D0FF">s</span></span>
<span class="line"><span style="color: #F69D50">---</span></span>
<span class="line"><span style="color: #F69D50">apiVersion:</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">gateway.networking.k8s.io/v1</span></span>
<span class="line"><span style="color: #F69D50">kind:</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">HTTPRoute</span></span>
<span class="line"><span style="color: #F69D50">metadata:</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F69D50">annotations:</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F69D50">gateway.networking.k8s.io/generator:</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">ingress2gateway-dev</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F69D50">name:</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">my-ingress-my-host-example-com-ssl-redirect</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F69D50">namespace:</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">my-ns</span></span>
<span class="line"><span style="color: #F69D50">spec:</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F69D50">hostnames:</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F69D50">-</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">my-host.example.com</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F69D50">parentRefs:</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F69D50">-</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">name:</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">nginx</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F69D50">port:</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">80</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F69D50">rules:</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F69D50">-</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">filters:</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F69D50">-</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">requestRedirect:</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #F69D50">scheme:</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">https</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #F69D50">statusCode:</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">308</span></span>
<span class="line"><span style="color: #ADBAC7">      </span><span style="color: #6CB6FF">type</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">RequestRedirect</span></span></code></pre></div>



<p class="wp-block-paragraph">همان‌طور که در بالا مشاهده کردید، Ingress2Gateway با موفقیت برخی annotationها را به معادل‌های Gateway API خود ترجمه کرد. به عنوان مثال، <code>nginx.ingress.kubernetes.io/enable-cors</code> به یک فیلتر CORS ترجمه شد، اما با بررسی دقیق‌تر، annotationهای <code>nginx.ingress.kubernetes.io/proxy-{read,send}-timeout</code> و <code>nginx.ingress.kubernetes.io/proxy-body-size</code> کاملا نگاشت نمی‌شوند. لاگ‌ها دلیل این حذفیات و همچنین استدلال پشت ترجمه را نشان می‌دهند.</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:clamp(24px, 1.5rem, 36px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2d333d;color:#9eadbd">Plaintext</span><span role="button" tabindex="0" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>┌─ WARN  ────────────────────────────────────────
│  Unsupported annotation nginx.ingress.kubernetes.io/configuration-snippet
│  source: INGRESS-NGINX
│  object: Ingress: my-ns/my-ingress
└─
┌─ INFO  ────────────────────────────────────────
│  Using case-insensitive regex path matches. You may want to change this.
│  source: INGRESS-NGINX
│  object: HTTPRoute: my-ns/my-ingress-my-host-example-com
└─
┌─ WARN  ────────────────────────────────────────
│  ingress-nginx only supports TCP-level timeouts; i2gw has made a best-effort translation to Gateway API timeouts.request. Please verify that this meets your needs. See documentation: https://gateway-api.sigs.k8s.io/guides/http-timeouts/
│  source: INGRESS-NGINX
│  object: HTTPRoute: my-ns/my-ingress-my-host-example-com
└─
┌─ WARN  ────────────────────────────────────────
│  Failed to apply my-ns.my-ingress.metadata.annotations."nginx.ingress.kubernetes.io/proxy-body-size" from my-ns/my-ingress: Most Gateway API implementations have reasonable body size and buffering defaults
│  source: STANDARD_EMITTER
│  object: HTTPRoute: my-ns/my-ingress-my-host-example-com
└─
┌─ WARN  ────────────────────────────────────────
│  Gateway API does not support configuring URL normalization (RFC 3986, Section 6). Please check if this matters for your use case and consult implementation-specific details.
│  source: STANDARD_EMITTER
└─</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #adbac7">┌─ WARN  ────────────────────────────────────────</span></span>
<span class="line"><span style="color: #adbac7">│  Unsupported annotation nginx.ingress.kubernetes.io/configuration-snippet</span></span>
<span class="line"><span style="color: #adbac7">│  source: INGRESS-NGINX</span></span>
<span class="line"><span style="color: #adbac7">│  object: Ingress: my-ns/my-ingress</span></span>
<span class="line"><span style="color: #adbac7">└─</span></span>
<span class="line"><span style="color: #adbac7">┌─ INFO  ────────────────────────────────────────</span></span>
<span class="line"><span style="color: #adbac7">│  Using case-insensitive regex path matches. You may want to change this.</span></span>
<span class="line"><span style="color: #adbac7">│  source: INGRESS-NGINX</span></span>
<span class="line"><span style="color: #adbac7">│  object: HTTPRoute: my-ns/my-ingress-my-host-example-com</span></span>
<span class="line"><span style="color: #adbac7">└─</span></span>
<span class="line"><span style="color: #adbac7">┌─ WARN  ────────────────────────────────────────</span></span>
<span class="line"><span style="color: #adbac7">│  ingress-nginx only supports TCP-level timeouts; i2gw has made a best-effort translation to Gateway API timeouts.request. Please verify that this meets your needs. See documentation: https://gateway-api.sigs.k8s.io/guides/http-timeouts/</span></span>
<span class="line"><span style="color: #adbac7">│  source: INGRESS-NGINX</span></span>
<span class="line"><span style="color: #adbac7">│  object: HTTPRoute: my-ns/my-ingress-my-host-example-com</span></span>
<span class="line"><span style="color: #adbac7">└─</span></span>
<span class="line"><span style="color: #adbac7">┌─ WARN  ────────────────────────────────────────</span></span>
<span class="line"><span style="color: #adbac7">│  Failed to apply my-ns.my-ingress.metadata.annotations.&quot;nginx.ingress.kubernetes.io/proxy-body-size&quot; from my-ns/my-ingress: Most Gateway API implementations have reasonable body size and buffering defaults</span></span>
<span class="line"><span style="color: #adbac7">│  source: STANDARD_EMITTER</span></span>
<span class="line"><span style="color: #adbac7">│  object: HTTPRoute: my-ns/my-ingress-my-host-example-com</span></span>
<span class="line"><span style="color: #adbac7">└─</span></span>
<span class="line"><span style="color: #adbac7">┌─ WARN  ────────────────────────────────────────</span></span>
<span class="line"><span style="color: #adbac7">│  Gateway API does not support configuring URL normalization (RFC 3986, Section 6). Please check if this matters for your use case and consult implementation-specific details.</span></span>
<span class="line"><span style="color: #adbac7">│  source: STANDARD_EMITTER</span></span>
<span class="line"><span style="color: #adbac7">└─</span></span></code></pre></div>



<p class="wp-block-paragraph">یک هشدار وجود دارد که Ingress2Gateway از annotation نوع <code>nginx.ingress.kubernetes.io/configuration-snippet</code> پشتیبانی نمی‌کند. برای دیدن اینکه آیا راهی برای دستیابی به رفتار معادل وجود دارد، باید مستندات پیاده‌سازی Gateway API خود را بررسی کنید.</p>



<p class="wp-block-paragraph">این ابزار همچنین به ما اطلاع داد که تطابق‌های ریجکس Ingress-NGINX تطابق‌های پیشوندی غیر حساس به حروف کوچک و بزرگ هستند. به همین دلیل یک الگوی تطابق <code>(?i)/users/(\d+).*</code> وجود دارد. بیشتر سازمان‌ها می‌خواهند این رفتار را با حذف <code>(?i)</code> ابتدایی و <code>.*</code> انتهایی از الگوی مسیر به یک تطابق دقیق و حساس به حروف کوچک و بزرگ تغییر دهند.</p>



<p class="wp-block-paragraph">Ingress2Gateway ترجمه‌ای با بهترین تلاش از annotationهای <code>nginx.ingress.kubernetes.io/proxy-{send,read}-timeout</code> به یک زمان انتظار درخواست ۱۰ ثانیه در مسیر HTTP ما انجام داد. اگر درخواست‌های این سرویس باید بسیار کوتاه‌تر باشد (مثلا ۳ ثانیه)، می‌توانید تغییرات مربوطه را در مانیفست‌های Gateway API خود اعمال کنید.</p>



<p class="wp-block-paragraph">همچنین، <code>nginx.ingress.kubernetes.io/proxy-body-size</code> معادل Gateway API ندارد، بنابراین ترجمه نشده است. البته با این حال، بیشتر پیاده‌سازی‌های Gateway API، پیش‌فرض‌های معقولی برای حداکثر اندازه بدنه و بافرینگ دارند، بنابراین این موضوع، ممکن است در عمل مشکلی ایجاد نکند.</p>



<p class="wp-block-paragraph">علاوه بر این، برخی emitterها ممکن است پشتیبانی از این annotation را از طریق پسوندهای خاص پیاده‌سازی ارائه دهند. به عنوان مثال، افزودن فلگ <code>--emitter agentgateway</code> یا <code>--emitter envoy-gateway</code> یا <code>--emitter kgateway</code> به دستور <code>ingress2gateway print</code> قبلی منجر به پیکربندی خاص پیاده‌سازی اضافی در مانیفست‌های Gateway API تولید شده می‌شد که سعی در ثبت پیکربندی اندازه بدنه (body size) داشت. </p>



<p class="wp-block-paragraph">همچنین یک هشدار در مورد نرمالایز کردن URL می‌بینیم. پیاده‌سازی‌های Gateway API مانند Agentgateway ،Envoy Gateway ،Kgateway و Istio دارای سطحی از عادی‌سازی URL هستند؛ اما رفتار در پیاده‌سازی‌ها متفاوت است و از طریق Gateway API استاندارد قابل تنظیم نیست. شما باید رفتار عادی‌سازی URL پیاده‌سازی Gateway API خود را بررسی و آزمایش کنید تا مطمئن شوید با مورد استفاده شما سازگار است.</p>



<p class="wp-block-paragraph">همچنین برای مطابقت با رفتار پیش‌فرض Ingress-NGINX، ابزار  Ingress2Gateway یک شنونده در پورت ۸۰ و یک فیلتر تغییر مسیر درخواست HTTP برای هدایت ترافیک HTTP به HTTPS اضافه کرد. ممکن است اصلا نخواهید به ترافیک HTTP سرویس بدهید و شنونده پورت ۸۰ و HTTPRoute مربوطه را حذف کنید.</p>



<p class="wp-block-paragraph"><strong>هشدار: </strong>همیشه خروجی و لاگ‌های تولید شده را به طور کامل مرور کنید.</p>



<p class="wp-block-paragraph">پس از اعمال دستی این تغییرات، مانیفست‌های Gateway API ممکن است به شکل زیر باشد:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:clamp(24px, 1.5rem, 36px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2d333d;color:#9eadbd">Bash</span><span role="button" tabindex="0" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>---
apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
  annotations:
    gateway.networking.k8s.io/generator: ingress2gateway-dev
  name: nginx
  namespace: my-ns
spec:
  gatewayClassName: nginx
  listeners:
  - hostname: my-host.example.com
    name: my-host-example-com-https
    port: 443
    protocol: HTTPS
    tls:
      certificateRefs:
      - group: ""
        kind: Secret
        name: my-secret
---
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
  annotations:
    gateway.networking.k8s.io/generator: ingress2gateway-dev
  name: my-ingress-my-host-example-com
  namespace: my-ns
spec:
  hostnames:
  - my-host.example.com
  parentRefs:
  - name: nginx
    port: 443
  rules:
  - backendRefs:
    - name: website-service
      port: 80
    filters:
    - cors:
        allowCredentials: true
        allowHeaders:
        - DNT
        ...
        allowMethods:
        - GET
        ...
        allowOrigins:
        - '*'
        maxAge: 1728000
      type: CORS
    matches:
    - path:
        type: RegularExpression
        value: /users/(\d+)
    name: rule-0
    timeouts:
      request: 3s</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #F69D50">---</span></span>
<span class="line"><span style="color: #F69D50">apiVersion:</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">gateway.networking.k8s.io/v1</span></span>
<span class="line"><span style="color: #F69D50">kind:</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">Gateway</span></span>
<span class="line"><span style="color: #F69D50">metadata:</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F69D50">annotations:</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F69D50">gateway.networking.k8s.io/generator:</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">ingress2gateway-dev</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F69D50">name:</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">nginx</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F69D50">namespace:</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">my-ns</span></span>
<span class="line"><span style="color: #F69D50">spec:</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F69D50">gatewayClassName:</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">nginx</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F69D50">listeners:</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F69D50">-</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">hostname:</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">my-host.example.com</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F69D50">name:</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">my-host-example-com-https</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F69D50">port:</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">443</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F69D50">protocol:</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">HTTPS</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F69D50">tls:</span></span>
<span class="line"><span style="color: #ADBAC7">      </span><span style="color: #F69D50">certificateRefs:</span></span>
<span class="line"><span style="color: #ADBAC7">      </span><span style="color: #F69D50">-</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">group:</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">&quot;&quot;</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #F69D50">kind:</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">Secret</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #F69D50">name:</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">my-secret</span></span>
<span class="line"><span style="color: #F69D50">---</span></span>
<span class="line"><span style="color: #F69D50">apiVersion:</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">gateway.networking.k8s.io/v1</span></span>
<span class="line"><span style="color: #F69D50">kind:</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">HTTPRoute</span></span>
<span class="line"><span style="color: #F69D50">metadata:</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F69D50">annotations:</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F69D50">gateway.networking.k8s.io/generator:</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">ingress2gateway-dev</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F69D50">name:</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">my-ingress-my-host-example-com</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F69D50">namespace:</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">my-ns</span></span>
<span class="line"><span style="color: #F69D50">spec:</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F69D50">hostnames:</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F69D50">-</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">my-host.example.com</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F69D50">parentRefs:</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F69D50">-</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">name:</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">nginx</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F69D50">port:</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">443</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F69D50">rules:</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F69D50">-</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">backendRefs:</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F69D50">-</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">name:</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">website-service</span></span>
<span class="line"><span style="color: #ADBAC7">      </span><span style="color: #F69D50">port:</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">80</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F69D50">filters:</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F69D50">-</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">cors:</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #F69D50">allowCredentials:</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">true</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #F69D50">allowHeaders:</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #F69D50">-</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">DNT</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #6CB6FF">...</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #F69D50">allowMethods:</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #F69D50">-</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">GET</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #6CB6FF">...</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #F69D50">allowOrigins:</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #F69D50">-</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">&#39;*&#39;</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #F69D50">maxAge:</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">1728000</span></span>
<span class="line"><span style="color: #ADBAC7">      </span><span style="color: #6CB6FF">type</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">CORS</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F69D50">matches:</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F69D50">-</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">path:</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #6CB6FF">type</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">RegularExpression</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #F69D50">value:</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">/users/</span><span style="color: #ADBAC7">(</span><span style="color: #F69D50">\d+</span><span style="color: #ADBAC7">)</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F69D50">name:</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">rule-0</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F69D50">timeouts:</span></span>
<span class="line"><span style="color: #ADBAC7">      </span><span style="color: #F69D50">request:</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">3</span><span style="color: #96D0FF">s</span></span></code></pre></div>



<h3 class="wp-block-heading" id="h-مرحله-چهارم-بازبینی-verify">مرحله چهارم: بازبینی (Verify)</h3>



<p class="wp-block-paragraph">اکنون که مانیفست‌های Gateway API را دارید، باید آنها را به طور کامل در یک کلاستر توسعه آزمایش کنید. در این مورد، حداقل باید بررسی کنید که پیش‌فرض‌های حداکثر اندازه بدنه پیاده‌سازی Gateway API برای شما مناسب است و تأیید کنید که زمان انتظار ۳ ثانیه کافی است.</p>



<p class="wp-block-paragraph">پس از تایید رفتار در یک کلاستر توسعه، پیکربندی Gateway API خود را در کنار Ingress موجود خود مستقر کنید. پیشنهاد می‌کنیم که ترافیک را با استفاده از DNS وزن‌دار، لود بالانسر ابری خود یا ویژگی‌های تقسیم ترافیک پلتفرم خود به تدریج تغییر دهید. به این ترتیب، می‌توانید به سرعت، هرگونه پیکربندی اشتباهی را که از تست‌های شما عبور کرده است، بازیابی کنید.</p>



<p class="wp-block-paragraph">در نهایت، پس از انتقال کامل ترافیک به کنترلر Gateway API، ابتدا منابع Ingress را حذف و سپس کنترلر Ingress قدیمی را uninstall کنید.</p>



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



<p class="wp-block-paragraph">مهم‌ترین نکته این است که مهاجرت از ingress-nginx را نباید به زمانی موکول کرد که یک آسیب‌پذیری یا ناسازگاری عملیاتی شما را مجبور به تغییر کند. هرچه وابستگی به ingress-nginx بیشتر شود، هزینه و پیچیدگی مهاجرت نیز افزایش خواهد یافت.</p>



<p class="wp-block-paragraph">گزینه‌های جایگزین شامل Traefik ،Envoy Gateway ،Kong Gateway و NGINX Gateway Fabric هستند و مسیر آینده اکوسیستم، Gateway API است. با برنامه‌ریزی درست، بررسی زیرساخت، اصلاح مانیفست‌ها و تست در محیط توسعه، می‌توانید مهاجرت تدریجی و امن را انجام دهید و بدون اختلال سرویس‌ها، به معماری مدرن کوبرنتیز برسید.</p>



<p class="wp-block-paragraph"></p>
<p>The post <a href="https://hamravesh.com/blog/ingress-nginx-retirement/">بازنشستگی Ingress NGINX؛ ریسک‌ها، جایگزین‌ها و مسیر مهاجرت</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://hamravesh.com/blog/ingress-nginx-retirement/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>حمله HTTP/2 Bomb چیست؟ کالبدشکافی حمله، تأثیر بر nginx و راهکارهای مقابله</title>
		<link>https://hamravesh.com/blog/discover-http-2-bomb-dos-attack/</link>
					<comments>https://hamravesh.com/blog/discover-http-2-bomb-dos-attack/#respond</comments>
		
		<dc:creator><![CDATA[هم‌روش]]></dc:creator>
		<pubDate>Mon, 08 Jun 2026 15:09:45 +0000</pubDate>
				<category><![CDATA[شبکه]]></category>
		<category><![CDATA[دواپس]]></category>
		<category><![CDATA[مقالات]]></category>
		<guid isPermaLink="false">https://hamravesh.com/blog/?p=5266</guid>

					<description><![CDATA[<p>جلوگیری از حمله HTTP/2 Bomb به یکی از موضوعات مهم امنیت زیرساخت‌های وب تبدیل شده است. HTTP/2 Bomb یک تکنیک حمله Denial-of-Service (DoS) است که تیم تحقیقاتی شرکت Calif در ژوئن ۲۰۲۶ با کمک مدل هوش مصنوعی OpenAI Codex آن را معرفی کرد. </p>
<p>The post <a href="https://hamravesh.com/blog/discover-http-2-bomb-dos-attack/">حمله HTTP/2 Bomb چیست؟ کالبدشکافی حمله، تأثیر بر nginx و راهکارهای مقابله</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">HTTP/2 Bomb یکی از جدیدترین تکنیک‌های حمله مبتنی بر HTTP/2 است که در ژوئن ۲۰۲۶ معرفی شد. این حمله می‌تواند با ترکیب دو مکانیزم استاندارد در پروتکل HTTP/2 مصرف حافظه سرور را افزایش دهد و باعث اختلال در سرویس شود. نکته مهم این است که HTTP/2 Bomb یک آسیب‌پذیری ناشناخته نیست و از ترکیب قابلیت‌هایی استفاده می‌کند که سال‌ها در HTTP/2 وجود داشته‌اند. در این مقاله بررسی می‌کنیم حمله HTTP/2 Bomb چیست و چه تفاوتی با ا دارد، چگونه باعث حمله مصرف حافظه سرور می‌شود و برای جلوگیری از این حمله و مقابله با حملات HTTP/2 چه راهکارهایی ارائه شده است.</p>



<div class="wp-block-group is-vertical is-content-justification-left is-layout-flex wp-container-core-group-is-layout-ddd31865 wp-block-group-is-layout-flex">
<h2 class="wp-block-heading" id="h-آنچه-در-این-مطلب-می-خوانید">آنچه در این مطلب می‌خوانید</h2>



<h3 class="wp-block-heading" id="h-خلاصه">خلاصه</h3>



<p class="wp-block-paragraph">HTTP/2 Bomb یک حمله DoS است که با ترکیب HPACK و Flow Control در HTTP/2 باعث مصرف غیرعادی حافظه و کندی شدید یا اختلال سرویس می‌شود. این مشکل بیشتر به نحوه پیاده‌سازی سرویس‌های سرورها مربوط است تا یک باگ مستقل.</p>



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



<ul class="wp-block-list">
<li>روش سوءاستفاده، ترکیب HPACK و Flow Control در HTTP/2 است</li>



<li> هدف حمله، ایجاد فشار بر حافظه و کندی پایدار است و نه صرفاً ایجاد OOM</li>



<li> شدت اثر، وابسته به پیاده‌سازی در nginx، Apache، Envoy و IIS است</li>



<li> کنترل‌های ساده هدر، برای مقابله با این حمله کافی نیستند</li>



<li>راهکارهای جلوگیری، شامل به‌روزرسانی سرویس‌ها، محدودسازی هدر و stream، استفاده از CDN یا reverse proxy و اعمال memory limit است</li>



<li> نتیجه اصلی این است که ترکیب قابلیت‌های استاندارد می‌تواند سناریوی حمله جدید ایجاد کند</li>
</ul>
</div>



<h2 class="wp-block-heading" id="h-چگونه-ویژگی-های-http-2-به-سطح-حمله-تبدیل-شد">چگونه ویژگی‌های HTTP/2 به سطح حمله تبدیل شد؟</h2>



<p class="wp-block-paragraph">پروتکل HTTP/2 با هدف بهبود عملکرد وب و کاهش سربار ارتباطات معرفی شد. قابلیت‌هایی مانند فشرده‌سازی هدرها (HPACK) و کنترل جریان (Flow-Control Window) باعث افزایش سرعت و کاهش مصرف پهنای باند شده‌اند، اما این دو ویژگی در حمله HTTP/2 Bomb توسط مهاجم به ابزار افزایش مصرف حافظه سرور تبدیل می‌شوند.&nbsp;موفقیت HTTP/2 Bomb به این دلیل است که یکی از این قابلیت‌ها حافظه را تخصیص می‌دهد و دیگری مانع آزاد شدن آن می‌شود. نتیجه، انباشت تدریجی حافظه و کاهش پاسخ‌دهی سرور است.</p>



<p class="wp-block-paragraph"><strong>HPACK:</strong> یک الگوریتم فشرده‌سازی وضعیت‌دار است که رشته‌های هدر را در یک جدول داینامیک ذخیره می‌کند. در درخواست‌های بعدی، به جای ارسال کامل هدر، تنها یک index ارسال می‌شود. این مکانیزم باعث کاهش سربار هدرها می‌شود، اما در ترکیب با کنترل جریان، مهاجم می‌تواند حافظه زیادی روی سرور رزرو کند.</p>



<p class="wp-block-paragraph"><strong>کنترل جریان (Flow-Control Window):</strong> به گیرنده امکان می‌دهد میزان داده قابل دریافت را محدود کند. مهاجم می‌تواند با ارسال داده کم و نگه داشتن اتصال باز، حافظه رزرو شده را آزاد نکند و در نتیجه باعث افزایش مصرف حافظه، کاهش کارایی و افت پاسخ‌دهی سرور شود.</p>



<p class="wp-block-paragraph">این دو مکانیزم دقیقا موتور اصلی HTTP/2 Bomb هستند. در بخش بعد، سازوکار دقیق حمله و ترکیب دو تکنیک را مرحله به مرحله بررسی می‌کنیم.</p>



<h2 class="wp-block-heading" id="h-کالبدشکافی-حمله-http-2-bomb-چگونه-کار-می-کند">کالبدشکافی حمله؛ HTTP/2 Bomb چگونه کار می‌کند؟</h2>



<p class="wp-block-paragraph">هسته حمله از ترکیب دو قابلیت داخلی HTTP/2 ساخته شده است که هر یک به تنهایی برای بهبود عملکرد وب استفاده می‌شدند، اما کنار هم مسیر جدیدی برای حمله DoS ایجاد کرده‌اند.</p>



<h3 class="wp-block-heading" id="h-hpack-bomb-وقتی-یک-بایت-به-هزاران-بایت-تبدیل-می-شود">HPACK Bomb: وقتی یک بایت به هزاران بایت تبدیل می‌شود</h3>



<p class="wp-block-paragraph">HPACK هدرها را در جدول داینامیک ذخیره می‌کند. مهاجم ابتدا یک هدر را ثبت و سپس هزاران بار تنها با یک index به آن ارجاع می‌دهد. حجم داده ارسالی کم است، اما سرور برای هر ارجاع باید اطلاعات مربوط به هدر را در حافظه ایجاد کند. برخلاف نسخه‌های قدیمی HPACK Bomb، حتی هدرهای کوچک یا خالی باعث مصرف حافظه قابل توجه می‌شوند. همچنین محدودیت‌های قدیمی روی حجم هدرهای Decode شده در برابر این روش بی‌اثر هستند.</p>



<h3 class="wp-block-heading" id="h-flow-control-چگونه-حافظه-آزاد-نمی-شود">Flow Control: چگونه حافظه آزاد نمی‌شود؟</h3>



<p class="wp-block-paragraph">کنترل جریان HTTP/2 به سرور امکان می‌دهد میزان داده قابل دریافت را محدود کند. مهاجم پس از ایجاد تخصیص حافظه، اندازه پنجره را روی صفر قرار داده و با ارسال WINDOW_UPDATE کوچک، اتصال را باز نگه می‌دارد. حافظه اشغال‌شده برای مدت طولانی باقی می‌ماند و سرور تحت فشار قرار می‌گیرد.</p>



<p class="wp-block-paragraph">در یک حمله واقعی، هدف مهاجم لزوماً رساندن فرایند به وضعیت OOM (مخفف Out-of-Memory) نیست؛ وضعیتی که در آن سیستم به دلیل کمبود حافظه، برخی پردازش‌ها را به‌طور اجباری متوقف می‌کند. اگر در حالت OOM، پردازش توسط OOM Killer متوقف شود، معمولاً Worker به‌سرعت مجدداً راه‌اندازی می‌شود و بخشی از اثر حمله از بین می‌رود. راهبرد مؤثرتر این است که مصرف حافظه درست در آستانه فعال شدن OOM نگه داشته شود؛ به‌طوری که سیستم ناچار به استفاده گسترده از حافظه Swap شود. در این وضعیت، اگرچه سرویس کاملاً از دسترس خارج نمی‌شود، اما زمان پاسخ‌دهی به‌شدت افزایش می‌یابد و عملکرد سایر درخواست‌ها نیز به‌طور محسوسی کاهش پیدا می‌کند.</p>



<h2 class="wp-block-heading" id="h-اثر-واقعی-http-2-bomb-روی-سرورها">اثر واقعی HTTP/2 Bomb روی سرورها</h2>



<p class="wp-block-paragraph">HTTP/2 Bomb فقط یک ایده تئوریک نیست. محققان <a href="https://blog.calif.io/p/codex-discovered-a-hidden-http2-bomb" type="link" id="https://blog.calif.io/p/codex-discovered-a-hidden-http2-bomb">Calif</a> این حمله را روی چند مورد از پرکاربردترین سرورهای وب آزمایش کرده‌اند و نتایج نشان می‌دهد که پیاده‌سازی HTTP/2 در هر محصول، تاثیر مستقیمی بر شدت حمله دارد.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1920" height="1080" src="https://hamravesh.com/blog/wp-content/uploads/2026/06/hamravesh-discover-http-2-bomb-dos-attack01.gif" alt="" class="wp-image-5284"/><figcaption class="wp-element-caption">روند افزایش مصرف حافظه در آپاچی httpd، سپس Envoy، انجین‌اکس و مایکروسافت IIS در آزمایش محققان Calif (به ترتیب از بالا سمت چپ و در جهت عقربه‌های ساعت مشاهده کنید).  تصویر با سرعت ۲X نمایش داده شده است.</figcaption></figure>



<p class="wp-block-paragraph">نتایج این آزمایش‌ها در جدول زیر خلاصه شده است:</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td><strong>سرور</strong></td><td><strong>ضریب بزرگنمایی</strong></td><td><strong>زمان تقریبی مصرف کامل حافظه</strong></td></tr><tr><td><strong>Envoy 1.37.2</strong></td><td>حدود ۵۷۰۰:۱</td><td>حدود ۱۰ ثانیه برای ۳۲GB</td></tr><tr><td><strong>Apache httpd 2.4.67</strong></td><td>حدود ۴۰۰۰:۱</td><td>حدود ۱۸ ثانیه برای ۳۲GB</td></tr><tr><td><strong>nginx 1.29.7</strong></td><td>حدود ۷۰:۱</td><td>حدود ۴۵ ثانیه برای ۳۲GB</td></tr><tr><td><strong>Microsoft IIS (Windows Server 2025)</strong></td><td>حدود ۶۸:۱</td><td>حدود ۴۵ ثانیه (تا ۶۴GB)</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">منظور از ضریب بزرگنمایی (Amplification Ratio) این است که هر یک بایت داده‌ای که مهاجم ارسال می‌کند، چه مقدار حافظه روی سرور اشغال می‌شود. هرچه این عدد بزرگ‌تر باشد، مهاجم با پهنای باند کمتر می‌تواند فشار بیشتری به سرور وارد کند.</p>



<p class="wp-block-paragraph">نتایج آزمایش‌ها نشان می‌دهد که Envoy و Apache httpd بیشترین تاثیر را از این حمله می‌پذیرند. در سمت مقابل، nginx و Microsoft IIS ضریب بزرگنمایی کمتری دارند، اما همچنان در برابر حمله HTTP/2 Bomb آسیب‌پذیر هستند. به‌طورکلی، جلوگیری از حمله HTTP/2 Bomb نیازمند شناخت دقیق همین تفاوت‌ها در پیاده‌سازی سرورهاست.</p>



<p class="wp-block-paragraph">محققان تفاوت نتایج را به جزئیات پیاده‌سازی HPACK و نحوه مدیریت حافظه در محصولات مختلف نسبت می‌دهند. در Apache httpd و Envoy، بازسازی هدرها و ساختارهای داخلی مرتبط با آن‌ها حافظه بیشتری مصرف می‌کند، در حالی که nginx و IIS سربار کمتری دارند. به همین دلیل ضریب بزرگنمایی حمله در آنها متفاوت است.</p>



<h2 class="wp-block-heading" id="h-تکنیک-های-دور-زدن-محدودیت-ها-bypass-techniques">تکنیک‌های دور زدن محدودیت‌ها (Bypass Techniques)</h2>



<p class="wp-block-paragraph">یکی از دلایل خطرناک‌تر بودن HTTP/2 Bomb نسبت به HPACK Bomb کلاسیک، توانایی آن در دور زدن مکانیزم‌های دفاعی موجود است. در ادامه، دو تکنیک اصلی این حمله برای عبور از محدودیت‌های حجم و تعداد هدرها را بررسی می‌کنیم.</p>



<h3 class="wp-block-heading" id="h-عبور-از-محدودیت-حجم-هدرها">عبور از محدودیت حجم هدرها</h3>



<p class="wp-block-paragraph">پس از معرفی HPACK Bomb در سال ۲۰۱۶، بسیاری از پیاده‌سازی‌های HTTP/2 محدودیتی برای Total Decoded Header Size در نظر گرفتند تا از بازسازی هدرهای بسیار بزرگ جلوگیری کنند.</p>



<p class="wp-block-paragraph">در HTTP/2 Bomb، هدرها می‌توانند بسیار کوچک یا تقریبا خالی باشند و بخش عمده مصرف حافظه از metadata و ساختارهای داخلی HPACK ناشی می‌شود. در نتیجه محدودیت حجم هدرهای Decode شده عملا اثرگذار نیست و دفاع طراحی‌شده برای نسخه‌های قدیمی‌تر، کارایی خود را از دست می‌دهد.</p>



<h3 class="wp-block-heading" id="h-دور-زدن-محدودیت-تعداد-هدرها-با-cookie-crumbs">دور زدن محدودیت تعداد هدرها با Cookie Crumbs</h3>



<p class="wp-block-paragraph">برخی پیاده‌سازی‌ها مانند Apache httpd و Envoy علاوه بر محدودیت حجم، تعداد Header Fieldها را هم کنترل می‌کنند تا مهاجم نتواند با ارسال تعداد زیادی هدر کوچک، منابع سرور را مصرف کند.</p>



<p class="wp-block-paragraph">HTTP/2 امکان تقسیم یک Cookie بزرگ به چند Cookie Header کوچک‌تر (Cookie Crumbs) را فراهم می‌کند (RFC 9113). این قابلیت برای بهبود فشرده‌سازی طراحی شده است، اما در آزمایش‌ها مشخص شد که در برخی شرایط، این Crumbها در Apache و Envoy در شمارش محدودیت تعداد هدرها لحاظ نمی‌شوند.</p>



<p class="wp-block-paragraph">در نتیجه، مهاجم می‌تواند بدون فعال شدن محدودیت تعداد هدر، تعداد زیادی Cookie Crumb ایجاد کند و هر Crumb هم ورودی جدیدی در HPACK ایجاد می‌کند و سربار حافظه را افزایش می‌دهد.</p>



<h2 class="wp-block-heading" id="h-وضعیت-وصله-ها-در-سرورهای-مختلف">وضعیت وصله‌ها در سرورهای مختلف</h2>



<p class="wp-block-paragraph">پس از افشای حمله HTTP/2 Bomb، مهم‌ترین سوال برای مدیران سیستم و مهندسان امنیت این است که سرورهای ما ایمن هستند؟ چه اقداماتی برای جلوگیری از حمله HTTP/2 Bomb باید انجام داد؟</p>



<p class="wp-block-paragraph">محققان Calif قبل از انتشار عمومی، آسیب‌پذیری را به تیم‌های توسعه گزارش کردند. با این حال، وضعیت وصله‌ها (پچ‌ها) در زمان انتشار برای سرورهای مختلف متفاوت بود. جدول زیر خلاصه‌ای از وضعیت هر سرور را نشان می‌دهد:</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td><strong>سرور</strong></td><td><strong>وضعیت</strong></td><td><strong>نسخه / توضیح</strong></td></tr><tr><td><strong>nginx</strong></td><td>وصله شده</td><td>1.29.8+ – اضافه شدن max_headers با پیش‌فرض ۱۰۰۰</td></tr><tr><td><strong>Apache httpd</strong></td><td>وصله شده</td><td>رفع شده در &nbsp;<a href="https://github.com/icing/mod_h2/releases">mod_http2 v2.0.41</a> &#8211; اگر قصد آپگرید ندارید، پیشنهاد می‌شود پروتکل http/1.1 را طوری تنظیم کنید که HTTP/2 غیر فعال شود.</td></tr><tr><td><strong>Microsoft IIS</strong></td><td>وصله نشده</td><td>در زمان نگارش این مقاله، مایکروسافت هنوز جزئیات فنی یا وصله رسمی برای IIS منتشر نکرده است.</td></tr><tr><td><strong>Envoy</strong></td><td>در حال بررسی</td><td>وصله منتشر شده، اما محققان همچنان در حال راستی‌آزمایی دقیق‌تر هستند. تا تأیید نهایی، بهتر است HTTP/2 را موقتاً غیرفعال کنید.</td></tr><tr><td><strong>Cloudflare Pingora</strong></td><td>محافظت معماری</td><td>به طور خودکار در برابر حمله محافظت ایجاد می‌کند</td></tr></tbody></table></figure>



<h2 class="wp-block-heading" id="h-راهکارهای-کاهش-آسیب-mitigation-strategies">راهکارهای کاهش آسیب (Mitigation Strategies)</h2>



<p class="wp-block-paragraph">چند اقدام موثر برای جلوگیری از حمله HTTP/2 Bomb وجود دارند که می‌توانید آن‌ها را اجرا کنید. این اقدامات را می‌توان در چند سطح اصلی اجرا کرد:</p>



<h3 class="wp-block-heading" id="h-ارتقا-به-نسخه-وصله-شده">ارتقا به نسخه وصله‌شده</h3>



<p class="wp-block-paragraph">نصب سریع وصله‌های رسمی اولین و مهم‌ترین گام است. برای سرورهایی که وصله منتشر شده، نسخه‌ها باید به‌روزرسانی شوند:</p>



<ul class="wp-block-list">
<li>انجین‌اکس: نسخه 1.29.8+</li>



<li>آپاچی httpd: نسخه <a href="https://github.com/icing/mod_h2/releases" type="link" id="https://github.com/icing/mod_h2/releases" target="_blank" rel="noreferrer noopener">mod_http2 v2.0.41</a></li>
</ul>



<h3 class="wp-block-heading" id="h-غیرفعال-کردن-موقت-http-2">غیرفعال کردن موقت HTTP/2</h3>



<p class="wp-block-paragraph">در سرورهایی که وصله در دسترس نیست یا قصد آصب وصله را ندارید، غیرفعال کردن پروتکل HTTP/2 و بازگشت به HTTP/1.1، می‌تواند به عنوان راهکار موقت عمل کند:</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td><strong>سرور</strong></td><td><strong>دستور غیرفعال‌سازی</strong></td></tr><tr><td><strong>nginx</strong></td><td>اگر قصد آپگرید ندارید، HTTP/2 را با <code>http2 off;</code> غیر فعال کنید.</td></tr><tr><td><strong>Apache httpd</strong></td><td>اگر قصد آپگرید ندارید، پیشنهاد می‌شود پروتکل http/1.1 را طوری تنظیم کنید که HTTP/2 غیر فعال شود.</td></tr><tr><td><strong>سایر سرورها</strong></td><td>مستندات فروشنده را بررسی کنید</td></tr></tbody></table></figure>



<h3 class="wp-block-heading" id="h-استفاده-از-reverse-proxy-یا-cdn">استفاده از Reverse Proxy یا CDN</h3>



<p class="wp-block-paragraph">قرار دادن سرور پشت یک Reverse Proxy یا CDN که وصله شده یا به‌طور ذاتی محافظت دارد، می‌تواند حمله را قبل از رسیدن به سرور اصلی متوقف کند. برای مثال:</p>



<ul class="wp-block-list">
<li>استفاده از Cloudflare که به صورت خودکار محافظت ارائه می‌کند</li>



<li>استفاده از nginx وصله‌شده به عنوان پروکسی جلوی سرورهای آسیب‌پذیر، محافظت ایجاد می‌کند.</li>
</ul>



<h3 class="wp-block-heading" id="h-اعمال-محدودیت-روی-هدرها-و-streamها">اعمال محدودیت روی هدرها و Streamها</h3>



<p class="wp-block-paragraph">به‌طور کلی، «حداکثر اندازه هدرهای Decode شده» و «حداکثر تعداد هدرها» دو محدودیت متفاوت هستند و هر سرور باید هر دو را اعمال کند. هر سرویس یا مؤلفه‌ای که ترافیک HTTP/2 را دریافت و پردازش می‌کند (مانند وب‌سرورها، Reverse Proxyها، لود بالانسرها و API Gatewayها)، باید تعداد فیلدهای هدر در هر درخواست را (از جمله Cookie Crumbها) مستقل از اندازه کلی آن‌ها محدود کند. همچنین، مدت‌زمان مجاز برای باز ماندن یک stream متوقف‌شده را بدون توجه به فعالیت WINDOW_UPDATE مشخص و محدود سازد.</p>



<h3 class="wp-block-heading" id="h-محدودیت-حافظه-memory-limits">محدودیت حافظه (Memory Limits)</h3>



<p class="wp-block-paragraph">اگر در حال حاضر امکان اعمال این کنترل‌ها را ندارید، بهتر است برای هر ورکر محدودیت حافظه تعریف کنید؛ برای مثال با استفاده از cgroups، دستور <code>ulimit -v</code> یا محدودیت‌های حافظه در کانتینرها. این محدودیت‌ها باید به اندازه‌ای سخت‌گیرانه باشند که در صورت وقوع حمله، ورکر آسیب‌دیده پیش از آنکه کل سیستم را وارد Swap کند، توسط OOM Killer متوقف و مجدداً راه‌اندازی شود. یک ورکر معمولاً به چندین گیگابایت حافظه نیاز ندارد؛ بنابراین متوقف شدن زودهنگام یک ورکر، سناریوی بسیار بهتری نسبت به این است که مهاجم بتواند کل سرور را برای مدت طولانی در آستانه ۹۵ درصد مصرف حافظه نگه دارد.</p>



<h3 class="wp-block-heading" id="h-محدودیت-نرخ-rate-limiting">محدودیت نرخ (Rate Limiting)</h3>



<p class="wp-block-paragraph">کنترل نرخ ایجاد اتصال‌ها یا استریم‌ها به ازای هر IP می‌تواند سرعت اجرای حمله را کاهش دهد و فرصت واکنش برای تیم امنیتی فراهم کند. این اقدام به تنهایی کافی نیست اما موثر است.</p>



<h2 class="wp-block-heading" id="h-نقش-هوش-مصنوعی-در-کشف-حمله-codex-effect">نقش هوش مصنوعی در کشف حمله (Codex Effect)</h2>



<p class="wp-block-paragraph">HTTP/2 Bomb توسط تیم امنیتی Calif با کمک OpenAI Codex شناسایی شد. در این پژوهش، Codex دو تکنیک شناخته‌شده یعنی HPACK Bomb و سوءاستفاده از HTTP/2 Flow Control را کنار هم قرار داد و اثر ترکیبی آن‌ها را آشکار کرد.</p>



<p class="wp-block-paragraph">این یافته نشان می‌دهد مدل‌های هوش مصنوعی می‌توانند در تحلیل RFCها، مستندات فنی و رفتار پروتکل‌ها به کشف سناریوهای حمله جدید کمک کنند. با این حال، هوش مصنوعی در این پژوهش نقش یک ابزار کمکی برای تحلیل و کشف الگوها را داشت و جایگزین پژوهشگران امنیتی نشد.</p>



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



<p class="wp-block-paragraph">HTTP/2 Bomb یک آسیب‌پذیری جدید در پروتکل HTTP/2 نیست، بلکه روشی برای ترکیب دو قابلیت استاندارد این پروتکل یعنی HPACK و Flow Control است. همین موضوع باعث شد مکانیزم‌هایی که سال‌ها برای مقابله با HPACK Bomb یا محدود کردن اندازه هدرها طراحی شده بودند، در برخی پیاده‌سازی‌ها نتوانند از این حمله جلوگیری کنند.</p>



<p class="wp-block-paragraph">نتایج آزمایش‌ها نشان می‌دهد شدت تأثیر HTTP/2 Bomb به نحوه پیاده‌سازی HTTP/2 در هر محصول وابسته است. هرچند nginx ،Apache httpd ،Envoy و Microsoft IIS همگی تحت تأثیر این تکنیک قرار گرفته‌اند، اما میزان مصرف حافظه و ضریب بزرگنمایی حمله در آن‌ها یکسان نیست.</p>



<p class="wp-block-paragraph">برای کاهش ریسک و جلوگیری از حمله HTTP/2 Bomb، اولین اقدام باید ارتقا به نسخه‌های وصله‌شده باشد. در محیط‌هایی که امکان به‌روزرسانی فوری وجود ندارد، محدود کردن تعداد هدرها، کنترل طول عمر Streamها، اعمال محدودیت حافظه برای Workerها و استفاده از Reverse Proxyها یا CDNهای محافظت‌شده می‌تواند اثر حمله را کاهش دهد.</p>



<p class="wp-block-paragraph">شاید مهم‌ترین درس HTTP/2 Bomb این باشد که در امنیت نرم‌افزارها، همیشه مشکل از یک قابلیت منفرد نیست. گاهی ترکیب چند رفتار کاملاً استاندارد و قانونی می‌تواند به یک روش حمله جدید تبدیل شود که سال‌ها از دید پژوهشگران پنهان مانده است.</p>



<p class="wp-block-paragraph"></p>
<p>The post <a href="https://hamravesh.com/blog/discover-http-2-bomb-dos-attack/">حمله HTTP/2 Bomb چیست؟ کالبدشکافی حمله، تأثیر بر nginx و راهکارهای مقابله</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://hamravesh.com/blog/discover-http-2-bomb-dos-attack/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Wiki.js چیست؟ مقایسه با رقبا و راهنمای نصب</title>
		<link>https://hamravesh.com/blog/what-is-wikijs/</link>
					<comments>https://hamravesh.com/blog/what-is-wikijs/#respond</comments>
		
		<dc:creator><![CDATA[هم‌روش]]></dc:creator>
		<pubDate>Wed, 03 Jun 2026 12:30:53 +0000</pubDate>
				<category><![CDATA[دواپس]]></category>
		<category><![CDATA[مقالات]]></category>
		<guid isPermaLink="false">https://hamravesh.com/blog/?p=5220</guid>

					<description><![CDATA[<p>Wiki.js یکی از محبوب‌ترین راهکارهای متن‌باز برای ایجاد پایگاه دانش و مستندسازی سازمانی است که به تیم‌ها کمک می‌کند مستندات، فرایندها و دانش فنی خود را به‌جای فایل‌ها و ابزارهای پراکنده، در یک مخزن متمرکز نگهداری و مدیریت کنند. در این مقاله بررسی می‌کنیم که Wiki.js چیست، چه مزایا و معایبی دارد، چه تفاوتی با [&#8230;]</p>
<p>The post <a href="https://hamravesh.com/blog/what-is-wikijs/">Wiki.js چیست؟ مقایسه با رقبا و راهنمای نصب</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Wiki.js یکی از محبوب‌ترین راهکارهای متن‌باز برای ایجاد پایگاه دانش و مستندسازی سازمانی است که به تیم‌ها کمک می‌کند مستندات، فرایندها و دانش فنی خود را به‌جای فایل‌ها و ابزارهای پراکنده، در یک مخزن متمرکز نگهداری و مدیریت کنند. در این مقاله بررسی می‌کنیم که Wiki.js چیست، چه مزایا و معایبی دارد، چه تفاوتی با ابزارهای مشابه دارد و مراحل نصب Wiki.js با Docker چگونه انجام می‌شود.</p>



<h2 class="wp-block-heading" id="h-ابزار-wiki-js-چیست-و-چه-ویژگی-هایی-دارد">ابزار Wiki.js چیست و چه ویژگی‌هایی دارد؟</h2>



<p class="wp-block-paragraph">Wiki.js یک نرم‌افزار ویکی سازمانی متن‌باز و Self-Hosted است که برای مدیریت دانش، مستندسازی سازمانی و ایجاد ویکی داخلی سازمان استفاده می‌شود. این پلتفرم بر پایه Node.js توسعه یافته و از <a href="https://hamravesh.com/blog/what-is-postgresql/" type="link" id="https://hamravesh.com/blog/what-is-postgresql/" target="_blank" rel="noreferrer noopener">دیتابیس PostgreSQL</a> برای ذخیره‌سازی داده‌ها استفاده می‌کند.</p>



<p class="wp-block-paragraph">سازمان‌ها می‌توانند Wiki.js را روی سرور اختصاصی، ماشین مجازی یا کانتینرهای Docker اجرا کنند و مدیریت مستندات، دسترسی کاربران و زیرساخت نرم‌افزار را در محیط خود انجام دهند. همچنین این پلتفرم از روش‌های مختلف احراز هویت، ویرایش محتوا و یکپارچه‌سازی با ابزارهای توسعه، پشتیبانی می‌کند. برخی از قابلیت‌های اصلی Wiki.js عبارت‌اند از:</p>



<ul class="wp-block-list">
<li>ویرایشگرهای چندگانه: پشتیبانی از Markdown، ویرایشگر بصری (WYSIWYG) و HTML برای گروه‌های مختلف کاربران</li>



<li>همگام‌سازی با Git: امکان اتصال به مخازن Git برای نسخه‌بندی و نگهداری مستندات</li>



<li>احراز هویت سازمانی: پشتیبانی از LDAP ،SAML و OAuth2 برای مدیریت دسترسی کاربران</li>



<li>معماری ماژولار: امکان فعال یا غیرفعال کردن ماژول‌های مختلف بر اساس نیاز سازمان</li>
</ul>



<h2 class="wp-block-heading" id="h-چرا-شرکت-ها-به-wiki-داخلی-نیاز-دارند">چرا شرکت‌ها به Wiki داخلی نیاز دارند؟</h2>



<p class="wp-block-paragraph">ویکی داخلی سازمان ابزاری برای ثبت و نگهداری دانش سازمانی، مستندات فنی و فرایندهای کاری است. استفاده از این ابزارها به تیم‌ها کمک می‌کند دانش و مستندات سازمانی به افراد وابسته نباشد و در یک پایگاه دانش متمرکز نگهداری شود. رایج‌ترین کاربردهای یک نرم‌افزار ویکی سازمانی عبارت‌اند از:</p>



<ul class="wp-block-list">
<li>ثبت Runbookها و دستورالعمل‌های عملیاتی برای عیب‌یابی و مدیریت رخدادها</li>



<li>مستندسازی معماری سیستم، سرویس‌ها، تنظیمات و فرایندهای فنی</li>



<li>تسهیل فرایند آنبوردینگ نیروهای جدید از طریق دسترسی به مستندات متمرکز</li>



<li>مدیریت سیاست‌ها، رویه‌ها و سطوح دسترسی در بخش‌های مختلف سازمان</li>
</ul>



<h2 class="wp-block-heading" id="h-مزایای-wiki-js-چیست">مزایای Wiki.js چیست؟</h2>



<p class="wp-block-paragraph">ابزار Wiki.js به‌عنوان یک نرم‌افزار ویکی سازمانی، امکانات موردنیاز تیم‌های فنی و کاربران غیرفنی را در یک پلتفرم واحد ارائه می‌کند. بررسی مزایای زیر به خوبی نشان می‌دهد که دلیل محبوبیت ویکی جی اس چیست:</p>



<ul class="wp-block-list">
<li>ویرایشگرهای چندگانه: Wiki.js از Markdown، ویرایشگر بصری (WYSIWYG) و HTML پشتیبانی می‌کند. این موضوع باعث می‌شود کاربران فنی و غیرفنی بتوانند با روش موردنظر خود مستندات را ایجاد و ویرایش کنند.</li>



<li>همگام‌سازی با Git: امکان اتصال به مخازن GitHub و GitLab برای نسخه‌بندی و نگهداری مستندات فراهم است. این قابلیت به تیم‌های فنی کمک می‌کند تاریخچه تغییرات مستندات را مدیریت کنند، از محتوا نسخه پشتیبان داشته باشند و در صورت نیاز، مستندات را بین زیرساخت‌ها یا محیط‌های مختلف جابه‌جا کنند.</li>



<li>احراز هویت سازمانی: Wiki.js از LDAP ،SAML ،OAuth2 و احراز هویت دو عاملی (2FA) پشتیبانی می‌کند و امکان یکپارچه‌سازی با زیرساخت‌های هویتی سازمان را فراهم می‌کند.</li>



<li>نصب و استقرار ساده: نصب Wiki.js با Docker و Docker Compose به‌سادگی انجام می‌شود و فرایند راه‌اندازی آن روی بسیاری از محیط‌های لینوکسی از جمله نصب Wiki.js روی Ubuntu هم پیچیدگی زیادی ندارد.</li>



<li>عملکرد سبک: این پلتفرم بر پایه Node.js توسعه یافته و برای اجرا به منابع سخت‌افزاری محدودی نیاز دارد.</li>



<li>پشتیبانی از دیاگرام و مستندات فنی: امکان استفاده از ابزارهایی مانند draw.io ،Mermaid و PlantUML برای ایجاد فلوچارت‌ها، نمودارها و مستندات معماری وجود دارد.</li>



<li>معماری ماژولار: مدیر سیستم می‌تواند برخی قابلیت‌ها و ماژول‌ها را بر اساس نیاز سازمان فعال یا غیرفعال کند.</li>



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



<li>مدیریت دسترسی: امکان تعریف سطوح دسترسی مبتنی بر گروه‌ها و مسیر صفحات (Path-based Permissions) برای کنترل دسترسی کاربران وجود دارد.</li>



<li>موتور جستجو: سیستم جستجوی داخلی مبتنی بر PostgreSQL امکان جستجوی متن کامل در مستندات را فراهم می‌کند و در برخی سناریوها قابلیت استفاده از Elasticsearch نیز وجود دارد.</li>



<li>شخصی‌سازی و چندسکویی: این ابزار از حالت روشن و تاریک پشتیبانی می‌کند و امکان استفاده از CSS و JavaScript سفارشی را در اختیار مدیران قرار می‌دهد. همچنین روی لینوکس، ویندوز و macOS قابل اجرا است.</li>
</ul>



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



<p class="wp-block-paragraph">برای انتخاب هوشمندانه یک نرم‌افزار، شناخت مزایا کافی نیست و باید بدانید چالش‌ها و معایب Wiki.js چیست. مهم‌ترین نقاط ضعف این ابزار عبارتند از:</p>



<ul class="wp-block-list">
<li>وضعیت نسخه v3: توسعه نسخه سوم Wiki.js طی چند سال گذشته ادامه داشته است، اما تا سال ۲۰۲۶ نسخه v2 همچنان نسخه اصلی و پایدار محسوب می‌شود. به همین دلیل بهتر است ارزیابی فنی بر اساس قابلیت‌های موجود انجام شود.</li>



<li>عدم پشتیبانی از ویرایش هم‌زمان: Wiki.js قابلیت ویرایش هم‌زمان یک صفحه توسط چند کاربر را مشابه ابزارهایی مانند Confluence یا Google Docs ارائه نمی‌کند.</li>



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



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



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



<li>منحنی یادگیری API: رابط برنامه‌نویسی کاربردی (API) مبتنی بر GraphQL انعطاف‌پذیری بالایی ارائه می‌دهد، اما ممکن است برای تیم‌هایی که تجربه کار با GraphQL ندارند به زمان بیشتری برای یادگیری نیاز داشته باشد.</li>
</ul>



<h2 class="wp-block-heading" id="h-مقایسه-wiki-js-با-confluence-bookstack-و-mediawiki">مقایسه Wiki.js با Confluence ،BookStack و MediaWiki</h2>



<p class="wp-block-paragraph">انتخاب ابزار مناسب برای مستندسازی سازمانی بستگی به نیازهای فنی، ساختار تیم، بودجه و نحوه استقرار زیرساخت دارد. برای درک بهتر اینکه تفاوت Wiki.js با سایر راهکارهای مطرح چیست، می‌توان آن را در کنار Confluence ،BookStack و MediaWiki بررسی کرد.</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/06/Hamravesh-what-is-wikijs02-1024x668.webp" alt="Wiki.js چیست؟ مقایسه با Confluence ،BookStack و MediaWiki" class="wp-image-5240" srcset="https://hamravesh.com/blog/wp-content/uploads/2026/06/Hamravesh-what-is-wikijs02-1024x668.webp 1024w, https://hamravesh.com/blog/wp-content/uploads/2026/06/Hamravesh-what-is-wikijs02-300x196.webp 300w, https://hamravesh.com/blog/wp-content/uploads/2026/06/Hamravesh-what-is-wikijs02-768x501.webp 768w, https://hamravesh.com/blog/wp-content/uploads/2026/06/Hamravesh-what-is-wikijs02-120x78.webp 120w, https://hamravesh.com/blog/wp-content/uploads/2026/06/Hamravesh-what-is-wikijs02.webp 1201w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph"><a href="https://hamravesh.com/blog/what-is-confluence/" type="link" id="https://hamravesh.com/blog/what-is-confluence/" target="_blank" rel="noreferrer noopener">کانفلوئنس</a> یک پلتفرم تجاری است که به‌صورت گسترده در سازمان‌ها برای همکاری تیمی، مدیریت دانش و مستندسازی استفاده می‌شود. در سمت مقابل، Wiki.js به‌عنوان یک نرم‌افزار ویکی سازمانی متن‌باز، امکان استقرار روی زیرساخت اختصاصی سازمان را فراهم می‌کند و هزینه لایسنس ندارد.</p>



<p class="wp-block-paragraph">BookStack هم یک راهکار متن‌باز برای مستندسازی سازمانی است که از ساختار سلسله‌مراتبی مشخص (قفسه، کتاب، فصل و صفحه) استفاده می‌کند. این ساختار برای تیم‌هایی که به دنبال سازمان‌دهی ساده‌تر محتوا هستند می‌تواند مناسب باشد.</p>



<p class="wp-block-paragraph">MediaWiki که هسته اصلی ویکی‌پدیا را تشکیل می‌دهد، برای مدیریت پایگاه‌های دانش بزرگ و محتوای مشارکتی توسعه یافته است. در مقابل، Wiki.js تمرکز بیشتری بر استقرار سازمانی، یکپارچه‌سازی با Git و پشتیبانی از روش‌های مختلف احراز هویت دارد. برای مقایسه دقیق‌تر، فاکتورهای کلیدی این چهار ابزار در جدول زیر آورده شده است.</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td><strong>فاکتور کلیدی</strong></td><td><strong>Wiki.js</strong></td><td><strong>Confluence</strong></td><td><strong>BookStack</strong></td><td><strong>MediaWiki</strong></td></tr><tr><td><strong>نوع لایسنس و هزینه</strong></td><td>رایگان و متن‌باز</td><td>تجاری (اشتراک ماهانه)</td><td>رایگان و متن‌باز</td><td>رایگان و متن‌باز</td></tr><tr><td><strong>نحوه میزبانی (Hosting)</strong></td><td>Self-Hosted (داکر/سرور اختصاصی)</td><td>فقط ابری / دیتا سنتر</td><td>Self-Hosted (سرور اختصاصی)</td><td>Self-Hosted (سرور اختصاصی)</td></tr><tr><td><strong>ویرایش هم‌زمان (Real-time)</strong></td><td>ندارد&nbsp;</td><td>دارد (بسیار قدرتمند)</td><td>ندارد&nbsp;</td><td>ندارد&nbsp;</td></tr><tr><td><strong>همگام‌سازی با Git</strong></td><td>دارد (بومی و دوطرفه)</td><td>ندارد</td><td>ندارد</td><td>ندارد (نیاز به افزونه)</td></tr><tr><td><strong>نوع ویرایشگر (Editor)</strong></td><td>چندگانه (Markdown/بصری/HTML)</td><td>بصری پیشرفته</td><td>بصری + Markdown</td><td>Wikitext + بصری</td></tr><tr><td><strong>احراز هویت سازمانی</strong></td><td>بسیار جامع (LDAP ،SAML ،OIDC ،OAuth2 و ۱۵+ ارائه‌دهنده دیگر)&nbsp;</td><td>کامل (LDAP ،Active ،Directory ،SAML ،OIDC ،Crowd و Jira)</td><td>محدود (LDAP ،SAML ،OIDC)</td><td>محدود (نیازمند افزونه)</td></tr><tr><td><strong>ساختار درختی صفحات</strong></td><td>انعطاف‌پذیر (فولدرهای درختی)</td><td>ساختار درختی و سلسله‌مراتبی</td><td>ثابت (قفسه &gt; کتاب &gt; صفحه)</td><td>مسطح (دسته‌بندی‌محور)</td></tr><tr><td><strong>پشتیبانی از زبان فارسی</strong></td><td>دارد (بومی و RTL)</td><td>دارد</td><td>دارد (ترجمه جامعه کاربری)</td><td>دارد</td></tr><tr><td><strong>مناسب برای چه سازمانی؟</strong><strong>&nbsp;</strong></td><td>تیم‌های فنی، سازمان‌های نیازمند استقرار داخلی، شرکت‌های دارای زیرساخت Git و LDAP</td><td>سازمان‌های بزرگ استفاده‌کننده از اکوسیستم Atlassian&nbsp;</td><td>تیم‌های کوچک و متوسط که به راه‌اندازی ساده و سریع نیاز دارند&nbsp;</td><td>پایگاه‌های دانش بزرگ، پروژه‌های عمومی و جوامع کاربری گسترده&nbsp;</td></tr></tbody></table></figure>



<h2 class="wp-block-heading" id="h-راهنمای-نصب-wiki-js-با-docker">راهنمای نصب Wiki.js با Docker</h2>



<p class="wp-block-paragraph">استفاده از Docker و Docker Compose، یکی از رایج‌ترین روش‌ها برای راه‌اندازی Wiki.js به شمار می‌آید. این روش روی اکثر توزیع‌های لینوکس (مخصوصا برای نصب Wiki.js روی Ubuntu Server)، بسیار رایج و پایدار است. البته قبل از هرکاری باید پیش‌نیازهای زیر را فراهم کنید:</p>



<ul class="wp-block-list">
<li>سرور لینوکس با نصب Docker و Docker Compose نصب‌شده. می‌توانید راهنمای آموزش <a href="https://hamravesh.com/blog/install-docker-ubuntu/" type="link" id="https://hamravesh.com/blog/install-docker-ubuntu/">نصب داکر</a> و <a href="https://hamravesh.com/blog/install-docker-compose-on-ubuntu/" type="link" id="https://hamravesh.com/blog/install-docker-compose-on-ubuntu/" target="_blank" rel="noreferrer noopener">نصب Docker Compose</a> استفاده کنید.</li>



<li>حداقل ۱ گیگابایت رم (۲ گیگابایت توصیه می‌شود).</li>



<li>دامنه اختصاصی برای دسترسی در محیط پروداکشن (اختیاری).</li>



<li>یک مخزن Git برای همگام‌سازی محتوا (اختیاری).</li>
</ul>



<p class="wp-block-paragraph" id="h-گام-اول-ایجاد-ساختار-پوشه-پروژه"><strong>گام اول: ایجاد ساختار پوشه پروژه</strong></p>



<p class="wp-block-paragraph">ابتدا باید پوشه‌های مورد نیاز را برای ماندگاری داده‌های دیتابیس (Data Persist) ایجاد کنید و وارد آن شوید:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:clamp(24px, 1.5rem, 36px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2d333d;color:#9eadbd">Bash</span><span role="button" tabindex="0" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>mkdir -p ~/wikijs/{db,config}

cd ~/wikijs</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #F69D50">mkdir</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">-p</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">~/wikijs/{db,config}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #6CB6FF">cd</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">~/wikijs</span></span></code></pre></div>



<p class="wp-block-paragraph" id="h-گام-دوم-ایجاد-فایل-docker-compose-yml"><strong>گام دوم: ایجاد فایل docker-compose.yml</strong></p>



<p class="wp-block-paragraph">یک فایل با نام docker-compose.yml در همان پوشه بسازید و کانفیگ زیر را در آن قرار دهید:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:clamp(24px, 1.5rem, 36px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2d333d;color:#9eadbd">YAML</span><span role="button" tabindex="0" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>version: "3.8"
services:
  db:
    image: postgres:16-alpine
    container_name: wikijs-db
    restart: unless-stopped
    environment:
      POSTGRES_DB: wikijs
      POSTGRES_USER: wikijs
      POSTGRES_PASSWORD: YOUR_STRONG_PASSWORD
    volumes:
      - ./db:/var/lib/postgresql/data
    networks:
      - wikijs-net
  wikijs:
    image: ghcr.io/requarks/wiki:2
    container_name: wikijs
    restart: unless-stopped
    depends_on:
      - db
    ports:
      - "3000:3000"
    environment:
      DB_TYPE: postgres
      DB_HOST: db
      DB_PORT: 5432
      DB_USER: wikijs
      DB_PASS: YOUR_STRONG_PASSWORD
      DB_NAME: wikijs
    networks:
      - wikijs-net
networks:
  wikijs-net:
    driver: bridge</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #8DDB8C">version</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">&quot;3.8&quot;</span></span>
<span class="line"><span style="color: #8DDB8C">services</span><span style="color: #ADBAC7">:</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #8DDB8C">db</span><span style="color: #ADBAC7">:</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #8DDB8C">image</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">postgres:16-alpine</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #8DDB8C">container_name</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">wikijs-db</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #8DDB8C">restart</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">unless-stopped</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #8DDB8C">environment</span><span style="color: #ADBAC7">:</span></span>
<span class="line"><span style="color: #ADBAC7">      </span><span style="color: #8DDB8C">POSTGRES_DB</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">wikijs</span></span>
<span class="line"><span style="color: #ADBAC7">      </span><span style="color: #8DDB8C">POSTGRES_USER</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">wikijs</span></span>
<span class="line"><span style="color: #ADBAC7">      </span><span style="color: #8DDB8C">POSTGRES_PASSWORD</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">YOUR_STRONG_PASSWORD</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #8DDB8C">volumes</span><span style="color: #ADBAC7">:</span></span>
<span class="line"><span style="color: #ADBAC7">      - </span><span style="color: #96D0FF">./db:/var/lib/postgresql/data</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #8DDB8C">networks</span><span style="color: #ADBAC7">:</span></span>
<span class="line"><span style="color: #ADBAC7">      - </span><span style="color: #96D0FF">wikijs-net</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #8DDB8C">wikijs</span><span style="color: #ADBAC7">:</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #8DDB8C">image</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">ghcr.io/requarks/wiki:2</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #8DDB8C">container_name</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">wikijs</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #8DDB8C">restart</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">unless-stopped</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #8DDB8C">depends_on</span><span style="color: #ADBAC7">:</span></span>
<span class="line"><span style="color: #ADBAC7">      - </span><span style="color: #96D0FF">db</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #8DDB8C">ports</span><span style="color: #ADBAC7">:</span></span>
<span class="line"><span style="color: #ADBAC7">      - </span><span style="color: #96D0FF">&quot;3000:3000&quot;</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #8DDB8C">environment</span><span style="color: #ADBAC7">:</span></span>
<span class="line"><span style="color: #ADBAC7">      </span><span style="color: #8DDB8C">DB_TYPE</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">postgres</span></span>
<span class="line"><span style="color: #ADBAC7">      </span><span style="color: #8DDB8C">DB_HOST</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">db</span></span>
<span class="line"><span style="color: #ADBAC7">      </span><span style="color: #8DDB8C">DB_PORT</span><span style="color: #ADBAC7">: </span><span style="color: #6CB6FF">5432</span></span>
<span class="line"><span style="color: #ADBAC7">      </span><span style="color: #8DDB8C">DB_USER</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">wikijs</span></span>
<span class="line"><span style="color: #ADBAC7">      </span><span style="color: #8DDB8C">DB_PASS</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">YOUR_STRONG_PASSWORD</span></span>
<span class="line"><span style="color: #ADBAC7">      </span><span style="color: #8DDB8C">DB_NAME</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">wikijs</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #8DDB8C">networks</span><span style="color: #ADBAC7">:</span></span>
<span class="line"><span style="color: #ADBAC7">      - </span><span style="color: #96D0FF">wikijs-net</span></span>
<span class="line"><span style="color: #8DDB8C">networks</span><span style="color: #ADBAC7">:</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #8DDB8C">wikijs-net</span><span style="color: #ADBAC7">:</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #8DDB8C">driver</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">bridge</span></span></code></pre></div>



<p class="wp-block-paragraph">حتما مقدار YOUR_STRONG_PASSWORD را با یک رمز عبور مناسب جایگزین کنید. این مقدار باید در تنظیمات PostgreSQL و Wiki.js یکسان باشد تا اتصال به دیتابیس برقرار شود. همچنین مراقب باشید که فاصله‌ها و ساختار خطوط در فایل YAML تغییر نکند.</p>



<p class="wp-block-paragraph" id="h-گام-سوم-اجرا-و-بررسی-لاگ-ها"><strong>گام سوم: اجرا و بررسی لاگ‌ها</strong></p>



<p class="wp-block-paragraph">برای بالا آوردن کانتینرها در پس‌زمینه، دستور زیر را اجرا کنید:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:clamp(24px, 1.5rem, 36px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2d333d;color:#9eadbd">Bash</span><span role="button" tabindex="0" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>docker compose up -d</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #F69D50">docker</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">compose</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">up</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">-d</span></span></code></pre></div>



<p class="wp-block-paragraph">برای بررسی وضعیت سرویس، لاگ‌ها را مشاهده کنید</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:clamp(24px, 1.5rem, 36px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2d333d;color:#9eadbd">Bash</span><span role="button" tabindex="0" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>docker compose logs -f wikijs</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #F69D50">docker</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">compose</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">logs</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">-f</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">wikijs</span></span></code></pre></div>



<p class="wp-block-paragraph">در صورت مشاهده پیام &#8220;Listening on port 3000&#8243;، سرویس با موفقیت راه‌اندازی شده است. سپس می‌توانید آدرس زیر را در مرورگر باز کنید:</p>



<p class="wp-block-paragraph">http://&lt;SERVER-IP&gt;:3000</p>



<p class="wp-block-paragraph">در اولین ورود، صفحه راه‌اندازی اولیه Wiki.js نمایش داده می‌شود.</p>



<p class="wp-block-paragraph" id="h-گام-چهارم-تنظیم-اولیه-setup-wizard"><strong>گام چهارم: تنظیم اولیه (Setup Wizard)</strong></p>



<p class="wp-block-paragraph">در اولین ورود، صفحه راه‌اندازی اولیه ظاهر می‌شود که اطلاعات زیر را از شما می‌خواهد:</p>



<ul class="wp-block-list">
<li>Administrator Account: ایمیل و رمز عبور مدیر ارشد سیستم را تعیین کنید.</li>



<li>Site URL: آدرس نهایی دسترسی به ویکی را وارد کنید (مانند (<a href="https://wiki.your-domain.com" rel="nofollow">https://wiki.your-domain.com </a>).</li>



<li>Telemetry: وضعیت ارسال آمار ناشناس استفاده از ابزار را مشخص کنید.</li>
</ul>



<p class="wp-block-paragraph">پس از تکمیل این فرم، به‌طور مستقیم وارد داشبورد مدیریت می‌شوید.</p>



<p class="wp-block-paragraph"><strong>نکته:</strong> اگر Wiki.js را در محیط پروداکشن اجرا می‌کنید، بهتر است سرویس را پشت یک Reverse Proxy مانند Nginx یا Traefik قرار دهید. این روش امکان مدیریت گواهی SSL، استفاده از دامنه اختصاصی، هدایت ترافیک HTTPS و اعمال تنظیمات امنیتی را فراهم می‌کند. هرچند Wiki.js به‌صورت مستقیم روی پورت ۳۰۰۰ اجرا می‌شود، اما در بسیاری از استقرارهای سازمانی دسترسی کاربران از طریق Reverse Proxy انجام می‌شود.&nbsp;</p>



<p class="wp-block-paragraph" id="h-گام-پنجم-تنظیم-همگام-سازی-با-git"><strong>گام پنجم: تنظیم همگام‌سازی با Git&nbsp;</strong></p>



<p class="wp-block-paragraph">همگام‌سازی با Git (یا Git Sync) یکی از قابلیت‌های Wiki.js برای نسخه‌بندی و نگهداری مستندات در مخازن Git است. این قابلیت امکان مدیریت تاریخچه تغییرات، نگهداری نسخه‌های قبلی و بکاپ‌گیری از محتوای صفحات را فراهم می‌کند. برای فعال‌سازی این قابلیت مراحل زیر را انجام دهید:</p>



<p class="wp-block-paragraph">مرحله اول: به مسیر Administration &gt; Storage بروید.</p>



<p class="wp-block-paragraph">مرحله دوم: روی گزینه Git کلیک کرده و آن را فعال کنید.</p>



<p class="wp-block-paragraph">مرحله سوم: تنظیمات مخزن را در Wiki.js وارد کنید:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:clamp(24px, 1.5rem, 36px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2d333d;color:#9eadbd">YAML</span><span role="button" tabindex="0" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>Authentication Type: SSH
Repository URL: git@github.com:your-org/wiki-content.git
Branch: main
SSH Private Key: (Deploy Key)
Sync Direction: Bi-directional
Sync Schedule: Every 5 minutes</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #8DDB8C">Authentication Type</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">SSH</span></span>
<span class="line"><span style="color: #8DDB8C">Repository URL</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">git@github.com:your-org/wiki-content.git</span></span>
<span class="line"><span style="color: #8DDB8C">Branch</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">main</span></span>
<span class="line"><span style="color: #8DDB8C">SSH Private Key</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">(Deploy Key)</span></span>
<span class="line"><span style="color: #8DDB8C">Sync Direction</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">Bi-directional</span></span>
<span class="line"><span style="color: #8DDB8C">Sync Schedule</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">Every 5 minutes</span></span></code></pre></div>



<p class="wp-block-paragraph">بازه زمانی همگام‌سازی را تنظیم کنید (مثلا هر ۵ دقیقه).</p>



<p class="wp-block-paragraph">مرحله چهارم: یک Deploy Key ایجاد کنید:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:clamp(24px, 1.5rem, 36px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2d333d;color:#9eadbd">Bash</span><span role="button" tabindex="0" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>ssh-keygen -t ed25519 -f ~/wikijs/git-deploy-key -N ""</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #F69D50">ssh-keygen</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">-t</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">ed25519</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">-f</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">~/wikijs/git-deploy-key</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">-N</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">&quot;&quot;</span></span></code></pre></div>



<p class="wp-block-paragraph">مرحله پنجم: کلید عمومی ایجادشده را به‌عنوان Deploy Key در مخزن GitHub یا GitLab خود و با دسترسی write اضافه کنید.</p>



<p class="wp-block-paragraph"><strong>نکته:</strong> همگام‌سازی با Git می‌تواند نسخه‌ای از محتوای صفحات را در مخزن Git نگهداری کند، اما جایگزین بکاپ کامل Wiki.js نیست. از آنجا که اطلاعات اصلی پلتفرم در PostgreSQL ذخیره می‌شوند، توصیه می‌شود به‌صورت منظم از پایگاه داده و فایل‌های پیوست نسخه پشتیبان تهیه کنید. در محیط‌های عملیاتی، استفاده از بکاپ خودکار برای دیتابیس و فضای ذخیره‌سازی می‌تواند ریسک از دست رفتن اطلاعات را کاهش دهد.</p>



<p class="wp-block-paragraph" id="h-گام-آخر-به-روزرسانی-wiki-js"><strong>گام آخر: به‌روزرسانی Wiki.js</strong></p>



<p class="wp-block-paragraph">برای آپدیت پلتفرم به آخرین نسخه پایدار، کافیست کانتینرها را مجدداً Pull کنید تا فرایند مهاجرت دیتابیس (Migration) هم به طور خودکار انجام شود:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:clamp(24px, 1.5rem, 36px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2d333d;color:#9eadbd">Bash</span><span role="button" tabindex="0" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>docker compose pull wikijs
docker compose up -d wikijs</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #F69D50">docker</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">compose</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">pull</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">wikijs</span></span>
<span class="line"><span style="color: #F69D50">docker</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">compose</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">up</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">-d</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">wikijs</span></span></code></pre></div>



<h2 class="wp-block-heading" id="h-اجرای-wiki-js-روی-cloud">اجرای Wiki.js روی Cloud</h2>



<p class="wp-block-paragraph">با افزایش تعداد کاربران، حجم مستندات و نیازهای عملیاتی، معمولا نگهداری Wiki.js روی یک سرور واحد، چالش‌هایی مانند مدیریت بکاپ، به‌روزرسانی، دسترس‌پذیری و مقیاس‌پذیری را ایجاد کند. بسیاری از سازمان‌ها برای اینکه با این چالش‌ها مواجه نشوند، این پلتفرم را روی زیرساخت‌های ابری اجرا می‌کنند تا بخشی از مدیریت زیرساخت و نگهداری سرویس ساده‌تر شود. معمولا برای استقرار Wiki.js در محیط ابری از دو الگوی رایج استفاده می‌شود:</p>



<h3 class="wp-block-heading" id="h-راه-اندازی-روی-سکوهای-ابری-paas">راه‌اندازی روی سکوهای ابری (PaaS)</h3>



<p class="wp-block-paragraph">در این سناریو، نیازی به مدیریت سیستم‌عامل لینوکس یا پیکربندی دستی Docker ندارید و می‌توانید با استفاده از ایمیج رسمی Wiki.js، سرویس را روی سکوی ابری مستقر کنید. همچنین برخی سکوهای ابری هم قابلیت‌هایی مانند مقیاس‌پذیری خودکار را در اختیار شما قرار می‌دهند.</p>



<h3 class="wp-block-heading" id="h-معماری-ابری-مدیریت-شده-managed-services">معماری ابری مدیریت‌شده (Managed Services)</h3>



<p class="wp-block-paragraph">برای تضمین امنیت و پایداری در محیط‌های پروداکشن، پلتفرم ابری خود را بر پایه فاکتورهای زیر پیکربندی کنید:</p>



<ul class="wp-block-list">
<li>دیتابیس ابری مدیریت‌شده (Managed PostgreSQL): به‌جای اجرای PostgreSQL درون کانتینر، می‌توانید Wiki.js را به یک سرویس دیتابیس مدیریت‌شده متصل کنید تا مدیریت بکاپ، به‌روزرسانی و نگهداری پایگاه داده ساده‌تر شود.</li>



<li>ذخیره‌سازی ابری فایل‌ها (Object Storage): می‌توانید از طریق مسیر `Administration &gt; Storage` سرویس‌های ذخیره‌سازی سازگار با S3 را برای نگهداری تصاویر و فایل‌های پیوست مستندات پیکربندی کنید.</li>



<li>همگام‌سازی با Git: اتصال Wiki.js به مخازن GitHub یا GitLab، امکان نسخه‌بندی و نگهداری مستندات در یک مخزن مجزا را فراهم می‌کند.</li>
</ul>



<h3 class="wp-block-heading" id="h-راه-اندازی-wiki-js-بدون-مدیریت-زیرساخت">راه‌اندازی Wiki.js بدون مدیریت زیرساخت</h3>



<p class="wp-block-paragraph">برای راه‌اندازی سریع‌تر Wiki.js، می‌توانید از نسخه آماده این نرم‌افزار در بازارچه هم‌روش استفاده کنید. در این روش، نصب Docker، استقرار و به‌روزرسانی سرویس و بخشی از مدیریت زیرساخت به‌صورت خودکار انجام می‌شود تا تیم‌ها بتوانند به‌جای صرف زمان برای پیکربندی و نگهداری، روی تولید و مدیریت مستندات تمرکز کنند.</p>



<div class="wp-block-dh-blog-card-database-block card database">
<div class="wp-block-group row align-items-center is-nowrap is-layout-flex wp-container-core-group-is-layout-8f761849 wp-block-group-is-layout-flex">
<div class="wp-block-group col-md"><div class="wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow">
<h3 class="wp-block-heading" id="h-سرویس-wiki-js-هم-روش-راه-اندازی-سریع-و-ساده">💡 سرویس Wiki.js هم‌روش؛ راه‌اندازی سریع و ساده</h3>



<p class="wp-block-paragraph"><br>✅ پرداخت به میزان استفاده (PAYG)<br>✅ بدون دغدغه نگهداری زیرساخت<br>✅ بکاپ خودکار روزانه</p>
</div></div>
</div>



<div class="wp-block-group col-md-auto"><div class="wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow">
<p class="wp-block-paragraph" id="h-"></p>



<p class="btn btn--main btn--wide wp-block-paragraph"><a href="https://console.hamravesh.com/marketplace/explore/oneclick_wikijs" target="_blank" rel="noreferrer noopener">راه‌اندازی ویکی جی اس</a><a href="#"></a></p>
</div></div>
</div>



<h2 class="wp-block-heading" id="h-چه-سروری-برای-wiki-js-مناسب-است">چه سروری برای Wiki.js مناسب است؟</h2>



<p class="wp-block-paragraph">نیازمندی‌های Wiki.js به تعداد کاربران، حجم مستندات و نحوه استفاده از پلتفرم بستگی دارد. در این بخش از آموزش Wiki.js، مهم‌ترین نیازمندی‌های سخت‌افزاری و نرم‌افزاری این نرم‌افزار ویکی سازمانی را بررسی می‌کنیم.</p>



<h3 class="wp-block-heading" id="h-نیازمندی-های-سخت-افزاری-hardware">نیازمندی‌های سخت‌افزاری (Hardware)</h3>



<p class="wp-block-paragraph">میزان مصرف منابع در Wiki.js به تعداد کاربران هم‌زمان، حجم داده‌ها و سرویس‌های جانبی مورد استفاده بستگی دارد. برای بسیاری از سناریوهای سازمانی، منابع زیر قابل استفاده هستند:</p>



<ul class="wp-block-list">
<li>پردازنده (CPU): ویکی جی اس روی یک هسته پردازنده هم&nbsp; قابل اجرا است، اما برای پردازش‌های پس‌زمینه و بارهای کاری بیشتر، استفاده از حداقل دو هسته CPU توصیه می‌شود.</li>



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



<li>فضای ذخیره‌سازی (Storage): حجم موردنیاز به تعداد مستندات و فایل‌های بارگذاری‌شده بستگی دارد. برای راه‌اندازی اولیه، استفاده از فضای ذخیره‌سازی SSD توصیه می‌شود.</li>
</ul>



<h3 class="wp-block-heading" id="h-نیازمندی-های-نرم-افزاری-و-شبکه-software-amp-network">نیازمندی‌های نرم‌افزاری و شبکه (Software &amp; Network)</h3>



<p class="wp-block-paragraph">علاوه بر سخت‌افزار، باید زیرساخت نرم‌افزاری هم با نیازهای Wiki.js سازگار باشد.</p>



<ul class="wp-block-list">
<li>پایگاه داده: استفاده از دیتابیس PostgreSQL نسخه 11 یا بالاتر الزامی است، زیرا تمرکز اصلی توسعه نسخه‌های جدید Wiki.js روی PostgreSQL قرار دارد و این دیتابیس، انتخاب استاندارد و پایدار این پلتفرم محسوب می‌شود.</li>



<li>محیط اجرا (Runtime): این پلتفرم بر پایه Node.js توسعه یافته است، اما در صورت استفاده از Docker نیازی به نصب مستقیم Node.js روی سرور خود ندارید. در واقع این پلتفرم به صورت پیش‌فرض درون ایمیج داکر قرار دارد.</li>



<li>وب‌سرور و شبکه: Wiki.js می‌تواند بدون Nginx یا Apache اجرا شود، اما در بسیاری از محیط‌های پروداکشن از Reverse Proxy برای مدیریت SSL، مسیریابی درخواست‌ها و تنظیمات شبکه استفاده می‌شود. همچنین استفاده از یک دامنه یا زیر دامنه اختصاصی برای استقرار ویکی داخلی سازمان، مدیریت و دسترسی به سرویس را ساده‌تر می‌کند.</li>
</ul>



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



<p class="wp-block-paragraph">اگر به دنبال یک سیستم مستندسازی self-hosted هستید که هم با Git یکپارچه شود و هم روی زیرساخت اختصاصی شما اجرا شود، Wiki.js یکی از گزینه‌های جدی پیش‌رو است. Wiki.js در عمل بین دو نیاز مهم تعادل ایجاد می‌کند: از یک طرف سادگی استقرار و استفاده (به‌خصوص با Docker) و از طرف دیگر امکانات فنی مثل همگام‌سازی با گیت، احراز هویت سازمانی و کنترل دسترسی دقیق. به همین دلیل برای تیم‌های DevOps، تیم‌های توسعه نرم‌افزار و سازمان‌هایی که رویکرد زیرساخت‌محور دارند، انتخاب مناسبی محسوب می‌شود.</p>



<p class="wp-block-paragraph">با این حال، این ابزار برای سناریوهایی که نیاز به همکاری هم‌زمان پیشرفته، جریان‌های کاری پیچیده یا اکوسیستم یکپارچه سازمانی (در حد ابزارهایی مثل Confluence) دارند، ممکن است محدودیت‌هایی داشته باشد. بنابراین انتخاب Wiki.js زمانی منطقی است که اولویت شما «کنترل، سادگی زیرساخت و انعطاف‌پذیری» باشد، نه یک پلتفرم کاملاً enterprise با همه امکانات همکاری بلادرنگ.</p>



<p class="wp-block-paragraph"></p>
<p>The post <a href="https://hamravesh.com/blog/what-is-wikijs/">Wiki.js چیست؟ مقایسه با رقبا و راهنمای نصب</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://hamravesh.com/blog/what-is-wikijs/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>RBAC در کوبرنتیز چیست؟ آشنایی با اجزا و روش‌های پیاده‌سازی</title>
		<link>https://hamravesh.com/blog/what-is-kubernetes-rbac/</link>
					<comments>https://hamravesh.com/blog/what-is-kubernetes-rbac/#respond</comments>
		
		<dc:creator><![CDATA[هم‌روش]]></dc:creator>
		<pubDate>Wed, 27 May 2026 12:30:00 +0000</pubDate>
				<category><![CDATA[مقالات]]></category>
		<category><![CDATA[کوبرنتیز]]></category>
		<guid isPermaLink="false">https://hamravesh.com/blog/?p=5199</guid>

					<description><![CDATA[<p>RBAC در کوبرنتیز یکی از اصلی‌ترین مکانیزم‌های کنترل دسترسی در کوبرنتیز است که تعیین می‌کند هر کاربر، سرویس یا برنامه چه عملیاتی را روی منابع کلاستر می‌تواند انجام دهد. این سیستم با تکیه بر نقش‌ها (Role و ClusterRole) و اتصال آن‌ها به هویت‌ها (RoleBinding و ClusterRoleBinding)، لایه Authorization در API Server را مدیریت می‌کند و [&#8230;]</p>
<p>The post <a href="https://hamravesh.com/blog/what-is-kubernetes-rbac/">RBAC در کوبرنتیز چیست؟ آشنایی با اجزا و روش‌های پیاده‌سازی</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">RBAC در کوبرنتیز یکی از اصلی‌ترین مکانیزم‌های کنترل دسترسی در کوبرنتیز است که تعیین می‌کند هر کاربر، سرویس یا برنامه چه عملیاتی را روی منابع کلاستر می‌تواند انجام دهد. این سیستم با تکیه بر نقش‌ها (Role و ClusterRole) و اتصال آن‌ها به هویت‌ها (RoleBinding و ClusterRoleBinding)، لایه Authorization در API Server را مدیریت می‌کند و نقش کلیدی در پیاده‌سازی اصل حداقل سطح دسترسی دارد. در این مقاله، ساختار، نحوه عملکرد، اجزای اصلی، مثال عملی پیاده‌سازی و محدودیت‌های RBAC کوبرنتیز را به‌صورت دقیق بررسی می‌کنیم.</p>



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



<p class="wp-block-paragraph">RBAC مخفف Role-Based Access Control یا «کنترل دسترسی مبتنی بر نقش» است. این مکانیزم امنیتی در کوبرنتیز مشخص می‌کند که هر کاربر، سرویس یا برنامه چه عملیاتی را روی کدام منابع کلاستر می‌تواند انجام دهد.</p>



<p class="wp-block-paragraph">در کوبرنتیز، تمام درخواست‌ها از طریق API Server پردازش می‌شوند و سیستم RBAC کوبرنتیز وظیفه دارد سطح دسترسی این درخواست‌ها را کنترل کند. به‌کمک این مکانیزم می‌توان تعیین کرد که یک هویت مشخص چه منابعی را مشاهده کند، چه عملیاتی انجام دهد و این دسترسی در کدام Namespace یا در سطح کل کلاستر معتبر باشد. برای مثال، با استفاده از RBAC در کوبرنتیز می‌توان به یک توسعه‌دهنده فقط اجازه مشاهده Podها در Namespace توسعه (Dev) را داد؛ بدون اینکه به منابع محیط Production دسترسی داشته باشد.</p>



<p class="wp-block-paragraph">سیستم RBAC کوبرنتیز فقط برای کاربران انسانی استفاده نمی‌شود و برنامه‌ها و Podهای داخل کلاستر نیز از طریق Service Accountها با همین مکانیزم احراز دسترسی می‌شوند.</p>



<p class="wp-block-paragraph">به‌طور کلی، RBAC استانداردترین روش مدیریت دسترسی کاربران در کوبرنتیز است و نقش مهمی در پیاده‌سازی اصل Least Privilege یا «حداقل سطح دسترسی» دارد.</p>



<h2 class="wp-block-heading" id="h-تفاوت-authentication-و-authorization-در-kubernetes"><a></a>تفاوت Authentication و Authorization در Kubernetes</h2>



<p class="wp-block-paragraph">برای درک جایگاه RBAC در کوبرنتیز، ابتدا باید تفاوت Authentication (احراز هویت) و Authorization (تعیین سطح دسترسی) را بدانید. هر درخواستی که به API Server کلاستر ارسال می‌شود، ابتدا هویت فرستنده را بررسی می‌کند و سپس سطح دسترسی او را می‌سنجد.</p>



<p class="wp-block-paragraph"><strong>مرحله اول، Authentication: </strong>کوبرنتیز مشخص می‌کند درخواست از طرف چه کاربری، سرویس یا برنامه‌ای ارسال شده است. این فرایند معمولاً با استفاده از توکن‌ها، Client Certificateها یا سرویس‌های هویت خارجی انجام می‌شود. اگر هویت فرستنده تأیید نشود، درخواست با خطای HTTP 401 Unauthorized رد خواهد شد.</p>



<p class="wp-block-paragraph"><strong>مرحله دوم، Authorization: </strong>پس از تأیید هویت، مرحله Authorization یا آغاز می‌شود. در این مرحله، کوبرنتیز بررسی می‌کند که آیا این هویت، اجازه انجام عملیات موردنظر را دارد یا خیر. اینجاست که RBAC کوبرنتیز وارد عمل می‌شود و بر اساس Roleها و Bindingهای تعریف‌شده، مجوز دسترسی را صادر یا رد می‌کند. در صورت نداشتن مجوز کافی، درخواست با خطای HTTP 403 Forbidden مواجه می‌شود.</p>



<p class="wp-block-paragraph">برای درک بهتر تفاوت این دو لایه امنیتی، جدول زیر را ببینید:<br></p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td><strong>ویژگی</strong><strong></strong></td><td><strong>Authentication</strong><strong> (احراز هویت)</strong><strong></strong></td><td><strong>Authorization</strong><strong> (تعیین سطح دسترسی)</strong><strong></strong></td></tr><tr><td>سؤال اصلی</td><td>شما چه کسی هستید؟ (تشخیص هویت)</td><td>مجاز به انجام دادن چه کاری هستید؟ (بررسی مجوز)</td></tr><tr><td>زمان اجرا</td><td>مرحله ۱: قبل از بررسی دسترسی‌ها</td><td>مرحله ۲: پس از تأیید هویت</td></tr><tr><td>وظیفه اصلی</td><td>شناسایی هویت کاربر یا سرویس</td><td>بررسی مجوز عملیات</td></tr><tr><td>کد وضعیت HTTP در صورت شکست</td><td>401 Unauthorized</td><td>403 Forbidden</td></tr><tr><td>ورودی‌های سیستم</td><td>هدرهای HTTP، گواهی کلاینت، توکن‌ها</td><td>نام کاربر، نوع عملیات (Action)، منبع مورد نظر (Object)</td></tr><tr><td>خروجی فرایند</td><td>استخراج نام کاربری (Username) یا شناسه گروه</td><td>صدور اجازه دسترسی (Allow) یا رد آن (Deny)</td></tr></tbody></table></figure>



<p class="wp-block-paragraph"></p>



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



<p class="wp-block-paragraph">سیستم RBAC در کوبرنتیز از چند جزء اصلی تشکیل شده است که در کنار هم مشخص می‌کنند چه هویتی چه عملیاتی را روی کدام منابع می‌تواند انجام دهد. این اجزا عبارت‌اند از:</p>



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



<p class="wp-block-paragraph">Role مجموعه‌ای از مجوزهاست که دسترسی به منابع را در یک <a href="https://hamravesh.com/blog/what-is-kubernetes-namespace/" type="link" id="https://hamravesh.com/blog/what-is-kubernetes-namespace/" target="_blank" rel="noreferrer noopener">Namespace در کوبرنتیز</a> تعریف می‌کند. با استفاده از Role می‌توان مشخص کرد که یک کاربر یا Service Account چه عملیاتی را روی منابع کوبرنتیز انجام دهد.</p>



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



<p class="wp-block-paragraph">ClusterRole نیز مجموعه‌ای از مجوزها را تعریف می‌کند، اما در سطح کل کلاستر قابل استفاده است و محدود به یک Namespace مشخص نیست.</p>



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



<p class="wp-block-paragraph">RoleBinding یک Role را به یک کاربر، گروه یا Service Account متصل می‌کند. این اتصال فقط در همان Namespace معتبر است و مشخص می‌کند چه هویتی از مجوزهای تعریف‌شده در Role استفاده کند.</p>



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



<p class="wp-block-paragraph">ClusterRoleBinding یک ClusterRole را در سطح کل کلاستر به کاربران، گروه‌ها یا Service Accountها متصل می‌کند. این نوع Binding معمولاً برای دسترسی‌های سراسری استفاده می‌شود.</p>



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



<p class="wp-block-paragraph">Subjects همان هویت‌هایی هستند که مجوزها به آن‌ها اختصاص داده می‌شود. این هویت‌ها می‌توانند کاربران، گروه‌ها یا Service Accountهای داخل کلاستر باشند.</p>



<p class="wp-block-paragraph">در تنظیمات RBAC کوبرنتیز، هر Role یا ClusterRole معمولاً شامل فیلدهایی برای تعیین منابع و نوع دسترسی است. برای مثال، فیلد <code>verbs</code> مشخص می‌کند یک هویت چه عملیاتی مانند <code>get</code> ،<code>list</code> ،<code>create</code> یا <code>delete</code> را می‌تواند انجام دهد.</p>



<p class="wp-block-paragraph">همچنین فیلد <code>apiGroups</code> برای تعیین گروه API مربوط به هر منبع استفاده می‌شود. در منابع اصلی کوبرنتیز مانند Pod و Service معمولاً مقدار آن به‌صورت رشته خالی <code>""</code> نوشته می‌شود، اما برای منابعی مانند <a href="https://hamravesh.com/blog/what-is-kubernetes-deployment/" type="link" id="https://hamravesh.com/blog/what-is-kubernetes-deployment/" target="_blank" rel="noreferrer noopener">Deployment در کوبرنتیز</a> از گروه‌هایی مانند <code>apps</code> استفاده می‌شود.</p>



<h2 class="wp-block-heading" id="h-تفاوت-role-و-clusterrole-مرز-میان-namespace-و-کلاستر">تفاوت Role و ClusterRole؛ مرز میان Namespace و کلاستر</h2>



<p class="wp-block-paragraph">اصلی‌ترین تفاوت Role و ClusterRole در Kubernetes، محدوده دسترسی یا Scope آن‌هاست. Role فقط در یک Namespace مشخص معتبر است و مجوزهای تعریف‌شده در آن خارج از همان Namespace اعمال نمی‌شوند. برای مثال، اگر کاربری در Namespace مربوط به محیط توسعه (dev) اجازه مشاهده پادها را داشته باشد، این دسترسی در Namespace محیط Production معتبر نخواهد بود.</p>



<p class="wp-block-paragraph">در مقابل، ClusterRole در سطح کل کلاستر عمل می‌کند و به یک Namespace محدود نیست. این نوع Role معمولاً برای منابعی استفاده می‌شود که وابسته به Namespace نیستند؛ مانند نودها یا PersistentVolumeها. همچنین می‌توان از ClusterRole برای تعریف دسترسی‌های یکسان در چند Namespace مختلف استفاده کرد.</p>



<p class="wp-block-paragraph">در عمل، Role و RoleBinding بیشتر برای مدیریت دسترسی‌های محدود در یک Namespace استفاده می‌شوند، درحالی‌که ClusterRole و ClusterRoleBinding برای دسترسی‌های سراسری در سطح کلاستر کاربرد دارند.</p>



<h2 class="wp-block-heading" id="h-نحوه-عملکرد-rbac-در-kubernetes"><a></a>نحوه عملکرد RBAC در Kubernetes</h2>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="741" src="https://hamravesh.com/blog/wp-content/uploads/2026/05/hamravesh-what-is-kubernetes-rbac02-1024x741.webp" alt="نحوه عملکرد RBAC در Kubernetes" class="wp-image-5201" srcset="https://hamravesh.com/blog/wp-content/uploads/2026/05/hamravesh-what-is-kubernetes-rbac02-1024x741.webp 1024w, https://hamravesh.com/blog/wp-content/uploads/2026/05/hamravesh-what-is-kubernetes-rbac02-300x217.webp 300w, https://hamravesh.com/blog/wp-content/uploads/2026/05/hamravesh-what-is-kubernetes-rbac02-768x556.webp 768w, https://hamravesh.com/blog/wp-content/uploads/2026/05/hamravesh-what-is-kubernetes-rbac02-150x108.webp 150w, https://hamravesh.com/blog/wp-content/uploads/2026/05/hamravesh-what-is-kubernetes-rbac02-120x87.webp 120w, https://hamravesh.com/blog/wp-content/uploads/2026/05/hamravesh-what-is-kubernetes-rbac02.webp 1201w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">یک کاربر یا Service Account از طریق Role یا ClusterRole و اتصال آن با RoleBinding یا ClusterRoleBinding، مجوز دسترسی به منابع API در سطح Namespace یا کل کلاستر را دریافت می‌کند.</figcaption></figure>



<p class="wp-block-paragraph">سیستم RBAC در کوبرنتیز برای بررسی دسترسی‌ها، هر درخواست را به‌صورت مرحله‌به‌مرحله ارزیابی می‌کند. زمانی که یک کاربر، Service Account یا برنامه درخواستی را به API Server ارسال می‌کند، کوبرنتیز مراحل زیر را برای تصمیم‌گیری طی می‌کند:</p>



<p class="wp-block-paragraph"><strong>گام ۱: شناسایی هویت درخواست‌کننده</strong></p>



<p class="wp-block-paragraph">در ابتدا کوبرنتیز مشخص می‌کند درخواست از طرف چه هویتی ارسال شده است. این هویت می‌تواند یک کاربر، گروه یا Service Account باشد.</p>



<p class="wp-block-paragraph" id="h-گام-۲-بررسی-rol-eها-و-clusterroleها"><strong>گام ۲: بررسی Rol‍eها و ClusterRoleها</strong></p>



<p class="wp-block-paragraph">پس از شناسایی هویت، کوبرنتیز Roleها و ClusterRoleهای تعریف‌شده را بررسی می‌کند تا مشخص شود چه مجوزهایی برای آن هویت وجود دارد.</p>



<p class="wp-block-paragraph"><strong>گام ۳: بررسی Bindingها</strong></p>



<p class="wp-block-paragraph">در ادامه، کوبرنتیز بررسی می‌کند که آیا Role یا ClusterRole موردنظر از طریق RoleBinding یا ClusterRoleBinding به آن کاربر یا Service Account متصل شده است یا خیر.</p>



<p class="wp-block-paragraph"><strong>گام ۴: تطبیق درخواست با مجوزها</strong></p>



<p class="wp-block-paragraph">در این مرحله، کوبرنتیز نوع عملیات درخواستی (مانند <code>get</code> ،<code>list</code> یا <code>delete</code>) و منبع هدف (مانند Pod یا Service) را با قوانین تعریف‌شده در RBAC تطبیق می‌دهد.</p>



<p class="wp-block-paragraph"><strong>گام ۵: صدور نتیجه نهایی</strong></p>



<p class="wp-block-paragraph">اگر مجوز لازم وجود داشته باشد، درخواست تأیید می‌شود و کاربر به منبع موردنظر دسترسی پیدا می‌کند. در غیر این صورت، کوبرنتیز درخواست را با خطای <code>403 Forbidden</code> رد می‌کند.</p>



<div class="wp-block-dh-blog-card-database-block card database">
<div class="wp-block-group row align-items-center is-nowrap is-layout-flex wp-container-core-group-is-layout-8f761849 wp-block-group-is-layout-flex">
<div class="wp-block-group col-md"><div class="wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow">
<h3 class="wp-block-heading" id="h-کوبرنتیز-مدیریت-شده-هم-روش-راهی-مطمئن-برای-رشد-بی-وقفه">💡 کوبرنتیز مدیریت‌شده هم‌روش، راهی مطمئن برای رشد بی‌وقفه</h3>



<p class="wp-block-paragraph">راهکار کوبرنتیز مدیریت شده، بر بستر ابر اختصاصی یا به صورت On-premises</p>



<p class="wp-block-paragraph"><br>✅ کاهش هزینه‌های عملیاتی<br>✅ احراز هویت یکپارچه با اتصال به SSO سازمانی<br>✅ قابل استقرار روی سرورهای on-premises</p>



<p class="wp-block-paragraph"></p>
</div></div>
</div>



<div class="wp-block-group col-md-auto"><div class="wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow">
<p class="btn btn--main btn--wide wp-block-paragraph"><a href="https://hamravesh.com/managed-kubernetes" type="link" id="https://hamravesh.com/managed-kubernetes" target="_blank" rel="noreferrer noopener">کوبرنتیز مدیریت‌شده</a></p>
</div></div>
</div>



<h2 class="wp-block-heading" id="h-آموزش-عملی-پیاده-سازی-rbac-در-کوبرنتیز-به-همراه-کد"><a></a>آموزش عملی پیاده‌سازی RBAC در کوبرنتیز (به همراه کد)</h2>



<p class="wp-block-paragraph">در این مثال، یک Service Account ایجاد می‌کنیم که فقط اجازه مشاهده Serviceها و ConfigMapها را در یک Namespace مشخص داشته باشد.</p>



<p class="wp-block-paragraph" id="h-گام-۱-ایجاد-namespace-و-service-account"><strong>گام ۱: ایجاد Namespace و Service Account</strong></p>



<p class="wp-block-paragraph">ابتدا یک Namespace و سپس یک Service Account اختصاصی ایجاد می‌کنیم:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:clamp(24px, 1.5rem, 36px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2d333d;color:#9eadbd">Bash</span><span role="button" tabindex="0" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>kubectl create namespace random-numbers
kubectl create sa random-numbers-sa -n random-numbers</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #F69D50">kubectl</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">create</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">namespace</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">random-numbers</span></span>
<span class="line"><span style="color: #F69D50">kubectl</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">create</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">sa</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">random-numbers-sa</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">-n</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">random-numbers</span></span></code></pre></div>



<p class="wp-block-paragraph"><strong>گام ۲: تعریف Role</strong></p>



<p class="wp-block-paragraph">در این مرحله، یک Role در فایلی به نام فایل به نام role.yaml می‌سازیم که فقط دسترسی <code>get</code> و <code>list</code> را روی Serviceها و ConfigMapها داشته باشد.</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:clamp(24px, 1.5rem, 36px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2d333d;color:#9eadbd">YAML</span><span role="button" tabindex="0" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: random-numbers
  name: client-access-role
rules:
- apiGroups: &#91;""&#93;
  resources:
    - configmaps
    - services
  verbs:
    - get
    - list</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #8DDB8C">apiVersion</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">rbac.authorization.k8s.io/v1</span></span>
<span class="line"><span style="color: #8DDB8C">kind</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">Role</span></span>
<span class="line"><span style="color: #8DDB8C">metadata</span><span style="color: #ADBAC7">:</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #8DDB8C">namespace</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">random-numbers</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #8DDB8C">name</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">client-access-role</span></span>
<span class="line"><span style="color: #8DDB8C">rules</span><span style="color: #ADBAC7">:</span></span>
<span class="line"><span style="color: #ADBAC7">- </span><span style="color: #8DDB8C">apiGroups</span><span style="color: #ADBAC7">: &#91;</span><span style="color: #96D0FF">&quot;&quot;</span><span style="color: #ADBAC7">&#93;</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #8DDB8C">resources</span><span style="color: #ADBAC7">:</span></span>
<span class="line"><span style="color: #ADBAC7">    - </span><span style="color: #96D0FF">configmaps</span></span>
<span class="line"><span style="color: #ADBAC7">    - </span><span style="color: #96D0FF">services</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #8DDB8C">verbs</span><span style="color: #ADBAC7">:</span></span>
<span class="line"><span style="color: #ADBAC7">    - </span><span style="color: #96D0FF">get</span></span>
<span class="line"><span style="color: #ADBAC7">    - </span><span style="color: #96D0FF">list</span></span></code></pre></div>



<p class="wp-block-paragraph">برای اعمال این Role روی کلاستر، دستور زیر را اجرا کنید:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:clamp(24px, 1.5rem, 36px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2d333d;color:#9eadbd">Bash</span><span role="button" tabindex="0" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>kubectl apply -f role.yaml</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #F69D50">kubectl</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">apply</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">-f</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">role.yaml</span></span></code></pre></div>



<p class="wp-block-paragraph"><strong>گام ۳: ایجاد RoleBinding</strong></p>



<p class="wp-block-paragraph">اکنون باید Role تعریف‌شده را به Service Account متصل کنیم. فایل yaml زیر با نام <code>rolebinding.yaml</code> را ایجاد کنید:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:clamp(24px, 1.5rem, 36px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2d333d;color:#9eadbd">YAML</span><span role="button" tabindex="0" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: client-access-role-binding
  namespace: random-numbers
subjects:
- kind: ServiceAccount
  name: random-numbers-sa
  namespace: random-numbers
roleRef:
  kind: Role
  name: client-access-role
  apiGroup: rbac.authorization.k8s.io</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #8DDB8C">apiVersion</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">rbac.authorization.k8s.io/v1</span></span>
<span class="line"><span style="color: #8DDB8C">kind</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">RoleBinding</span></span>
<span class="line"><span style="color: #8DDB8C">metadata</span><span style="color: #ADBAC7">:</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #8DDB8C">name</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">client-access-role-binding</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #8DDB8C">namespace</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">random-numbers</span></span>
<span class="line"><span style="color: #8DDB8C">subjects</span><span style="color: #ADBAC7">:</span></span>
<span class="line"><span style="color: #ADBAC7">- </span><span style="color: #8DDB8C">kind</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">ServiceAccount</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #8DDB8C">name</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">random-numbers-sa</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #8DDB8C">namespace</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">random-numbers</span></span>
<span class="line"><span style="color: #8DDB8C">roleRef</span><span style="color: #ADBAC7">:</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #8DDB8C">kind</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">Role</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #8DDB8C">name</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">client-access-role</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #8DDB8C">apiGroup</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">rbac.authorization.k8s.io</span></span></code></pre></div>



<p class="wp-block-paragraph">برای اعمال RoleBinding دستور زیر را اجرا کنید:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:clamp(24px, 1.5rem, 36px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2d333d;color:#9eadbd">Bash</span><span role="button" tabindex="0" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>kubectl apply -f rolebinding.yaml</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #F69D50">kubectl</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">apply</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">-f</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">rolebinding.yaml</span></span></code></pre></div>



<p class="wp-block-paragraph" id="h-گام-۴-راه-اندازی-پاد-تست-با-سرویس-اکانت-اختصاصی"><strong>گام ۴: راه‌اندازی پاد تست با سرویس‌اکانت اختصاصی</strong></p>



<p class="wp-block-paragraph">در ادامه یک پاد می‌سازیم تا بتوانیم درخواست‌های امنیتی را از داخل کلاستر تست کنیم. برای انجام این کار فایلی به نام pod-test.yaml بسازید و کد زیر را در آن قرار دهید:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:clamp(24px, 1.5rem, 36px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2d333d;color:#9eadbd">YAML</span><span role="button" tabindex="0" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>apiVersion: v1
kind: Pod
metadata:
  name: curlo
  namespace: random-numbers
spec:
  serviceAccountName: random-numbers-sa
  containers:
  - name: curlo
    image: curlimages/curl
    command: &#91;"sleep","999999"&#93;</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #8DDB8C">apiVersion</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">v1</span></span>
<span class="line"><span style="color: #8DDB8C">kind</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">Pod</span></span>
<span class="line"><span style="color: #8DDB8C">metadata</span><span style="color: #ADBAC7">:</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #8DDB8C">name</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">curlo</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #8DDB8C">namespace</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">random-numbers</span></span>
<span class="line"><span style="color: #8DDB8C">spec</span><span style="color: #ADBAC7">:</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #8DDB8C">serviceAccountName</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">random-numbers-sa</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #8DDB8C">containers</span><span style="color: #ADBAC7">:</span></span>
<span class="line"><span style="color: #ADBAC7">  - </span><span style="color: #8DDB8C">name</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">curlo</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #8DDB8C">image</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">curlimages/curl</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #8DDB8C">command</span><span style="color: #ADBAC7">: &#91;</span><span style="color: #96D0FF">&quot;sleep&quot;</span><span style="color: #ADBAC7">,</span><span style="color: #96D0FF">&quot;999999&quot;</span><span style="color: #ADBAC7">&#93;</span></span></code></pre></div>



<p class="wp-block-paragraph">پاد را اجرا کنید:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:clamp(24px, 1.5rem, 36px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2d333d;color:#9eadbd">Bash</span><span role="button" tabindex="0" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>kubectl apply -f pod-test.yaml</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #F69D50">kubectl</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">apply</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">-f</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">pod-test.yaml</span></span></code></pre></div>



<p class="wp-block-paragraph"><strong>گام ۵: بررسی سطح دسترسی</strong></p>



<p class="wp-block-paragraph">ابتدا وارد Pod شوید:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:clamp(24px, 1.5rem, 36px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2d333d;color:#9eadbd">Bash</span><span role="button" tabindex="0" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>kubectl exec -it curlo -n random-numbers -- /bin/sh</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #F69D50">kubectl</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">exec</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">-it</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">curlo</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">-n</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">random-numbers</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">--</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">/bin/sh</span></span></code></pre></div>



<p class="wp-block-paragraph">سپس توکن Service Account را برای ارسال درخواست به API Server تنظیم کنید:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:clamp(24px, 1.5rem, 36px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2d333d;color:#9eadbd">Bash</span><span role="button" tabindex="0" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>export TOKEN=$(cat /var/run/secrets/kubernetes.io/serviceaccount/token)
export CURL_CA_BUNDLE=/var/run/secrets/kubernetes.io/serviceaccount/ca.crt</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #F47067">export</span><span style="color: #ADBAC7"> TOKEN</span><span style="color: #F47067">=</span><span style="color: #96D0FF">$(</span><span style="color: #F69D50">cat</span><span style="color: #96D0FF"> /var/run/secrets/kubernetes.io/serviceaccount/token)</span></span>
<span class="line"><span style="color: #F47067">export</span><span style="color: #ADBAC7"> CURL_CA_BUNDLE</span><span style="color: #F47067">=</span><span style="color: #96D0FF">/var/run/secrets/kubernetes.io/serviceaccount/ca.crt</span></span></code></pre></div>



<p class="wp-block-paragraph" id="h-آزمایش-اول-بررسی-دسترسی-مجاز-مشاهده-سرویس-ها"><strong>آزمایش اول: بررسی دسترسی مجاز (مشاهده سرویس‌ها)</strong></p>



<p class="wp-block-paragraph">یک درخواست به آدرس API سرویس‌های این Namespace می‌فرستیم:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:clamp(24px, 1.5rem, 36px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2d333d;color:#9eadbd">Bash</span><span role="button" tabindex="0" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>curl -k --header "Authorization: Bearer $TOKEN" \
https://kubernetes.default.svc/api/v1/namespaces/random-numbers/services</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #F69D50">curl</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">-k</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">--header</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">&quot;Authorization: Bearer </span><span style="color: #ADBAC7">$TOKEN</span><span style="color: #96D0FF">&quot;</span><span style="color: #ADBAC7"> </span><span style="color: #F47067">\</span></span>
<span class="line"><span style="color: #ADBAC7">https://kubernetes.default.svc/api/v1/namespaces/random-numbers/services</span></span></code></pre></div>



<p class="wp-block-paragraph">در صورت موفقیت، Kubernetes اطلاعات Serviceها را با پاسخ <code>200 OK</code> برمی‌گرداند.</p>



<p class="wp-block-paragraph" id="h-آزمایش-دوم-بررسی-دسترسی-غیرمجاز"><strong>آزمایش دوم: بررسی دسترسی غیرمجاز</strong></p>



<p class="wp-block-paragraph">اکنون درخواست مشاهده Podها را ارسال می‌کنیم:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:clamp(24px, 1.5rem, 36px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2d333d;color:#9eadbd">Bash</span><span role="button" tabindex="0" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>curl -k --header "Authorization: Bearer $TOKEN" \
https://kubernetes.default.svc/api/v1/namespaces/random-numbers/pods</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #F69D50">curl</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">-k</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">--header</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">&quot;Authorization: Bearer </span><span style="color: #ADBAC7">$TOKEN</span><span style="color: #96D0FF">&quot;</span><span style="color: #ADBAC7"> </span><span style="color: #F47067">\</span></span>
<span class="line"><span style="color: #ADBAC7">https://kubernetes.default.svc/api/v1/namespaces/random-numbers/pods</span></span></code></pre></div>



<p class="wp-block-paragraph">چون در Role تعریف‌شده مجوز دسترسی به Podها وجود ندارد، Kubernetes پاسخ <code>403 Forbidden</code> را برمی‌گرداند:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:clamp(24px, 1.5rem, 36px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2d333d;color:#9eadbd">JSON</span><span role="button" tabindex="0" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>{
  "status": "Failure",
  "message": "pods is forbidden: User \"system:serviceaccount:random-numbers:random-numbers-sa\" cannot list resource \"pods\" in the namespace \"random-numbers\"",
  "reason": "Forbidden",
  "code": 403
}</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #ADBAC7">{</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #8DDB8C">&quot;status&quot;</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">&quot;Failure&quot;</span><span style="color: #ADBAC7">,</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #8DDB8C">&quot;message&quot;</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">&quot;pods is forbidden: User </span><span style="color: #F47067">\&quot;</span><span style="color: #96D0FF">system:serviceaccount:random-numbers:random-numbers-sa</span><span style="color: #F47067">\&quot;</span><span style="color: #96D0FF"> cannot list resource </span><span style="color: #F47067">\&quot;</span><span style="color: #96D0FF">pods</span><span style="color: #F47067">\&quot;</span><span style="color: #96D0FF"> in the namespace </span><span style="color: #F47067">\&quot;</span><span style="color: #96D0FF">random-numbers</span><span style="color: #F47067">\&quot;</span><span style="color: #96D0FF">&quot;</span><span style="color: #ADBAC7">,</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #8DDB8C">&quot;reason&quot;</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">&quot;Forbidden&quot;</span><span style="color: #ADBAC7">,</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #8DDB8C">&quot;code&quot;</span><span style="color: #ADBAC7">: </span><span style="color: #6CB6FF">403</span></span>
<span class="line"><span style="color: #ADBAC7">}</span></span></code></pre></div>



<h2 class="wp-block-heading" id="h-بهترین-روش-ها-best-practices-برای-پیاده-سازی-rbac"><a></a>بهترین روش‌ها (Best Practices) برای پیاده‌سازی RBAC</h2>



<p class="wp-block-paragraph">پیاده‌سازی صحیح RBAC در کوبرنتیز نقش مهمی در کاهش ریسک‌های امنیتی و کنترل دسترسی کاربران دارد. مهم‌ترین راهکارهای این حوزه عبارت‌اند از:</p>



<p class="wp-block-paragraph"><strong>اصل حداقل دسترسی (Least Privilege)</strong></p>



<p class="wp-block-paragraph">دسترسی‌ها باید فقط بر اساس نیاز واقعی کاربران و سرویس‌ها تعریف شوند. بهتر است از اعطای مجوزهای گسترده یا استفاده از وایلدکارد <code>*</code> در بخش منابع و عملیات‌ها خودداری شود.</p>



<p class="wp-block-paragraph"><strong>استفاده از Role و RoleBinding در سطح Namespace</strong></p>



<p class="wp-block-paragraph">در بیشتر سناریوها، بهتر است دسترسی‌ها در سطح Namespace مدیریت شوند. استفاده از Role و RoleBinding باعث می‌شود دامنه دسترسی محدود بماند و ایزوله‌سازی بین محیط‌هایی مانند <code>dev</code> و <code>prod</code> حفظ شود.</p>



<p class="wp-block-paragraph"><strong>محدود کردن استفاده از ClusterRole و ClusterRoleBinding</strong></p>



<p class="wp-block-paragraph">ClusterRole و ClusterRoleBinding فقط باید برای دسترسی‌های سراسری یا منابع cluster-scoped استفاده شوند. استفاده غیرضروری از آن‌ها می‌تواند سطح دسترسی کاربران را بیش از حد افزایش دهد.</p>



<p class="wp-block-paragraph"><strong>استفاده از Service Account اختصاصی</strong></p>



<p class="wp-block-paragraph">بهتر است هر Pod یا برنامه از Service Account اختصاصی خود استفاده کند و به Service Account پیش‌فرض Namespace وابسته نباشد. این کار باعث می‌شود دسترسی سرویس‌ها از یکدیگر جدا شود.</p>



<p class="wp-block-paragraph">همچنین در صورت عدم نیاز، می‌توان قابلیت mount خودکار توکن Service Account را با تنظیم <code>automountServiceAccountToken: false</code> غیرفعال کرد.</p>



<p class="wp-block-paragraph"><strong>بازبینی و حساب‌رسی دوره‌ای</strong></p>



<p class="wp-block-paragraph">تنظیمات RBAC باید به‌صورت دوره‌ای بررسی شوند تا دسترسی‌های قدیمی، RoleBindingهای بلااستفاده یا مجوزهای غیرضروری حذف شوند. همچنین دسترسی‌های حساس، به‌ویژه اعضای گروه <code>system:masters</code>، باید به‌صورت مستمر کنترل شوند.</p>



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



<p class="wp-block-paragraph">در پیاده‌سازی RBAC، بسیاری از مشکلات امنیتی نه به دلیل ضعف ابزار، بلکه به خاطر تنظیمات نادرست رخ می‌دهند. مهم‌ترین اشتباهات رایج عبارت‌اند از:</p>



<p class="wp-block-paragraph"><strong>استفاده از ClusterRoleBinding به‌جای RoleBinding</strong></p>



<p class="wp-block-paragraph">یکی از خطاهای رایج، استفاده بی‌دلیل از ClusterRoleBinding است. این کار می‌تواند باعث شود کاربری که باید فقط در یک Namespace محدود باشد، به منابع سایر Namespaceها نیز دسترسی پیدا کند.</p>



<p class="wp-block-paragraph"><strong>استفاده از وایلدکارد در دسترسی‌ها</strong></p>



<p class="wp-block-paragraph">دادن دسترسی <code>*</code> در منابع یا عملیات‌ها عملاً تمام محدودیت‌های RBAC را از بین می‌برد و باعث ایجاد دسترسی‌های غیرقابل‌کنترل می‌شود.</p>



<p class="wp-block-paragraph"><strong>استفاده از حساب cluster-admin برای کارهای روزمره</strong></p>



<p class="wp-block-paragraph">حساب cluster-admin دسترسی کامل به کل کلاستر دارد. استفاده روزمره از آن ریسک خطای انسانی را به‌شدت افزایش می‌دهد و می‌تواند منجر به تغییرات مخرب در کل سیستم شود.</p>



<p class="wp-block-paragraph"><strong>اضافه کردن کاربران به گروه system:masters</strong></p>



<p class="wp-block-paragraph">عضویت در این گروه باعث دور زدن کامل RBAC می‌شود. این سطح دسترسی عملاً معادل دسترسی روت در کل کلاستر است و باید به‌شدت محدود شود.</p>



<p class="wp-block-paragraph"><strong>استفاده از Service Account پیش‌فرض</strong></p>



<p class="wp-block-paragraph">استفاده از Service Account پیش‌فرض یک Namespace برای همه پادها باعث می‌شود سرویس‌های مختلف، یک سطح دسترسی مشترک داشته باشند. این موضوع ریسک نفوذ را افزایش می‌دهد.</p>



<p class="wp-block-paragraph"><strong>فعال‌سازی تنظیمات ناامن در API Server</strong></p>



<p class="wp-block-paragraph">فعال کردن گزینه‌هایی مانند <code>--insecure-port</code> یا <code>--anonymous-auth</code> می‌تواند لایه احراز هویت و کنترل دسترسی را عملاً بی‌اثر کند.</p>



<p class="wp-block-paragraph"><strong>عدم بازبینی دوره‌ای دسترسی‌ها</strong></p>



<p class="wp-block-paragraph">اگر Roleها و RoleBindingها به‌صورت دوره‌ای بررسی نشوند، دسترسی‌های قدیمی و غیرضروری باقی می‌مانند و به مرور زمان سطح حمله (Attack Surface) را افزایش می‌دهند.</p>



<p class="wp-block-paragraph"><strong>نادیده گرفتن تغییرات سازمانی</strong></p>



<p class="wp-block-paragraph">تغییر نقش افراد در سازمان یا خروج آن‌ها باید بلافاصله در RBAC اعمال شود. عدم به‌روزرسانی دسترسی‌ها می‌تواند باعث انباشت مجوزهای اضافی شود.</p>



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



<p class="wp-block-paragraph">سیستم RBAC در کوبرنتیز ابزار اصلی کنترل دسترسی است، اما به‌تنهایی برای پوشش تمام سناریوهای امنیتی کافی نیست و محدودیت‌های مشخصی دارد:</p>



<p class="wp-block-paragraph"><strong>۱. عدم کنترل روی محتوای منابع</strong></p>



<p class="wp-block-paragraph">RBAC فقط مشخص می‌کند چه کسی به یک resource دسترسی دارد، اما روی محتوای آن کنترل ندارد. برای مثال، اگر کاربری اجازه دسترسی به Secrets را داشته باشد، می‌تواند به محتوای رمزگذاری‌شده آن‌ها دسترسی پیدا کند، بدون اینکه RBAC بتواند سطح جزئی‌تری از محدودیت اعمال کند.</p>



<p class="wp-block-paragraph"><strong>۲. عدم جلوگیری از Privilege Escalation در سطح Pod</strong></p>



<p class="wp-block-paragraph">در صورتی که کاربر اجازه ایجاد پاد داشته باشد، می‌تواند از طریق اتصال Service Accountهای دارای سطح دسترسی بالاتر، به مجوزهای بیشتری دست پیدا کند. RBAC به‌تنهایی جلوی این نوع ارتقا سطح دسترسی را نمی‌گیرد.</p>



<p class="wp-block-paragraph"><strong>۳. محدودیت در کنترل منابع زیرساختی</strong></p>



<p class="wp-block-paragraph">RBAC فقط دسترسی به ایجاد یا مدیریت منابع را کنترل می‌کند، اما نمی‌تواند نوع یا رفتار دقیق برخی منابع را محدود کند. برای مثال، کاربر می‌تواند در صورت داشتن مجوز، نوع PersistentVolume را به شکلی انتخاب کند که ریسک امنیتی ایجاد کند.</p>



<p class="wp-block-paragraph"><strong>۴. عدم کنترل روی عملیات‌های حساس خاص</strong></p>



<p class="wp-block-paragraph">برخی عملیات مانند <code>impersonate</code> ،<code>bind</code> و <code>escalate</code> می‌توانند منجر به دور زدن سیاست‌های دسترسی شوند. RBAC این عملیات‌ها را در سطح منطقی کنترل می‌کند، اما سوءاستفاده از آن‌ها در صورت داشتن مجوز، همچنان امکان‌پذیر است.</p>



<p class="wp-block-paragraph"><strong>۵. محدودیت در برابر حملات سطح کلاستر</strong></p>



<p class="wp-block-paragraph">RBAC توانایی محدود کردن رفتارهایی مانند ایجاد حجم بالای resource و مصرف بیش از حد etcd یا CPU را ندارد. برای این موارد باید از مکانیزم‌های مکمل مانند ResourceQuota و LimitRange استفاده شود.</p>



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



<p class="wp-block-paragraph">RBAC در کوبرنتیز یکی از مهم‌ترین لایه‌های امنیتی برای مدیریت دسترسی کاربران و سرویس‌ها در کلاستر است. این مکانیزم بر پایه تعریف نقش‌ها (Role و ClusterRole)، اتصال آن‌ها به هویت‌ها (RoleBinding و ClusterRoleBinding) و اعمال سیاست‌های دسترسی در سطح API Server عمل می‌کند.</p>



<p class="wp-block-paragraph">در سطح عملی، RBAC به شما اجازه می‌دهد دسترسی‌ها را به‌صورت دقیق و محدود در سطح Namespace یا کل کلاستر کنترل کنید و اصل Least Privilege را پیاده‌سازی کنید. با این حال، این سیستم به‌تنهایی کافی نیست و باید در کنار سایر مکانیزم‌های امنیتی مانند ResourceQuota، LimitRange و سیاست‌های امنیتی تکمیلی استفاده شود.</p>



<p class="wp-block-paragraph">همچنین بیشترین خطاها در پیاده‌سازی RBAC معمولاً ناشی از استفاده بیش از حد از دسترسی‌های سراسری، بی‌توجهی به Service Accountها و عدم بازبینی دوره‌ای مجوزهاست. در نهایت، RBAC یک ابزار پایه و ضروری برای امنیت Kubernetes است، اما ارزش واقعی آن زمانی مشخص می‌شود که به‌درستی طراحی، محدود و در کنار سایر لایه‌های امنیتی استفاده شود.</p>



<p class="wp-block-paragraph"></p>
<p>The post <a href="https://hamravesh.com/blog/what-is-kubernetes-rbac/">RBAC در کوبرنتیز چیست؟ آشنایی با اجزا و روش‌های پیاده‌سازی</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://hamravesh.com/blog/what-is-kubernetes-rbac/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>به‌روزرسانی تعرفه خدمات هم‌روش از ابتدای خرداد ۱۴۰۵</title>
		<link>https://hamravesh.com/blog/pricing-update-1405/</link>
					<comments>https://hamravesh.com/blog/pricing-update-1405/#respond</comments>
		
		<dc:creator><![CDATA[هم‌روش]]></dc:creator>
		<pubDate>Thu, 21 May 2026 20:30:00 +0000</pubDate>
				<category><![CDATA[اخبار هم‌روش]]></category>
		<guid isPermaLink="false">https://hamravesh.com/blog/?p=4755</guid>

					<description><![CDATA[<p>با تداوم افزایش قیمت منابع پردازشی و ذخیره‌سازی، هزینه‌های زیرساختی در سال گذشته افزایش یافته است. در راستای حفظ و ارتقای پایداری بلندمدت و کیفیت خدمات، تعرفه سرویس‌های هم‌روش از ابتدای خرداد ۱۴۰۵ به‌روزرسانی شده است. در این مسیر، تلاش کرده‌ایم تعادلی مناسب میان کیفیت خدمات و هزینه نهایی برای مشتریان برقرار بماند. برای بررسی [&#8230;]</p>
<p>The post <a href="https://hamravesh.com/blog/pricing-update-1405/">به‌روزرسانی تعرفه خدمات هم‌روش از ابتدای خرداد ۱۴۰۵</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">با تداوم افزایش قیمت منابع پردازشی و ذخیره‌سازی، هزینه‌های زیرساختی در سال گذشته افزایش یافته است. در راستای حفظ و ارتقای پایداری بلندمدت و کیفیت خدمات، تعرفه سرویس‌های هم‌روش از ابتدای خرداد ۱۴۰۵ به‌روزرسانی شده است. در این مسیر، تلاش کرده‌ایم تعادلی مناسب میان کیفیت خدمات و هزینه نهایی برای مشتریان برقرار بماند.</p>



<p class="wp-block-paragraph">برای بررسی جزئیات تغییرات و آشنایی با هزینه منابع و سرویس‌ها، می‌توانید جدول‌های زیر را مشاهده کنید. کلیه هزینه‌ها، بر اساس دوره ماهانه سرویس‌ها ذکر شده‌اند. همچنین <a href="https://hamravesh.com/pricing" target="_blank" rel="noreferrer noopener">صفحه قیمت‌گذاری هم‌روش</a> از ابتدای خرداد با اعمال تغییرات به‌روزرسانی شده‌ است.</p>



<h2 class="wp-block-heading" id="h-منابع">منابع</h2>



<p class="wp-block-paragraph">هزینه منابع کلاسترهای سرویس‌ها (اختصاصی و عمومی) بر اساس جدول زیر محاسبه می‌شود.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="822" height="889" src="https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-81-1.webp" alt="قیمت منابع هم‌روش در سال ۱۴۰۵" class="wp-image-5178" srcset="https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-81-1.webp 822w, https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-81-1-277x300.webp 277w, https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-81-1-768x831.webp 768w, https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-81-1-120x130.webp 120w" sizes="auto, (max-width: 822px) 100vw, 822px" /></figure>



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



<p class="wp-block-paragraph"><a href="https://hamravesh.com/darkube" target="_blank" rel="noreferrer noopener">دارکوب</a> یک پلتفرم ابری بر پایه کوبرنتیز است که به سازمان‌ها این امکان را می‌دهد تا بدون مواجه شدن با دشواری‌های مسائل زیرساخت و نگهداری کوبرنتیز، پروژه‌های خود را به سادگی و با سرعت بالا روی اینترنت بارگذاری و اجرا کنند. هزینه سرویس دارکوب بر اساس منابع ذکر شده در جدول بالا محاسبه می‌شود. همچنین امکان <a href="https://console.hamravesh.com/monitoring" type="link" id="https://console.hamravesh.com/monitoring">فعال کردن سرویس مانیتورینگ عمومی</a> برای اپلیکیشن‌های پلتفرم دارکوب با قیمت ۱،۴۰۰،۰۰۰ تومان فراهم شده است. </p>



<p class="wp-block-paragraph">در میان سرویس‌هایی که در کنسول هم‌روش،‌ در این بخش قابل مشاهده هستند، هزینه موارد زیر بر اساس جدول‌های جداگانه‌ای محاسبه می‌شود که در ادامه این مطلب، در بخش مربوط به هر سرویس ذکر شده‌اند:</p>



<ul class="wp-block-list">
<li><a href="https://hamravesh.com/blog/pricing-update-1405/#h-%D8%A8%D8%A7%D8%B2%D8%A7%D8%B1%DA%86%D9%87-%D9%87%D9%85-%D8%B1%D9%88%D8%B4" type="link" id="https://hamravesh.com/blog/pricing-update-1405/#h-%D8%A8%D8%A7%D8%B2%D8%A7%D8%B1%DA%86%D9%87-%D9%87%D9%85-%D8%B1%D9%88%D8%B4">اپلیکیشن‌های بازارچه</a></li>



<li><a href="https://hamravesh.com/blog/pricing-update-1405/#h-%D8%AF%DB%8C%D8%AA%D8%A7%D8%A8%DB%8C%D8%B3-%D9%85%D8%AF%DB%8C%D8%B1%DB%8C%D8%AA-%D8%B4%D8%AF%D9%87">دیتابیس مدیریت‌شده</a> (شامل دیتابیس‌های PostgreSQL و MySQL)</li>



<li><a href="https://hamravesh.com/blog/pricing-update-1405/#h-%D8%AC%DB%8C%D8%B1%D8%A7">جیرا</a></li>



<li><a href="https://hamravesh.com/blog/pricing-update-1405/#h-%DA%A9%D8%A7%D9%86%D9%81%D9%84%D9%88%D8%A6%D9%86%D8%B3">کانفلوئنس</a></li>



<li><a href="https://hamravesh.com/blog/pricing-update-1405/#h-%DA%AF%DB%8C%D8%AA-%D9%84%D8%A8-%D8%B1%D8%A7%D9%86%D8%B1" type="link" id="https://hamravesh.com/blog/pricing-update-1405/#h-%DA%AF%DB%8C%D8%AA-%D9%84%D8%A8-%D8%B1%D8%A7%D9%86%D8%B1">گیت‌لب رانر</a></li>
</ul>



<div class="wp-block-buttons is-content-justification-center is-layout-flex wp-container-core-buttons-is-layout-fe48e5de wp-block-buttons-is-layout-flex">
<div class="wp-block-button"><a class="wp-block-button__link has-background has-text-align-center wp-element-button" href="https://console.hamravesh.com/darkube/create" style="background-color:#4a48c2" target="_blank" rel="noreferrer noopener"><strong>ساخت اپ جدید با دارکوب</strong></a></div>
</div>



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



<p class="wp-block-paragraph"><a href="https://hamravesh.com/managed-kubernetes" target="_blank" rel="noreferrer noopener">کوبرنتیز مدیریت‌شده</a>، عمده فرایندهای مرتبط با زیرساخت را خودکارسازی می‌کند و علاوه بر کاهش هزینه‌های عملیاتی، بهبود کیفیت و افزایش مشاهده‌پذیری را برای سازمان‌ها به همراه می‌آورد. هزینه منابع این کلاستر بر اساس هزینه منابع <a href="https://hamravesh.com/blog/pricing-update-1405/#h-%D9%85%D9%86%D8%A7%D8%A8%D8%B9">جدول بالا</a> به‌علاوه هزینه مدیریت کلاستر بر اساس جدول زیر محاسبه می‌شود.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="822" height="458" src="https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-82.webp" alt="قیمت سرویس کوبرنتیز مدیریت‌شده هم‌روش در سال ۱۴۰۵" class="wp-image-5179" srcset="https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-82.webp 822w, https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-82-300x167.webp 300w, https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-82-768x428.webp 768w, https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-82-120x67.webp 120w" sizes="auto, (max-width: 822px) 100vw, 822px" /></figure>



<div class="wp-block-buttons is-content-justification-center is-layout-flex wp-container-core-buttons-is-layout-fe48e5de wp-block-buttons-is-layout-flex">
<div class="wp-block-button"><a class="wp-block-button__link has-background wp-element-button" href="https://hamravesh.com/contact-sales" style="background-color:#4a48c2" target="_blank" rel="noreferrer noopener"><strong>درخواست کوبرنتیز مدیریت‌شده</strong></a></div>
</div>



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



<p class="wp-block-paragraph"><a href="https://hamravesh.com/managed-database" target="_blank" rel="noreferrer noopener">دیتابیس مدیریت‌شده</a> به کسب‌وکارها این امکان را می‌دهد که بدون دغدغه‌‌های مرتبط با مدیریت زیرساخت، سرویس دیتابیس را راه‌اندازی کرده و بر توسعه محصول خود تمرکز کنند. هزینه دیتابیس مدیریت‌شده بر اساس منابع به شرح زیر است.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="821" height="454" src="https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-83.webp" alt="قیمت سرویس دیتابیس مدیریت‌شده هم‌روش در سال ۱۴۰۵" class="wp-image-5180" srcset="https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-83.webp 821w, https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-83-300x166.webp 300w, https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-83-768x425.webp 768w, https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-83-120x66.webp 120w" sizes="auto, (max-width: 821px) 100vw, 821px" /><figcaption class="wp-element-caption">*اعداد این جدول در ۱۶ اردیبهشت ۱۴۰۵ اصلاح شده است.</figcaption></figure>



<div class="wp-block-buttons is-content-justification-center is-layout-flex wp-container-core-buttons-is-layout-fe48e5de wp-block-buttons-is-layout-flex">
<div class="wp-block-button"><a class="wp-block-button__link has-background wp-element-button" href="https://console.hamravesh.com/dbaas" style="background-color:#4a48c2" target="_blank" rel="noreferrer noopener"><strong>ساخت دیتابیس</strong></a></div>
</div>



<h2 class="wp-block-heading" id="h-آبجکت-استورج">آبجکت استورج</h2>



<p class="wp-block-paragraph">سرویس آبجکت استورج هم‌روش، راهکاری مقیاس‌پذیر برای ذخیره‌سازی بهینه انواع آبجکت‌‌ها را ارائه می‌کند. این سرویس امکان توسعه و سازگاری با نیازهای آینده سازمان‌ها را فراهم می‌آورد و می‌تواند به عنوان راهکار اصلی ذخیره‌سازی داده‌های حیاتی یا مکمل زیرساخت موجود، در بهینه‌سازی و افزایش کارایی، نقش کلیدی داشته باشد. هزینه این سرویس در جدول زیر ذکر شده است. </p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="823" height="460" src="https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-84.webp" alt="قیمت آبکجت استورج هم‌روش در سال ۱۴۰۵" class="wp-image-5181" srcset="https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-84.webp 823w, https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-84-300x168.webp 300w, https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-84-768x429.webp 768w, https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-84-120x67.webp 120w" sizes="auto, (max-width: 823px) 100vw, 823px" /></figure>



<div class="wp-block-buttons is-content-justification-center is-layout-flex wp-container-core-buttons-is-layout-fe48e5de wp-block-buttons-is-layout-flex" id="https://console.hamravesh.com/marketplace/explore/jira">
<div class="wp-block-button"><a class="wp-block-button__link has-background has-text-align-center wp-element-button" href="https://console.hamravesh.com/storage" style="background-color:#4a48c2" target="_blank" rel="noopener noreferrer noreferrer noopener">
<strong>ساخت باکت در آبجکت استورج</strong>
</a></div>
</div>



<h2 class="wp-block-heading" id="h-بکاپ">بکاپ</h2>



<p class="wp-block-paragraph"><a href="https://hamravesh.com/backup" target="_blank" rel="noreferrer noopener">سرویس بکاپ</a> هم‌روش امکان پشتیبان‌گیری مستمر و خودکار از اپلیکیشن‌ها و دیسک‌ها را بر اساس سیاست‌های پشتیبان‌گیری متنوع ارائه می‌کند. هزینه سرویس بکاپ بر اساس جدول زیر محاسبه می‌شود.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="823" height="819" src="https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-85.webp" alt="قیمت آبکجت استورج هم‌روش در سال ۱۴۰۵" class="wp-image-5182" srcset="https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-85.webp 823w, https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-85-300x300.webp 300w, https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-85-150x150.webp 150w, https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-85-768x764.webp 768w, https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-85-70x70.webp 70w, https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-85-85x85.webp 85w, https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-85-120x119.webp 120w" sizes="auto, (max-width: 823px) 100vw, 823px" /></figure>



<div class="wp-block-buttons is-content-justification-center is-layout-flex wp-container-core-buttons-is-layout-fe48e5de wp-block-buttons-is-layout-flex" id="https://console.hamravesh.com/marketplace/explore/jira">
<div class="wp-block-button"><a class="wp-block-button__link has-background has-text-align-center wp-element-button" href="https://console.hamravesh.com/backup" style="background-color:#4a48c2" target="_blank" rel="noopener noreferrer noreferrer noopener">
<strong>کنسول سرویس بکاپ</strong>
</a></div>
</div>



<h2 class="wp-block-heading" id="h-بازارچه-هم-روش">بازارچه هم‌روش</h2>



<p class="wp-block-paragraph">بازارچه هم‌روش امکان راه‌اندازی سریع برنامه‌های آماده را بدون پیکربندی پیچیده ارائه می‌کنند. هزینه سرویس‌های بازارچه به شرح زیر است.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="825" height="456" src="https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-86.webp" alt="قیمت برنامه‌های آماده بازارچه هم‌روش در سال ۱۴۰۵" class="wp-image-5183" srcset="https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-86.webp 825w, https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-86-300x166.webp 300w, https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-86-768x424.webp 768w, https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-86-120x66.webp 120w" sizes="auto, (max-width: 825px) 100vw, 825px" /></figure>



<p class="wp-block-paragraph">در میان سرویس‌های بازارچه که در کنسول هم‌روش قابل مشاهده هستند، هزینه سرویس‌های مدیریت‌شده زیر بر اساس جدول‌های جداگانه‌ای محاسبه می‌شود که در ادامه این مطلب، در بخش مربوط به هر سرویس ذکر شده‌اند:</p>



<ul class="wp-block-list">
<li><a href="https://hamravesh.com/blog/pricing-update-1405/#h-%D8%AC%DB%8C%D8%B1%D8%A7">جیرا</a></li>



<li><a href="https://hamravesh.com/blog/pricing-update-1405/#h-%DA%A9%D8%A7%D9%86%D9%81%D9%84%D9%88%D8%A6%D9%86%D8%B3">کانفلوئنس</a></li>



<li><kbd><a href="https://hamravesh.com/blog/pricing-update-1405/#h-n8n">n8n</a></kbd></li>
</ul>



<div class="wp-block-buttons is-content-justification-center is-layout-flex wp-container-core-buttons-is-layout-fe48e5de wp-block-buttons-is-layout-flex" id="https://console.hamravesh.com/darkube/create">
<div class="wp-block-button"><a class="wp-block-button__link has-background has-text-align-center wp-element-button" href="https://console.hamravesh.com/marketplace/explore" style="background-color:#4a48c2" target="_blank" rel="noopener noreferrer noreferrer noopener">
<strong>ساخت اپ جدید از بازارچه هم‌روش</strong>
</a></div>
</div>



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



<p class="wp-block-paragraph">سرویس جیرا هم‌روش یک راهکار آماده و بدون پیچیدگی برای سازمان‌هایی است که به یک راهکار قدرتمند و منعطف برای مدیریت پروژه‌های تیم‌ها نیاز دارند. پلن‌های این سرویس به شرح زیر هستند.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="823" height="522" src="https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-87.webp" alt="قیمت برنامه‌های آماده بازارچه هم‌روش در سال ۱۴۰۵" class="wp-image-5184" srcset="https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-87.webp 823w, https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-87-300x190.webp 300w, https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-87-768x487.webp 768w, https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-87-120x76.webp 120w" sizes="auto, (max-width: 823px) 100vw, 823px" /></figure>



<div class="wp-block-buttons is-content-justification-center is-layout-flex wp-container-core-buttons-is-layout-fe48e5de wp-block-buttons-is-layout-flex" id="https://console.hamravesh.com/marketplace/explore/jira">
<div class="wp-block-button"><a class="wp-block-button__link has-background has-text-align-center wp-element-button" href="https://console.hamravesh.com/marketplace/explore/jira" style="background-color:#4a48c2" target="_blank" rel="noopener noreferrer noreferrer noopener">
<strong>راه‌اندازی سرویس جیرا</strong>
</a></div>
</div>



<h2 class="wp-block-heading" id="h-کانفلوئنس">کانفلوئنس</h2>



<p class="wp-block-paragraph">سرویس کانفلوئنس هم‌روش یک بستر متمرکز و قابل اعتماد برای مستندسازی، اشتراک دانش و همکاری تیمی در مقیاس سازمانی فراهم می‌کند. پلن‌های این سرویس در جدول زیر ذکر شده‌اند.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="823" height="523" src="https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-88.webp" alt="هزینه سرویس کانفلوئنس هم‌روش در سال ۱۴۰۵" class="wp-image-5185" srcset="https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-88.webp 823w, https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-88-300x191.webp 300w, https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-88-768x488.webp 768w, https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-88-120x76.webp 120w" sizes="auto, (max-width: 823px) 100vw, 823px" /></figure>



<div class="wp-block-buttons is-content-justification-center is-layout-flex wp-container-core-buttons-is-layout-fe48e5de wp-block-buttons-is-layout-flex">
<div class="wp-block-button"><a class="wp-block-button__link has-background wp-element-button" href="https://console.hamravesh.com/marketplace/explore/confluence" style="background-color:#4a48c2" target="_blank" rel="noreferrer noopener"><strong>راه‌اندازی سرویس کانفلوئنس</strong></a></div>
</div>



<p class="wp-block-paragraph"></p>



<p class="has-large-font-size wp-block-paragraph" id="h-n8n"><kbd><strong>n8n</strong></kbd> </p>



<p class="wp-block-paragraph">سرویس <kbd>n8n</kbd> هم‌روش راهکاری پایدار و مقیاس‌پذیر برای پیاده‌سازی اتوماسیون سازمانی و یکپارچه‌سازی سرویس‌ها در بستر ابری را فراهم می‌کند. این سرویس به تیم‌ها امکان می‌دهد workflowهای پیچیده میان APIها و سیستم‌های داخلی را بدون محدودیت اتصال و با عملکردی بهینه اجرا کنند. پلن‌های این سرویس در جدول زیر ذکر شده‌اند.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="823" height="461" src="https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-89.webp" alt="هزینه سرویس n8n هم‌روش در سال ۱۴۰۵" class="wp-image-5186" srcset="https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-89.webp 823w, https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-89-300x168.webp 300w, https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-89-768x430.webp 768w, https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-89-120x67.webp 120w" sizes="auto, (max-width: 823px) 100vw, 823px" /></figure>



<div class="wp-block-buttons is-content-justification-center is-layout-flex wp-container-core-buttons-is-layout-fe48e5de wp-block-buttons-is-layout-flex">
<div class="wp-block-button"><a class="wp-block-button__link has-background wp-element-button" href="https://console.hamravesh.com/marketplace/explore/n8n" style="background-color:#4a48c2" target="_blank" rel="noreferrer noopener"><strong>راه‌اندازی سرویس <kbd>n8n</kbd></strong></a></div>
</div>



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



<p class="wp-block-paragraph"><a href="https://hamravesh.com/sentry" target="_blank" rel="noreferrer noopener">سرویس Sentry</a> هم‌روش، راهکاری برای تیم‌های دواپس است که به مانیتورینگ جامع و تحلیل عمیق خطاها در محیط‌های امن و مقیاس‌پذیر نیاز دارند. هزینه‌ این سرویس بر اساس تعداد spanها و errorها به شرح زیر محاسبه می‌شود.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="825" height="1020" src="https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-90.webp" alt="قیمت سرویس سنتری هم‌روش در سال ۱۴۰۵" class="wp-image-5187" srcset="https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-90.webp 825w, https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-90-243x300.webp 243w, https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-90-768x950.webp 768w, https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-90-120x148.webp 120w" sizes="auto, (max-width: 825px) 100vw, 825px" /></figure>



<p class="wp-block-paragraph"><br>در گذشته، هزینه سرویس سنتری بر اساس میزان error و transaction محاسبه می‌شد اما از این پس بر مبنای error و span در نظر گرفته می‌شود. در مبنای محاسبه جدید، هر یک transaction سابق معادل متوسط ۲۰ عدد span در نظر گرفته شده است. همچنین در طرح جدید سرویس، تعداد بسته‌های قابل انتخاب برای span و error افزایش یافته است.</p>



<div class="wp-block-buttons is-content-justification-center is-layout-flex wp-container-core-buttons-is-layout-fe48e5de wp-block-buttons-is-layout-flex">
<div class="wp-block-button"><a class="wp-block-button__link has-background wp-element-button" href="https://console.hamravesh.com/sentry/create" style="background-color:#4a48c2" target="_blank" rel="noreferrer noopener"><strong>ساخت سنتری</strong></a></div>
</div>



<h2 class="wp-block-heading" id="h-گیت-لب-رانر">گیت‌لب رانر</h2>



<p class="wp-block-paragraph"><a href="https://hamravesh.com/gitlab-runner" type="link" id="https://hamravesh.com/gitlab-runner" target="_blank" rel="noreferrer noopener">گیت‌لب رانر</a> هم‌روش با بهره‌گیری از بستر کوبرنتیز و در تعامل با <a href="https://hamgit.ir" target="_blank" rel="noreferrer noopener">هم‌گیت</a> یا گیت‌لب اختصاصی سازمان‌ها، امکان اجرای jobها و ساخت imageهای نرم‌افزارهای سازمان‌ها را به‌صورت خودکار و بدون دغدغه‌ تحریم فراهم می‌کند. پلن‌های سرویس گیت‌لب رانر در جدول زیر ذکر شده است.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="821" height="587" src="https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-91.webp" alt="قیمت سرویس گیت‌لب رانر هم‌روش در سال ۱۴۰۵" class="wp-image-5188" srcset="https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-91.webp 821w, https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-91-300x214.webp 300w, https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-91-768x549.webp 768w, https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-91-150x108.webp 150w, https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-91-120x86.webp 120w" sizes="auto, (max-width: 821px) 100vw, 821px" /></figure>



<div class="wp-block-buttons is-content-justification-center is-layout-flex wp-container-core-buttons-is-layout-fe48e5de wp-block-buttons-is-layout-flex">
<div class="wp-block-button"><a class="wp-block-button__link has-background wp-element-button" href="https://console.hamravesh.com/darkube/create?type=gitlab_runner" style="background-color:#4a48c2" target="_blank" rel="noreferrer noopener"><strong>راه‌اندازی گیت‌لب رانر</strong></a></div>
</div>



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



<p class="wp-block-paragraph">سرویس لود بالانسر اختصاصی هم‌روش امکان ایزوله کردن درخواست‌‌‌های HTTP اپلیکیشن‌های سازمان‌ها از دیگر مشتریان کلاستر را فراهم می‌کند. با لود بالانسر اختصاصی سازمان‌ها می‌توانند لاگ‌ها و متریک‌ها را از طریق فعال‌سازی سرویس مانیتورینگ و لاگ جمع‌آوری کنند. لود بالانسر هم‌روش همچنین از SSL termination و health check پشتیبانی می‌کند. هزینه لود بالانسر اختصاصی در جدول زیر مشخص شده است.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="821" height="329" src="https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-92.webp" alt="قیمت سرویس گیت‌لب رانر هم‌روش در سال ۱۴۰۵" class="wp-image-5189" srcset="https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-92.webp 821w, https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-92-300x120.webp 300w, https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-92-768x308.webp 768w, https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-92-120x48.webp 120w" sizes="auto, (max-width: 821px) 100vw, 821px" /></figure>



<div class="wp-block-buttons is-content-justification-center is-layout-flex wp-container-core-buttons-is-layout-fe48e5de wp-block-buttons-is-layout-flex">
<div class="wp-block-button"><a class="wp-block-button__link has-background wp-element-button" href="https://hamravesh.com/contact-sales" style="background-color:#4a48c2" target="_blank" rel="noreferrer noopener"><strong>دریافت لودبالانسر اختصاصی</strong></a></div>
</div>



<h2 class="wp-block-heading" id="h-پشتیبانی-سازمانی">پشتیبانی سازمانی</h2>



<p class="wp-block-paragraph">سرویس پشتیبانی سازمانی هم‌روش راهکاری حرفه‌ای برای کسب‌‌وکارهایی است که زیرساخت ابری را بخشی حیاتی از عملیات خود می‌دانند. این سرویس به کسب‌وکارها کمک می‌کند با تمرکز بیشتر روی توسعه محصول،‌ پشتیبانی سرویس‌های ابری را به تیم متخصص بسپارند. با پشتیبانی سازمانی، تیکت‌ها با بالاترین اولویت بررسی می‌شوند، اکانت منیجر اختصاصی به سازمان اختصاص می‌یابد و مانیتورینگ آپ‌تایم و اندپوینت‌های حیاتی توسط هم‌روش انجام می‌شود.</p>



<p class="wp-block-paragraph">هزینه سرویس‌ پشتیبانی سازمانی به این صورت محاسبه می‌شود که پس از محاسبه هزینه‌های سرویس، به میزان ۸ درصد از مبلغ کل فاکتور، تحت هزینه پشتیبانی سازمانی، به مبلغ افزوده می‌شود و حداقل هزینه پشتیبانی سازمانی ۴۸،۰۰۰،۰۰۰ تومان در نظر گرفته شده است.</p>



<div class="wp-block-buttons is-content-justification-center is-layout-flex wp-container-core-buttons-is-layout-fe48e5de wp-block-buttons-is-layout-flex">
<div class="wp-block-button"><a class="wp-block-button__link has-background wp-element-button" href="https://hamravesh.com/contact-sales" style="background-color:#4a48c2" target="_blank" rel="noreferrer noopener"><strong>دریافت مشاوره برای پشتیبانی سازمانی</strong></a></div>
</div>



<h2 class="wp-block-heading" id="h-سایر-راهکارهای-هم-روش">سایر راهکارهای هم‌روش</h2>



<p class="wp-block-paragraph">علاوه بر سرویس‌هایی که اشاره شد، راهکارهای اختصاصی زیر نیز توسط هم‌روش ارائه می‌شوند.</p>



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



<p class="wp-block-paragraph">سازمان‌هایی که قصد مهاجرت به زیرساخت ابری هم‌روش را دارند می‌توانند از خدمات مشاوره مهاجرت بهره‌مند شوند. در این خدمات، راهکارهای طراحی و پیاده‌سازی معماری cloud native و مایکروسرویس، dockerize کردن سرویس‌ها و راه‌اندازی CI/CD ارائه می‌شود.</p>



<div class="wp-block-buttons is-content-justification-center is-layout-flex wp-container-core-buttons-is-layout-fe48e5de wp-block-buttons-is-layout-flex">
<div class="wp-block-button"><a class="wp-block-button__link has-background wp-element-button" href="https://hamravesh.com/contact-sales" style="background-color:#4a48c2" target="_blank" rel="noreferrer noopener"><strong>دریافت مشاوره مهاجرت ابری</strong></a></div>
</div>



<h3 class="wp-block-heading" id="h-گیت-لب-عمومی-هم-گیت">گیت‌لب عمومی (هم‌گیت)</h3>



<p class="wp-block-paragraph"><a href="https://hamgit.ir" target="_blank" rel="noreferrer noopener">هم‌گیت</a>، سرویس گیت‌لب رایگان است که برای کاربران هم‌روش امکان بارگذاری امن ریپوها را با حفظ حریم خصوصی فراهم می‌کند. هم‌گیت، برخلاف گیت‌لب مشکلات مرتبط با تحریم را ندارد و به صورت مستمر، توسط هم‌روش نگهداری و به‌روزرسانی می‌شود.</p>



<div class="wp-block-buttons is-content-justification-center is-layout-flex wp-container-core-buttons-is-layout-fe48e5de wp-block-buttons-is-layout-flex">
<div class="wp-block-button"><a class="wp-block-button__link has-background wp-element-button" href="https://hamgit.ir" style="background-color:#4a48c2" target="_blank" rel="noreferrer noopener"><strong>دسترسی به سرویس هم‌گیت</strong></a></div>
</div>



<h3 class="wp-block-heading" id="h-گیت-لب-اختصاصی">گیت‌لب اختصاصی</h3>



<p class="wp-block-paragraph">سرویس راه‌اندازی گیت‌لب اختصاصی هم‌روش بر پایه گیت‌لب، به سازمان‌ها کمک می‌کند تا یک بستر اختصاصی و یکپارچه برای مدیریت کد و چرخه کامل توسعه نرم‌افزار در اختیار داشته باشند. این سرویس با استقرار در زیرساخت ابری اختصاصی، امکان مدیریت مخازن کد، پیاده‌سازی CI/CD، کنترل دسترسی‌های سازمانی و اجرای خودکار فرایندهای توسعه را فراهم می‌کند.</p>



<div class="wp-block-buttons is-content-justification-center is-layout-flex wp-container-core-buttons-is-layout-fe48e5de wp-block-buttons-is-layout-flex">
<div class="wp-block-button"><a class="wp-block-button__link has-background wp-element-button" href="https://hamravesh.com/contact-sales" style="background-color:#4a48c2" target="_blank" rel="noreferrer noopener"><strong>دریافت گیت‌لب اختصاصی</strong></a></div>
</div>



<h3 class="wp-block-heading" id="h-جیتسی-مدیریت-شده">جیتسی مدیریت‌شده</h3>



<p class="wp-block-paragraph">سرویس Jitsi مدیریت‌شده هم‌روش یک بستر امن، پایدار و مقیاس‌پذیر برای برگزاری جلسات ویدئویی و ارتباطات آنلاین را در اختیار سازمان‌ها قرار می‌دهد. این سرویس با استقرار در زیرساخت ابری اختصاصی، امکان برقراری تماس‌های صوتی و تصویری با کیفیت بالا، مدیریت دسترسی کاربران و کنترل کامل بر داده‌ها را فراهم می‌کند.</p>



<p class="wp-block-paragraph"></p>



<div class="wp-block-buttons is-content-justification-center is-layout-flex wp-container-core-buttons-is-layout-fe48e5de wp-block-buttons-is-layout-flex">
<div class="wp-block-button"><a class="wp-block-button__link has-background wp-element-button" href="https://hamravesh.com/contact-sales" style="background-color:#4a48c2" target="_blank" rel="noreferrer noopener"><strong>دریافت جیتسی مدیریت‌شده</strong></a></div>
</div>



<h3 class="wp-block-heading" id="h-سرویس-gpu">سرویس GPU</h3>



<p class="wp-block-paragraph">سرویس GPU هم‌روش راهکاری پیشرفته برای سازمان‌هایی است که قصد دارند بدون نیاز به سرمایه‌گذاری در زیرساخت سخت‌افزاری، از قدرت پردازشگرهای گرافیکی پیشرفته و به‌روز برای پردازش‌های سنگین حوزه هوش مصنوعی (AI) و یادگیری ماشین (ML) استفاده کنند. </p>



<div class="wp-block-buttons is-content-justification-center is-layout-flex wp-container-core-buttons-is-layout-fe48e5de wp-block-buttons-is-layout-flex">
<div class="wp-block-button"><a class="wp-block-button__link has-background wp-element-button" href="https://hamravesh.com/contact-sales" style="background-color:#4a48c2" target="_blank" rel="noreferrer noopener"><strong>دریافت سرویس GPU</strong></a></div>
</div>



<h3 class="wp-block-heading" id="h-سرویس-vault">سرویس Vault</h3>



<p class="wp-block-paragraph">سرویس Vault مدیریت‌شده هم‌روش (مبتنی بر Hashicorp Vault)، راهکار مدیریت متمرکز و امن اطلاعات حساس را در بستر ابر به سازمان‌ها ارائه می‌کند. این سرویس امکان ذخیره‌سازی، کنترل دسترسی و استفاده ایمن از کلیدهای API، رمزهای عبور، توکن‌ها و سایر داده‌های محرمانه را فراهم می‌کند و با اعمال سیاست‌های دسترسی مبتنی بر نقش، از دسترسی غیرمجاز جلوگیری می‌کند.</p>



<p class="wp-block-paragraph"></p>



<div class="wp-block-buttons is-content-justification-center is-layout-flex wp-container-core-buttons-is-layout-fe48e5de wp-block-buttons-is-layout-flex">
<div class="wp-block-button"><a class="wp-block-button__link has-background wp-element-button" href="https://hamravesh.com/contact-sales" style="background-color:#4a48c2" target="_blank" rel="noreferrer noopener"><strong>دریافت سرویس Vault</strong></a></div>
</div>



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



<p class="wp-block-paragraph">هم‌روش در ابتدای ثبت‌نام در کنسول، مبلغی به عنوان هدیه را برای مشتریان در نظر می‌گیرد. این مبلغ که تا پیش از این ۱۰۰،۰۰۰ تومان بوده، از ابتدای خرداد ماه به ۵۰۰،۰۰۰ تومان افزایش یافته است.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="has-text-align-center has-white-color has-text-color has-background has-link-color has-medium-font-size wp-elements-f53fe5db44cbed0fd0ebc97dadc3c166 wp-block-paragraph" style="background-color:#0f0d23"><strong>اگر سوالی درباره به‌روزرسانی تعرفه خدمات دارید، می‌توانید با واحد فروش، به شماره ۹۲۰۰۹۲۴۰-۰۲۱ &#8211; داخلی ۲، در ارتباط باشید یا درخواست خود را در صفحه </strong><a href="https://hamravesh.com/contact-sales" type="link" id="https://hamravesh.com/contact-sales" target="_blank" rel="noreferrer noopener">درخواست مشاوره</a><strong> ثبت کنید.</strong></p>



<p class="wp-block-paragraph"></p>
<p>The post <a href="https://hamravesh.com/blog/pricing-update-1405/">به‌روزرسانی تعرفه خدمات هم‌روش از ابتدای خرداد ۱۴۰۵</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://hamravesh.com/blog/pricing-update-1405/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
