<?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>Aliakbar نویسنده در بلاگ هم‌روش</title>
	<atom:link href="https://hamravesh.com/blog/author/aliakbar/feed/" rel="self" type="application/rss+xml" />
	<link></link>
	<description>وبلاگ رسمی هم‌روش</description>
	<lastBuildDate>Wed, 28 Aug 2024 10:21:35 +0000</lastBuildDate>
	<language>fa-IR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.1</generator>

<image>
	<url>https://hamravesh.com/blog/wp-content/uploads/2022/07/cropped-fav1-32x32.png</url>
	<title>Aliakbar نویسنده در بلاگ هم‌روش</title>
	<link></link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>آشنایی با تغییرات کوبرنتیز نسخه ۱.۳۰</title>
		<link>https://hamravesh.com/blog/kubernetes-v1-30-release/</link>
					<comments>https://hamravesh.com/blog/kubernetes-v1-30-release/#respond</comments>
		
		<dc:creator><![CDATA[Aliakbar]]></dc:creator>
		<pubDate>Sat, 15 Jun 2024 13:10:43 +0000</pubDate>
				<category><![CDATA[مقالات]]></category>
		<category><![CDATA[کوبرنتیز]]></category>
		<guid isPermaLink="false">https://hamravesh.com/blog/?p=3069</guid>

					<description><![CDATA[<p>نسخه‌ 1.30 کوبرنتیز جدیدترین نسخه‌ منتشرشده‌ آن است که با معرفی چندین ویژگی جدید همراه بوده است. در این مقاله قصد داریم تعدادی از مهم‌ترین تغییرات این نسخه را بررسی کنیم.  تعدادی از این ویژگی‌های جدید به حالت پایدار یا stable رسیده‌اند. تعدادی هم هنوز در حالت بتا یا آلفا قرار دارند و ممکن است [&#8230;]</p>
<p>The post <a href="https://hamravesh.com/blog/kubernetes-v1-30-release/">آشنایی با تغییرات کوبرنتیز نسخه ۱.۳۰</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>نسخه‌ 1.30 کوبرنتیز جدیدترین نسخه‌ منتشرشده‌ آن است که با معرفی چندین ویژگی جدید همراه بوده است. در این مقاله قصد داریم تعدادی از مهم‌ترین تغییرات این نسخه را بررسی کنیم. </p>



<p>تعدادی از این ویژگی‌های جدید به حالت پایدار یا stable رسیده‌اند. تعدادی هم هنوز در حالت بتا یا آلفا قرار دارند و ممکن است در نسخه‌های بعدی stable شوند.&nbsp;</p>



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



<h3 class="wp-block-heading" id="h-معرفی-برخی-از-تغییرات-و-ویژگی-های-مهم">معرفی برخی از تغییرات و ویژگی های مهم</h3>



<p>در ادامه به برخی از تغییرات و ویژگی‌های جدید نسخه جدید کوبرنتیز اشاره می‌کنیم:</p>



<h3 class="wp-block-heading" id="h-پشتیبانی-از-memory-swap"><strong>پشتیبانی از memory swap</strong></h3>



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



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



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



<h3 class="wp-block-heading" id="h-استفاده-از-cel-برای-admission-control"><strong>استفاده از CEL برای admission control</strong></h3>



<p>در کوبرنتیز برای اعمال محدودیت‌ها و بررسی policyها از زبانی به نام CEL یا Common Expression Language استفاده می‌شود. این زبان سینتکسی شبیه C و Java دارد. در نسخه‌ی 1.30 برای admission control می‌توان از CEL استفاده کرد و این ویژگی در حالت پایدار قرار دارد. منظور از admission control این است که بعد از احراز هویت و تعیین دسترسی‌ها و قبل از ذخیره شدن درخواست‌هایی که به API Server می‌آیند، می‌توان آن‌ها را بررسی و تایید کرد (validation) و/یا تغییرشان داد (mutation). حال با اضافه شدن CEL به کوبرنتیز این کار راحت‌تر از قبل انجام می‌شود.</p>



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



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



<h3 class="wp-block-heading" id="h-پشتیبانی-از-نیم-اسپیس-user"><strong>پشتیبانی از نیم‌اسپیس user</strong></h3>



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



<h3 class="wp-block-heading" id="h-تخصیص-منابع-پویا"><strong>تخصیص منابع پویا</strong></h3>



<p>این ویژگی که ترجمه‌شده‌ Dynamic Resource Allocation یا به اختصار DRA است،‌ در نسخه‌ی 1.26 به‌عنوان ویژگی آلفا معرفی شد. به کمک آن می‌توان منابعی که کوبرنتیز آن‌ها را نمی‌شناسد را در پاد آورد و توسط ابزارهای third-party فرایند تخصیص و آزادسازی منابع را انجام داد. توسط آن می‌توان هر نوع منابعی را برای پاد درخواست کرد. در نسخه‌ 1.30 بهبودهای بزرگی در این ویژگی اعمال شده که بتوان به شکل ساختارمند ارتباط بین درایورهای third-party و اجزای اصلی کوبرنتیز را فراهم کرد</p>



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



<p>در این مقاله با برخی ویژگی‌های مهم که در کوبرنتیز 1.30 وجود دارند آشنا شدیم. در هر نسخه تغییرات زیادی اعمال می‌شود. با مراجعه به<a href="https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.30.md#changelog-since-v1290"> این لینک در گیت‌هاب</a> می‌توانید تمام تغییرات این نسخه از نسخه‌ قبل را ببینید.</p>



<p></p>
<p>The post <a href="https://hamravesh.com/blog/kubernetes-v1-30-release/">آشنایی با تغییرات کوبرنتیز نسخه ۱.۳۰</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://hamravesh.com/blog/kubernetes-v1-30-release/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>شبکه (networking) در کوبرنتیز</title>
		<link>https://hamravesh.com/blog/networking-in-kubernetes/</link>
					<comments>https://hamravesh.com/blog/networking-in-kubernetes/#respond</comments>
		
		<dc:creator><![CDATA[Aliakbar]]></dc:creator>
		<pubDate>Thu, 13 Jun 2024 16:30:00 +0000</pubDate>
				<category><![CDATA[مقالات]]></category>
		<category><![CDATA[کوبرنتیز]]></category>
		<guid isPermaLink="false">https://hamravesh.com/blog/?p=3060</guid>

					<description><![CDATA[<p>مدل پیاده‌سازی شبکه در کوبرنتیز باعث می‌شود اجزای مختلف کلاستر مثل پادها و نودها با هم ارتباط برقرار کنند و ترافیک خارجی به سمت اپلیکیشن‌های روی کوبرنتیز هدایت شوند. این شبکه به شکلی طراحی شده است که ترافیک بدون دردسر بین نودهای کلاستر جابه‌جا شود و به مقصد خود برسد. فهمیدن نحوه‌ کار شبکه در [&#8230;]</p>
<p>The post <a href="https://hamravesh.com/blog/networking-in-kubernetes/">شبکه (networking) در کوبرنتیز</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>مدل پیاده‌سازی شبکه در کوبرنتیز باعث می‌شود اجزای مختلف کلاستر مثل پادها و نودها با هم ارتباط برقرار کنند و ترافیک خارجی به سمت اپلیکیشن‌های روی کوبرنتیز هدایت شوند. این شبکه به شکلی طراحی شده است که ترافیک بدون دردسر بین نودهای کلاستر جابه‌جا شود و به مقصد خود برسد.</p>



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



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



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



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



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



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



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



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



<ul class="wp-block-list">
<li>هر پاد آی‌پی یکتا و خاص خود را دارد.</li>



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



<li>هر پاد بدون NAT باید بتواند با پادهای دیگر در سراسر کلاستر ارتباط بگیرد.</li>



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



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



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



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



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



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



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



<figure class="wp-block-image size-full"><img fetchpriority="high" decoding="async" width="921" height="535" src="https://hamravesh.com/blog/wp-content/uploads/2024/06/pod_to_pod.png" alt="ارتباط پاد با پاد در کوبرنتیز" class="wp-image-3063" srcset="https://hamravesh.com/blog/wp-content/uploads/2024/06/pod_to_pod.png 921w, https://hamravesh.com/blog/wp-content/uploads/2024/06/pod_to_pod-300x174.png 300w, https://hamravesh.com/blog/wp-content/uploads/2024/06/pod_to_pod-768x446.png 768w, https://hamravesh.com/blog/wp-content/uploads/2024/06/pod_to_pod-600x350.png 600w" sizes="(max-width: 921px) 100vw, 921px" /></figure>



<p>در شکل بالا در پاد ۱ از eth0 از نیم‌اسپیس شبکه‌ پاد خارج شده و از veth0 وارد نیم‌اسپیس root نود می‌شود. eth0 و veth0 یک جفت اترنت مجازی یا virtual ethernet pair هستند. این جفت‌ها قابلیت این را دارند که ترافیک را از هر طرف بگیرند از طرف دیگر بیرون می‌دهند و به این شکل نیم‌اسپیس شبکه‌ پاد به نیم‌اسپیس شبکه‌ root وصل می‌شود. بعد از ورود پکت‌ها به نیم‌اسپیس root به کمک یک bridge لینوکسی به veth1 و از آن‌جا به داخل پاد ۲ که مقصد پکت‌ها بود هدایت می‌شوند. veth1 و eth0 در پاد ۲ هم جفت اترنت مجازی هستند. ممکن است پلاگین‌های مختلف در نیم‌اسپیس root کارهای متفاوتی انجام دهند ولی چیزی جز routing معمولی لینوکسی نیستند.</p>



<h3 class="wp-block-heading">&nbsp;ارتباط پاد با پاد در نودهای مختلف</h3>



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



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="351" src="https://hamravesh.com/blog/wp-content/uploads/2024/06/pod_to_pod_2-1024x351.png" alt="" class="wp-image-3064" srcset="https://hamravesh.com/blog/wp-content/uploads/2024/06/pod_to_pod_2-1024x351.png 1024w, https://hamravesh.com/blog/wp-content/uploads/2024/06/pod_to_pod_2-300x103.png 300w, https://hamravesh.com/blog/wp-content/uploads/2024/06/pod_to_pod_2-768x263.png 768w, https://hamravesh.com/blog/wp-content/uploads/2024/06/pod_to_pod_2-1536x526.png 1536w, https://hamravesh.com/blog/wp-content/uploads/2024/06/pod_to_pod_2.png 1600w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



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



<h3 class="wp-block-heading">ارتباط سرویس با پاد</h3>



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



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="351" src="https://hamravesh.com/blog/wp-content/uploads/2024/06/service_to_pod_network-1024x351.png" alt="" class="wp-image-3067" srcset="https://hamravesh.com/blog/wp-content/uploads/2024/06/service_to_pod_network-1024x351.png 1024w, https://hamravesh.com/blog/wp-content/uploads/2024/06/service_to_pod_network-300x103.png 300w, https://hamravesh.com/blog/wp-content/uploads/2024/06/service_to_pod_network-768x263.png 768w, https://hamravesh.com/blog/wp-content/uploads/2024/06/service_to_pod_network-1536x526.png 1536w, https://hamravesh.com/blog/wp-content/uploads/2024/06/service_to_pod_network.png 1600w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>یکی از روش‌های معمول برای اضافه کردن rule در سیستم عامل iptables است که در تصویر فوق کشیده شده است. توجه کنید که بعد از iptables روتینگ معمولی پاد به پاد انجام می‌شود و مانند قسمت‌های قبل است. چه پادها در یک نود باشند چه در نودهای متفاوت. سرویس‌ها ساب‌نت کاملا مجزایی از آیپی‌های پادها دارند و با آیپی پادها تداخل ندارند.&nbsp;</p>



<p>مزیت سرویس این است که آیپی آن مانند آیپی پاد متغیر نیست. علاوه بر این نام سرویس در کوبرنتیز را می‌توان با DNS سرور کلاستر کوبرنتیز به آیپی سرویس resolve کرد. یعنی حتی آیپی سرویس را هم نیاز نداریم و با نام آن به پاد‌ مربوطه می‌رسیم. سرویس به کمک label پادها می‌تواند هم‌زمان چندین پاد را پشتیبانی و ترافیک را بین آن‌ها توزیع کند. </p>



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



<h3 class="wp-block-heading">ارتباط خارج کلاستر با پاد</h3>



<p>آیپی پاد و سرویس ClusterIP فقط داخل کلاستر در دسترس هستند. برای دریافت پکت‌ها از خارج کلاستر از نوع دیگر سرویس که NodePort است استفاده می‌کنیم. از نام آن مشخص است که روی نودهای کلاستر یک پورت را برای پاد در نظر می‌گیرد. اگر پکت‌ها به آن پورت روی هر کدام از نودهای کلاستر برسند به پادهای مربوط به سرویس فرستاده می‌شوند. فرایند تبدیل از نودپورت به آیپی پاد هم مانند بخش قبل توسط ابزاری مثل iptables انجام می‌شود.&nbsp;&nbsp;</p>



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



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



<p>در این مقاله با مفاهیم کلی شبکه در کوبرنتیز آشنا شدیم و دیدیم که چه قواعدی بر ایجاد این شبکه حکم‌فرماست. سپس بررسی کردیم که چگونه انواع ترافیک در کلاستر کوبرنتیز جابه‌جا می‌شوند و چه ابزارهایی در این میان کار می‌کنند.&nbsp;</p>
<p>The post <a href="https://hamravesh.com/blog/networking-in-kubernetes/">شبکه (networking) در کوبرنتیز</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://hamravesh.com/blog/networking-in-kubernetes/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>نمودارهای مصرف CPU در دارکوب</title>
		<link>https://hamravesh.com/blog/cpu-usage-charts-darkube/</link>
					<comments>https://hamravesh.com/blog/cpu-usage-charts-darkube/#respond</comments>
		
		<dc:creator><![CDATA[Aliakbar]]></dc:creator>
		<pubDate>Thu, 04 Jan 2024 14:19:17 +0000</pubDate>
				<category><![CDATA[مشاهده‌پذیری]]></category>
		<category><![CDATA[مقالات]]></category>
		<guid isPermaLink="false">https://hamravesh.com/blog/?p=1692</guid>

					<description><![CDATA[<p>در کنسول دارکوب برای هر اپ نمودارهای میزان مصرف منابع مختلف نمایش داده می‌شود. این نمودارها به کاربر کمک می‌کنند تا که منابع را به شکل بهتری برای اپ خود مدیریت کند. این‌جا قصد داریم معنی نمودارهای CPU را توضیح دهیم و نکاتی را در مورد آن‌ها بیان کنیم. نمودار مصرف CPU در این نمودار [&#8230;]</p>
<p>The post <a href="https://hamravesh.com/blog/cpu-usage-charts-darkube/">نمودارهای مصرف CPU در دارکوب</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>در <a href="https://console.hamravesh.com/darkube">کنسول دارکوب</a> برای هر اپ نمودارهای میزان مصرف منابع مختلف نمایش داده می‌شود. این نمودارها به کاربر کمک می‌کنند تا که منابع را به شکل بهتری برای اپ خود مدیریت کند. این‌جا قصد داریم معنی نمودارهای CPU را توضیح دهیم و نکاتی را در مورد آن‌ها بیان کنیم.</p>



<h2 class="wp-block-heading" id="h-نمودار-مصرف-cpu">نمودار مصرف CPU</h2>



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



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="975" height="320" src="https://blog.hamravesh.com/blog/wp-content/uploads/2024/01/image.png" alt="" class="wp-image-1714" srcset="https://hamravesh.com/blog/wp-content/uploads/2024/01/image.png 975w, https://hamravesh.com/blog/wp-content/uploads/2024/01/image-300x98.png 300w, https://hamravesh.com/blog/wp-content/uploads/2024/01/image-768x252.png 768w" sizes="auto, (max-width: 975px) 100vw, 975px" /></figure>



<p>برای توضیح متریک مصرف CPU باید به جایی که این متریک از آن خوانده می‌شود نگاه کنیم؛ یعنی کرنل لینوکس. کرنل به ازای هر کانتینر (یا به طور کلی هر پردازه) عددی را برای مصرف CPU می‌دهد که cpuacct.usage است. این عدد بیان می‌کند پردازه‌های کانتینر در مجموع چند نانوثانیه از زمان CPU استفاده کرده‌اند. چون این عدد مجموع است، باید برای این که در بازه‌های مختلف مصرف CPU به دست آید نرخ تغییرات آن محاسبه شود. مثلا در زمان t کرنل عدد ۱۰۰۰۰۰ را برای cpuacct.usage یک کانتینر می‌دهد. در زمان t+1 هم عدد ۳۰۰۰۰۰ را می‌دهد. ما متوجه می‌شویم در یک ثانیه دویست هزار نانوثانیه یا ۲۰۰ میکروثانیه (اختلاف دو عدد در زمان t و t+1) از زمان CPU در پردازه‌های این کانتینر استفاده شده است.</p>



<p>&nbsp;این متریک توسط ابزاری از کرنل خوانده می‌شود و به واحد ثانیه تبدیل می‌شود. سپس ابزار مانیتورینگ* آن‌ را دریافت و ذخیره می‌کند. این کار در بازه‌های زمانی خاصی به طور متناوب انجام می‌شود. مثلا هر ۱۰ ثانیه یک بار. در نتیجه ما هر ده ثانیه یک بار مجموع زمان استفاده شده در CPU را برای هر کانتینر داریم. آن چه در نمودار دیده می‌شود نرخ تغییرات این عدد در یک دقیقه است. یعنی نشان می‌دهد در هر دقیقه چقدر از زمان CPU مصرف شده است. برای مثال اگر در زمان یک ثانیه به اندازه ۲ ثانیه از CPUهای سیستم استفاده کند یعنی ۲ کور&nbsp; CPU مصرف کرده است.</p>



<p>در این نمودار یک خط افقی هم دیده می‌شود که حداکثر میزان CPUی است که این کانتینر می‌تواند استفاده کند؛ این همان عددی است که موقع تعیین منابع برای CPU انتخاب می‌کنید.</p>



<h2 class="wp-block-heading" id="h-نمودار-cpu-throttling">نمودار CPU Throttling</h2>



<p>متریک دیگری که برای CPU داریم در نمودار CPU throttling آمده است:</p>



<p class="has-text-align-center"><img loading="lazy" decoding="async" src="https://lh7-us.googleusercontent.com/HGEkVAlKRw1HERGa5xglrfwSh4sewGkvLfJZIRcHYe1yCsHsxd8pMAfnX1EmSqyzbUWWX2D6TCAJPBRYUPfimgemALrjEKjkimnGW4vrLxHg8ZRMokA7rDnowutvo9byFLsJy4BTFGAGQAhRwcR-0KA" width="624" height="199"></p>



<p>برای توضیح این نمودار باید با مفهوم دیگری در کرنل لینوکس آشنا شویم. در کرنل بازه‌هایی زمانی برای تخصیص CPU به پردازه‌های سیستم تعریف شده است. طول این بازه‌ها قابل تنظیم است و معمولا ۱۰۰ میلی ثانیه است. فرض کنید یک سیستم با ۴ عدد CPU داریم. در این سیستم در هر بازه‌ی ۱۰۰ میلی ثانیه‌ای زمانی به اندازه‌ی ۴۰۰ میلی ثانیه پردازه‌ها می‌توانند از CPU استفاده کنند چون ۴ عدد CPU داریم و هر کدام ۱۰۰ میلی ثانیه دارند.&nbsp;&nbsp;</p>



<p>حال فرض کنید ما برای یک پردازه‌ یا همان کانتینر پایتونی محدودیتی تعیین می‌کنیم که فقط می‌تواند ۰.۳ تمام CPUهای این سیستم را مصرف کند. کرنل این ۰.۳ را در آن بازه‌های ۱۰۰ میلی ثانیه‌ای محاسبه می‌کند. یعنی از ابتدای بازه تا انتهای آن این پردازه‌ی پایتونی مجموعا می‌تواند</p>



<pre class="wp-block-code"><code>0.3*100ms=30ms</code></pre>



<p class="has-text-align-right"> </p>



<p>از تمام CPUهای سیستم استفاده کند. ممکن است در همان ۳۰ میلی ثانیه‌ی اول تمام بودجه مصرف شود و تا ابتدای بازه‌ی دیگر کرنل به این پردازه اجازه‌ی اجرا شدن نخواهد داد. </p>



<p>کرنل برای throttling دو عدد مهم را در اختیار ما می‌گذارد. اولین عدد تعداد کل بازه‌های ۱۰۰ میلی ثانیه‌ای است که در آن کانتینر اجرا شده است. دومین عدد تعداد کل بازه‌هایی است که در آن‌ها throttling رخ داده است. پس اگر کانتینری ۱ ثانیه اجرا شود تعداد کل بازه‌ها و عدد اول ۱۰ می‌شود. اگر در ۲ تا از بازه‌ها این کانتینر throttle</p>



<p>شده باشد عدد دوم ۲ می‌شود. در نتیجه ۲۰ درصد بازه‌ها throttling داشتند. چیزی که در نمودار دوم نمایش داده می‌شود همین نسبت است. البته با توجه به این که عدد کرنل مجموع تعداد بازه‌ها را می‌دهد، نسبت افزایش این دو عدد در نمودار می‌آید.&nbsp;این اعداد هم توسط همان ابزاری که در قسمت قبل گفتیم خوانده می‌شوند. سپس ابزار مانیتورینگ در بازه‌های ۱۰ ثانیه‌ای آن‌ها را جمع‌آوری می‌کند.</p>



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



<p>گاهی در بررسی این نمودارها سوالی پیش می‌آید که «چرا مصرف CPU به مقدار حداکثر تعیین شده نرسیده است ولی CPU throttling به وجود آمده است؟». با توجه به توضیحات داده شده این موضوع مشخص‌ می‌شود. اولاً داده‌های نمودار مصرف هر ۱۰ ثانیه یک بار خوانده می‌شوند؛ در نتیجه اگر در این میان افزایش ناگهانی باشد دیده نمی‌شود و ابتدا و انتهای بازه را فقط می‌بینیم. دوماً نقاط روی نمودار میانگین یک دقیقه‌ای از داده‌ها هستند. اگر در بعضی باز‌ه‌های ۱۰۰ میلی ثانیه‌ای مصرف CPU <a href="https://hamravesh.com/blog/what-is-container/">کانتینر </a>زیاد شده و throttle شود و بعد از آن در بازه‌هایی کم شود، در نمودار مصرف خود را به‌خوبی نشان نمی‌دهد. ولی عدد نمودار throttling افزایش می‌یابد چون در کرنل پردازه‌های کانتینر throttle شده‌اند. وقتی مصرف CPU افزایش ندارد ولی CPU throttling افزایش قابل توجهی پیدا می‌کند به این معنی است که سرویس مورد نظر به شکل bursty از CPU استفاده می‌کند.&nbsp;حضور این دو نمودار زیر هم کمک می‌کند که متوجه این گونه رفتارهای برنامه‌ی درون کانتینر هم بشویم و در صورت نیاز منابع آن را افزایش دهیم.</p>



<p></p>
<p>The post <a href="https://hamravesh.com/blog/cpu-usage-charts-darkube/">نمودارهای مصرف CPU در دارکوب</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://hamravesh.com/blog/cpu-usage-charts-darkube/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
