<?xml version="1.0"?>
<rss version="2.0"><channel><title>DevOps: &#x627;&#x644;&#x62D;&#x648;&#x633;&#x628;&#x629; &#x627;&#x644;&#x633;&#x62D;&#x627;&#x628;&#x64A;&#x629;</title><link>https://academy.hsoub.com/devops/cloud-computing/?d=4</link><description>DevOps: &#x627;&#x644;&#x62D;&#x648;&#x633;&#x628;&#x629; &#x627;&#x644;&#x633;&#x62D;&#x627;&#x628;&#x64A;&#x629;</description><language>ar</language><item><title>&#x627;&#x644;&#x641;&#x631;&#x642; &#x628;&#x64A;&#x646; &#x627;&#x644;&#x62E;&#x62F;&#x645;&#x627;&#x62A; &#x627;&#x644;&#x633;&#x62D;&#x627;&#x628;&#x64A;&#x629; SaaS &#x648; PaaS &#x648; Iaas</title><link>https://academy.hsoub.com/devops/cloud-computing/%D8%A7%D9%84%D9%81%D8%B1%D9%82-%D8%A8%D9%8A%D9%86-%D8%A7%D9%84%D8%AE%D8%AF%D9%85%D8%A7%D8%AA-%D8%A7%D9%84%D8%B3%D8%AD%D8%A7%D8%A8%D9%8A%D8%A9-saas-%D9%88-paas-%D9%88-iaas-r843/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2025_04/SaaSPaaSIaas.png.0fd3b83aeaa14fed747c01f2cf91f7ce.png" /></p>
<p>
	تعتمد الأعمال الرقمية حاليًا على الخدمات السحابية لتسهيل التفاعل مع العملاء، ويتطلب الأمر تجميع وتخزين ومعالجة كميات هائلة من البيانات قبل تقديمها إلى المستخدم النهائي. وهنا يأتي دور تطبيقات الويب السحابية. فعندما نتكلم عن الخدمات السحابية نتذكر مباشرة النماذج التالية:
</p>

<ul>
	<li>
		البرمجيات كخدمات سحابية Software as a services واختصارًا SaaS
	</li>
	<li>
		منصات العمل كخدمات سحابية Platform as a Service واختصارًا PaaS
	</li>
	<li>
		البُنى التحتية كخدمات سحابية Infrastructure as Service واختصارًا IaaS
	</li>
</ul>

<p>
	سنناقش في مقالنا نماذج الأعمال الثلاث السابقة بالتفصيل لتكوين فكرة واضحة عن فائدة الخدمات السحابية لأعمالنا. لكننا سنلقي نظرة أولًا على مفهوم الحوسبة السحابية قبل أن نخوض في خدماتها.
</p>

<h2 id="">
	ما هي الحوسبة السحابية
</h2>

<p>
	<a href="https://academy.hsoub.com/devops/cloud-computing/" rel="">الحوسبة السحابية</a> هي طريقة حديثة في الوصول إلى البيانات والمعلومات عبر شبكة الإنترنت بدلًا من الأقراص الصلبة، وهي وسيلة سريعة وآمنة وأكثر فعالية من أنظمة التخزين التقليدية. وقد ازداد استخدام الحوسبة السحابية حاليًا وفي مختلف القطاعات لكونها توفر حلًا ناجحًا للأعمال النامية أو التي أسست حديثًا نظرًا لحرية التوسع عند الحاجة.
</p>

<p>
	عند استخدام الخدمات السحابية لن نعتمد على عتاد أجهزتنا المحلية، إذ يمكننا الوصول إلى بياناتنا افتراضيًا ومن أي مكان، وطالما أنها متاحة على الشبكة، سنتمكن من الوصول إليها في أي وقت، فلن نضطر إلى استثمار الكثير على العتاد الصلب عند إطلاق أو توسيع أعمالنا بفضل الحوسبة السحابية، وكل ما علينا حجز مساحات إضافية عندما نحتاج لتوسيع العمل.
</p>

<h2 id="-1">
	أنواع الخدمات السحابية
</h2>

<p>
	فيما يلي مقارنة سريعة بين البرمجيات والمنصات والبنى التحتية كخدمات:
</p>

<table>
	<thead>
		<tr>
			<th style="text-align:right;">
				 
			</th>
			<th style="text-align:right;">
				<strong>IaaS</strong>
			</th>
			<th style="text-align:right;">
				<strong>PaaS</strong>
			</th>
			<th style="text-align:right;">
				<strong>SaaS</strong>
			</th>
		</tr>
	</thead>
	<tbody>
		<tr>
			<td style="text-align:right;">
				طبيعة الخدمة
			</td>
			<td style="text-align:right;">
				تقدم أساسًا لإنشاء البنى التحتية للخدمات السحابية وتؤمن نموذج الدفع وفقًا للاستخدام
			</td>
			<td style="text-align:right;">
				أطراف خارجية تؤمن أدوات أو تطبيقات للمستخدمين عبر الإنترنت من خلال خدمات البنية التحتية الخاصة بهم
			</td>
			<td style="text-align:right;">
				تؤمن وصولًا إلى تطبيقات الويب عبر نموذج الدفع وفقًا للاستخدام
			</td>
		</tr>
		<tr>
			<td style="text-align:right;">
				الإيجابيات
			</td>
			<td style="text-align:right;">
				مقبولة التكلفة ومرنة وقابلة للاسترجاع عند حدوث المشاكل. وكذلك سهلة الوصول ويمكن الاعتماد عليه
			</td>
			<td style="text-align:right;">
				مدروسة التكاليف وانتاجية متزايدة. متجاوبة ورشيقة. سهلة الوصول وقابلة للتوسع بسهولة.
			</td>
			<td style="text-align:right;">
				قابلة للتوسع وسهل الوصول ومقبولة التكلفة. كما أنها سهلة الترقية والنشر
			</td>
		</tr>
		<tr>
			<td style="text-align:right;">
				السلبيات
			</td>
			<td style="text-align:right;">
				صعوبة التحكم بها وتعاني بعض المشاكل الأمنية
			</td>
			<td style="text-align:right;">
				تعاني مشاكل في التوافق وتغييرات في موزعي الخدمة
			</td>
			<td style="text-align:right;">
				أمان غير كاف للبيانات وتحكم أقل
			</td>
		</tr>
		<tr>
			<td style="text-align:right;">
				مزودو الخدمة
			</td>
			<td style="text-align:right;">
				خدمات أمازون ويب AWS و محرك حوسبة جوجل GCE وديجتال أوشن DigitalOcean
			</td>
			<td style="text-align:right;">
				AWS ElasticBeanstalk و Apache و OpenShift و Heroku
			</td>
			<td style="text-align:right;">
				Google Workspace و Salesforce و Cisco و WebEx و Dropbox
			</td>
		</tr>
	</tbody>
</table>

<h3 id="iaas">
	البُنى التحتية كخدمات سحابية IaaS
</h3>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="jpg" data-fileid="170911" href="https://academy.hsoub.com/uploads/monthly_2025_04/01_Iaas.jpg.6e055ad1c183c342fa61c192a1d3d540.jpg" rel=""><img alt="01 iaas" class="ipsImage ipsImage_thumbnailed" data-fileid="170911" data-unique="1e4t3zogf" style="width: 500px; height: auto;" src="https://academy.hsoub.com/uploads/monthly_2025_04/01_Iaas.thumb.jpg.dfe883cd45a5918d95067c025ab452b9.jpg"> </a>
</p>

<p>
	تؤمن خدمة البنية التحتية السحابية وحدات البناء الأساسية للبنية التحتية لأي سحابة وتقدم موارد حاسوبية مثل المعالجة والآلات الافتراضية والشبكات وأكثر. وتسهل IaaS دعم الأعمال الصغيرة والمنظمات التي تستهدف حلولًا سحابية غير مكلفة وتعمل وفق نموذج الدفع وفقًا للاستخدام pay as you go وبالتالي سيدفع المستخدم تكلفة الخدمات التي يحتاجها فقط دون أية تكاليف إضافية، وهي متاحة لتوزيع الخدمات والموارد بشكل عام أو خاص أو هجين.
</p>

<p>
	تلغي هذه الخدمة السحابية التكاليف الإضافية الناتجة عن إدارة واستخدام العتاد الصلب وتوكل أمرها لمزود الخدمة. ويكون المستخدم النهائي مسؤولًا فقط عن إدارة الموارد مثل البيانات والتطبيقات، بينما ينظم المزوّد العمليات الافتراضية وإدارة الشبكة وتخزين البيانات.
</p>

<p>
	تساعد IaaS في توفير الوقت والتكلفة لأن مزود الخدمة هو من يهتم بإدارة العتاد الصلب. وطالما أن استخدام تلك الموارد هو فقط عند الحاجة، لن يكون هنالك وجود لمصادر مهملة، وستدفع فقط على ما تستخدمه فعليًا.
</p>

<p>
	من الأمثلة عليها نجد: خدمة أمازون ويب AWS، ومحرك حوسبة جوجل GCE، ومايكروسوفت آزور، وديجتال أوشن DigitalOcean.
</p>

<h4 id="iaas-1">
	متى نستخدم نموذج IaaS
</h4>

<p>
	يصلح نموذج IaaS لكل رائد أعمال أو خبير يحتاج لخدمة سحابية تعتمد نموذج الدفع وفقًا للاستخدام سيكون. ويمكن أيضًا الاستفادة من الخدمة إن كنا نحاول توسيع عملنا لكننا نراقب التكاليف بحذر، أو كان لدينا كميات كبيرة من البيانات التي تحتاج لمعالجتها وتخزينها. كما تعد الخدمة كذلك ملائمة للأفراد القلقين من حدوث كوارث أو مشكلات أو فقدان بيانات في البنية التحتية ضمن منازلهم، وهكذا لن ينشغلوا بأمور حماية بياناتهم فهي ليست على صفحة ويب بل داخل مركز بيانات، كما تقدم IaaS الموارد الشبكية الضرورية لتشغيل التطبيقات والخدمات في البيئة السحابية.
</p>

<h4 id="-2">
	الإيجابيات
</h4>

<ul>
	<li>
		غير مكلفة
	</li>
	<li>
		مرنة
	</li>
	<li>
		إمكانية استعادة البيانات عند حدوث كوارث
	</li>
	<li>
		سهل الوصول
	</li>
	<li>
		موثوقة ويمكن الاعتماد عليها
	</li>
</ul>

<h4>
	السلبيات
</h4>

<ul>
	<li>
		صعوبة التحكم
	</li>
	<li>
		مشاكل في أمان البيانات
	</li>
</ul>

<h3 id="paas">
	منصات العمل كخدمات سحابية PaaS
</h3>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="jpg" data-fileid="170912" href="https://academy.hsoub.com/uploads/monthly_2025_04/02_Paas_a.jpg.8543292ef780c5a960a4223355d02789.jpg" rel=""><img alt="02 paas a" class="ipsImage ipsImage_thumbnailed" data-fileid="170912" data-unique="wbwfrgmmn" style="width: 500px; height: auto;" src="https://academy.hsoub.com/uploads/monthly_2025_04/02_Paas_a.thumb.jpg.ed7c5afe153da3d0ce4ed8d7ec654b36.jpg"> </a>
</p>

<p>
	نموذج PaaS هو نموذج خدمات سحابية توفر فيه أطراف خارجية أدوات عبر الإنترنت للمطورين، معتمدة على بنية تحتية خاصة بها لتطوير التطبيقات. حيث يمكن للمطورين من خلال PaaS إنشاء تطبيقات قابلة للتوسع دون الحاجة لإعداد وإدارة قواعد البيانات والخوادم والشبكات والبنى التحتية لتخزين البيانات.
</p>

<p>
	ويستفيد المطورون الجدد من PaaS في تسهيل تطوير التطبيقات، وسيتمكن أي مطور من استخدام متصفحه فقط لتطوير التطبيق، كما تتحمل PaaS مسؤولية تحديث البنية التحتية الخاصة بنا وبالتالي لن نقلق بشأن صيانة تطبيقاتنا. كما يستفيد مطورو الأعمال من PaaS لكونها تؤمن بيئة عمل جماعية للمطورين الذين يعملون على المشروع ذاته، وتقدم أسلوبًا سريعًا في إنشاء التطبيقات نظرًا لسهولة توسيعها ومرونتها.
</p>

<p>
	من الأمثلة عليها نجد: AWS Elastic Beanstalk و Apache Stratos و Force.com و OpenShift و Heroku
</p>

<h4 id="paas-1">
	متى نستخدم نموذج PaaS
</h4>

<p>
	إن كنا بحاجة إلى تطوير أعمالنا وتشغيل تطبيقات ويب دون تكلف الكثير على إعداد البرمجيات والعتاد الصلب، يمكن أن نفكر في استخدام PaaS. إذ تركز هذه الخدمة أساسًا على حماية بياناتنا وهو أمر حيوي جدًا في حال اخترنا الخدمة السحابية لتخزين البيانات. وعلينا أيضًا التفكير بخدمة PaaS إن أردنا من فريق المطورين التركيز على بناء التطبيقات بدلًا من الإنشغال بإصدار التحديثات الأمنية، وهذا ما سيخفف تكاليف الحمولات الزائدة ويوفر الوقت والجهد.
</p>

<h4 id="-3">
	الإيجابيات
</h4>

<ul>
	<li>
		تكلفة مناسبة
	</li>
	<li>
		إنتاجية متزايدة
	</li>
	<li>
		رشيقة ومتجاوبة
	</li>
	<li>
		سهلة التوسع
	</li>
	<li>
		سهلة الوصول
	</li>
</ul>

<h4>
	السلبيات
</h4>

<ul>
	<li>
		مشاكل في التوافقية
	</li>
	<li>
		تغيّر مقدمي الخدمات
	</li>
</ul>

<h3 id="saas">
	البرمجيات كخدمات سحابية SaaS
</h3>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="jpg" data-fileid="170913" href="https://academy.hsoub.com/uploads/monthly_2025_04/03_Saas.jpg.92bc3857558841d6449903f9357a4e71.jpg" rel=""><img alt="03 saas" class="ipsImage ipsImage_thumbnailed" data-fileid="170913" data-unique="0q26v7sj3" style="width: 500px; height: auto;" src="https://academy.hsoub.com/uploads/monthly_2025_04/03_Saas.thumb.jpg.2489aecf46bdf8267b3328946e743b65.jpg"> </a>
</p>

<p>
	توفر لنا <a href="https://academy.hsoub.com/entrepreneurship/tips/%D9%85%D8%AD%D8%A7%D8%B3%D8%A8%D8%A9-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D9%8A%D8%A7%D8%AA-%D8%A7%D9%84%D8%AE%D8%AF%D9%85%D9%8A%D8%A9-saas-r1089/" rel="">البرمجيات كخدمة SaaS </a>إمكانية الوصول إلى تطبيقات الويب عبر الإنترنت، ولا حاجة معها إلى تنزيل أية أدوات أو برمجيات، وقد تكون مجانية أو تعمل وفق مبدأ الدفع وفقًا للاستخدام. ويمكن للمستخدمين الوصول إلى التطبيقات عبر أي جهاز بصرف النظر عن البنية التحتية لمقدم الخدمة أو صيانة التطبيقات أو أي شيء آخر، فهي أمور يديرها ويحميها مزوّد الخدمة السحابية.
</p>

<p>
	تفضل كثير من الأعمال استخدام خدمة SaaS نظرًا لانتشارها الواسع وعدم الحاجة إلى تكاليف خاصة أو تنزيل وتثبيت تلك البرمجيات. مع ذلك، تعتمد هذه الخدمة كليًا على موزعين خارجيين وليس للمستخدم القدرة على التحكم بالخدمة أو تغييرها.
</p>

<p>
	من الأمثلة عنها نجد: Google Workspace و Salesforce و Cisco WebEx و Dropbox.
</p>

<h4 id="saas-1">
	متى نستخدم نموذج SaaS
</h4>

<p>
	إن أردنا الابتعاد عن تثبيت برامجنا محليًا فهذه الخدمة هي الحل، إذ تلغي الحاجة إلى الميزانيات الكبيرة وضغط العمل. تقدم لنا هذه الخدمة التطبيقات التي نحتاجها مستضافة من قبل أطراف خارجية وموزعة وفق معماريات خاصة بتلك الأطراف مما يجعلها قابلة للوصول من خلال الإنترنت.
</p>

<p>
	يمكن للأعمال الصغيرة الاستفادة من SaaS في حال لم نمتلك الميزانية الكافية أو كادر العمل لبناء تطبيقات خاصة بها. ويستخدم العديد من متخصصي تقانة المعلومات والمنظمات تطبيقات SaaS، وبإمكان مستخدمي B2B و B2C الاستفادة من تطبيقات SaaS على خلاف الخدمات السحابية الأخرى
</p>

<h4 id="-4">
	الإيجابيات
</h4>

<ul>
	<li>
		قابلة للتوسع وسهلة الوصول
	</li>
	<li>
		غير مكلفة
	</li>
	<li>
		سهلة التحديث
	</li>
	<li>
		سهلة التوزيع
	</li>
</ul>

<h4>
	السلبيات
</h4>

<ul>
	<li>
		لا تقدم حماية كافية للبيانات
	</li>
	<li>
		تحكم أقل
	</li>
</ul>

<h2 id="saaspaasiaas-1">
	الاختلافات بين الخدمات السحابية SaaS و PaaS و Iaas
</h2>

<p>
	عندما نقارن بين هذه الخدمات السحابية من ناحية المرونة تبرز خدمة IaaS. إذ تعتمد المرونة تمامًا على موزع الخدمة الذي نختاره، وكذلك الأمر من ناحية الأمان. وتُدفع تكاليف هذه الخدمة عادة بالساعة وفقًا للاستخدام وبالتالي قد ترتفع تكاليفها نظرًا لأسلوب الدفع الدقيق المرتبط بها.
</p>

<p>
	من ناحية أخرى، تعالج PaaS مشكلة البرمجة المتقدمة عالية المستوى بتسهيل وتبسيط العمليات، مما يجعل عملية تطوير التطبيقات أقل كلفة وزمنًا. وبالنسبة إلى التكلفة، فستزداد مع توسيع التطبيق ونموه. وبمجرد أن نلتزم مع موزع محدد فسنكون مقيدين ببيئة العمل والواجهة التي نختارها.
</p>

<p>
	أخيرًا، لخدمة SaaS سقف سعر فهي أرخص من كلتا الخدمتين السابقتين، وهي نعمة حقيقية للأشخاص والأعمال الصغيرة. لكن في المقابل سيكون تحكمنا في الخدمة محدودًا أو غير متاح، فمزود الخدمة هو من يدير معظم تفاصيلها.
</p>

<p>
	يمثل المخطط التالي الحجم السوقي للخدمات السحابية بين عامي 2018 و2024، وشعبية كل خدمة من الخدمات السابقة:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="170909" href="https://academy.hsoub.com/uploads/monthly_2025_04/04_cloud-market-size.png.a79454640a6f262fb82f7963b53c66ab.png" rel=""><img alt="04 cloud market size" class="ipsImage ipsImage_thumbnailed" data-fileid="170909" data-unique="gt3q1btbt" style="width: 500px; height: auto;" src="https://academy.hsoub.com/uploads/monthly_2025_04/04_cloud-market-size.png.a79454640a6f262fb82f7963b53c66ab.png"> </a>
</p>

<p style="text-align: center;">
	<a href="https://www.t4.ai/industry/cloud-computing-market-share" rel="external nofollow">المصدر</a>
</p>

<p>
	بالنسبة لحرية التحكم بالخدمة سنجد أن نموذج IaaS في المقدمة، فهو يسمح لنا بإدارة التطبيقات والبيانات والبرمجيات الوسيطة ونظام التشغيل. بينما يسمح لنا نموذج PaaS بإدارة البيانات والتطبيقات فقط، ويدير مقدم الخدمة معظم أو كل النواحي في SaaS.
</p>

<h2 id="-5">
	اختيار الخدمة السحابية المناسبة
</h2>

<p>
	علينا التفكير أولًا بحجم تبادل البيانات في موقعك أو حركة المرور إليه ونستغل قدرات المعالجة والتخزين التي تلائم حركة المرور تلك بأفضل ما يمكن، فقد نواجه مشكلات نحن بغنى عنها إن اخترنا خدمة سحابية غير ملائمة. وقد ينهار موقعنا إن لم تؤمن الخدمة التي اخترناها قدرات معالجة مناسبة وقد نضطر إلى دفع مبالغ إضافية على البنية التحتية السحابية حتى لو كانت حركة المرور إلى موقعنا منخفضة. وعلينا إضافة إلى ذلك أخذ عوامل مهمة أخرى بعين الاعتبار عند اختيار مزود الخدمة السحابية مثل أوقات توقف الخدمة downtime والترحيل migration لنقل التطبيقات إلى مكان آخر.
</p>

<h2 id="-6">
	خدمات حوسبة سحابية أخرى
</h2>

<p>
	إلى جانب الخدمات الثلاث التي تحدثنا عنها في الفقرات السابقة نجد خدمات أخرى مثل:
</p>

<h3 id="dbaas">
	الخدمة السحابية DBaas
</h3>

<p>
	تُعد قاعدة البيانات كخدمة سحابية DBaaS خدمة سحابية مدارة تستضيف قواعد البيانات وتسمح بالوصول إلى خدماتها دون إدارة أية برمجيات أخرى. وكغيرها من الخدمات لن نحتاج فيها إلى شراء أو إعداد عتادنا الصلب أو التعامل مع أية برمجيات لتثبيت قواعد بيانات. إذ تهتم معمارية هذه الخدمة مع الطرف المزود لها بكل شيء من النسخ الاحتياطي إلى التحديثات لضمان التوفر الدائم للخدمة ومعايير الأمان القوية.
</p>

<h4 id="-7">
	الإيجابيات
</h4>

<ul>
	<li>
		سهولة العمل والتكيف مع التغييرات.
	</li>
	<li>
		غير مكلفة
	</li>
	<li>
		موثوقة
	</li>
	<li>
		لن نحتاج لبناء منظومة قواعد بيانات أو توظيف مطوري قواعد بيانات
	</li>
	<li>
		أوقات توفرها ممتازة
	</li>
</ul>

<h4 id="-8">
	السلبيات
</h4>

<ul>
	<li>
		تحكم محدود
	</li>
	<li>
		مشاكل في خصوصية البيانات
	</li>
</ul>

<h3 id="daas">
	الخدمة السحابية Daas
</h3>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="jpg" data-fileid="170914" href="https://academy.hsoub.com/uploads/monthly_2025_04/05_Daas.jpg.7a817b67f3642e70db26718904aa8b97.jpg" rel=""><img alt="05 daas" class="ipsImage ipsImage_thumbnailed" data-fileid="170914" data-unique="wm892zx1e" style="width: 500px; height: auto;" src="https://academy.hsoub.com/uploads/monthly_2025_04/05_Daas.thumb.jpg.f68041a981704a373091456993e781bf.jpg"> </a>
</p>

<p>
	تُعد البيانات كخدمة Daas نهجًا مشابهًا لخدمة SaaS، إذ تؤمن خدمات تخزين ومعالجة وتكامل البيانات سحابيًا إلى مستخدميها عبر الإنترنت، ولا تتطلب تثبيت أو إدارة أية برمجيات. وتساعد Daas المستخدمين في الحد من تضخم البيانات data sprawl والحاجة إلى مجمعات تخزين data silos وتحسّن التعاون بين فرق العمل عبر مشاركة البيانات بينهم.
</p>

<h4 id="-9">
	الإيجابيات
</h4>

<ul>
	<li>
		بيئة مقادة بالبيانات
	</li>
	<li>
		صيانة مؤتمتة
	</li>
	<li>
		تحسين نوعية البيانات
	</li>
</ul>

<h4 id="-10">
	السلبيات
</h4>

<ul>
	<li>
		مشكلات في الخصوصية
	</li>
	<li>
		تعقيد البيانات
	</li>
</ul>

<h3 id="faas">
	الخدمة السحابية Faas
</h3>

<p>
	تُعد الدوال كخدمة Functions as a Service واختصارًا FaaS خدمة سحابية ذات معمارية مبنية على الأحداث و<a href="https://academy.hsoub.com/devops/cloud-computing/%D8%B3%D8%A8%D8%B9-%D9%85%D9%86%D8%B5%D8%A7%D8%AA-%D9%85%D9%81%D8%AA%D9%88%D8%AD%D8%A9-%D8%A7%D9%84%D9%85%D8%B5%D8%AF%D8%B1-%D9%84%D9%84%D8%A8%D8%AF%D8%A1-%D9%81%D9%8A-%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%A7%D9%84%D8%AD%D9%88%D8%B3%D8%A8%D8%A9-%D8%AE%D9%81%D9%8A%D8%A9-%D8%A7%D9%84%D8%AE%D9%88%D8%A7%D8%AF%D9%85-serverless-r408/" rel="">خفية الخوادم serverless.</a> تعمل هذه الخدمة على مبدأ كتابة دوال وتنفيذها كاستجابة لحدث ما، وتعتمد نموذج الدفع وفقًا للاستخدام ولن تكون هناك تكاليف إضافية.
</p>

<h4 id="-11">
	الإيجابيات
</h4>

<ul>
	<li>
		ندفع فقط مقابل ما نستخدم
	</li>
	<li>
		زيادة في إنتاجية المطور
	</li>
	<li>
		توسع تلقائي
	</li>
</ul>

<h4 id="-12">
	السلبيات
</h4>

<ul>
	<li>
		دعم محدود للعديد من التقنيات
	</li>
	<li>
		تحكم أقل بالمنظومة
	</li>
</ul>

<h2 id="-13">
	الخلاصة
</h2>

<p>
	لا بد من الاستثمار في الخدمات السحابية إن أردنا مواكبة المعايير التي تتغير باستمرار. ليس لأنها تقدم خدمة أفضل للمستخدم فقط، بل لأنها تساعد أعمالنا على النمو أيضًا. حيث تخفف الخدمات السحابية من سلبيات ومحدودية البنى التقليدية لتقانة المعلومات، وسيعتمد اختيارنا للخدمة المناسبة على طبيعة العمل والطريقة التي نريدها في تشغيل التطبيقات السحابية.
</p>

<p>
	ترجمة -وبتصرف- لمقال: <a href="https://www.cloudways.com/blog/iaas-vs-paas-vs-saas/" rel="external nofollow">IaaS vs. PaaS vs. Saas how are the differents</a> لصاحبه Sarim Javaid
</p>

<h2>
	اقرأ أيضًا
</h2>

<ul>
	<li>
		<a href="https://academy.hsoub.com/devops/cloud-computing/%D9%85%D9%81%D9%87%D9%88%D9%85-%D8%A7%D9%84%D8%B3%D8%AD%D8%A7%D8%A8%D8%A9-cloud-r624/" rel="">مفهوم السحابة Cloud</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/cloud-computing/%D9%85%D9%82%D8%AF%D9%85%D8%A9-%D8%A5%D9%84%D9%89-%D8%A7%D9%84%D8%AE%D9%88%D8%A7%D8%AF%D9%85-%D8%A7%D9%84%D8%B3%D8%AD%D8%A7%D8%A8%D9%8A%D8%A9-r807/" rel="">مقدمة إلى الخوادم السحابية</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/cloud-computing/%D9%86%D8%B8%D8%B1%D8%A9-%D8%B9%D8%A7%D9%85%D8%A9-%D8%B9%D9%84%D9%89-%D8%A7%D9%84%D8%AD%D9%88%D8%B3%D8%A8%D8%A9-%D8%A7%D9%84%D8%B3%D8%AD%D8%A7%D8%A8%D9%8A%D8%A9-r809/" rel="">نظرة عامة على الحوسبة السحابية</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/cloud-computing/%D9%85%D9%82%D8%AF%D9%85%D8%A9-%D8%A5%D9%84%D9%89-%D8%A7%D9%84%D8%A7%D8%B3%D8%AA%D8%B6%D8%A7%D9%81%D8%A9-%D8%A7%D9%84%D8%B3%D8%AD%D8%A7%D8%A8%D9%8A%D8%A9-cloud-hosting-r812/" rel="">مقدمة إلى الاستضافة السحابية Cloud Hosting</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">843</guid><pubDate>Sun, 20 Apr 2025 13:09:01 +0000</pubDate></item><item><title>&#x627;&#x633;&#x62A;&#x62E;&#x62F;&#x627;&#x645; Minikube &#x644;&#x62A;&#x637;&#x648;&#x64A;&#x631; &#x62A;&#x637;&#x628;&#x64A;&#x642;&#x627;&#x62A; Kubernetes &#x648;&#x627;&#x62E;&#x62A;&#x628;&#x627;&#x631;&#x647;&#x627; &#x645;&#x62D;&#x644;&#x64A;&#x651;&#x64B;&#x627; &#x639;&#x644;&#x649; &#x62D;&#x627;&#x633;&#x648;&#x628;&#x643;</title><link>https://academy.hsoub.com/devops/cloud-computing/%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-minikube-%D9%84%D8%AA%D8%B7%D9%88%D9%8A%D8%B1-%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA-kubernetes-%D9%88%D8%A7%D8%AE%D8%AA%D8%A8%D8%A7%D8%B1%D9%87%D8%A7-%D9%85%D8%AD%D9%84%D9%8A%D9%91%D9%8B%D8%A7-%D8%B9%D9%84%D9%89-%D8%AD%D8%A7%D8%B3%D9%88%D8%A8%D9%83-r822/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2024_10/-minikube---Kubernetes----.png.2a6d7db81f8100f14914ecfc300be3c2.png" /></p>
<p>
	كوبرنيتس Kubernetes هو نظام تنسيق حاويات شهير ومفتوح المصدر، يستخدم لأتمتة نشر البرامج وتوسيعها وإدارتها، ويزداد الاعتماد عليه في الشركات والمؤسسات يومًا بعد يوم لتسهيل عمليات التوسعة الأفقية horizontal scaling لموارد الخادم، ويُقصد بها إضافة المزيد من الخوادم حسب الحاجة لزيادة الموارد المتاحة لتطبيقك، مثل: الحجوم التخزينية وقدرة المعالجة وغيرها. يمكنك الحصول على حلول Kubernetes السحابية من مزودي خدمات سحابية متعددين ولكل خدمة مميزات خاصة في الإدارة وغيرها.
</p>

<p>
	يتطلب العمل مع كوبرنيتس <a href="https://academy.hsoub.com/devops/cloud-computing/%D8%AA%D8%B9%D8%B1%D9%91%D9%81-%D8%B9%D9%84%D9%89-%D9%83%D9%88%D8%A8%D8%B1%D9%86%D9%8A%D8%AA%D8%B3-kubernetes-r815/" rel="">Kubernetes</a> استخدامًا مكثفًا للموارد الحاسوبية، لأنه يعمل في نظام عنقودي يتكون من عدة خوادم، ويُشكل ذلك عبئًا إضافيًا على المطورين وخصوصًا في مرحلة ما قبل الإنتاج، فسيحتاجون الكثير من الموارد لتطوير مكدس Kubernetes تجريبي واختباره قبل النشر في البيئة الفعلية، لذا أنشأ مطورو Kubernetes مشروعًا مساعدًا مخصص لهذا الغرض يدعى <a href="https://minikube.sigs.k8s.io/docs/" rel="external nofollow">minikube</a>، الذي يعمل مع بيئات تشغيل الحاويات مثل دوكر  <a href="https://academy.hsoub.com/devops/cloud-computing/docker/%D8%AA%D8%B9%D8%B1%D9%81-%D8%B9%D9%84%D9%89-docker-r3/" rel="">Docker</a> وغيره، ويستطيع محاكاة عنقود Kubernetes كامل على آلة واحدة فقط هي حاسوبك الشخصي مثلًا.
</p>

<p>
	فما هو minikube المحاكي الشهير لنظام Kubernetes؟ وكيف يستخدم لاختبار إعدادات Kubernetes قبل نشرها في بيئة الإنتاج؟ وما هي لوحة معلومات Kubernetes المضمنة فيه؟ سيجيبك المقال عن هذه الأسئلة، ويعطيك طريقة تثبيته على حاسوبك المحلي أو خادمك البعيد، ثم سنعمل معًا على نشر تطبيق تجريبي بسيط، ونحاول الوصول إليه عبر <code>minikube</code>، وفي الختام سنتعرف على طريقة استخدام Minikube مع عناقيد Kubernetes البعيدة بواسطة ملفات تعريف الإعدادات configuration profiles.
</p>

<h2 id="">
	متطلبات العمل
</h2>

<p>
	ستحتاج المتطلبات الأولية التالية لتطبيق خطوات العمل المذكورة في المقال:
</p>

<ul>
	<li>
		فهم أساسيات Kubernetes، تفيدك مطالعة مقال <a href="https://academy.hsoub.com/devops/cloud-computing/%D8%AA%D8%B9%D8%B1%D9%91%D9%81-%D8%B9%D9%84%D9%89-%D9%83%D9%88%D8%A8%D8%B1%D9%86%D9%8A%D8%AA%D8%B3-kubernetes-r815/" rel="">تعرّف على كوبرنيتس Kubernetes</a> لتكوين فكرة جيدة عن أبرز مفاهيم Kubernetes ومكوناته.
	</li>
	<li>
		تثبيت بيئة تشغيل الحاويات Docker على حاسوبك الذي ستعمل منه، إذ سنُشغل منها <code>minikube</code>. إذا كنت تستخدم نظام تشغيل لينكس، فستساعدك الخطوات الواردة في مقال <a href="https://academy.hsoub.com/devops/cloud-computing/docker/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%AA%D8%AB%D8%A8%D9%8A%D8%AA-%D8%AF%D9%88%D9%83%D8%B1-%D9%88%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85%D9%87-%D8%B9%D9%84%D9%89-%D8%AF%D8%A8%D9%8A%D8%A7%D9%86-r465/" rel="">كيفية تثبيت دوكر واستخدامه على دبيان</a>، ولسهولة العمل احرص على تنفيذ الخطوة المتعلقة بضبط الإعدادات اللازمة لتشغيل Docker بدون الحاجة لكتابة sudo في بداية كل أمر. أما إذا كنت تعتمد نظام تشغيل ويندوز أو ماك فيمكنك الاستعانة <a href="https://docs.docker.com/get-docker/" rel="external nofollow">بتوثيقات Docker الرسمية</a> لإتمام عملية التثبيت.
	</li>
	<li>
		مدير الحزم <a href="https://brew.sh/" rel="external nofollow">Homebrew</a>، يمكنك الاسترشاد بالخطوات الواردة في <a href="https://www.digitalocean.com/community/tutorials/how-to-install-and-use-homebrew-on-macos" rel="external nofollow">هذا المقال</a> على DigitalOcean لتثبيته على نظام تشغيل ماك، أو <a href="https://www.digitalocean.com/community/tutorials/how-to-install-and-use-homebrew-on-linux" rel="external nofollow">بمقال</a> لتثبيته على لينكس، وفي حال كنت تستخدم نظام ويندوز فتستطيع تثبيته باستخدام <a href="https://www.digitalocean.com/community/tutorials/how-to-install-the-windows-subsystem-for-linux-2-on-microsoft-windows-10" rel="external nofollow">WSL</a> نظام ويندوز الفرعي لنظام لينكس .
	</li>
	<li>
		توفير الموارد الحاسوبية اللازمة للبيئة التي ستُثَبِّت فيها Minikube، وهي بالحد الأدنى: وحدتي معالجة مركزية 2CPUs، وذاكرة مخبئية 2GB RAM، ومساحة تخزينية على القرص الصلب بسعة 20GB.
	</li>
</ul>

<h2 id="1minikube">
	الخطوة 1: تثبيت Minikube وتشغيله
</h2>

<p>
	ثبّت <code>minikube</code> بواسطة مدير الحزم Homebrew كما يلي:
</p>

<pre class="ipsCode">$ brew install minikube
</pre>

<p>
	وستحصل على خرج يشبه التالي، يبين لك نجاح التثبيت:
</p>

<pre class="ipsCode" id="ips_uid_3245_10">…
==&gt; Installing minikube
==&gt; Pouring minikube--1.25.2.x86_64_linux.bottle.tar.gz
==&gt; Caveats
Bash completion has been installed to:
  /home/sammy/.linuxbrew/etc/bash_completion.d
==&gt; Summary
<span class="ipsEmoji">🍺</span>  /home/sammy/.linuxbrew/Cellar/minikube/1.25.2: 9 files, 70.0MB
…
</pre>

<p>
	<strong>ملاحظة:</strong> يتطلب تثبيت <code>minikube</code> على نظام ويندوز الانتباه لبعض التفاصيل المهمة: يعمل <code>minikube</code> مع WSL2 (وهي النسخة المتوفرة من WSL لتاريخ نشر المقال)، وينبغي تهيئته ليستخدم Docker واجهةً خلفية backend بدلًا من واجهته الخلفية الافتراضية. لذا بعد تثبيت Docker احرص على تفعيل ميزة دعم WSL2 باتباع إرشادات <a href="https://docs.docker.com/desktop/wsl/" rel="external nofollow">توثيقات Docker الخاصة بالموضوع</a> ثم ثبت <code>minikube</code> ونفذ الأمر <code>minikube config set driver docker</code>.
</p>

<p>
	اكتب الآن الأمر <code>start</code> وفق التالي لبدء تشغيل <code>minikube</code>، وسينشأ بداخله آليًّا عنقود Kubernetes محلي بأحدث إصدار مستقر متوفر، ويتضمن عدة حاويات Docker:
</p>

<pre class="ipsCode">$ minikube start
</pre>

<p>
	سيتطلب التشغيل بعض الوقت، وستحصل في نهايته على الخرج التالي، مع تجهيز الأداة <code>kubectl</code> لتستخدمها للاتصال مع العنقود cluster، كما يوضح السطر الأخير من الخرج:
</p>

<pre class="ipsCode"><span class="ipsEmoji">👍</span>  Starting control plane node minikube in cluster minikube
<span class="ipsEmoji">🚜</span>  Pulling base image ...
<span class="ipsEmoji">💾</span>  Downloading Kubernetes v1.23.1 preload ...
    &gt; preloaded-images-k8s-v16-v1...: 504.42 MiB / 504.42 MiB  100.00% 81.31 Mi
    &gt; gcr.io/k8s-minikube/kicbase: 378.98 MiB / 378.98 MiB  100.00% 31.21 MiB p
<span class="ipsEmoji">🔥</span>  Creating docker container (CPUs=2, Memory=1987MB) ...
<span class="ipsEmoji">🐳</span>  Preparing Kubernetes v1.23.1 on Docker 20.10.12 ...
    ▪ kubelet.housekeeping-interval=5m
    ▪ Generating certificates and keys ...
    ▪ Booting up control plane ...
    ▪ Configuring RBAC rules ...
<span class="ipsEmoji">🔎</span>  Verifying Kubernetes components...
    ▪ Using image gcr.io/k8s-minikube/storage-provisioner:v5
<span class="ipsEmoji">🌟</span>  Enabled addons: default-storageclass, storage-provisioner
<span class="ipsEmoji">🏄</span>  Done! kubectl is now configured to use "minikube" cluster and "default" namespace by default
</pre>

<p>
	<strong>ملاحظة:</strong> يمكنك اختيار إصدار Kubernetes الذي يناسبك لأسباب تتعلق بالتوافقية أو غيرها، بدلًا من الاعتماد على الإصدار الافتراضي الذي يوفره <code>minikube</code>، وذلك بكتابة رقم الإصدار المطلوب بعد الأمر <code>minikube start</code> بهذا الشكل <code>kubernetes-version v.1.2.3--</code>.
</p>

<p>
	يسمح لك تثبيت <code>minikube</code> بواسطة مدير الحزم Homebrew بالعمل مباشرةً مع <code>kubectl</code> الأداة الأساسية لإدارة عناقيد Kubernetes باستخدام سطر الأوامر، وبالتالي يمكنك كتابة الأمر <code>kubectl get</code> كما يلي لاستعراض جميع pods العاملة في العنقود بالطريقة نفسها المتبعة مع عناقيد Kubernetes العادية:
</p>

<pre class="ipsCode">$ kubectl get pods -A
</pre>

<p>
	يعرض الوسيط <code>A-</code> كافة pods العاملة في جميع مساحات الأسماء namespaces الموجودة ضمن العنقود، ألقِ نظرة على شكل الخرج للأمر السابق:
</p>

<pre class="ipsCode">NAMESPACE     NAME                               READY   STATUS    RESTARTS      AGE
kube-system   coredns-64897985d-ttwl9            1/1     Running   0             46s
kube-system   etcd-minikube                      1/1     Running   0             57s
kube-system   kube-apiserver-minikube            1/1     Running   0             61s
kube-system   kube-controller-manager-minikube   1/1     Running   0             57s
kube-system   kube-proxy-ddtgd                   1/1     Running   0             46s
kube-system   kube-scheduler-minikube            1/1     Running   0             57s
kube-system   storage-provisioner                1/1     Running   1 (14s ago)   54s
</pre>

<p>
	لديك الآن عنقود Kubernetes محلي، تستطيع إدارته باستخدام أدوات Kubernetes المألوفة مثل <code>kubectl</code>، وسنعرض في الفقرات القادمة وظائف إضافية يوفرها لك <code>minikube</code> لمراقبة عناقيد Kubernetes وإدارتها والتعديل عليها.
</p>

<h2 id="2kubernetes">
	الخطوة 2: الوصول إلى لوحة معلومات Kubernetes
</h2>

<p>
	يوفر <code>minikube</code> لمستخدميه وصولًا سهلًا للوحة معلومات النظام <a href="https://kubernetes.io/docs/tasks/access-application-cluster/web-ui-dashboard/" rel="external nofollow">Kubernetes Dashboard</a>، التي يمكنك استخدامها لمراقبة سلامة العنقود ولنشر التطبيقات يدويًا ولغيرها من أعمال الإدارة. وفور تثبيت <code>minikube</code> محليًا على حاسوبك تستطيع الوصول إلى لوحة معلومات Kubernetes بكتابة الأمر <code>minikube dashboard</code>:
</p>

<pre class="ipsCode">$ minikube dashboard
</pre>

<p>
	سيُشغّل هذا الأمر لوحة المعلومات آليًّا، ويفتح منفذًا port خاصًا داخل Kubernets يوجه حركة البيانات إلى العنقود، ثم يعرض رابط اللوحة الذي يشير إلى رقم المنفذ مباشرةً أمامك في متصفح الويب، كما في الصورة التالية.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="159723" href="https://academy.hsoub.com/uploads/monthly_2024_10/img01-kubernetes-dashboard.png.286ab25ec6baf1188665a2e596301656.png" rel=""><img alt="img01 kubernetes dashboard" class="ipsImage ipsImage_thumbnailed" data-fileid="159723" data-unique="4ik3rcagj" style="width: 600px; height: auto;" src="https://academy.hsoub.com/uploads/monthly_2024_10/img01-kubernetes-dashboard.thumb.png.25ac96381952606aa16d34aa1e2b692b.png"> </a>
</p>

<p>
	يؤدي تشغيل لوحة المعلومات إلى تعطيل النافذة الطرفية terminal التي كَتَبّتَ أمر التشغيل فيها، فلا يمكنك كتابة أوامر أخرى ضمنها، لذا يلجأ المستخدمون إلى تشغيل لوحة المعلومات في نافذة طرفية أخرى غير التي يعملون عليها. يمكنك إيقاف هذه العملية المُعطِّلة وغيرها من العمليات المشابهة بالضغط على <code>Ctrl+C</code>.
</p>

<p>
	أما إذا كنت تستخدم <code>minikube</code> على خادم بعيد، فأضِف الوسيط <code>url--</code> إلى الأمر <code>minikube dashboard</code> السابق، وسيعطيك في الخرج رابط URL الخاص بلوحة المعلومات، بدلًا من فتحه مباشرة في المتصفح. ألقِ نظرة على الأمر التالي الخاص بتشغيل اللوحة للخادم البعيد:
</p>

<pre class="ipsCode">$ minikube dashboard --url
</pre>

<p>
	وسيكون الخرج كما يلي:
</p>

<pre class="ipsCode"><span class="ipsEmoji">🤔</span>  Verifying dashboard health ...
<span class="ipsEmoji">🚀</span>  Launching proxy ...
<span class="ipsEmoji">🤔</span>  Verifying proxy health ...
http://127.0.0.1:34197/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/
</pre>

<p>
	يختلف رقم المنفذ الذي يفتحه <code>minikube</code> للوحة المعلومات من نظامٍ إلى آخر، ستلاحظ أن رقمه على حاسوبك مختلفٌ عن رقمه هنا في هذا المثال.
</p>

<p>
	تمنع إعدادات الأمان الافتراضية لنظام Kubernetes الوصول إلى عنوان URL هذا من الأجهزة البعيدة لحمايته، لذا ينبغي عليك بدايةً إعداد قناة <abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة"><abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">SSH</abbr></abbr> آمنة مع الخادم قبل فتحه. اكتب إذاً الأمر التالي مع الراية <code>L-</code> لفتح قناة <code><abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة"><abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">ssh</abbr></abbr></code> بين الحاسوب المحلي والخادم البعيد، واكتب ضمنه رقم منفذ لوحة المعلومات الظاهر في الخرج السابق، وعنوان IP لخادمك البعيد ليصبح بهذه الصيغة:
</p>

<pre class="ipsCode">$ ssh -L 34197:127.0.0.1:34197 sammy@your_server_ip
</pre>

<p>
	يمكنك بعد ذلك الدخول إلى لوحة المعلومات باستخدام الرابط: <code>http://127.0.0.1:34197/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/</code>.
</p>

<p>
	يمكنك معرفة المزيد عن تقنية الاتصال الآمن <abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة"><abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">SSH</abbr></abbr> بمطالعة الفيديو التالي:
</p>

<p>
	<iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="" frameborder="0" height="534" id="ips_uid_979_6" src="https://academy.hsoub.com/applications/core/interface/index.html" title="ما هي تقنية SSH" width="1519" data-embed-src="https://www.youtube.com/embed/CGDYjTTDOYg"></iframe>
</p>

<p>
	الآن بعد أن اختبرنا التعامل مع <code>minikube</code> مثل أي عنقود Kubernetes كامل عن طريق لوحة المعلومات، سننتقل للخطوة التالية، ونحاول نشر تطبيق تجريبي بسيط في هذا العنقود لنتأكد من عمله كما هو بالطريقة المرجوة منه.
</p>

<h2 id="3">
	الخطوة 3: نشر تطبيق تجريبي واختباره
</h2>

<p>
	يمكنك استخدام الأمر <code>kubectl</code> لنشر تطبيق تجريبي في عنقود Minikube. اكتب مثلًا الأمر التالي الذي سيؤدي إلى نشر تطبيق Kubernetes تجريبي متاح للاختبارات من شركة جوجل يدعى <code>hello-app</code>.
</p>

<pre class="ipsCode">$ kubectl create deployment web --image=gcr.io/google-samples/hello-app:1.0
</pre>

<p>
	يُنشئ هذا الأمر عملية نشر deployment داخل العنقود تدعى <code>web</code>، وتُبنى انطلاقًا من صورة بعيدة تسمى <code>hello-app</code> موجودة في <a href="https://academy.hsoub.com/devops/cloud-computing/docker/%D8%A5%D8%B9%D8%AF%D8%A7%D8%AF-%D8%B3%D8%AC%D9%84-%D8%AF%D9%88%D9%83%D8%B1-docker-registry-%D8%AE%D8%A7%D8%B5-%D8%B9%D9%84%D9%89-%D8%AE%D8%A7%D8%AF%D9%85-%D8%A3%D9%88%D8%A8%D9%86%D8%AA%D9%88-2204-r814/" rel="">سجل حاويات</a> جوجل المسمى <code>gcr.io</code>.
</p>

<p>
	سنُعَرِّف الآن عملية النشر <code>web</code> بصفتها خدمة من خدمات Kubernetes، ونحدد منفذًا ثابتًا للاتصال معه بكتابة المحددين <code>port=8080--</code> و <code>type=NodePort--</code>، وفق التالي:
</p>

<pre class="ipsCode">$ kubectl expose deployment web --type=NodePort --port=8080
</pre>

<p>
	يمكنك معرفة المزيد عن خدمات Kubernetes وكيفية الاتصال معها بمطالعة مقال <a href="https://academy.hsoub.com/devops/cloud-computing/%D8%AA%D8%B9%D8%B1%D9%91%D9%81-%D8%B9%D9%84%D9%89-%D9%83%D9%88%D8%A8%D8%B1%D9%86%D9%8A%D8%AA%D8%B3-kubernetes-r815/" rel="">تعرّف على كوبرنيتس Kubernetes.</a>
</p>

<p>
	لنتحقق فيما إذا كانت الخدمة تعمل أم لا؟ بواسطة الأمر <code>kubectl get service</code> مع كتابة اسم الخدمة بعده، كما يلي:
</p>

<pre class="ipsCode">$ kubectl get service web
</pre>

<p>
	ستحصل على خرج يشبه الخرج التالي، مع اختلاف في أرقام المنافذ لأن NodePort توزع أرقام المنافذ عشوائيًا على خدمات Kubernetes:
</p>

<pre class="ipsCode">NAME   TYPE       CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
web    NodePort   10.109.254.242   &lt;none&gt;        8080:31534/TCP   10s
</pre>

<p>
	يمكننا الآن استخدام <code>minikube</code> للحصول على عنوان URL المتاح من خارج الحاوية، يسمح لك هذا العنوان بالاتصال مع خدمة التطبيق <code>hello-app</code> العاملة على المنفذ <code>8080</code> داخل العنقود. إذا كنت تستخدم Minikube على حاسوبك المحلي، فلست بحاجة لإعادة توجيه حركة البيانات من منفذ لآخر كما سنذكر لاحقًا، فقط نفذ الأمر <code>minikube service web --url</code> التالي، وستحصل على عنوان URL لتطبيقك التجريبي:
</p>

<pre class="ipsCode">$ minikube service web --url
</pre>

<p>
	وسيكون الخرج عنوان URL مثل التالي:
</p>

<pre class="ipsCode">http://192.168.49.2:31534
</pre>

<p>
	اختبر عنوان URL بواسطة <code>crul</code>، وهو أحد أشهر برامج سطر الأوامر command line المستخدمة لإرسال أنواع مختلفة من طلبات الويب، يستخدم للتحقق من إمكانية عمل عناوين URL ضمن المتصفح في ظروف مناسبة، لذا ننصحك بفحص الروابط باستخدام <code>crul</code> دائمًا قبل تجربتها في المتصفح، وذلك وفق التالي:
</p>

<pre class="ipsCode">$ curl http://192.168.49.2:31534
</pre>

<p>
	يبين لك الخرج التالي نجاح العملية:
</p>

<pre class="ipsCode">Hello, world!
Version: 1.0.0
Hostname: web-746c8679d4-j92tb
</pre>

<p>
	يمكنك الآن استعراض عنوان URL هذا في المتصفح مباشرةً إذا كانت تستخدم <code>minikube</code> محليًا، وستحصل على النص السابق غير المنسق نفسه الذي حصلت عليه بتعليمة <code>crul</code>. أما إذا كنت تعمل على جهاز بعيد، استخدم اتصال <abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة"><abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">SSH</abbr></abbr> كما في الخطوة 2، ثم استعرض العنوان في المتصفح.
</p>

<p>
	أصبحت لديك الأساسيات اللازمة لنشر تطبيق عبر <code>minikube</code> فما ينطبق على التطبيق التجريبي البسيط الذي نشرناه يتنطبق نفسه على المشاريع الأكبر حجمًا، والتخصيص الإضافي الذي ستحتاجه فيها يتعلق بنظام Kubernetes وليس بوظائف <code>minikube</code>.
</p>

<p>
	سنتعلم في خطوتنا التالية طريقة استخدام بعض أدوات Minikube المدمجة لتغيير بعض الإعدادات الافتراضية للعنقود.
</p>

<h2 id="4minikube">
	الخطوة 4: إدارة نظام ملفات Minikube وموارده
</h2>

<p>
	يوفر لك <code>minikube</code> عددًا من الأوامر الخاصة بتعديل إعدادات العنقود، فمثلًا يمكنك استخدام الأمر <code>minikube config</code> لتعديل الذاكرة المتوفرة للعنقود وفق التالي، علمًا أن الذاكرة هنا تقدر بالميجابايت MB وبالتالي يقابل الأمر <code>minikube config 4096</code> توفير ذاكر بسعة 4GB لعنقودك:
</p>

<pre class="ipsCode">$ minikube config set memory 4096
</pre>

<p>
	ستحصل على الخرج التالي:
</p>

<pre class="ipsCode"><span class="ipsEmoji">❗</span>  These changes will take effect upon a minikube delete and then a minikube start
</pre>

<p>
	يشير الخرج السابق إلى أن تعديل الذاكرة يتطلب إعادة نشر العنقود ليأخذ مفعوله.
</p>

<p>
	<strong>ملاحظة:</strong> لا تتطلب جميع التعديلات على الموارد إعادة نشر عنقود Kubernetes لتأخذ مفعولها، ففي بيئات الإنتاج يسري تغيير الذاكرة مباشرةً بدون إعادة نشر، لكن مع ذلك حاول أن لا تجري الكثير من التعديلات على عناقيد Kubernetes قيد التشغيل اعتمادًا على ملفات الإعدادات فقط بدون إجراء إعادة نشر، حاول الالتزام بإعادة النشر بعد كل تعديل على الموارد.
</p>

<p>
	تتضمن إعادة النشر مرحلتين هما <code>minikube delete</code> و <code>minikube start</code>، اكتب أولًا الأمر:
</p>

<pre class="ipsCode">$ minikube delete
</pre>

<p>
	وستحصل على الخرج التالي:
</p>

<pre class="ipsCode"><span class="ipsEmoji">🔥</span>  Deleting "minikube" in docker ...
<span class="ipsEmoji">🔥</span>  Deleting container "minikube" ...
<span class="ipsEmoji">🔥</span>  Removing /home/sammy/.minikube/machines/minikube ...
<span class="ipsEmoji">💀</span>  Removed all traces of the "minikube" cluster.
</pre>

<p>
	ثم اكتب الأمر:
</p>

<pre class="ipsCode">$ minikube start
</pre>

<p>
	يتيح لك <code>minikube</code> وصل أي مجلد من نظام ملفاتك المحلي الموجود على حاسوبك إلى داخل العنقود وصلًا مؤقتًا باستخدام الأمر <code>minikube mount</code>.
</p>

<p>
	أما كيفية كتابة الأمر <code>mount</code> قواعديًا فهي على الشكل التالي: <code>local_path:minikube_host_path</code>. يرمز <code>local_path</code> إلى مسار المجلد المحلي الذي تريد إيصاله إلى داخل العنقود، ويشير الجزء الآخر أي <code>minikube_host_path</code> إلى الموقع أو المجلد داخل VM أو داخل حاوية Minikube الذي تود أن تصل منه إلى ملفاتك.
</p>

<p>
	ألقِ نظرة على الأمر التالي الذي يوصل المجلد الأساسي الخاص بك home directory إلى المجلد <code>host/</code> داخل عنقود <code>minikube</code>:
</p>

<pre class="ipsCode">$ minikube mount $HOME:/host
</pre>

<p>
	وستحصل على الخرج التالي الذي يؤكد لك نجاح العملية:
</p>

<pre class="ipsCode"><span class="ipsEmoji">📁</span>  Mounting host path /home/sammy into VM as /host ...
    ▪ Mount type:
    ▪ User ID:      docker
    ▪ Group ID:     docker
    ▪ Version:      9p2000.L
    ▪ Message Size: 262144
    ▪ Options:      map[]
    ▪ Bind Address: 192.168.49.1:43605
<span class="ipsEmoji">🚀</span>  Userspace file server: ufs starting
<span class="ipsEmoji">✅</span>  Successfully mounted /home/sammy to /host

<span class="ipsEmoji">📌</span>  NOTE: This process must stay alive for the mount to be accessible ...
</pre>

<p>
	تفيدك هذه الطريقة في الحالات التي تحتاج فيها للحفاظ على مدخلات أو مخرجات ثابتة لعملك مع العنقود، مثل عمليات تسجيل الأحداث logging لعنقود <code>minikube</code>.
</p>

<p>
	تعطل هذه العملية نافذة الطرفية فلا يعود بإمكانك كتابة الأوامر فيها، يمكنك الخروج منها بالضغط على <code>Ctrl+C</code>، تمامًا كما فعلنا في حالة فتح المنفذ الخاصة بلوحة المعلومات التي ذكرناها في الخطوة 2. سنتعلم في الخطوة التالية كيف تتنقل بكفاءة بين <code>minikube</code> وعنقود Kubernetes كامل موجود على خادم بعيد.
</p>

<h2 id="kubernetes">
	التعامل مع أكثر من عنقود Kubernetes
</h2>

<p>
	يستطيع <code>minikube</code> التعامل مع عناقيد Kubernetes محلية متعددة في الوقت نفسه، فيُهيئ لكل عنقود ملف تعريف profile خاص به. فقد تحتاج في بعض الحالات للتعامل مع إصدارات مختلفة من عناقيد Kubernetes لإجراء اختبار معين مثلًا، فيمكنك عندها التبديل بين هذه الإصدارات باستخدام الراية <code>p-</code> أو <code>profile--</code>.
</p>

<p>
	وإذا كنت ستعمل مع عنقود معين لفترة طويلة أو أكثر من بقية العناقيد، فيمكنك تعيينه ليكون ملف التعريف الافتراضي في <code>minikube</code> بواسطة الأمر <code>minikube profile</code>، بدلًا من تحديده بعد الراية <code>profile--</code> في كل أمر تنفذه.
</p>

<p>
	لنُشغّل الآن Minikube مع ملف تعريفي جديد بتنفيذ الأمر <code>minikube start</code> مع الراية <code>p-</code>، وفق التالي:
</p>

<pre class="ipsCode">$ minikube start -p new-profile
</pre>

<p>
	اضبط الآن هذا الملف التعريفي الجديد ليكون هو الملف الفعال أو الافتراضي في Minikube بكتابة الأمر <code>minikube profile</code> كما يلي:
</p>

<pre class="ipsCode">$ minikube profile new-profile
</pre>

<p>
	سيظهر لك هذا الخرج:
</p>

<pre class="ipsCode"><span class="ipsEmoji">✅</span>  minikube profile was successfully set to new-profile
</pre>

<p>
	يمكنك معرفة الملف التعريفي الحالي الذي تستخدمه بواسطة الأمر <code>get profile</code> كما يلي:
</p>

<pre class="ipsCode">$ minikube config get profile
</pre>

<p>
	وسيعيد لك الخرج اسم الملف التعريفي الحالي وهو في مثالنا:
</p>

<pre class="ipsCode">new-profile
</pre>

<p>
	يُنشئ <code>minikube</code> ملفات الإعدادات لمنظومتك، ويخزنها هذه الملفات في مكانها الافتراضي المعروف للأداة <code>kubectl</code> ولغيرها من أدوات Kubernetes لتتمكن من الوصول إليها، ذلك سواء كنت تستخدم ملف تعريفي واحد أو عدة ملفات تعريفية، فمثلًا في كل مرة تنفذ فيها الأمر <code>kubectl get nodes</code> لاستعراض بيانات العقد nodes لعنقود <code>minikube</code> ستُحلل <code>kubectl</code> ملفات الإعدادات وتعطيك النتيجة، ألقِ نظرة على الأمر أدناه:
</p>

<pre class="ipsCode">$ kubectl get nodes
</pre>

<p>
	وسيبين الخرج العقد الموجودة وهي عقدة واحدة فقط في حالتنا كما يلي:
</p>

<pre class="ipsCode">NAME       STATUS   ROLES                  AGE     VERSION
minikube   Ready    control-plane,master   3h18m   v1.23.1
</pre>

<p>
	يمكنك اختيار أي ملف إعدادات تريده وإسناده للمُحَدِد <code>kubeconfig</code> لتقرأه <code>kubectl</code> عند بدء تشغيلها بدلًا من الملف الافتراضي الموجود في المجلد <code>kube/confg. /~</code>، وعندها ستستخدم بيانات اعتماد العنقود المذكورة في هذا الملف عوضًا عن تلك الموجودة في الملف الافتراضي. لنفترض أن لديك ملف إعدادات اسمه <code>remote-kubeconfig.yaml</code> مثلًا لعنقود Kubernetes آخر غير عنقودك في Minikube، وتريد استخراج العقد الموجودة فيه، فستكتب حينئذ الأمر التالي:
</p>

<pre class="ipsCode">$ kubectl --kubeconfig=remote-kubeconfig.yaml get nodes
</pre>

<p>
	وستحصل في الخرج على العقد الموجودة في ذلك العنقود، والتي تعمل عن بعد خارج Minikube الخاص بك، وسيبدو الخرج كما يلي:
</p>

<pre class="ipsCode">NAME                   STATUS   ROLES    AGE    VERSION
pool-xr6rvqbox-uha8f   Ready    &lt;none&gt;   2d2h   v1.21.9
pool-xr6rvqbox-uha8m   Ready    &lt;none&gt;   2d2h   v1.21.9
pool-xr6rvqbox-uha8q   Ready    &lt;none&gt;   2d2h   v1.21.9
</pre>

<p>
	صُمم Kubernetes في الأساس للعمل مع <a href="https://kubernetes.io/docs/tasks/access-application-cluster/configure-access-multiple-clusters/" rel="external nofollow">ملف إعدادات واحد لكل عنقود</a>، يُمَرَر للأوامر مثل <code>kubectl</code> وغيره عند التشغيل، ومع ذلك يمكنك دمج عدة ملفات إعدادات مع بعضها، إلّا أنها ليست الطريقة المفضلة ولا تُعدّ ضرورية إذ سيضعب عليك بعدها تتبع أفضل الممارسات الموصى بها للعمل مع Kubernetes. ننصحك أيضًا بالتَعَرُّف على <a href="https://github.com/kubernetes-sigs/krew" rel="external nofollow">Krew</a> مدير الحزم الخاص بإضافات Kubectl plugins.
</p>

<h2 id="-1">
	الخلاصة
</h2>

<p>
	وضح هذا المقال كيفية تثبيت Minikube محليًا على الحاسوب الشخصي، واستخدام لوحة معلومات Kubernetes المُضمنة لمراقبة التطبيقات ونشرها، مع الإضاءة على الفكرة الأهم، وهي إمكانية العمل على نشر مثيل instance تجريبي للتطبيق واختباره محليًا ضمن <code>minikube</code> بالتزامن مع وجود مثيل Kubernetes بعيد نصل إليه بواسطة ملفات تعريف Minikube والراية <code>kubectl --kubeconfig</code>. خلاصة القول: يساعدك <code>minikube</code> على اختبار إعدادات Kubernetes وتقييمها محليًا قبل نشرها الفعلي، لتحدد كيف ومتى تصبح جاهزًا لنشر Kubernetes في بيئة الإنتاج.
</p>

<p>
	ترجمة -وبتصرف- للمقال <a href="https://www.digitalocean.com/community/tutorials/how-to-use-minikube-for-local-kubernetes-development-and-testing" rel="external nofollow">How To Use minikube for Local Kubernetes Development and Testing</a> لصاحبه Alex Garnett.
</p>

<h2>
	اقرأ أيضًا
</h2>

<ul>
	<li>
		<a href="https://academy.hsoub.com/devops/cloud-computing/%D8%AA%D8%B9%D9%84%D9%85-%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A7%D8%AA-kubernetes-r468/" rel="">تعلم أساسيات Kubernetes</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/deployment/%D9%86%D8%B4%D8%B1-%D8%A7%D9%84%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA-%D9%88%D8%AA%D9%88%D8%B2%D9%8A%D8%B9%D9%87%D8%A7-%D9%88%D9%81%D9%82-%D9%86%D9%87%D8%AC-%D8%A7%D9%84%D8%AA%D8%B3%D9%84%D9%8A%D9%85-%D8%A7%D9%84%D9%85%D8%B3%D8%AA%D9%85%D8%B1-r646/" rel="">نشر التطبيقات وتوزيعها وفق نهج التسليم المستمر</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/cloud-computing/%D9%86%D8%B8%D8%A7%D9%85-%D9%83%D9%88%D8%A8%D9%8A%D8%B1%D9%86%D8%AA%D8%B3-kubernetes-%D9%88%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%B9%D9%85%D9%84%D9%87-r598/" rel="">نظام كوبيرنتس Kubernetes وكيفية عمله</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/cloud-computing/%D8%A3%D8%A8%D8%B1%D8%B2-%D8%A7%D9%84%D9%85%D9%81%D8%A7%D9%87%D9%8A%D9%85-%D8%A7%D9%84%D8%AA%D9%8A-%D9%8A%D8%AC%D8%A8-%D8%B9%D9%84%D9%8A%D9%83-%D8%A7%D9%84%D8%A5%D9%84%D9%85%D8%A7%D9%85-%D8%A8%D9%87%D8%A7-%D8%B9%D9%86-%D8%A7%D9%84%D8%AD%D8%A7%D9%88%D9%8A%D8%A7%D8%AA-r561/" rel="">أبرز المفاهيم التي يجب عليك الإلمام بها عن الحاويات</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">822</guid><pubDate>Sun, 13 Oct 2024 15:03:03 +0000</pubDate></item><item><title>&#x62F;&#x644;&#x64A;&#x644; &#x627;&#x633;&#x62A;&#x62E;&#x62F;&#x627;&#x645; &#x623;&#x62F;&#x627;&#x629; &#x628;&#x648;&#x62F;&#x645;&#x627;&#x646; &#x643;&#x648;&#x645;&#x628;&#x648;&#x632; Podman Compose</title><link>https://academy.hsoub.com/devops/cloud-computing/%D8%AF%D9%84%D9%8A%D9%84-%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%A3%D8%AF%D8%A7%D8%A9-%D8%A8%D9%88%D8%AF%D9%85%D8%A7%D9%86-%D9%83%D9%88%D9%85%D8%A8%D9%88%D8%B2-podman-compose-r821/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2024_10/-----Podman-Compose.png.25983dd2dac1dec3ed2aeebb32cba8af.png" /></p>
<p>
	تملك أداة بودمان أداة تسمى بودمان كومبوز Podman Compose وهي بديلة عن أداة دوكر كومبوز Docker Compose وتُتيح لك العمل مع ملفاتها. وكما ذكرنا في <a href="https://academy.hsoub.com/tags/podman/" rel="">مقالاتنا السابقة</a> فإن بودمان يُعدّ بديلًا ممتازًا عن دوكر، لكن إحدى مساوئه هي أنه لا يُتيح ميزة سحب الصور وتشغيل الحاويات بدءًا من ملفات كومبوز. سنتعرف في مقالنا على هذه الأداة والفوائد التي تقدمها عند العمل مع الحاويات وكيفية حل هذه المشكلة من خلالها.
</p>

<h2 id="podmancompose-1">
	ما هي أداة بودمان كومبوز Podman Compose
</h2>

<p>
	تُتيح أداة دوكر خاصيّة تحديد جميع التفاصيل المهمة كاسم الحاوية، والصورة المُستَخدمة، وسياسة إعادة التشغيل restart policy، ووحدات التخزين، والمنافذ، والتسميات، وما شابه، في ملف واحد يدعى عادةً ملف <code>docker-compose.yml</code>.
</p>

<p>
	لكن هذه الخاصيّة ليست موجودةً في بودمان. لذلك يجب أن نستخدم أداة بودمان كومبوز لنحصل عليها. تتبع أداة بودمان كومبوز <a href="https://github.com/compose-spec/compose-spec/blob/master/spec.md?ref=linuxhandbook.com" rel="external nofollow">المواصفات</a> نفسها التي تتبعها أداة دوكر <a href="https://academy.hsoub.com/devops/cloud-computing/docker/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%AF%D9%88%D9%83%D8%B1-docker-r607/" rel="">Docker</a>، مما يجعلها تتوافق مع ملفات <code>docker-compose.yml</code> (لكن قد توجد بعض الاختلافات البسيطة كوضع القيم بين علامتي الاقتباس المزدوجة (<strong>"</strong>)، ولكن هذه الاختلافات يمكن حلها بمجرد النظر إلى الأخطاء الناتجة عن استعمال الأداة podman-compose.)
</p>

<h2 id="podmancompose-2">
	تثبيت أداة بودمان كومبوز podman-compose
</h2>

<p>
	تُعد أداة بودمان كومبوز أداةً جديدةً نسبيًا لذلك قد لا تجدها في مستودعات توزيعات لينكس المستقرة وذات الدعم طويل الأمد LTS distributions. لكن إليك الخيارات المتاحة من أجل تثبيتها:
</p>

<ul>
	<li>
		يمكنك تثبيت أداة بودمان كومبوز في توزيعة أوبنتو ذات الإصدار 22.10 نسخة كينيتك كودو Kinetic Kudu والنسخ الأحدث، وفي توزيعة ديبيان النسخة الثانية عشر بوكوورم Bookworm والنسخ الأحدث منها، باستخدام مدير الحزم <code>apt</code> على النحو التالي:
	</li>
</ul>

<pre class="ipsCode">sudo apt install podman-compose
</pre>

<ul>
	<li>
		أما بالنسبة لمستخدمي الإصدار السادس والثلاثين من <a href="https://academy.hsoub.com/devops/linux/%D8%A7%D9%84%D8%AF%D9%84%D9%8A%D9%84-%D8%A7%D9%84%D9%86%D9%87%D8%A7%D8%A6%D9%8A-%D9%84%D8%A7%D8%AE%D8%AA%D9%8A%D8%A7%D8%B1-%D8%AA%D9%88%D8%B2%D9%8A%D8%B9%D8%A9-%D9%84%D9%8A%D9%86%D9%83%D8%B3-r48/" rel="">توزيعة فيدورا Fedora</a> والإصدارات الأحدث (إصدار حزمة النسخة الخامسة والثلاثون من فيدورا هو <code>0.1.7-6.git</code>) فيمكنهم استخدام مدير الحزم <code>dnf</code> لتثبيت أداة بودمان كومبوز كما يلي:
	</li>
</ul>

<pre class="ipsCode">sudo dnf install podman-compose
</pre>

<ul>
	<li>
		أما لتثبيتها على نسخة OpenSUSE Tumbleweed أو Leap الإصدار الخامس عشر أو الإصدارات الأحدث فاستخدم الأمر التالي:
	</li>
</ul>

<pre class="ipsCode">sudo zypper install podman-compose
</pre>

<ul>
	<li>
		أما مستخدمو Arch Linux فعليهم استخدام الأمر التالي:
	</li>
</ul>

<pre class="ipsCode">sudo pacman -Syu podman-compose
</pre>

<h2 id="">
	التأكد من نجاح التثبيت
</h2>

<p>
	للتأكد من نجاح عملية تثبيت أداة بودمان كومبوز وأن مسارها الصحيح موجود ضمن متغير البيئة <code>path</code> استخدم الأمر التالي والذي سيعرض لك نسخة بودمان المُستخدمة:
</p>

<pre class="ipsCode">podman-compose --version
</pre>

<p>
	إليك خرج الأمر السابق على توزيعة فيدورا النسخة السادسة والثلاثون:
</p>

<pre class="ipsCode">$ podman-compose --version
['podman', '--version', '']
using podman version: 4.3.1
podman-composer version  1.0.3
podman --version
podman version 4.3.1
exit code: 0
</pre>

<h2 id="-1">
	أساسيات أداة بودمان كومبوز
</h2>

<p>
	إليك المقال التالي عن كيفية استخدام <a href="https://academy.hsoub.com/devops/cloud-computing/docker/%D8%AA%D8%AB%D8%A8%D9%8A%D8%AA-%D8%A7%D9%84%D8%A3%D8%AF%D8%A7%D8%A9-%D8%AF%D9%88%D9%83%D8%B1-%D9%83%D9%88%D9%85%D8%A8%D9%88%D8%B2-docker-compose-%D9%88%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85%D9%87%D8%A7-%D8%B6%D9%85%D9%86-%D9%86%D8%B8%D8%A7%D9%85-%D9%84%D9%8A%D9%86%D9%83%D8%B3-%D8%A3%D9%88%D8%A8%D9%88%D9%86%D8%AA%D9%88-r654/" rel="">دوكر كومبوز</a>. إليك ملف كومبوز الذي سنستخدمه في مقالنا:
</p>

<pre class="ipsCode">version: 3.7

services:


    reverse-proxy:
        image: docker.io/library/caddy:alpine
        container_name: caddy-vishwambhar
        command: caddy run --config /etc/caddy/Caddyfile
        restart: always
        ports:
            - "8080:80"
            - "8443:443"
        volumes:
            - /docker-volumes/caddy/Caddyfile:/etc/caddy/Caddyfile:Z
            - /docker-volumes/caddy/site:/srv:Z
            - /docker-volumes/caddy/caddy_data:/data:Z
            - /docker-volumes/caddy/caddy_config:/config:Z
            - /docker-volumes/caddy/ssl:/etc/ssl:Z
        labels:
            - io.containers.autoupdate=registry
            - pratham.container.category=proxy
        environment:
            - TZ=Asia/Kolkata
        depends_on:
            - gitea-web


    gitea-web:
        image: docker.io/gitea/gitea:latest
        container_name: gitea-govinda
        restart: always
        ports:
            - "8010:3000"
            - "8011:22"
        volumes:
            - /docker-volumes/gitea/web:/data:Z
            - /docker-volumes/gitea/ssh:/data/git/.ssh:Z
            - /etc/localtime:/etc/localtime:ro
        labels:
            - io.containers.autoupdate=registry
            - pratham.container.category=gitea
        environment:
            - RUN_MODE=prod
            - DISABLE_SSH=false
            - START_SSH_SERVER=true
            - SSH_PORT=22
            - SSH_LISTEN_PORT=22
            - ROOT_URL=https://git.mydomain.com
            - DOMAIN=git.mydomain.com
            - SSH_DOMAIN=git.mydomain.com
            - GITEA__database__DB_TYPE=postgres
            - GITEA__database__HOST=gitea-db:5432
            - GITEA__database__NAME=gitea
            - GITEA__database__USER=gitea
            - GITEA__database__PASSWD=/run/secrets/gitea_database_user_password
            - GITEA__service__DISABLE_REGISTRATION=true
            - TZ=Asia/Kolkata
        depends_on:
            - gitea-db
        secrets:
            - gitea_database_user_password


    gitea-db:
        image: docker.io/library/postgres:14-alpine
        container_name: gitea-chitragupta
        restart: always
        volumes:
            - /docker-volumes/gitea/database:/var/lib/postgresql/data:Z
        labels:
            - io.containers.autoupdate=registry
            - pratham.container.category=gitea
        environment:
            - POSTGRES_USER=gitea
            - POSTGRES_PASSWORD=/run/secrets/gitea_database_user_password
            - POSTGRES_DB=gitea
            - TZ=Asia/Kolkata
        secrets:
            - gitea_database_user_password


secrets:
    gitea_database_user_password:
        external: true
</pre>

<h3 id="-2">
	تشغيل كل الحاويات من ملف كومبوز
</h3>

<p>
	يمكننا باستخدام الأمر <code>up</code> إنشاء الخدمات المذكورة في ملف كومبوز (docker-compose.yml) وتشغيلها:
</p>

<pre class="ipsCode">podman-compose up -d
</pre>

<p>
	يؤدي تشغيل الأمر <code>up</code> إلى تنفيذ كل الإجراءات اللازمة لتشغيل الخدمات والحاويات المذكورة في ملف كومبوز، بما فيه الخطوات التالية:
</p>

<ul>
	<li>
		سحب الصور غير المتوفرة محليًا.
	</li>
	<li>
		إنشاء الحاويات مع الخيارات المحددة (المنافذ، ووحدات التخزين، والشبكات، والمعلومات الحساسة secrets).
	</li>
	<li>
		تشغيل الحاويات وفق ترتيب معين (باستخدام القيود constrains مثل <code>depends_on</code>). إذا تمعّنت في المثال السابق ستلاحظ وجود الخيار <code>d-</code> الذي يُشغّل الحاويات في الخلفية ويفصلها عن الصدفة الحالية.
	</li>
</ul>

<p>
	يمكنك التأكد من عمل الحاويات بتشغيل الأمر <code>podman ps</code>:
</p>

<pre class="ipsCode">$ podman ps
CONTAINER ID  IMAGE                                COMMAND               CREATED      STATUS          PORTS                                         NAMES
d7b7f91c03aa  docker.io/library/caddy:alpine       caddy run --confi...  4 hours ago  Up 4 hours ago  0.0.0.0:8080-&gt;80/tcp, 0.0.0.0:8443-&gt;443/tcp   caddy-vishwambhar
1cfcc6efc0d0  docker.io/library/postgres:14-alpine postgres              4 hours ago  Up 4 hours ago                                                gitea-chitragupta
531be3df06d0  docker.io/gitea/gitea:latest         /bin/s6-svscan /e...  4 hours ago  Up 4 hours ago  0.0.0.0:8010-&gt;3000/tcp, 0.0.0.0:8011-&gt;22/tcp  gitea-govinda
</pre>

<h3 id="-3">
	إيقاف جميع الحاويات باستخدام ملف كومبوز
</h3>

<p>
	لإيقاف جميع الحاويات المحددة في ملف كومبوز عليك استخدام الأمر <code>down</code>:
</p>

<pre class="ipsCode">podman-compose down
</pre>

<p>
	يمكنك تحديد وقت إيقاف timeout لتتوقف فيه الحاويات عن العمل من تلقاء نفسها، باستخدام أحد الخيارين التاليين:
</p>

<pre class="ipsCode">podman-compose down -t TIMEOUT_IN_SECONDS
podman-compose down --timeout TIMEOUT_IN_SECONDS
</pre>

<p>
	يرجى الانتباه إلى أن الأمر <code>down</code> يوقف عمل الحاويات فقط، أما إن أردت <a href="https://academy.hsoub.com/devops/cloud-computing/%D8%A5%D9%86%D8%B4%D8%A7%D8%A1-%D8%A7%D9%84%D8%AD%D8%A7%D9%88%D9%8A%D8%A7%D8%AA-%D9%88%D8%AD%D8%B0%D9%81%D9%87%D8%A7-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%A3%D8%AF%D8%A7%D8%A9-%D8%A8%D9%88%D8%AF%D9%85%D8%A7%D9%86-podman-r817/" rel="">حذف الحاويات</a> فعليك حذفها يدويًا.
</p>

<h3 id="-4">
	تشغيل أو إيقاف خدمات معينة
</h3>

<p>
	إن كررت استخدام المنافذ ووحدات التخزين ومتغيرات البيئة، فمن المحتمل أنك ستستخدم الأمر <code>podman-compose up</code> والأمر <code>podman-compose down</code> بشكل متكرر. لكن هذا سيؤدي إلى تشغيل كل الخدمات وإيقافها، على التوالي. أي إن أردت تشغيل خدمة معينة أو إيقافها، فعليك انتظار تشغيل جميع الخدمات المدرجة في ملف كومبوز وإيقافها، وهذا ليس أمرًا محبّذًا. ولحل هذه المشكلة، يمكنك استخدام الأمر <code>start</code> والأمر <code>stop</code> لتشغيل وإيقاف خدمة معينة. ويمكنك استخدام الأمر <code>restart</code> لإعادة التشغيل. إليك المثال التالي الذي يوضح تشغيل الخدمة <code>gitea-db</code>، وإيقافها ثم إعادة تشغيلها:
</p>

<pre class="ipsCode">$ podman-comopse start gitea-db

$ podman-compose stop gitea-db

$ podman-compose restart gitea-db
</pre>

<h3 id="-5">
	سحب صور الحاويات الضرورية دفعةً واحدة
</h3>

<p>
	لنفترض أن لديك عشر خدمات مختلفة في ملف كومبوز وأنك تريد تشغيل الحاويات معًا، إذًا بإمكانك استخدام أمر السحب <code>pull</code> كما يلي:
</p>

<pre class="ipsCode">podman-compose pull
</pre>

<p>
	سيؤدي تشغيل الأمر <code>pull</code> إلى سحب كل الصور المحددة في ملف كومبوز.
</p>

<h3 id="-6">
	تغيير اسم ملف كومبوز
</h3>

<p>
	قد ترغب بتغيير اسم ملف كومبوز (<code>docker-compose.yml</code>) إلى اسم آخر، لتنفيذ ذلك يمكنك استخدام أحد الخيارين التاليين:
</p>

<pre class="ipsCode">podman-compose -f COMPOSE_FILE_NAME
podman-compose --file COMPOSE_FILE_NAME
</pre>

<p>
	على النحو التالي:
</p>

<pre class="ipsCode">podman-compose --file my-compose-file.yml
</pre>

<p>
	إن تشغيل الأمر السابق يجعل أداة بودمان كومبوز تغير اسم الملف من <code>docker-compose.yml</code> إلى <code>my-compose-file.yml</code>.
</p>

<h2 id="-7">
	الخلاصة
</h2>

<p>
	تهانينا! لقد وصلت إلى نهاية <a href="https://academy.hsoub.com/tags/podman/" rel="">سلسلتنا التعليمية</a> عن أداة بودمان التي تُعدّ أداةً رائعةً لإدارة الحاويات، وعند استخدامها مع أداة بودمان كومبوز يصبح بإمكانك إنشاء حاويات متعددة وتخصيصها وفق الإعدادات التي تناسبك. بها! ننصحك بتجربتها وشاركنا استفساراتك في قسم الأسئلة والأجوبة في <a href="https://academy.hsoub.com/questions/" rel="">أكاديمية حسوب</a>.
</p>

<p>
	ترجمة -وبتصرّف- للمقال <a href="https://linuxhandbook.com/podman-compose/" rel="external nofollow">Beginner's Guide to Using Podman Compose</a> من موقع <a href="https://linuxhandbook.com/" rel="external nofollow">Linux Handbook</a>.
</p>

<h2 id="-8">
	اقرأ أيضًا
</h2>

<ul>
	<li>
		المقال السابق: <a href="https://academy.hsoub.com/devops/cloud-computing/%D8%A5%D8%AF%D8%A7%D8%B1%D8%A9-%D8%A7%D9%84%D8%AD%D8%A7%D9%88%D9%8A%D8%A7%D8%AA-%D9%85%D8%AD%D8%AF%D9%88%D8%AF%D8%A9-%D8%A7%D9%84%D8%B5%D9%84%D8%A7%D8%AD%D9%8A%D8%A9-rootless-containers-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-podman-r820/" rel="">إدارة الحاويات محدودة الصلاحية Rootless Containers باستخدام أداة بودمان Podman</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/cloud-computing/%D8%AA%D8%B4%D8%BA%D9%8A%D9%84-%D8%A7%D9%84%D8%AD%D8%A7%D9%88%D9%8A%D8%A7%D8%AA-%D8%AA%D9%84%D9%82%D8%A7%D8%A6%D9%8A%D9%8B%D8%A7-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%A3%D8%AF%D8%A7%D8%A9-%D8%A8%D9%88%D8%AF%D9%85%D8%A7%D9%86-podman-r818/" rel="">تشغيل الحاويات تلقائيًا باستخدام أداة بودمان Podman</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/cloud-computing/%D8%A7%D9%84%D9%81%D8%B1%D9%82-%D8%A8%D9%8A%D9%86-%D8%A3%D8%AF%D8%A7%D8%AA%D9%8A-%D8%AF%D9%88%D9%83%D8%B1-docker-%D9%88%D8%A8%D9%88%D8%AF%D9%85%D8%A7%D9%86-podman-r816/" rel="">الفرق بين أداتي دوكر Docker وبودمان Podman</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/cloud-computing/%D9%86%D8%B8%D8%A7%D9%85-%D9%83%D9%88%D8%A8%D9%8A%D8%B1%D9%86%D8%AA%D8%B3-kubernetes-%D9%88%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%B9%D9%85%D9%84%D9%87-r598/" rel="">نظام كوبيرنتس Kubernetes وكيفية عمله</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">821</guid><pubDate>Mon, 07 Oct 2024 15:00:00 +0000</pubDate></item><item><title>&#x625;&#x62F;&#x627;&#x631;&#x629; &#x627;&#x644;&#x62D;&#x627;&#x648;&#x64A;&#x627;&#x62A; &#x645;&#x62D;&#x62F;&#x648;&#x62F;&#x629; &#x627;&#x644;&#x635;&#x644;&#x627;&#x62D;&#x64A;&#x629; Rootless Containers &#x628;&#x627;&#x633;&#x62A;&#x62E;&#x62F;&#x627;&#x645; Podman</title><link>https://academy.hsoub.com/devops/cloud-computing/%D8%A5%D8%AF%D8%A7%D8%B1%D8%A9-%D8%A7%D9%84%D8%AD%D8%A7%D9%88%D9%8A%D8%A7%D8%AA-%D9%85%D8%AD%D8%AF%D9%88%D8%AF%D8%A9-%D8%A7%D9%84%D8%B5%D9%84%D8%A7%D8%AD%D9%8A%D8%A9-rootless-containers-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-podman-r820/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2024_09/----Rootless-Containers----Podman.png.967bcf67a88241895e4b65f79230ba71.png" /></p>
<p>
	ستتعلم في هذا المقال كيفية التعامل مع الحاويات محدودة الصلاحية Rootless Containers باستخدام أداة بودمان. إن كنت تستخدم الحاويات لنشر البرمجيات، أو تستخدم أداة بودمان، أو أنك ترغب في رفع مستوى الأمان عن طريق تشغيل الحاويات محدودة الصلاحية rootless containers، فهذا المقال مناسب لك.
</p>

<h2 id="podman">
	ما هي أداة بودمان Podman
</h2>

<p>
	إن <a href="https://podman.io/?ref=linuxhandbook.com" rel="external nofollow">أداة بودمان Podman</a> هي أحد منتجات شركة Red Hat طُرِحَت كبديل فعّال عن أداة دوكر Docker ويمكنها أداء 99% من المهام التي تؤديها أداة دوكر. بعض ميزات بودمان هي دعم الحاويات محدودة الصلاحية rootless containers، واستخدام نموذج fork/exec لتشغيل الحاويات، وأنه لا يعمل وفق مبدأ البرنامج الخفي أي إنه daemon-less، وثمة كثير من الميزات الأخرى. أما مزايا الحاويات محدودة الصلاحية فهي واضحة، فهي لا تحتاج لصلاحيات الجذر الذي يملك وصولًا كاملًا إلى جميع موارد وملفات النظام كي تعمل، لذلك فإن تشغيلها أكثر أمانًا.
</p>

<h2 id="rootlesscontainers">
	تشغيل حاويات بودمان محدودة الصلاحية Rootless Containers
</h2>

<p>
	إذا كنت متمرسًا في مجال تقنية المعلومات، فمن المحتمل أنك وقعت في أحد الخطأين التاليين:
</p>

<ul>
	<li>
		تشغيل الأمر <code>docker</code> باستخدام <code>Sudo</code>، وبالتالي زيادة امتيازاته.
	</li>
	<li>
		إضافة مستخدم محدود الصلاحيات non-root إلى مجموعة دوكر <code>docker group</code>. تلك أخطاء تُضِر بأمان النظام بصورة كبيرة؛ لأنك تسمح لبرنامج دوكر الخفي Docker daemon بالوصول إلى جهازك. وهذا يعرضك للخطر بطريقتين:
	</li>
	<li>
		يعمل برنامج دوكر الخفي <code>(dockerd)</code> كجذر، فإذا كانت ثمة ثغرة أمنية فيه، سيكون نظامك بكامله عرضةً للخطر لأن <code>dockerd</code> هي عملية تابعة للمستخدم الجذر.
	</li>
	<li>
		قد تحتوي الصورة التي تستخدمها على ثغرات أمنية. تخيّل ماذا سيحدث عند استخدام هذه الصورة بواسطة حاوية تعمل كعملية للمستخدم الجذر root process. يمكن لأحد المخترقين استخدام هذه الصورة للوصول إلى كافة موراد النظام.
	</li>
</ul>

<p>
	الحل بسيط، عليك الامتناع عن تشغيل البرامج بصلاحيات الجذر، حتى لو كنت تثق بها. تذكر أنه لا يوجد شيء آمن بنسبة 100%. وهنا تأتي ميزة بودمان في إدارة الحاويات دون الحاجة إلى الوصول إلى الجذر. فعند تشغيل حاوية باستخدام بودمان كمستخدم غير جذر، لن تحصل تلك الحاوية على امتيازات إضافية، ولن يطلب منك بودمان كلمة مرور sudo.
</p>

<p>
	إليك المزايا التي توفرها أداة بودمان عند إدارة الحاويات محدودة الصلاحية root-less containers:
</p>

<ul>
	<li>
		يمكنك تخصيص مجموعة من الحاويات المشتركة لكل مستخدم محلي. (على سبيل المثال، بإمكانك تشغيل Nextcloud وMariaDB لدى المستخدم <code>nextcloud_user</code> وتشغيل الحاويات Gitea وPostgreSQL لدى المستخدم <code>gitea_user</code>).
	</li>
	<li>
		حتى لو اختُرِقَت الحاوية، فلا يمكن التحكم بالنظام المضيف بكامله، لأن المستخدم المسؤول عن الحاوية ليس جذرًا. لكنه لن يعود صالحًا للاستخدام.
	</li>
</ul>

<h2 id="">
	قيود استخدام حاويات بودمان محدودة الصلاحية
</h2>

<p>
	عند استخدام أداتي بودمان ودوكر مع صلاحيات المستخدم الجذر أي بنمط عمل root-full، فأنت تمنحها امتيازات على مستوى المستخدم المسؤول أو المميز super-user. وهذا ليس أمرًا محمودًا، ولكنه يضمن أن جميع الوظائف تعمل على النحو المطلوب. ومن الناحية الأخرى، ثمة بعض القيود على تشغيل حاويات بودمان بدون امتيازات الجذر، إليك أهمها:
</p>

<ul>
	<li>
		لا يمكن تشارك صور الحاويات بين المستخدمين إذا سحب المستخدم <code>user0</code> صورة الحاوية <code>nginx:stable-alpine</code> فيجب على المستخدم <code>user1</code> سحبها بنفسه مرةً أخرى. لا توجد لحد الآن طريقة تسمح تشارك الصور بين المستخدمين، لكن يمكنك نسخ الصور من مستخدم لآخر باتباع هذا <a href="https://www.redhat.com/sysadmin/podman-transfer-container-images-without-registry?ref=linuxhandbook.com" rel="external nofollow">الدليل من شركة ريد هات Red Hat</a>.
	</li>
	<li>
		لا يمكن ربط المنافذ ports binding ذوات الأرقام الأدنى من 1024، لكن ثمة <a href="https://linuxhandbook.com/rootless-podman/#want-to-bind-ports-less-than-1024" rel="external nofollow">طريقة لحل هذه المشكلة</a>.
	</li>
	<li>
		لا يمكن للحاوية محدودة الصلاحية إرسال الطلب ping لأي من المضيفين hosts. لكن ثمة <a href="https://github.com/containers/podman/blob/main/troubleshooting.md?ref=linuxhandbook.com#solution-3" rel="external nofollow">طريقة لحل هذه المشكلة</a>.
	</li>
	<li>
		إذا عيّنت معرّفًا مميزًا UID لحاوية بودمان محدودة الصلاحية، فقد يفشل ذلك إن لم تسند المعرّف المميز UID إلى حاوية موجودة مسبقًا. إذًا، من الأفضل تشغيل بودمان من صدفة طرفية (shell) مستخدم موجود، والخيار الأفضل هو إنشاء خدمة systemd <a href="https://academy.hsoub.com/devops/cloud-computing/%D8%AA%D8%B4%D8%BA%D9%8A%D9%84-%D8%A7%D9%84%D8%AD%D8%A7%D9%88%D9%8A%D8%A7%D8%AA-%D8%AA%D9%84%D9%82%D8%A7%D8%A6%D9%8A%D9%8B%D8%A7-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%A3%D8%AF%D8%A7%D8%A9-%D8%A8%D9%88%D8%AF%D9%85%D8%A7%D9%86-podman-r818/" rel="">لتشغيلها تلقائيًا</a>.
	</li>
</ul>

<h2 id="rootlesscontainers-1">
	تشغيل حاويات محدودة الصلاحية Rootless Containers باستخدام بودمان
</h2>

<p>
	قبل أن تبدأ بتشغيل الحاويات محدودة الصلاحية، ثمة بعض المتطلبات التي عليك توفيرها.
</p>

<h3 id="slirp4netns">
	تثبيت حزمة slirp4netns
</h3>

<p>
	تُستخدم الحزمة <code>slirp4netns</code> لتوفير خيارات الشبكة لوضع المستخدم user-mode networking لفضاءات أسماء الشبكة. يعد هذا الأمر ضروريًا كي تتفاعل الحاوية محدودة الصلاحية مع أي شبكة وبدونها لا يمكن للحاويات محدودة الصلاحية الاتصال بالإنترنت أو الشبكات الداخلية، مما يحد من فائدتها بشكل كبير. يمكنك تثبيت حزمة <code>slirp4netns</code> على التوزيعات المعتمدة على نظامي ديبيان Debian وأوبنتو Ubuntu باستخدام مدير الحزم <code>apt</code>:
</p>

<pre class="ipsCode">sudo apt install slirp4netns
</pre>

<p>
	أما في التوزيعات المعتمدة على نظامي فيدورا Fedora وريد هات Red Hat فاستخدم مدير الحزم <code>dnf</code> لتثبيت الحزمة، على النحو التالي:
</p>

<pre class="ipsCode">sudo dnf install slirp4netns
</pre>

<p>
	بالنسبة لمستخدمي Arch Linux فعليك استخدام الأمر <code>pacman</code> على النحو التالي:
</p>

<pre class="ipsCode">sudo pacman -Sy slirp4netns
</pre>

<h3 id="subuidsubgid">
	ضبط subuid و subgid على النحو الصحيح
</h3>

<p>
	نظرًا لأن حاويات بودمان محدودة الصلاحية تُشَغّل بواسطة مستخدم موجود على النظام، فإن المستخدم يحتاج إلى إذن لتشغيل هذه الحاوية بمعرّف مميز UID مختلف عن معرف المستخدم. وهذا ينطبق أيضًا على معرّف المجموعة GID. يُمنح كل مستخدم نطاقًا من المعرفات التي يُسمح له باستخدامها، تذكر المعرفات الفريدة UID في الملف <code>‎‎/etc/subuid‎‎‎‎‎‎</code>، أما معرفات المجموعات GID فتذكر في الملف <code>‎‎‎‎‎‎‎/etc/subgid‎</code>. وصيغة الملف هي على النحو التالي:
</p>

<pre class="ipsCode">username:initial UID/GID allocated to user:range/size of allowed UIDs/GIDs
</pre>

<p>
	فلنفرض أن اسم المستخدم pratham يريد مئة معرّف مميز، والمستخدم krishna يريد ألفًا، إذًا ستكون صيغة الملف <code>‎/etc/subuid</code> على النحو التالي:
</p>

<pre class="ipsCode">pratham:100000:100
Krishna:100100:1000
</pre>

<p>
	يعني هذا أن المستخدم pratham يمكنه استخدام المعرّفات UID من المعرّف 100000 إلى 100100، والمستخدم krishna يمكنه استخدامها بدءً من المعرّف 100100 إلى 101100. يكون هذا عادةً مُعَدًا مسبقًا لكل مستخدم تنشئه، ويُحَدد للنطاق 65536 معرفًا قابلًا للاستخدام سواء كان معرفًا مميزًا UID أم معرّف مجموعة GID. ولكن، يجب أن تضبطه يدويًا في بعض الحالات. ولكن ليس عليك ضبط ذلك يدويًا لكل مستخدم، إذ يمكنك استخدام الأمر <code>usermod</code> لهذا الغرض. إليك صيغة الأمر المطلوبة:
</p>

<pre class="ipsCode">sudo usermod --add-subuids START-RANGE --add-subgids START-RANGE USERNAME 
</pre>

<p>
	والآن استبدل كل من السلسلة <code>START</code> و <code>RANGE</code> و <code>USERNAME</code> بما يناسبك. ** تنبيه:** احرص على ضبط سماحيات الملفين <code>‎/etc/subuid</code> و<code>‎/etc/subgid</code> على القيمة <strong>644</strong> وأن يكونا تابعين للمستخدم الجذر <code>root:root</code>.
</p>

<h3 id="1024">
	ربط المنافذ ذات الأرقام الأدنى من 1024
</h3>

<p>
	إن استخدمت وكيلًا عكسيًا reverse proxy لبروتوكول <abbr title="Secure Socket Layer | طبقة المنافذ الآمنة"><abbr title="Secure Socket Layer | طبقة المنافذ الآمنة">SSL</abbr></abbr>، فأنت تعلم أن المنفذين <strong>80</strong> و<strong>443</strong> يجب أن يكونا متاحين لمزود الشهادات مثل<a href="https://academy.hsoub.com/devops/servers/%D9%85%D9%82%D8%AF%D9%85%D8%A9-%D8%A5%D9%84%D9%89-%D8%AE%D8%AF%D9%85%D8%A9-let%E2%80%99s-encrypt-r352//" rel="">Let's Encrypt</a>. إذا حاولت ربط المنافذ الأقل من 1024 بحاوية بودمان محدودة الصلاحية، فستلاحظ أن ذلك غير متاح كميّزة جاهزة out of the box. إذ لا يُسمح للمستخدم غير الجذر بربط أي شيء على المنافذ الأدنى من المنفذ 1024. إذًا، كيف يمكن ربط المنافذ الأدنى بحاويات بودمان محدودة الصلاحية؟ عليك أولاً تحديد المنفذ الأدنى الذي تحتاجه. في حالتنا، تحتاج إلى المنفذين <strong>80</strong> و<strong>443</strong> لنشر بروتوكول <abbr title="Secure Socket Layer | طبقة المنافذ الآمنة"><abbr title="Secure Socket Layer | طبقة المنافذ الآمنة">SSL</abbr></abbr>، لذا فإن أقل منفذ تحتاجه هو المنفذ <strong>80</strong>. والآن، أضف السطر التالي إلى الملف <code>‎/etc/sysctl.conf</code>:
</p>

<pre class="ipsCode">net.ipv4.ip_unprivileged_port_start=YOUR_PORT_NUMBER
</pre>

<p>
	ما ستفعله هو تغيير قيمة <code>net.ipv4.ip_unprivileged_port_start</code> إلى قيمة أدنى منفذ تحتاجه، إذًا عليك استبدال <code>YOUR_PORT_NUMBER</code> بالقيمة <code>80</code> كي تربط المنفذ <code>80</code> بحاوية محدودة الصلاحية.
</p>

<h3 id="-1">
	أين توجد صور الحاويات
</h3>

<p>
	كما ذكرنا سابقًا فأحد قيود عمل أداة بودمان هي أنها لا تتيح مشاركة الصور بين المستخدمين. فيجب أن يسحب كل مستخدم الصورة، أو يجب نسخ الصورة من مستخدم لآخر. كلا الخيارين سيحجز ضعف أو أضعاف المساحة، حسب عدد نسخ الصور.حيث تُخَزّن صور حاويات المستخدم في المجلد الرئيسي، وبالتحديد داخل المجلد<code>‎ ~/local/share/containers/storage/</code>‎‎
</p>

<p>
	والآن، بعد أن تحققتَ من توفر المتطلبات السابقة، يمكنك تشغيل الأمر <code>podman run</code> من صدفة خارجية non-root user's shell وإنشاء حاوية. سنستخدم خادم Caddy في مثالنا لنشر بروتوكول <abbr title="Secure Socket Layer | طبقة المنافذ الآمنة"><abbr title="Secure Socket Layer | طبقة المنافذ الآمنة">SSL</abbr></abbr>. شغّل خادم Caddy في حاوية محدودة الصلاحية واربطه بمنفذ أدنى من المنفذ 1024 على النحو التالي:
</p>

<pre class="ipsCode">$ whoami
pratham

$ podman run -d --name=prathams-caddy -p 80:80 -p 443:443 caddy:alpine
e6ed67eb90e6d0f3475d78b287af941bc873f6d62db60d5c13b1106af80dc5ff

$ podman ps
CONTAINER ID  IMAGE                           COMMAND               CREATED        STATUS            PORTS                                     NAMES
e6ed67eb90e6  docker.io/library/caddy:alpine  caddy run --confi...  2 seconds ago  Up 2 seconds ago  0.0.0.0:80-&gt;80/tcp, 0.0.0.0:443-&gt;443/tcp  prathams-caddy

$ ps aux | grep caddy
pratham     3022  0.0  0.0  85672  2140 ?        Ssl  06:53   0:00 /usr/bin/conmon --api-version 1 -c e6ed67eb90e6d0f3475d78b287af941bc873f6d62db60d5c13b1106af80dc5ff [...]
pratham     3025  0.1  0.3 753060 32320 ?        Ssl  06:53   0:00 caddy run --config /etc/caddy/Caddyfile --adapter caddyfile
</pre>

<p>
	لاحظ أن المستخدم <code>pratham</code> ليس جذرًا وأنه لا حاجة لاستخدام الأمر <code>sudo</code> لزيادة صلاحيات المستخدم. إذ استطعت تشغيل حاوية خادم Caddy محدودة الصلاحية باستخدام أداة بودمان. يُظهِر خرج الأمر <code>ps</code> أن رمز العملية <abbr title="Process IDentifier | معرّف العملية أو البرنامج"><abbr title="Process IDentifier | معرّف العملية أو البرنامج">PID</abbr></abbr> ذو الرقم <code>3022</code>هو عملية تابعة للمستخدم <code>pratham</code> وهي حاوية خادم Caddy (لكننا لم نُظهِر الخرج كاملًا في مثالنا). أما العملية <code>3025</code> فهي تابعة child process للعملية <code>3022</code> وهما تابعتان للمستخدم نفسه.
</p>

<h2>
	الخلاصة
</h2>

<p>
	وضّحنا في هذا المقال كيفية إدارة الحاويات محدودة الصلاحية باستخدام أداة بودمان، وتحدثنا عن البرامج الضرورية لذلك، وتطرقنا إلى بعض المشكلات الشائعة التي قد تواجهها وكيفية حلها.
</p>

<p>
	إن واجهت مشكلةً لم نأتِ على ذكرها مع حاويات بودمان محدودة الصلاحية، فذلك لأن أداة بودمان لا تزال جديدةً بالنسبة للبرمجيات، لذا من المحتمل ظهور بعض المشكلات، في هذه الحالة، شاركنا استفسارك في قسم الأسئلة والأجوبة في <a href="https://academy.hsoub.com/questions/" rel="">أكاديمية حسوب</a>. كما يمكنك الاطلاع على <a href="https://podman.io/docs" rel="external nofollow">التوثيق الرسمي</a> من موقع بودمان.
</p>

<p>
	ترجمة -وبتصرّف- للمقال <a href="https://linuxhandbook.com/rootless-podman/" rel="external nofollow">Getting Started With Rootless Container Using Podman</a> من <a href="https://linuxhandbook.com/" rel="external nofollow">Linux Handbook</a>.
</p>

<p>
	اقرأ أيضًا
</p>

<ul>
	<li>
		المقال السابق: <a href="https://academy.hsoub.com/devops/cloud-computing/%D8%AA%D8%AD%D8%AF%D9%8A%D8%AB-%D8%AD%D8%A7%D9%88%D9%8A%D8%A7%D8%AA-%D8%A8%D9%88%D8%AF%D9%85%D8%A7%D9%86-podman-%D8%AA%D9%84%D9%82%D8%A7%D8%A6%D9%8A%D9%8B%D8%A7-r819/" rel="">تحديث حاويات بودمان Podman تلقائيًا</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/cloud-computing/%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%AD%D9%88%D8%B3%D8%A8%D8%A9-%D8%A7%D9%84%D8%B3%D8%AD%D8%A7%D8%A8%D9%8A%D9%91%D8%A9-%D8%A7%D9%84%D9%85%D8%AA%D8%B7%D9%84%D8%A8%D8%A7%D8%AA-%D8%A7%D9%84%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D9%91%D8%A9%D8%8C-%D9%88%D9%83%D9%8A%D9%81-%D8%AA%D8%B5%D8%A8%D8%AD-%D9%85%D9%87%D9%86%D8%AF%D8%B3-%D8%AD%D9%88%D8%B3%D8%A8%D8%A9-%D8%B3%D8%AD%D8%A7%D8%A8%D9%8A%D9%91%D8%A9-r457/" rel="">تعلم الحوسبة السحابيّة: المتطلبات الأساسيّة، وكيف تصبح مهندس حوسبة سحابيّة</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/cloud-computing/%D8%A7%D9%84%D9%81%D8%B1%D9%82-%D8%A8%D9%8A%D9%86-%D8%A3%D8%AF%D8%A7%D8%AA%D9%8A-%D8%AF%D9%88%D9%83%D8%B1-docker-%D9%88%D8%A8%D9%88%D8%AF%D9%85%D8%A7%D9%86-podman-r816/" rel="">الفرق بين أداتي دوكر Docker وبودمان Podman</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/cloud-computing/docker/%D9%85%D8%A7-%D8%A7%D9%84%D9%81%D8%B1%D9%82-%D8%A8%D9%8A%D9%86-%D8%AF%D9%88%D9%83%D8%B1-docker-%D9%88%D9%83%D9%88%D8%A8%D9%8A%D8%B1%D9%86%D9%8A%D8%AA%D9%8A%D8%B3-kubernetes%D8%9F-r612/" rel="">الفرق بين دوكر Docker وكوبيرنيتيس Kubernetes؟</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/cloud-computing/docker/%D9%85%D8%A7-%D8%B9%D9%84%D9%8A%D9%83-%D9%85%D8%B9%D8%B1%D9%81%D8%AA%D9%87-%D8%B9%D9%86-%D8%A7%D9%84%D9%81%D8%B1%D9%82-%D8%A8%D9%8A%D9%86-%D8%AF%D9%88%D9%83%D8%B1-%D9%88%D8%A7%D9%84%D8%A3%D8%AC%D9%87%D8%B2%D8%A9-%D8%A7%D9%84%D8%A7%D9%81%D8%AA%D8%B1%D8%A7%D8%B6%D9%8A%D8%A9-r456/" rel="">ما عليك معرفته عن الفرق بين دوكر والأجهزة الافتراضية</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/cloud-computing/docker/%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A7%D8%AA-%D8%AA%D9%86%D8%B3%D9%8A%D9%82-%D8%A7%D9%84%D8%AD%D8%A7%D9%88%D9%8A%D8%A7%D8%AA-r643/" rel="">أساسيات تنسيق الحاويات</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">820</guid><pubDate>Mon, 23 Sep 2024 15:00:00 +0000</pubDate></item><item><title>&#x62A;&#x62D;&#x62F;&#x64A;&#x62B; &#x62D;&#x627;&#x648;&#x64A;&#x627;&#x62A; &#x628;&#x648;&#x62F;&#x645;&#x627;&#x646; Podman &#x62A;&#x644;&#x642;&#x627;&#x626;&#x64A;&#x64B;&#x627;</title><link>https://academy.hsoub.com/devops/cloud-computing/%D8%AA%D8%AD%D8%AF%D9%8A%D8%AB-%D8%AD%D8%A7%D9%88%D9%8A%D8%A7%D8%AA-%D8%A8%D9%88%D8%AF%D9%85%D8%A7%D9%86-podman-%D8%AA%D9%84%D9%82%D8%A7%D8%A6%D9%8A%D9%8B%D8%A7-r819/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2024_09/----.png.5bc34a9d3b276e02a4d3e4df47969ba0.png" /></p>
<p>
	سنقدم لك في هذا المقال دليلًا مفصلًا حول كيفية ضبط التحديثات التلقائية للحاويات المُدارة بواسطة أداة بودمان Podman وتفعيلها. فتحديث البرامج أمر محبّذ، لا سيما عندما تحتوي التحديثات على ميزات جديدة أو خيارات لزيادة الأمان.
</p>

<p>
	لتسهيل العمل سنستخدم في هذا المقال صورة الخادم Caddy من مستودع <a href="https://hub.docker.com/_/caddy?ref=linuxhandbook.com" rel="external nofollow">Docker Hub</a>.
</p>

<h2 id="-1">
	تعيين مصدر جلب صور الحاويات
</h2>

<p>
	كي تستطيع استخدام صورة حاوية (container image) يجب أولًا سحب هذه الصورة من أحد المصادر باستخدام أداة إدارة الحاويات بودمان، يدعى هذا المصدر بسياسة التحديث التلقائي auto-update policy وهي تتضمن قواعد أو إعدادات تحدد زمان وكيفية تحديث الصور أو الحاويات بشكل تلقائي دون تدخل يدوي، مثلاً عند إصدار تحديث جديد للصورة، يتم تحميل التحديث وتطبيقه بشكل تلقائي دون تدخل المستخدم وذلك على النحو التالي:
</p>

<ul>
	<li>
		<p>
			<strong>سجل registry:</strong> عند إسناد سجل (موقع) ما إلى سياسة التحديث التلقائي auto-update policy فإن بودمان سيسحب الصورة من سجل خارجي remote registry مثل <a href="https://hub.docker.com/?ref=linuxhandbook.com" rel="external nofollow">Docker Hub</a> أو <a href="https://quay.io/?ref=linuxhandbook.com" rel="external nofollow">Quay.io</a>.
		</p>
	</li>
	<li>
		<p>
			<strong>مصدر محلي local:</strong> عند إسناد الخيار local إلى سياسة التحديث التلقائي، فإن أداة بودمان ستجلب الصورة من الصور المحلية. يُعدّ هذا الخيار هذا الخيار مفيدًا للمطورين الذين يرغبون في اختبار التعديلات المحلية قبل دفعها إلى سجل بعيد.
		</p>
	</li>
</ul>

<p>
	<strong>ملاحظة:</strong> نستخدم في أمثلة هذا المقال حاوية محدودة الصلاحية root-less container، وحاولنا قدر الإمكان ذكر الأوامر الخاصة بالحاويات كاملة الصلاحية root-full container. فإن استخدمت حاوية كاملة الصلاحية وواجهك خطأ يتعلق بصلاحيات المستخدم، فعليك استخدام الأمر <code><a href="https://academy.hsoub.com/devops/linux/%D9%85%D8%A7-%D9%82%D8%AF-%D9%84%D8%A7-%D8%AA%D8%B9%D8%B1%D9%81%D9%87-%D8%B9%D9%86-sudo-r455/" rel="">sudo</a></code>.
</p>

<h2 id="-2">
	تفعيل التحديثات التلقائية لحاويات Podman
</h2>

<p>
	يمكنك الآن تفعيل التحديثات التلقائية لحاويات بودمان بعد أن أصبحت تعلم ما هو مفهوم سياسة التحديث التلقائي، وذلك باستخدام الأمر التالي:
</p>

<pre class="ipsCode">io.containers.autoupdate=AUTO_UPDATE_POLICY
</pre>

<p>
	والآن استبدل السلسلة <code>AUTO_UPDATE_POLICY</code> بالخيار <code>registry</code> أو <code>local</code>.
</p>

<p>
	ولكن كيف ستتحدث الحاوية تلقائيًا وأداة بودمان لا تعمل كبرنامج خفي؟
</p>

<h2 id="systemd">
	ضبط خدمة systemd
</h2>

<p>
	عليك إدارة الحاويات التي تحتاج إلى التحديث التلقائي بواسطة <a href="https://academy.hsoub.com/devops/linux/%D8%A5%D8%AF%D8%A7%D8%B1%D8%A9-%D8%A7%D9%84%D8%AE%D8%AF%D9%85%D8%A7%D8%AA-%D8%B9%D9%84%D9%89-%D9%84%D9%8A%D9%86%D9%83%D8%B3-%D8%A8%D8%A3%D8%AF%D9%88%D8%A7%D8%AA-%D9%86%D8%B8%D8%A7%D9%85-%D8%A7%D9%84%D8%AA%D9%85%D9%87%D9%8A%D8%AF-systemd-r284/" rel="">نظام التمهيد systemd</a>، وذلك لأن أداة بودمان لا تعمل كبرنامج خفي. إن أردت تشغيل الحاويات تلقائيًا عند إقلاع النظام، فلا شك أنك تستخدم systemd.
</p>

<p>
	سنشرح في الخطوات التالية كيفية دمج حاويات بودمان سواء كانت حاويات كاملة أو محدودة الصلاحية، مع خدمة <code>systemd</code> وتشغيلها تلقائيًا عند الاقلاع.
</p>

<h3 id="-3">
	الخطوة التمهيدية، إنشاء الحاوية
</h3>

<p>
	عليك التأكد أولًا أن لديك حاوية بودمان، سواء كانت قيد العمل أو متوقفة. استخدم الأمر التالي للتحقق من الحاويات الموجودة عندك:
</p>

<pre class="ipsCode">podman container list
</pre>

<p>
	لتوضيح أمثلة هذا المقال، اسحب صورةً قديمةً من خادم Caddy (الإصدار 2.5.2-alpine) ثم أعد تسميتها بالاسم alpine، إذ ستساعد إعادة تسمية الصورة في توضيح عملية التحديث. ويمكنك التحقق من ذلك لأن معرف الصورتين هو نفسه. ثم أنشئ حاويةً من الصورة وسمّها <code>prathams-caddy</code>:
</p>

<pre class="ipsCode">$ podman images
REPOSITORY               TAG           IMAGE ID      CREATED      SIZE
docker.io/library/caddy  2.5.2-alpine  d83af79bf9e2  2 weeks ago  45.5 MB
docker.io/library/caddy  alpine        d83af79bf9e2  2 weeks ago  45.5 MB


$ podman container list
CONTAINER ID  IMAGE                   COMMAND               CREATED        STATUS            PORTS       NAMES
99d1838dd999  localhost/caddy:alpine  caddy run --confi...  5 seconds ago  Up 6 seconds ago              prathams-caddy
</pre>

<p>
	كما تلاحظ فإن لدينا حاويةً تدعى prathams-caddy تعمل على صورة Caddy (الإصدار الأقدم). عندما تنشئ الحاوية Prathams-caddy أسند سياسة التحديث التلقائي <code>io.containers.autoupdate</code> على خيار السجل <code>registry</code> كما تعلمنا في الخطوة السابقة. إذا كان لديك حاوية بدون هذا التعديل، فلست بحاجة إلى إعادة إنشاء حاوية جديدة. سنتحدث عن ذلك في الخطوة التالية.
</p>

<h3 id="systemd-1">
	الخطوة الأولى، إنشاء ملف خدمة systemd للحاوية
</h3>

<p>
	كي تتمكن من إدارة حاويات بودمان باستخدام نظام systemd، يجب عليك تحويله إلى خدمة، لتشغيل الحاويات عند إقلاع النظام وإيقافها عند إيقاف تشغيل النظام. إذًا، يجب تشغيل الحاوية كخدمة systemd. ولكن كي لا تضطر إلى كتابة ملف خدمة systemd لكل حاوية، أوجد مطورو أداة بودمان حلًا لذلك، وهو تشغيل أمر معين لكل حاوية.
</p>

<p>
	عليك تشغيل الأمر التالي للحاويات كاملة الصلاحية root-full container:
</p>

<pre class="ipsCode">sudo podman generate systemd -f --new --name CONTAINER_NAME
</pre>

<p>
	والأمر التالي للحاويات محدودة الصلاحية root-less container:
</p>

<pre class="ipsCode">podman generate systemd -f --new --name CONTAINER_NAME
</pre>

<p>
	ثم استبدل <code>CONTAINER_NAME</code> باسم حاويتك، وسيتولد بعدها ملف باسم الحاوية كما يلي:
</p>

<pre class="ipsCode">$ podman generate systemd -f --new --name prathams-caddy
/home/pratham/container-prathams-caddy.service
</pre>

<p>
	لاحظ من الخرج السابق إنشاء حاوية باسم <code>container-prathams-caddy.service</code> في الملف الحالي. سبق أن ضبطتَ ميزة التحديث التلقائي لهذه الحاوية. أما بالنسبة للحاويات التي لم تضبط فيها هذه الميزة، فليس عليك إعادة إنشاء الحاوية بل يكفي تعديل ملف خدمة <code>systemd</code> وإضافة السطر التالي إلى حقل <code>ExecStart</code> على النحو التالي:
</p>

<pre class="ipsCode">[...]
ExecStart=/usr/bin/podman run \
    [...]
    --label io.containers.autoupdate=registry
[...]
</pre>

<p>
	وهكذا يستدعي ملف خدمة systemd أمر تشغيل حاويات بودمان <code>podman run</code>. وكل ما عليك فعله هو إضافة <code>io.containers.autoupdate</code> إلى الأمر <code>podman run</code>.
</p>

<h3 id="systemd-2">
	الخطوة الثانية، نقل ملف خدمة systemd
</h3>

<p>
	قبل تفعيل خدمة systemd، يجب عليك نقل ملف الخدمة إلى أحد المجلدين التاليين:
</p>

<ul>
	<li>
		<code>/etc/systemd/system/</code> : إذا كانت الحاوية كاملة الصلاحية وتحتاج إلى امتيازات المستخدم المسؤول superuser.
	</li>
	<li>
		<code>~/.config/systemd/user/</code> : إذا كانت الحاوية محدودة الصلاحية، ضعها في مجلد المستخدم الذي سيشغلها. إن الحاوية Prathams-caddy في مثالنا هي حاوية محدودة الصلاحية، لذا عليك نقلها إلى مجلد المستخدم الخاص بك:
	</li>
</ul>

<pre class="ipsCode">$ mv -v container-prathams-caddy.service ~/.config/systemd/user/
renamed 'container-prathams-caddy.service' -&gt; '/home/pratham/.config/systemd/user/container-prathams-caddy.service'
</pre>

<h3 id="systemd-3">
	الخطوة الثالثة، تفعيل خدمة systemd
</h3>

<p>
	أصبح بإمكانك الآن تفعيل خدمة systemd بعد أن نقلت ملف الخدمة إلى المجلد المناسب. لكن، يجب أولاً إعلام نظام systemd بالخدمة التي أنشأتها قبل إعادة تشغيل حاسوبك. وذلك بإعادة تحميل systemd باستخدام الأمر التالي إذا كانت الخدمة خاصةً بحاوية كاملة الصلاحية:
</p>

<pre class="ipsCode">sudo systemctl daemon-reload
</pre>

<p>
	والأمر التالي للحاويات محدودة الصلاحية:
</p>

<pre class="ipsCode">systemctl --user daemon-reload
</pre>

<p>
	أصبح بإمكانك الآن استخدام الأمر <code>systemctl enable</code> لتفعيل الخدمة:
</p>

<pre class="ipsCode"># للحاويات كاملة الصلاحية
sudo systemctl enable SERVICE_NAME.service


# للحاويات محدودة الصلاحية
systemctl --user enable SERVICE_NAME.service
</pre>

<p>
	تحقق من حالة الخدمة، ستلاحظ أنها غير نشطة inactive (dead) وذلك لأن الخدمة تعمل عند إعادة إقلاع الحاسوب أو النظام، ولم ننفذ ذلك بعد.
</p>

<pre class="ipsCode">$ systemctl --user enable container-prathams-caddy.service
Created symlink /home/pratham/.config/systemd/user/default.target.wants/container-prathams-caddy.service → /home/pratham/.config/systemd/user/container-prathams-caddy.service.


$ systemctl --user status container-prathams-caddy.service
○ container-prathams-caddy.service - Podman container-prathams-caddy.service
     Loaded: loaded (/home/pratham/.config/systemd/user/container-prathams-caddy.service; enabled; vendor preset: enabled)
     Active: inactive (dead)
       Docs: man:podman-generate-systemd(1)
</pre>

<p>
	والآن أوقف عمل الحاوية ثم استخدم الأمر التالي لحذفها <code>podman container rm</code> وأعد إقلاع جهازك بعدها.
</p>

<pre class="ipsCode">$ podman stop prathams-caddy
prathams-caddy


$ podman container rm prathams-caddy
99d1838dd9990b2f79b4f2c83bc9bc16dfbaf3fdeeb6c6418ddd6e641535ce21
</pre>

<h3 id="-4">
	الخطوة الرابعة، تفعيل بقاء المستخدم نشطًا (اختيارية)
</h3>

<p>
	إذا كانت حاويتك محدودة الصلاحية فمن الأفضل أن يبقى المستخدم المسؤول عنها نشطًا، وذلك باستخدام الأمر التالي:
</p>

<pre class="ipsCode">sudo loginctl enable-linger
</pre>

<h3 id="-5">
	الخطوة الخامسة، تفعيل خدمة التحديث التلقائي
</h3>

<p>
	كل ما عليك فعله الآن هو تفعيل خدمة التحديث التلقائي في بودمان باستخدام الأمر التالي:
</p>

<pre class="ipsCode">sudo systemctl enable podman-auto-update.service
</pre>

<p>
	بعد تفعيل خدمة التحديث التلقائي <code>podman-auto-update</code> في بودمان، سيتحقق systemd من وجود صورة بحاجة إلى تحديث. إذا كان هناك تحديثات، تُحدّث الصور التي جلبت أولاً، ثم يُعاد تشغيل الحاوية، مع الاحتفاظ بالصورة القديمة في حالة الحاجة إلى التراجع عن التحديث لعدة أسباب.
</p>

<p>
	<strong>ملاحظة:</strong> على الرغم من أن خدمة التحديث التلقائي في بودمان podman-auto-update.service تُفعّل على مستوى النظام، إلا أن أداة بودمان ليست أساسية في عديد من التوزيعات غير التابعة لتوزيعة فيدورا Fedora. لذلك، ربما تحتاج إلى تشغيل الأمر التالي لتفعيل الخدمة عند المستخدمين محدودي الصلاحية:
</p>

<pre class="ipsCode"> systemctl --user Enable --now podman-auto-update.service
</pre>

<h2 id="-6">
	التحديث اليدوي
</h2>

<p>
	إن لم تكن من محبي التحديثات التلقائية، فيمكنك تحديث الحاويات يدويًا باستخدام أمر واحد فقط، بشرط أن تكون مدارةً بواسطة systemd.
</p>

<p>
	هذا الأمر هو <code>podman auto-update</code>. وإن أردت التحقق من وجود تحديثات جديدة فقط، فأضف خيار <code>dry-run--</code> حتى لا تُحَدّث أي حاوية.
</p>

<p>
	والآن لنتحقق من إمكانية تحديث صورة الحاوية "2.5.2-alpine" إلى الإصدار "2.6.1-alpine" باستخدام الأمر <code>podman auto-update</code>:
</p>

<pre class="ipsCode">$ podman container list
CONTAINER ID  IMAGE                   COMMAND               CREATED        STATUS            PORTS       NAMES
a712a3c8846b  docker.io/library/caddy:alpine  caddy run --confi...  2 seconds ago  Up 2 seconds ago              prathams-caddy

$ podman auto-update --dry-run
UNIT                                                     CONTAINER                                 IMAGE                          POLICY      UPDATED
container-prathams-caddy.service  a712a3c8846b (prathams-caddy)  caddy:alpine  registry    pending
</pre>

<p>
	لاحظ أن حالة العمود <code>updated</code> في خرج أمر التحديث التلقائي هي <code>pending</code> أو معلقة وهذا يعني أنه ثم تحديث متوفر. كي تحدّث الحاوية، أزل الخيار <code>dry-run--</code> من الأمر السابق.
</p>

<h2 id="-7">
	الخلاصة
</h2>

<p>
	قد تبدو عملية تفعيل التحديثات التلقائية لحاويات بودمان معقدةً بعض الشيء، ولكنها ستؤتي ثمارها على المدى الطويل. تُحدّث جميع الحاويات المُدارة عادة بصورة تلقائية عند منتصف الليل في حال وجود التحديثات. وإن حدثت اي مشكلة في الحاوية فإن systemd سيعيدها إلى صورة قديمة، بحيث تستمر الحاوية في العمل.
</p>

<p>
	ترجمة وبتصرّف للمقال <a href="https://linuxhandbook.com/update-podman-containers/" rel="external nofollow">Automatically Updating Podman Containers</a> من <a href="https://linuxhandbook.com/" rel="external nofollow">Linux Handbook</a>.
</p>

<h2>
	اقرأ أيضًا
</h2>

<ul>
	<li>
		المقال السابق: <a href="https://academy.hsoub.com/devops/cloud-computing/%D8%AA%D8%B4%D8%BA%D9%8A%D9%84-%D8%A7%D9%84%D8%AD%D8%A7%D9%88%D9%8A%D8%A7%D8%AA-%D8%AA%D9%84%D9%82%D8%A7%D8%A6%D9%8A%D9%8B%D8%A7-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%A3%D8%AF%D8%A7%D8%A9-%D8%A8%D9%88%D8%AF%D9%85%D8%A7%D9%86-podman-r818/" rel="">تشغيل الحاويات تلقائيًا باستخدام أداة بودمان Podman</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/cloud-computing/docker/%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A7%D8%AA-%D8%AA%D9%86%D8%B3%D9%8A%D9%82-%D8%A7%D9%84%D8%AD%D8%A7%D9%88%D9%8A%D8%A7%D8%AA-r643/" rel="">أساسيات تنسيق الحاويات</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/cloud-computing/docker/%D9%85%D8%A7-%D8%A7%D9%84%D9%81%D8%B1%D9%82-%D8%A8%D9%8A%D9%86-%D8%AF%D9%88%D9%83%D8%B1-docker-%D9%88%D9%83%D9%88%D8%A8%D9%8A%D8%B1%D9%86%D9%8A%D8%AA%D9%8A%D8%B3-kubernetes%D8%9F-r612/" rel="">ما الفرق بين دوكر Docker وكوبيرنيتيس Kubernetes؟</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/cloud-computing/docker/%D9%85%D8%A7-%D8%B9%D9%84%D9%8A%D9%83-%D9%85%D8%B9%D8%B1%D9%81%D8%AA%D9%87-%D8%B9%D9%86-%D8%A7%D9%84%D9%81%D8%B1%D9%82-%D8%A8%D9%8A%D9%86-%D8%AF%D9%88%D9%83%D8%B1-%D9%88%D8%A7%D9%84%D8%A3%D8%AC%D9%87%D8%B2%D8%A9-%D8%A7%D9%84%D8%A7%D9%81%D8%AA%D8%B1%D8%A7%D8%B6%D9%8A%D8%A9-r456/" rel="">ما عليك معرفته عن الفرق بين دوكر والأجهزة الافتراضية</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">819</guid><pubDate>Fri, 13 Sep 2024 15:01:01 +0000</pubDate></item><item><title>&#x62A;&#x634;&#x63A;&#x64A;&#x644; &#x627;&#x644;&#x62D;&#x627;&#x648;&#x64A;&#x627;&#x62A; &#x62A;&#x644;&#x642;&#x627;&#x626;&#x64A;&#x64B;&#x627; &#x628;&#x627;&#x633;&#x62A;&#x62E;&#x62F;&#x627;&#x645; &#x623;&#x62F;&#x627;&#x629; &#x628;&#x648;&#x62F;&#x645;&#x627;&#x646; Podman</title><link>https://academy.hsoub.com/devops/cloud-computing/%D8%AA%D8%B4%D8%BA%D9%8A%D9%84-%D8%A7%D9%84%D8%AD%D8%A7%D9%88%D9%8A%D8%A7%D8%AA-%D8%AA%D9%84%D9%82%D8%A7%D8%A6%D9%8A%D9%8B%D8%A7-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%A3%D8%AF%D8%A7%D8%A9-%D8%A8%D9%88%D8%AF%D9%85%D8%A7%D9%86-podman-r818/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2024_09/------Podman.png.c9ba739f8ca0e542fb0abbc36f966c8c.png" /></p>
<p>
	لا شك أن أداة بودمان ممتازة لإدارة الحاويات بما تقدمه من ميزات متعددة، لكنها لا توفر خاصية التشغيل التلقائي للحاويات عند إقلاع النظام، سنتعلم في هذا المقال كيف نجد حلًا لهذه المشكلة.
</p>

<p>
	على الرغم من أن أداة بودمان لا تعمل كبرنامج خفي daemon، وتسمح للمستخدم محدود الصلاحيات unprivileged user بتشغيل الحاويات دون الحاجة إلى الوصول إلى الجذر، مما يزيد من أمان النظام. لكنها ليست أداةً مثاليةً بالكامل فهي لا تُتيح إعادة تشغيل الحاويات تلقائيًا بعد إقلاع الخادم.
</p>

<h2 id="">
	سياسة إعادة تشغيل الحاويات
</h2>

<p>
	عند الاطلاع على صفحة التعليمات <a href="https://linuxhandbook.com/man-pages/" rel="external nofollow">man</a> الخاصة بالأمر <code>podman-run</code> ستجد أن خيار إعادة التشغيل <code>restart--</code> لا يعيد تشغيل الحاويات عندما يقلع النظام. وسبب هذا يرجع إلى أن بنية بودمان لا تعتمد مبدأ البرنامج الخفي، أي إن بودمان لا يعمل تلقائيًا عند إقلاع النظام، وبالتالي فإن الحاويات لا تعمل عند الإقلاع أيضًا. على عكس<a href="https://academy.hsoub.com/devops/cloud-computing/docker/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%AF%D9%88%D9%83%D8%B1-docker-r607/" rel=""> أداة دوكر</a> التي تعتمد مبدأ البرنامج الخفي الذي يعمل عند إقلاع النظام ويُشَغّل الحاويات المحددة.
</p>

<h2 id="-1">
	حل مشكلة عدم التشغيل التلقائي للحاويات
</h2>

<p>
	أيًّا كانت <a href="https://academy.hsoub.com/devops/linux/%D9%85%D8%A7-%D9%87%D9%88-%D9%86%D8%B8%D8%A7%D9%85-%D9%84%D9%8A%D9%86%D9%83%D8%B3-%D9%88%D9%84%D9%85%D8%A7%D8%B0%D8%A7-%D8%AA%D9%88%D8%AC%D8%AF-100-%D8%AA%D9%88%D8%B2%D9%8A%D8%B9%D8%A9-%D9%85%D9%86%D9%87%D8%9F-r698/" rel="">توزيعة نظام التشغيل</a> التي تعمل عليها فلا بد أنها تستخدم <a href="https://academy.hsoub.com/devops/linux/%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A7%D8%AA-systemd-%D8%A7%D9%84%D8%B9%D9%85%D9%84-%D9%85%D8%B9-%D8%A7%D9%84%D8%AE%D8%AF%D9%85%D8%A7%D8%AA%D8%8C-%D8%A7%D9%84%D9%88%D8%AD%D8%AF%D8%A7%D8%AA-units%D8%8C-%D9%88%D8%A7%D9%84%D9%8A%D9%88%D9%85%D9%8A%D8%A7%D8%AA-journal-r130/" rel="">systemd</a> كنظام تمهيد init، وهذا ما سنحاول الاستفادة منه في إيجاد حل للمشكلة.
</p>

<h3 id="-2">
	الخطوة الأولى: إعداد الحاوية وتشغيلها
</h3>

<p>
	ثمة عدة طرق ممكنة لتشغيل <a href="https://academy.hsoub.com/devops/cloud-computing/docker/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%A7%D9%84%D8%AD%D8%A7%D9%88%D9%8A%D8%A7%D8%AA-r641/" rel="">الحاوية</a>. إن كان لديك حاوية بسيطة فبإمكانك استخدام الأمر <code>podman run</code>. أو يمكنك استخدام ملف دوكر إن أردت حاويةً بإعدادات معقدة واحتجت لمزيد من التحكم بهذه الإعدادات. لتوضيح ذلك، سننشئ حاويةً من صورة الحاوية <code>mariadb</code> وسنسميها <code>chitragupta-db</code>.
</p>

<pre class="ipsCode">$ podman ps
CONTAINER ID  IMAGE                             COMMAND               CREATED         STATUS             PORTS       NAMES
422eed872347  docker.io/library/mariadb:latest  --transaction-iso...  58 seconds ago  Up 58 seconds ago              chitragupta-db
</pre>

<p>
	يمكنك إيقاف الحاوية الجديدة لاحقًا.
</p>

<h3 id="systemd">
	الخطوة الثانية: إنشاء خدمة systemd
</h3>

<p>
	كما ذكرنا سابقًا، فإن بودمان ليس برنامجًا خفيًا أي إنه daemon-less لإدارة الحاويات. إذًا، فإن تشغيل حاويات بودمان يحتاج إلى تشغيل يدوي أو خارجي. سننفذ ذلك من خلال إنشاء خدمة systemd. حيث إن خدمة systemd هي نظام تمهيد init يدير الخدمات والبرامج الخفية في أنظمة تشغيل لينكس.
</p>

<h4 id="systemd-1">
	إنشاء ملف وحدة systemd
</h4>

<p>
	ليس عليك إنشاء ملف وحدة systemd يدويًا، إذ يمكن تنفيذ ذلك باستخدام الأمر <code>podman generator systemd</code> على النحو التالي:
</p>

<pre class="ipsCode">podman generate systemd --new --name CONTAINER_NAME
</pre>

<p>
	لإنشاء ملف وحدة systemd للحاوية استخدم الأمر <code>podman generate systemd</code> متبوعًا باسم الحاوية، اسم الحاوية في مثالنا هو chitragupta-db:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="157331" href="https://academy.hsoub.com/uploads/monthly_2024_09/podman-generate-systemd.png.d7c2e40b14b8d915904ea9de682aa2cc.png" rel=""><img alt="podman generate systemd" class="ipsImage ipsImage_thumbnailed" data-fileid="157331" data-unique="sgc8ay28h" src="https://academy.hsoub.com/uploads/monthly_2024_09/podman-generate-systemd.thumb.png.ef4cf4e7a6c45bec6b17a55f29a69edd.png"> </a>
</p>

<p>
	كما تلاحظ فإن الأمر السابق نفّذ العمل المطلوب، ولكننا لم ننته من العمل بعد.
</p>

<p>
	إن خرج الأمر <code>podman generate systemd</code> هو ما يجب أن يكون موجودًا في ملف وحدة systemd، لكن ثمة خيار مفيد يمكنك الاستعانة به بدلًا من نسخ الخرج ولصقه، وهو الخيار <code>files --</code> أو اختصارًا <code>f-</code>. إذ سيؤدي استخدام هذا الخيار أولًا إلى ملء الملف بالمحتوى المطلوب بدلاً من طباعته على الطرفية، وثانيًا، إنشاء ملف باسم <code>Container-CONTAINER_NAME.service</code> في مجلد العمل الحالي.
</p>

<pre class="ipsCode">$ podman generate systemd --new --name chitragupta-db -f
/home/pratham/container-chitragupta-db.service

$ ls *.service
Container-chitragupta-db.service
</pre>

<p>
	لاحظ أن اسم الحاوية في مثالنا هو <code>chitragupta-db</code>، وأنه أصبح لدينا ملف باسم <code>container-chitragupta-db.service</code> في المجلد الحالي. بما أن الأمر <code>podman generate systemd</code> سوف ينشئ ملف وحدة <code>systemd</code> فإن بإمكانك استخدام الخيارات التالية <code>=after=</code>, <code>--requires=</code>, <code>--wants--</code> لتحديد الاعتماديات للحاويات.
</p>

<h4 id="systemd-2">
	نقل ملف خدمة systemd إلى موقع محدد
</h4>

<p>
	كما لاحظت فإن الأمر السابق سينشئ ملف وحدة systemd جديد في مجلد العمل الحالي، لكن ذلك ليس الخيار الأنسب. إليك المسار المناسب للملف بالنسبة للمستخدم المسؤول superuser: <code>/etc/systemd/system/</code> أما بالنسبة للمستخدم محدود الصلاحيات non-root user فهو: <code>~/.config/systemd/user/</code> والآن عليك نقل الملف إلى المجلد المناسب. بما أن الحاوية في مثالنا هي حاوية محدودة الصلاحية، فعليك نقلها إلى المجلد <code>config/systemd/user/.~</code>.
</p>

<pre class="ipsCode">$ mv -v container-chitragupta-db.service ~/.config/systemd/user/
renamed 'container-chitragupta-db.service' -&gt; '/home/pratham/.config/systemd/user/container-chitragupta-db.service'
</pre>

<p>
	وهكذا بعد أن أنشأت ملف وحدة systemd بالاستعانة بأوامر الطرفية ونقلته إلى المجلد الصحيح، ما تبقى عليك الآن هو تفعيله.
</p>

<h3 id="systemd-3">
	الخطوة الثالثة: تفعيل حاوية خدمة systemd
</h3>

<p>
	عليك الآن أن تعيد إقلاع <code>systemd</code> كي تتفعل الخدمة التي أنشأتها في الخطوة السابقة. استخدم الأمر التالي لإعادة تشغيل خدمة <code>systemd</code> للمستخدم الجذر:
</p>

<pre class="ipsCode">sudo systemctl daemon-reload
</pre>

<p>
	أما بالنسبة للمستخدم محدود الصلاحيات فعليك إزالة الأمر <code>sudo</code> وإضافة الخيار <code>user--</code>، كي يصبح الأمر على الشكل التالي:
</p>

<pre class="ipsCode">systemctl --user daemon-reload
</pre>

<p>
	وهكذا سيُعاد تشغيل خدمة <code>systemd</code> دون إعادة إقلاع النظام، وسيُحدّث وتظهر الخدمة الجديدة <code>container-chitragupta-db.service</code>.
</p>

<p>
	والآن أصبح بإمكانك تفعيل الخدمة الجديدة. استخدم الأمر التالي لتفعيل الخدمة للمستخدم الجذر:
</p>

<pre class="ipsCode">sudo systemctl enable SERVICE_NAME.service
</pre>

<p>
	أما بالنسبة للمستخدم محدود الصلاحيات فعليك إزالة الأمر <code>sudo</code> وإضافة الخيار <code>user--</code>، كي يصبح الأمر على الشكل التالي:
</p>

<pre class="ipsCode">systemctl --user enable SERVICE_NAME.service
</pre>

<p>
	ستحصل على الخرج التالي عند تفعيل الحاوية محدودة الصلاحية root-less container:
</p>

<pre class="ipsCode">$ systemctl --user enable container-chitragupta-db.service
Created symlink /home/pratham/.config/systemd/user/default.target.wants/container-chitragupta-db.service → /home/pratham/.config/systemd/user/container-chitragupta-db.service.
</pre>

<p>
	يمكنك التحقق من حالة الخدمة بعد تفعيلها بإضافة الأمر <code>status</code> على الأمر السابق للمستخدم الجذر والمستخدم محدود الصلاحية وفقًا لما يلي:
</p>

<pre class="ipsCode"># للمستخدم الجذر
sudo systemctl status SERVICE_NAME.service


# للمستخدم محدود الصلاحية
systemctl --user status SERVICE_NAME.service
</pre>

<p>
	إليك حالة الخدمة <code>container-chitragupta-db</code>:
</p>

<pre class="ipsCode">$ systemctl --user status container-chitragupta-db.service
○ container-chitragupta-db.service - Podman container-chitragupta-db.service
     Loaded: loaded (/home/pratham/.config/systemd/user/container-chitragupta-db.service; enabled; vendor preset: disabled)
     Active: inactive (dead)
       Docs: man:podman-generate-systemd(1)
</pre>

<p>
	لا تقلق لأن حالة الخدمة تظهر غير نشطة inactive (dead)، إذ فعّلنا الخدمة الآن ويجب أن تعمل الخدمة عند إقلاع النظام، وليس الآن، وهذا هو المطلوب. إذا لم توقف الحاوية في الخطوة الأولى، فهذا هو الوقت المناسب لإيقافها عن طريق استخدام الأمر <code>podman stop</code> ثم استخدام<br>
	الأمر  <code>podman container rm</code> لحذفها، وإعادة إقلاع النظام بعدها لتشغيل خدمة الحاوية.
</p>

<h3 id="-3">
	الخطوة الرابعة: تفعيل خدمة إعادة التشغيل
</h3>

<p>
	قد تحتاج في بعض التوزيعات إلى تفعيل خدمة إعادة التشغيل في بودمان أيضًا. ينطبق هذا على التوزيعات غير المعتمدة على نظام فيدورا، وخاصةً توزيعة NixOS.
</p>

<p>
	لتفعيل خدمة إعادة التشغيل عليك استخدام الأمر التالي:
</p>

<pre class="ipsCode">systemctl --user enable podman-restart.service
</pre>

<p>
	يحرص الأمر <code>podman-restart</code> على إعادة تشغيل جميع الحاويات التي ضُبطت ليُعاد تشغيل دائمًا أي عند ضبط الأمر <code>restart-policy</code> على الخيار <code>always</code>.
</p>

<p>
	الخطوة الخامسة، تفعيل بقاء المستخدم محدود الصلاحية نشطًا (خطوة اختيارية)
</p>

<p>
	بما أنك فعّلت هذه الخدمة بواسطة مستخدم عادي محدود الصلاحية وليس المستخدم الجذر، هذا يعني أن المستخدم يحتاج إلى تسجيل الدخول عند التشغيل ويجب أن يظل نشطًا إن خرج من جلسة واجهة المستخدم الرسومية GUI أو من الطرفية. ويمكن تحقيق ذلك باستخدام الأمر <code>loginctl</code> من طرفية المستخدم نفسه، على النحو التالي:
</p>

<pre class="ipsCode">sudo loginctl enable-linger
</pre>

<p>
	يضمن هذا الأمر تفعيل جلسة المستخدم عند الإقلاع وبقاءها نشطةً حتى بعد تسجيل الخروج من واجهة المستخدم الرسومية أو الطرفية.
</p>

<p>
	وبهذا تكون قد فعّلتَ إعادة تشغيل حاويات بودمان عند الإقلاع. حيث ستؤدي إعادة تشغيل النظام إلى التشغيل التلقائي للحاويات التي أنشأت لها ملف وحدة systemd.
</p>

<h2 id="systemd-4">
	تعديل خدمة systemd
</h2>

<p>
	نعلم جميعًا أن الإعدادات الافتراضية تفيد المبتدئين دائمًا، إذ تساعد على تخفيف شعور الارتباك لديهم. تُعد الإعدادات الإفتراضية لملف systemd الذي أنشأته مثاليةً لمعظم الأشخاص، لكن إن لم تكن مبتدئًا فبإمكانك إضافة مزيد من التعديلات من خلال تعديل ملف systemd أو إنشاء خدمة مخصصة جديدة من الصفر.
</p>

<h2 id="-4">
	الخلاصة
</h2>

<p>
	تعلمنا في هذا المقال كيفية إنشاء ملفات وحدة systemd للتشغيل التلقائي لحاويات بودمان عند إقلاع النظام. حيث أن استخدام خدمة systemd سيساعدك في مراقبة الحاويات التي تستخدم واجهة systemd.
</p>

<p>
	ترجمة وبتصرّف للمقال <a href="https://linuxhandbook.com/autostart-podman-containers/" rel="external nofollow">Autostarting Podman Containers</a> من موقع <a href="https://linuxhandbook.com/" rel="external nofollow">Linux Handbook</a>.
</p>

<h2>
	اقرأ أيضًا
</h2>

<ul>
	<li>
		المقال السابق: <a href="https://academy.hsoub.com/devops/cloud-computing/%D8%A5%D9%86%D8%B4%D8%A7%D8%A1-%D8%A7%D9%84%D8%AD%D8%A7%D9%88%D9%8A%D8%A7%D8%AA-%D9%88%D8%AD%D8%B0%D9%81%D9%87%D8%A7-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%A3%D8%AF%D8%A7%D8%A9-%D8%A8%D9%88%D8%AF%D9%85%D8%A7%D9%86-podman-r817/" rel="">إنشاء الحاويات وحذفها باستخدام أداة بودمان Podman</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/cloud-computing/%D9%86%D8%B8%D8%A7%D9%85-%D9%83%D9%88%D8%A8%D9%8A%D8%B1%D9%86%D8%AA%D8%B3-kubernetes-%D9%88%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%B9%D9%85%D9%84%D9%87-r598/" rel="">نظام كوبيرنتس Kubernetes وكيفية عمله</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/linux/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%AA%D8%A3%D9%85%D9%8A%D9%86-%D8%A7%D9%84%D8%AD%D8%A7%D9%88%D9%8A%D8%A7%D8%AA-%D8%B9%D9%86-%D8%B7%D8%B1%D9%8A%D9%82-%D8%B3%D9%8A-%D9%84%D9%8A%D9%86%D9%83%D8%B3-selinux-r595/" rel="">كيفية تأمين الحاويات عن طريق سي لينكس SELinux</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/cloud-computing/%D8%A7%D9%84%D9%81%D8%B1%D9%82-%D8%A8%D9%8A%D9%86-%D8%A3%D8%AF%D8%A7%D8%AA%D9%8A-%D8%AF%D9%88%D9%83%D8%B1-docker-%D9%88%D8%A8%D9%88%D8%AF%D9%85%D8%A7%D9%86-podman-r816/" rel="">الفرق بين أداتي دوكر Docker وبودمان Podman</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">818</guid><pubDate>Sat, 07 Sep 2024 15:04:02 +0000</pubDate></item><item><title>&#x625;&#x646;&#x634;&#x627;&#x621; &#x627;&#x644;&#x62D;&#x627;&#x648;&#x64A;&#x627;&#x62A; &#x648;&#x62D;&#x630;&#x641;&#x647;&#x627; &#x628;&#x627;&#x633;&#x62A;&#x62E;&#x62F;&#x627;&#x645; &#x623;&#x62F;&#x627;&#x629; &#x628;&#x648;&#x62F;&#x645;&#x627;&#x646; Podman</title><link>https://academy.hsoub.com/devops/cloud-computing/%D8%A5%D9%86%D8%B4%D8%A7%D8%A1-%D8%A7%D9%84%D8%AD%D8%A7%D9%88%D9%8A%D8%A7%D8%AA-%D9%88%D8%AD%D8%B0%D9%81%D9%87%D8%A7-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%A3%D8%AF%D8%A7%D8%A9-%D8%A8%D9%88%D8%AF%D9%85%D8%A7%D9%86-podman-r817/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2024_08/------Podman.png.44371b538e423193c0a3a780eaadf1da.png" /></p>
<p>
	هل أنت حديث العهد باستخدام أداة بودمان؟ إن كان جوابك نعم، فلا تقلق، سنتعلم في هذا المقال كيفية إنشاء الحاويات وكيفية عرضها وإيقافها وحذفها باستخدام بودمان.
</p>

<p>
	هذا المقال جزء من <a href="https://academy.hsoub.com/tags/podman/" rel="">سلسلة مقالات بودمان Podman</a> وهي تهدف لتعريفك على هذه الأداة كي تستطيع عند نهاية هذه المقالات، التعرف على الفرق بين دوكر وبودمان، وبدء استخدام بودمان بكفاءة عند العمل مع الحاويات.
</p>

<h2 id="podman-1">
	ما ستتعلمه في سلسلة تعرف على أداة بودمان Podman
</h2>

<p>
	سنتعلم في هذه سلسلة ما يلي:
</p>

<ul>
	<li>
		<a href="https://academy.hsoub.com/devops/cloud-computing/%D8%A7%D9%84%D9%81%D8%B1%D9%82-%D8%A8%D9%8A%D9%86-%D8%A3%D8%AF%D8%A7%D8%AA%D9%8A-%D8%AF%D9%88%D9%83%D8%B1-docker-%D9%88%D8%A8%D9%88%D8%AF%D9%85%D8%A7%D9%86-podman-r816/" rel="">الفرق بين أداتي دوكر وبودمان</a>
	</li>
	<li>
		إنشاء الحاويات وحذفها باستخدام أداة بودمان
	</li>
	<li>
		تفعيل حاويات بودمان تلقائيًا عند إقلاع النظام
	</li>
	<li>
		تحديث الحاويات
	</li>
	<li>
		مفهوم الحاويات محدودة الصلاحية Rootless containers
	</li>
	<li>
		مفهوم بودمان كومبوز Podman Compose
	</li>
</ul>

<h2 id="">
	متطلبات هذه السلسلة
</h2>

<ul>
	<li>
		<a href="https://academy.hsoub.com/devops/cloud-computing/docker/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%A7%D9%84%D8%AD%D8%A7%D9%88%D9%8A%D8%A7%D8%AA-r641/" rel="">معرفة مسبقة بمفهوم الحاويات</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/cloud-computing/docker/%D8%A7%D9%84%D8%AA%D8%B9%D8%A7%D9%85%D9%84-%D9%85%D8%B9-%D8%AD%D8%A7%D9%88%D9%8A%D8%A7%D8%AA-docker-r310/" rel="">تجربة مسبقة في التعامل مع دوكر</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/linux/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%B7%D8%B1%D9%81%D9%8A%D9%91%D8%A9-%D9%84%D9%8A%D9%86%D9%83%D8%B3-linux-terminal-r18/" rel="">خبرة في التعامل مع سطر الأوامر أو الطرفية Terminal في لينكس</a>
	</li>
</ul>

<p>
	كما تعلمنا في <a href="https://academy.hsoub.com/devops/cloud-computing/%D8%A7%D9%84%D9%81%D8%B1%D9%82-%D8%A8%D9%8A%D9%86-%D8%A3%D8%AF%D8%A7%D8%AA%D9%8A-%D8%AF%D9%88%D9%83%D8%B1-docker-%D9%88%D8%A8%D9%88%D8%AF%D9%85%D8%A7%D9%86-podman-r816/" rel="">مقال سابق</a> فإن أداة بودمان هي أداة بديلة عن دوكر تستخدم لإدارة الحاويات، ولها بنية أوامر مشابهة لأوامر دوكر. وسنتعلم في مقال اليوم كيفية إنشاء الحاويات وحذفها.
</p>

<h2 id="-1">
	سحب الصور من سجل الصور باستخدام بودمان
</h2>

<p>
	عند إنشاء الحاويات، ستحتاج أولًا إلى صورة للحاوية image، إذ لا يمكنك تنفيذ شيء بدون الصورة. ولذلك عليك سحب pull الصورة من سجل الصور.
</p>

<p>
	إليك بعض سجلات الصور الشهيرة:
</p>

<ul>
	<li>
		<a href="https://hub.docker.com/?ref=linuxhandbook.com" rel="external nofollow">Docker Hub</a>
	</li>
	<li>
		<a href="https://quay.io/?ref=linuxhandbook.com" rel="external nofollow">Quay.io</a>
	</li>
	<li>
		سجلات الصور المستضافة مثل <a href="linuxserver.io" rel="">linuxserver.io</a>
	</li>
</ul>

<p>
	ولسحب صورة باستخدام بودمان فعليك استخدام الصيغة التالية:
</p>

<pre class="ipsCode">podman pull [OPTIONS] FULLY_QUALIFIED_IMAGE_NAME[:tag|@digest]
</pre>

<p>
	لمعرفة معنى اسم الصورة المؤهل بالكامل <code>FULLY_QUALIFIED_IMAGE_NAME</code> واختصارًا FQIN، ألقِ نظرةً على الأمرين التاليين:
</p>

<pre class="ipsCode"># باستخدام اسم الصورة المؤهل تمامًا
podman pull docker.io/library/debian

# بدون اسم الصورة المؤهل تمامًا
podman pull debian
</pre>

<p>
	كما تلاحظ، في اسم الصورة المؤهل بالكامل، يكون التنسيق على النحو التالي: السجل/اسم المستخدم/اسم الصورة. في مثالنا فإن docker.io هو عنوان سجل دوكر hub.docker.com.
</p>

<p>
	لسحب وسم tag محدد، اكتب اسم الوسم بعد اسم الصورة، مسبوقًا بنقطتين (<strong>:</strong>). إليك مثالًا عن سحب الوسم <code>stable-slim</code> لصورة ديبيان:
</p>

<pre class="ipsCode">podman pull docker.io/library/debian:stable-slim
</pre>

<h3 id="-2">
	عرض الصور المتاحة
</h3>

<p>
	بعد سحب صورة أو أكثر، يمكنك معاينة الصور المتوفرة محليًا باستخدام الأمر <code>podman Images</code>. عند سحب صورة <code>debian:stable-slim</code>، ستحصل على الخرج التالي:
</p>

<pre class="ipsCode">$ podman images
REPOSITORY                TAG          IMAGE ID      CREATED     SIZE
docker.io/library/debian  stable-slim  86f9b934c377  2 days ago  77.8 MB
</pre>

<p>
	والآن بعد أن حصلت على الصورة يمكنك إنشاء حاوية جديدة
</p>

<h2 id="-3">
	إنشاء حاوية جديدة
</h2>

<p>
	لإنشاء حاوية جديدة في بودمان، عليك استخدام الأمر <code>podman run</code> بالطريقة التالية:
</p>

<pre class="ipsCode">podman run [OPTIONS] image [COMMAND [ARGS]]
</pre>

<p>
	والآن، سنضيف بعض الخيارات options على الأمر السابق، سنضيف أولًا الخيار <code>d-</code> لتشغيل الحاوية باستمرار في الخلفية، والخيار <code>t-</code> لتخصيص طرفية زائفة pseudo-TTY لصورة ديبيان كي تعمل باستمرار. يمكنك الاطلاع على قائمة الخيارات المتاحة من <a href="https://docs.podman.io/en/latest/markdown/podman-run.1.html?ref=linuxhandbook.com" rel="external nofollow">توثيقات بودمان</a>.
</p>

<p>
	والآن، سننشئ حاوية بسيطة تعتمد على صورة توزيعة ديبيان <code>stable-slim</code> التي سحبناها مسبقًا.
</p>

<pre class="ipsCode">podman run -d -t debian:stable-slim
</pre>

<p>
	عند نجاح إنشاء الحاوية، ستحصل في الخرج output على سلسلة عشوائية من الأحرف والأرقام. هذه السلسلة هي معرف الحاوية الفريد unique container ID.
</p>

<pre class="ipsCode">61d1b10b5818f397c6fd8f1fc542a83810d21f81825bbfb9603b7d99f6322845
</pre>

<h2 id="-4">
	عرض الحاويات
</h2>

<p>
	أولًا، لعرض <strong>الحاويات قيد التشغيل</strong>، عليك استخدم الأمر <code>podman ps</code>، وهو يشبه الأمر <code>ps</code> في لينكس، لكن بدلاً من إظهار عمليات النظام، فإنه يظهر الحاويات قيد التشغيل وتفاصيلها.
</p>

<p>
	بما أننا استخدمنا الخيار <code>t-</code> لتشغيل حاوية دبيان، فلنرَ كيف تبدو نتيجة الأمر <code>podman ps</code>:
</p>

<pre class="ipsCode" id="ips_uid_6930_7">$ podman ps
CONTAINER ID  IMAGE         COMMAND         CREATED         STATUS         PORTS         NAMES
61d1b10b5818  docker.io/library/debian:stable-slim  bash        44 seconds ago  Up 44 seconds ago              gallant_mahavira
</pre>

<p>
	يمكنك الحصول على معلومات عن الحاوية باستخدام الأمر <code>ps</code> كمعرّف الحاوية الفريد القصير، والصورة المستخدمة لإنشاء هذه الحاوية، ومتى أُنشِئت الحاوية، ومنافذ الجهاز المضيف المسندة إلى منافذ الحاوية واسمها. ونلاحظ من الخرج أن الصورة المستخدمة هي <code>debian:stable-slim</code> أُنشِئت قبل 44 ثانية، أما اسم الحاوية فهو <code>gallant_mahavira</code>.
</p>

<p>
	يمكنك تسمية الحاوية عند إنشائها باستخدام الخيار <code>name CONTAINER_NAME--</code>، فعندما لا تحدد اسم الحاوية، يُولَد اسم عشوائي لها. ثانيًا، لعرض <strong>الحاويات المتوقفة عن العمل</strong> Stopped containers عليك استخدام الأمر التالي:
</p>

<pre class="ipsCode">podman container list -a
</pre>

<p>
	والآن، سنتعلم كيفية إيقاف الحاويات.
</p>

<h2 id="-5">
	إيقاف الحاويات
</h2>

<p>
	لإيقاف الحاويات عليك استخدام الأمر <code>podman stop</code> مع معرّف الحاوية أو اسمها، وذلك وفق الصيغة التالية:
</p>

<pre class="ipsCode">podman stop [CONTAINER_NAME|CONTAINER_ID]
</pre>

<p>
	والآن سنوقف الحاوية الجارية باستخدام اسمها:
</p>

<pre class="ipsCode">$ podman stop gallant_mahavira
gallant_mahavira
</pre>

<p>
	والآن بإمكانك استخدام الأمر السابق لعرض جميع الحاويات الجارية والمتوقفة:
</p>

<pre class="ipsCode">$ podman container list -a
CONTAINER ID  IMAGE                                 COMMAND     CREATED         STATUS                      PORTS       NAMES
61d1b10b5818  docker.io/library/debian:stable-slim  bash        14 minutes ago  Exited (137) 3 minutes ago              gallant_mahavira
</pre>

<p>
	<strong>ملاحظة:</strong> ترتبط كل من الأوامر <code>podman container list and podman container ls</code>، <code>podman ps</code>، <code>podman container ps</code> بنفس الملف الثنائي binary ولها نفس الاستخدام وتعطي نفس الخرج.
</p>

<h2 id="-6">
	إعادة تشغيل الحاوية
</h2>

<p>
	لإعادة تشغيل حاوية ما بعد إيقاف عملها أو فشله، عليك استخدام الأمر <code>podman start</code>. فلنفترض أن الحاوية التي أنشأتها من صورة ديبيان فشلت لسبب ما، إذًا يمكنك إعادة تشغيلها عن طريق كتابة اسمها أو معرّفها بعد الأمر <code>podman start</code> كالتالي:
</p>

<pre class="ipsCode">$ podman start 61d1b10b5818f397c6fd8f1fc542a83810d21f81825bbfb9603b7d99f6322845
</pre>

<h2 id="-7">
	حذف الحاويات
</h2>

<p>
	قبل حذف حاوية أو تدميرها عليك أولًا إيقافها، وبعدها يمكنك استخدام الأمر <code>podman rm</code> لحذفها. بمجرد حذف الحاوية، فإنها ستختفي ولن تظهر في خرج الأمر <code>podman Container list -a</code>. إليك المثال التالي على إيقاف وحذف حاوية باستخدام بودمان، والذي استخدمنا فيه اسم الحاوية ومعرفها.
</p>

<pre class="ipsCode" id="ips_uid_6930_9">$ podman ps
CONTAINER ID  IMAGE         COMMAND     CREATED         STATUS           PORTS       NAMES
61d1b10b5818  docker.io/library/debian:stable-slim  bash        44 minutes ago  Up 1 second ago              gallant_mahavira


$ podman stop gallant_mahavira
gallant_mahavira


$ podman rm 61d1b10b5818
61d1b10b5818f397c6fd8f1fc542a83810d21f81825bbfb9603b7d99f6322845


$ podman container list -a
CONTAINER ID  IMAGE         COMMAND     CREATED     STATUS      PORTS       NAMES
</pre>

<p>
	كما ترى فإن الحاوية اختفت تمامًا. يمكنك الآن إن أردت، إنشاء حاوية جديدة باستخدام أي صورة وفق الأوامر الخطوات التي تعلمتها.
</p>

<h2 id="-8">
	الخاتمة
</h2>

<p>
	تهانينا، لقد وصلت إلى نهاية المقال الثالث في سلسلتنا التعليمية حول أداة بودمان، وتعلمت كيفية إنشاء الحاويات وعرضها وإيقافها وحذفها، تابع قراءة باقي المقالات كي تتعلم المزيد حول بودمان. ترجمة -وبتصرف- للمقال <a href="https://linuxhandbook.com/podman-add-delete-containers/" rel="external nofollow">Creating and Destroying Containers Using Podman</a> من موقع <a href="https://linuxhandbook.com/" rel="external nofollow">Linux Handbook</a>.
</p>

<h2>
	اقرأ أيضًا
</h2>

<ul>
	<li>
		المقال السابق: <a href="https://academy.hsoub.com/devops/cloud-computing/%D8%A7%D9%84%D9%81%D8%B1%D9%82-%D8%A8%D9%8A%D9%86-%D8%A3%D8%AF%D8%A7%D8%AA%D9%8A-%D8%AF%D9%88%D9%83%D8%B1-docker-%D9%88%D8%A8%D9%88%D8%AF%D9%85%D8%A7%D9%86-podman-r816/" rel="">الفرق بين أداتي دوكر Docker وبودمان Podman</a>
	</li>
	<li>
		<p>
			<a href="https://academy.hsoub.com/devops/servers/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%AD%D8%A7%D9%88%D9%8A%D8%A7%D8%AA-%D9%84%D9%8A%D9%86%D9%83%D8%B3-lxc-r219/" rel="">مدخل إلى حاويات لينكس LXC</a>
		</p>
	</li>
	<li>
		<p>
			<a href="https://academy.hsoub.com/devops/cloud-computing/docker/%D9%85%D8%A7-%D9%87%D9%8A-%D8%B5%D9%88%D8%B1%D8%A9-%D8%A7%D9%84%D8%AD%D8%A7%D9%88%D9%8A%D8%A9-container-image%D8%9F-r587/" rel="">ما هي صورة الحاوية container image؟</a>
		</p>
	</li>
	<li>
		<p>
			<a href="https://academy.hsoub.com/devops/cloud-computing/docker/%D9%86%D8%B8%D8%B1%D8%A9-%D8%B9%D8%A7%D9%85%D9%91%D8%A9-%D8%B9%D9%84%D9%89-%D8%A5%D8%B9%D8%AF%D8%A7%D8%AF-%D8%A7%D9%84%D8%AD%D8%A7%D9%88%D9%8A%D9%91%D8%A7%D8%AA-containerization-%D8%B9%D9%84%D9%89-docker-r23/" rel="">نظرة عامّة على إعداد الحاويات containerization على Docker</a>
		</p>
	</li>
</ul>
]]></description><guid isPermaLink="false">817</guid><pubDate>Fri, 23 Aug 2024 15:07:01 +0000</pubDate></item><item><title>&#x627;&#x644;&#x641;&#x631;&#x642; &#x628;&#x64A;&#x646; &#x623;&#x62F;&#x627;&#x62A;&#x64A; &#x62F;&#x648;&#x643;&#x631; Docker &#x648;&#x628;&#x648;&#x62F;&#x645;&#x627;&#x646; Podman</title><link>https://academy.hsoub.com/devops/cloud-computing/%D8%A7%D9%84%D9%81%D8%B1%D9%82-%D8%A8%D9%8A%D9%86-%D8%A3%D8%AF%D8%A7%D8%AA%D9%8A-%D8%AF%D9%88%D9%83%D8%B1-docker-%D9%88%D8%A8%D9%88%D8%AF%D9%85%D8%A7%D9%86-podman-r816/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2024_08/----Docker--Podman.png.45cf6a7f4409037e3b240cbc4d3b8a73.png" /></p>
<p>
	إن أداة بودمان Podman هي أداة مقدمة ومدعومة من قبل توزيعة ريد هات Red Hat كبديل عن أداة دوكر Docker. فأداة بودمان شبيهةً بدوكر ويمكنك بدء استخدامها إن كنت على معرفة بدوكر.
</p>

<p>
	عندما نأتي على ذكر الحاويات، ستخطر الأداة دوكر Docker في ذهنك، لكنها ليست الأداة الوحيدة للتعامل مع الحاويات. إذ ستجد أن أداة بودمان المقدمة من ريد هات أداة واعدة وتلبي احتياجاتك وليس عليك تعلم كيفية التعامل معها من الصفر، لأنها مشابهة لدوكر.
</p>

<p>
	تهدف <a href="https://academy.hsoub.com/tags/podman/" rel="">هذه السلسلة</a> إلى تعريفك على أداة بودمان، كي تستطيع عند نهاية هذه المقالات، التعرف على الفرق بين دوكر وبودمان، وبدء استخدام بودمان عند العمل مع الحاويات.
</p>

<h2 id="podman">
	ما ستتعلمه سلسلة التعرف على أداة بودمان Podman
</h2>

<p>
	سنتعلم في هذه السلسلة ما يلي:
</p>

<ul>
	<li>
		<a href="https://academy.hsoub.com/devops/cloud-computing/%D8%A7%D9%84%D9%81%D8%B1%D9%82-%D8%A8%D9%8A%D9%86-%D8%A3%D8%AF%D8%A7%D8%AA%D9%8A-%D8%AF%D9%88%D9%83%D8%B1-docker-%D9%88%D8%A8%D9%88%D8%AF%D9%85%D8%A7%D9%86-podman-r816/" rel="">الفرق بين أداتي دوكر وبودمان.</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/cloud-computing/%D8%A5%D9%86%D8%B4%D8%A7%D8%A1-%D8%A7%D9%84%D8%AD%D8%A7%D9%88%D9%8A%D8%A7%D8%AA-%D9%88%D8%AD%D8%B0%D9%81%D9%87%D8%A7-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%A3%D8%AF%D8%A7%D8%A9-%D8%A8%D9%88%D8%AF%D9%85%D8%A7%D9%86-podman-r817/" rel="">إنشاء الحاويات وحذفها باستخدام أداة بودمان.</a>
	</li>
	<li>
		تفعيل حاويات بودمان تلقائيًا عند إقلاع النظام.
	</li>
	<li>
		تحديث الحاويات.
	</li>
	<li>
		مفهوم الحاويات محدودة الصلاحية Rootless containers.
	</li>
	<li>
		مفهوم بودمان كومبوز Podman Compose.
	</li>
</ul>

<h2 id="">
	متطلبات هذه السلسلة
</h2>

<ul>
	<li>
		معرفة مسبقة <a href="https://academy.hsoub.com/devops/cloud-computing/docker/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%A7%D9%84%D8%AD%D8%A7%D9%88%D9%8A%D8%A7%D8%AA-r641/" rel="">بمفهوم الحاويات Containers.</a>
	</li>
	<li>
		تجربة مسبقة في <a href="https://academy.hsoub.com/devops/cloud-computing/docker/%D8%A7%D9%84%D8%AA%D8%B9%D8%A7%D9%85%D9%84-%D9%85%D8%B9-%D8%AD%D8%A7%D9%88%D9%8A%D8%A7%D8%AA-docker-r310/" rel="">التعامل مع دوكر</a>.
	</li>
	<li>
		خبرة في التعامل مع<a href="https://academy.hsoub.com/devops/linux/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%B7%D8%B1%D9%81%D9%8A%D9%91%D8%A9-%D9%84%D9%8A%D9%86%D9%83%D8%B3-linux-terminal-r18/" rel=""> سطر الأوامر أو الطرفية Terminal في لينكس</a> Linux.
	</li>
</ul>

<p>
	سنناقش في مقال اليوم الفرق بين أداتي دوكر وبودمان بالتفصيل، حيث يترافق مصطلح الحاويات Containers في ذهننا مع أداة دوكر Docker، لكن دعونا نتعرف في مقالنا على الفرق بينها وبين أداة بودمان Podman التي ازداد استخدامها مع الحاويات.
</p>

<p>
	ومع انتشار استخدام الحاويات أصبحت أداة دوكر، التي ظهرت في عام 2014، أشهر أداة لإدارة الحاويات. ونشرت شركة ريد هات Red Hat في عام 2018، أداة بودمان كبديل عن دوكر. وبما أن الأداتين لهما الغرض نفسه، سنتعرف في هذا المقال على مزايا كل منهما.
</p>

<h2 id="-1">
	مفهوم الحاويات
</h2>

<p>
	لنفترض أنك تعمل كمهندس برمجيات وطُلِب منك نشر مجموعة برامج ذات مهام حرجة. ماذا ستفعل لو كان البرنامج الأول والبرنامج الثاني لهما نفس الاعتمادية dependency ولكنهما يعملان على إصدارات مختلفة من نفس الاعتمادية؟ أو لو كانت تبعية البرنامج الأول تتعارض مع الاعتمادية البرنامج الثاني؟
</p>

<p>
	في هذه الحال عليك نشرهما في جهازين افتراضيين Virtual Machine مختلفين، لكن هذا يلغي قابلية التوسع scalability، لأنه عند تشغيل جهازين افتراضيين على نفس الجهاز، سيرث البرنامج 50% فقط من إجمالي قدرة الجهاز الحاسوبية. وعند زيادة عدد البرامج من برنامجين إلى عشرة سيتضح لك أن هذا الحل غير فعّال.
</p>

<p>
	حيث إن إحدى مساوئ الآلات الافتراضية هي أنها تعمل بنظام تشغيل كامل، وهذا يُعد أمرًا سلبيًا في حالتنا. فلو كان عندنا عشرة أجهزة افتراضية تعمل بنظام تشغيل ريد هات RHEL، سيصبح عندنا عشر نسخ من نفس الثنائيات binaries، وسيؤدي ذلك إلى استهلاك غير فعّال لذاكرة الوصول العشوائي RAM. حتى إن أبسط عملية تثبيت installation ستحجز أكثر من 4 جيجابايت من مساحة القرص لكل جهاز افتراضي.
</p>

<p>
	لذلك بدلًا من استخدام جهاز افتراضي، حيث يكون لديك نظام تشغيل كامل على الجهاز بالإضافة إلى برنامجك واعتمادياته، يمكنك استخدام صورة الحاوية container image. إذ تحتوي صور الحاوية على البرنامج واعتمادياته فقط. ومن مزايا صور الحاويات أن حجمها يكون عادةً أقل من 300 ميجابايت.
</p>

<p>
	فالمشكلة تكمن في طبيعة عمل الآلات الافتراضية؛ فعندما تنشئ آلةً افتراضية، تُنشَأ نسخة افتراضية من العتاد hardware. أي نسخة افتراضية من وحدة المعالجة المركزية وذاكرة الوصول العشوائي، وذاكرة التخزين والموارد الأخرى، ولا بد أن لهذا حمل على الجهاز.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="155797" href="https://academy.hsoub.com/uploads/monthly_2024_08/vm_vs_container.png.55d6dcec950734632fc81b2cb61426df.png" rel=""><img alt="vm vs container" class="ipsImage ipsImage_thumbnailed" data-fileid="155797" data-unique="exflxq7w3" style="width: 597px; height: auto;" src="https://academy.hsoub.com/uploads/monthly_2024_08/vm_vs_container.png.55d6dcec950734632fc81b2cb61426df.png"> </a>
</p>

<p>
	أما عند استخدام الحاويات، تُنشَأ نسخ من البرنامج مع اعتماديّاته، وهذا له حمل منخفض مقارنةً بالآلات الافتراضية.
</p>

<h2 id="-2">
	الغرض من استخدام دوكر أو بودمان
</h2>

<p>
	ربما استخدمت برنامج فيرتشوال بوكس VirtualBox المُقدَّم من أوراكل Oracle لإدارة الآلات الافتراضية، والذي يُتيح لك إنشاء آلات افتراضية وتشغيلها أو إيقافها، وتعديلها، وحذفها. تُتيح كل من أداتي دوكر وبودمان ذلك، ولكنها تتعامل مع البرامج الموجودة في حاويات، وليس الآلات الافتراضية.
</p>

<p>
	وعلى الرغم من أن كِلا الأداتين تعملان وفق فلسفتين مختلفين، إلا أن كلتاهما تساعدان على إدارة الحاويات. لذلك سنتعرف الفروق بينهما وأي منهما هو الأفضل وفقًا لغرض الاستخدام الذي تريده.
</p>

<h2 id="-3">
	دوكر أم بودمان
</h2>

<p>
	يُعد كل من دوكر و بودمان من البرامج الممتازة لإدارة الحاويات. وعندما أعلنت شركة ريد هات عن طرحها لبودمان كبديل عن دوكر قالت إن بودمان متوافق مع واجهة سطر أوامر دوكر، أي إن الانتقال من دوكر إلى بودمان لا يتطلب تغييرات كبيرة على الشيفرة البرمجية. هذا يعني أنه يمكنك استبدال أمر <code>docker</code> بالأمر <code>podman</code> وسيعمل البرنامج.
</p>

<p>
	ولكن ثمة بعض الاختلافات الأساسية، التي سنتعرف عليها:
</p>

<h3 id="daemon">
	أولًا، مفهوم البرنامج الخفي Daemon
</h3>

<p>
	إن الفرق الرئيسي الذي يميز بين أداتي دوكر وبودمان هو طريقة عملهما على نظام التشغيل. حيث تعمل نواة دوكر Docker core كبرنامج خفي dockerd، أي إنه يعمل دائمًا في الخلفية ويدير الحاويات. أما أداة بودمان فتشبه البرنامج العادي؛ أي إنه يبدأ العمل عند تنفيذ إجراء ما فيه (بدء أو إيقاف حاوية). تتميز طريقة عمل دوكر المعتمدة على البرنامج الخفي Daemon-based approach بما يلي:
</p>

<ul>
	<li>
		يتيح تشغيل الحاويات تلقائيًا وبسهولة عند تشغيل النظام.
	</li>
	<li>
		لا حاجة إلى مدير خدمة خارجي مثل systemd نظرًا لأن دوكر هو برنامج خفي. لكن هذا لا يعني أن أداة بودمان سيئة، إليك المزايا التي تتميز بها أداة بودمان عن دوكر:
	</li>
	<li>
		عند تعطل برنامج دوكر الخفي، فستكون حالة الحاويات غير معروفة. لكن يمكن تجنب ذلك عند استخدام أداة بودمان.
	</li>
	<li>
		يمكنك استخدام systemd لإدارة الحاويات، إذ يمنحك ذلك قدرة غير محدودة على ضبط وإدارة الحاويات مقارنةً بدوكر.
	</li>
	<li>
		يتيح ربط بودمان مع systemd تحديث الحاويات قيد التشغيل بأقل وقت توقف عن العمل downtime. كما يمكنك تلافي التحديثات السيئة.
	</li>
</ul>

<h3 id="security">
	ثانيًا، الأمان Security
</h3>

<p>
	إن أهم سبب لاستخدام بودمان بدلًا من دوكر هو الأمان، إذ طُرح بودمان كبديل أكثر آمنًا من دوكر. فإذا كنتَ مهتمًا بالأمان، فستجذبك اثنتان من ميزات بودمان الأساسية. ذكرنا آنفًا أن ما يميز بودمان عن دوكر هو أن بودمان لا يعمل كبرنامج خفي. أما الميزة الأساسية الثانية لبودمان هي أنه يمكنه تشغيل الحاويات دون صلاحيات الوصول إلى الجذر root. هذا يعني أنك لست بحاجة إلى امتيازات المستخدم المميز superuser لإدارة الحاويات. والآن، إليك ثلاثة أسباب تجعلك تفضل استخدام بودمان بدلًا عن دوكر إن كنت مهتمًا بالحصول على مستوى أعلى من الأمن.
</p>

<h4 id="dockerd">
	السبب الأول، يعمل الأمر <code>dockerd</code> كمستخدم جذر
</h4>

<p>
	كما تعلم فإن نواة دوكر تعمل كبرنامج نظام خفي system daemon، أي كبرنامج ينفذه المستخدم المسؤول أو الجذر <code>root user</code>. سبق وذكرنا فوائد البرنامج الخفي، لكن ثمة بعض المشاكل الأمنية عند تشغيل البرنامج الخفي كمستخدم جذري. أولًا، إذا اختُرق برنامج دوكر الخفي (<code>dockerd</code>)، فيمكن لأحدهم أن يخترق نظامك من خلال الوصول إلى الجذر. ولا شك أنك لا تود حدوث ذلك. وهنا تتضح ميّزة بودمان إذ إنه لا يستخدم برنامجًا خفيًا وليس له متطلبات صارمة للوصول إلى الجذر. وهذا يقودنا إلى السبب الثاني.
</p>

<h4 id="rootlesscontainers">
	السبب الثاني، يدعم بودمان الحاويات دون صلاحيات جذر
</h4>

<p>
	ربما سمعت أن بودمان يدعم تشغيل الحاويات دون الوصول إلى الجذر أو ما يعرف Root-less containers، وهذا أمر صحيح وأكثر أمنًا. والآن، لنفترض أن برنامج دوكر الخفي آمن، وأن صورة الحاوية التي تستخدمها فيها ثغرة أمنية. ولكن المطور لا يعرف ذلك. إذا شَغّلتَ هذه الصورة في حاوية تابعة للمستخدم الجذر، فاعلم أن الحظ ليس حليفك. أما عند استخدام بودمان، فيمكنك تشغيل الحاوية دون الحاجة إلى امتيازات الجذر. هذا يعني أنه إن احتوت صورة الحاوية على ثغرة أمنية، فلن يتعرض للخطر سوى المستخدم الذي يملك تلك الحاوية. أما بقية مستخدمي النظام فهم بأمان، ولا سيما المستخدم الجذر. وعلى الرغم من أن دوكر حصل مؤخرًا على دعم <a href="https://linuxhandbook.com/rootless-docker/" rel="external nofollow">لتشغيل الحاويات محدودة الصلاحية Rootless containers </a>، لكن لا يزال ينقصه بعض الميزات، وهي أن دعم AppArmor غير موجود. وهو نظام التحكم الإلزامي بالوصول (MAC) الافتراضي الخاص بتوزيعتي ديبيان وأوبنتو
</p>

<h4 id="-4">
	السبب الثالث، تحديث الصور تلقائيًا
</h4>

<p>
	قد يخطر في ذهنك أن تحديث الصور تلقائيًا لا يمكن أن يكون ميزة، لكنها كذلك. تذكر السبب الثاني الذي ذكرناه وافترض أن المطورين يعلمون بوجود الثغرة الأمنية، ثم أصدروا إعلانًا بذلك ونشروا الصورة المصححة. لكن ميزة التحديث التلقائي ليست مدمجة built in في دوكر، فماذا عن بودمان؟ يعتمد الجواب على كيفية تعريفنا لكلمة "مدمجة". نظرًا لأنه ليس لبودمان برنامج خفي، فإنه لا يمكنه إجراء فحوصات منتظمة للحصول على التحديثات. لكن بما أن بودمان هو أحد منتجات ريد هات Red Hat، فيمكن تحديث الحاويات تلقائيًا عن طريق systemd لأنه يتوافق معه، وهذا ما سنتحدث عنه في مقالنا التالي من هذه السلسلة.
</p>

<p>
	<strong>ملاحظة:</strong> لا تعني الأسباب التي ذكرناها أن دوكر غير آمن وأنه يجب على الجميع استخدام بودمان، إذ لا يوجد شيء آمن بنسبة 100%. لكن وجب تسليط الضوء عليها من باب الاحتياط وأخذ الحذر.
</p>

<h3 id="-5">
	ثالثًا، النهج المتبع في بودمان
</h3>

<p>
	ربما لاحظت أن دوكر يتّبِع نهج "الحل الواحد" وأن بودمان يتّبع نهجًا مختلفًا. وهذا يعني أنه ليس عليك سوى تثبيت الملف الثنائي binary لدوكر على نظامك. ويمكنك استخدام الأمر <code>docker</code> لإنشاء الصور ونشرها (إلى السجلات مثل سجل hub.docker.com) وإدارة الحاويات. ولكن بالنسبة لبودمان، نشرت شركة ريد هات Red Hat ثلاثة ثنائيات منفصلة. فعليك استخدام الأمر <code>buildah</code> لبناء الصور. ولنشرها على سجل مثل سجل hub.docker.com، فعليك استخدام الأمر <code>skopeo</code>. ولإدارة الحاويات، فاستخدم الأمر <code>podman</code>. كلا النهجين يؤدي الغرض المرجو منه، إذًا فالأمر يعتمد على ما تفضّله، هل تفضّل استخدام نهج الحل الشامل الذي يقدمه دوكر أم تفضل نهج الحل المتشعب لبودمان.
</p>

<h3 id="dockerswarm">
	رابعًا، أداة دوكر سوارم Docker Swarm
</h3>

<p>
	تُعدّ أداة دوكر سوارم Docker Swarm مفيدةً لتوسيع نطاق الحاويات باستخدام عدة أجهزة حقيقية وافتراضية. إذ يمكنك وضع عدة حواسيب ضمن "سرب" أو swarm من أجل غرض محدد. فيمكن أن تخصص سربًا للتعامل مع طلبات قاعدة البيانات فقط، وسربًا آخر للتعامل مع خادم ويب. في حين أن هذه الميزة غير متوفرة في بودمان، إلا أنه يمكنك الاستفادة منها باستخدام Kubernetes. ويمكننا القول إن Kubernetes يستخدم على نطاق أوسع من Docker Swarm، وعند الحاجة إلى التوسع واستخدام عدة أجهزة، فإن Kubernetes يلبي احتياجاتك على أفضل وجه.
</p>

<h2 id="-6">
	الخاتمة
</h2>

<p>
	تُعد أداة دوكر مرادفةً للحاويات. لكن أنشأت شركة ريد هات Red Hat أداة بودمان لإدارة الحاويات للتغلب على بعض أوجه القصور في عمل دوكر. وتوافق بودمان مع أوامر دوكر يُسهل التوجه نحو استخدامها دون الحاجة إلى ترك ما تعلمته عن دوكر. لا يعني ذلك أن المسؤولين عن أداة دوكر لا يعملون على تحسينها، إذ إن إضافة ميزة الحاويات محدودة الصلاحية rootless containers هي خير دليل على ذلك. والآن فإن الخيار متروك لك في استخدام الأداة التي تفضلها، وللتعرف على المزيد حول أداة بودمان، تابع مقالنا التالي. ترجمة وبتصرّف للمقال <a href="https://linuxhandbook.com/docker-vs-podman/" rel="external nofollow">Understanding the Differences Between Podman and Docker</a> من سلسلة <a href="https://linuxhandbook.com/podman/" rel="external nofollow">Container Management With Podman</a>.
</p>

<h2>
	اقرأ أيضًا
</h2>

<ul>
	<li>
		<a href="https://academy.hsoub.com/devops/cloud-computing/docker/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%AF%D9%88%D9%83%D8%B1-docker-r607/" rel="">مدخل إلى دوكر Docker</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/cloud-computing/docker/%D9%85%D8%A7-%D8%A7%D9%84%D9%81%D8%B1%D9%82-%D8%A8%D9%8A%D9%86-%D8%AF%D9%88%D9%83%D8%B1-docker-%D9%88%D9%83%D9%88%D8%A8%D9%8A%D8%B1%D9%86%D9%8A%D8%AA%D9%8A%D8%B3-kubernetes%D8%9F-r612/" rel="">ما الفرق بين دوكر Docker وكوبيرنيتيس Kubernetes؟</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/linux/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%AA%D8%A3%D9%85%D9%8A%D9%86-%D8%A7%D9%84%D8%AD%D8%A7%D9%88%D9%8A%D8%A7%D8%AA-%D8%B9%D9%86-%D8%B7%D8%B1%D9%8A%D9%82-%D8%B3%D9%8A-%D9%84%D9%8A%D9%86%D9%83%D8%B3-selinux-r595/" rel="">كيفية تأمين الحاويات عن طريق سي لينكس SELinux</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/cloud-computing/%D9%86%D8%B8%D8%A7%D9%85-%D9%83%D9%88%D8%A8%D9%8A%D8%B1%D9%86%D8%AA%D8%B3-kubernetes-%D9%88%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%B9%D9%85%D9%84%D9%87-r598/" rel="">نظام كوبيرنتس Kubernetes وكيفية عمله</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">816</guid><pubDate>Tue, 13 Aug 2024 15:05:00 +0000</pubDate></item><item><title>&#x62A;&#x639;&#x631;&#x651;&#x641; &#x639;&#x644;&#x649; &#x643;&#x648;&#x628;&#x631;&#x646;&#x64A;&#x62A;&#x633; Kubernetes</title><link>https://academy.hsoub.com/devops/cloud-computing/%D8%AA%D8%B9%D8%B1%D9%91%D9%81-%D8%B9%D9%84%D9%89-%D9%83%D9%88%D8%A8%D8%B1%D9%86%D9%8A%D8%AA%D8%B3-kubernetes-r815/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2024_08/---Kubernetes.png.1cea90428bf14605297e7df01be56868.png" /></p>
<p>
	كوبرنيتس Kubernetes هو نظام فعّال ومفتوح المصدر لإدارة التطبيقات المغلفة داخل الحاويات والمبنية في بيئة عنقودية (Clustered environment)، طوّرته في البداية شركة جوجل ثم حظي بدعم مؤسسة CNCF أو Cloud Native Computing Foundation، وهدفه الأساسي توفير طرق مرنة لإدارة الخدمات والمكونات الموزعة في بنية تحتية متنوعة التقنيات.
</p>

<p>
	فإذا كنت تتساءل ما هو Kubernetes؟ وما مكوناته الأساسية وما المشكلات التي يحلّها؟ وأي نموذج يعتمد في نشر التطبيقات وتوسعتها؟ فسيُجيبك هذا المقال على كل تساؤلاتك تلك.
</p>

<h2 id="kubernetes-1">
	ما هو Kubernetes؟
</h2>

<p>
	كوبرنيتس Kubernetes في الأساس هو نظام لتشغيل التطبيقات المغلفة في الحاويات وتنسيقها ضمن بيئة عمل مكونة من عدة خوادم. وقد صُممت منصة Kubernetes لإدارة دورة حياة التطبيقات والخدمات المغلفة في الحاويات إدارةً كاملة وبطرق فعالة تجعلها قابلة للتنبؤ، وسهلة التوسعة، وعالية التوافرية.
</p>

<p>
	يُمَكِّنُك كوبرنيتس Kubernetes من تحديد كيفية تشغيل تطبيقاتك، وطريقة تفاعلها مع التطبيقات الأخرى ومع المصادر الخارجية، ويمنحك القدرة على توسيع مواردها الحاسوبية أو إنقاصها حسب الحاجة، ويسهل إجراء التحديثات التدريجية rolling updates بسلاسة دون انقطاع الخدمة، وتبديل حركة مرور البيانات بين إصداراتها المختلفة لاختبار الميزات الجديدة أو للتراجع عن عمليات النشر المصحوبة بالأخطاء أو غير ذلك. وتأتي إمكاناته هذه مما يوفره لمستخدميه من واجهات استخدام، ومنصة قوية قابلة للبناء حسب تفضيلاتهم، ومختلف الأساسيات التي يحتاجونها ليُنشئوا بيئات تطبيقاتهم كما يريدون بمرونة وموثوقية عالية.
</p>

<p>
	ولمزيد من المعلومات حول تقنية كوبرنتيس Kubernetes والاطلاع على أكثر الأسئلة شيوعًا حولها تتصحك بمطالعة الفيديو التالي:
</p>

<p>
	<iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="" frameborder="0" height="480" id="ips_uid_9500_5" src="https://academy.hsoub.com/applications/core/interface/index.html" title="ما هو كوبرنيتس Kubernetes" width="853" data-embed-src="https://www.youtube.com/embed/OQVZ_jyZwh4"></iframe>
</p>

<h2 id="kubernetes-2">
	بنية Kubernetes
</h2>

<p>
	سنتعرّف على بنية Kubernetes وطريقة تصميمها وتنظيمها لنفهم إمكاناته الكبيرة التي يوفرها للمطورين. يشبه Kubernetes نظامًا مكوّنًا من عدة طبقات، وتُجَرِّد كل طبقة منه التعقيدات الموجودة في الطبقات الأدنى منها.
</p>

<p>
	سبيل المثال تتضمن كائنات Pod (التي تمثل أصغر وحدة في Kubernetes والتي سنشرحها بعد قليل) عدة حاويات، وتشير الخدمة (Service) إلى عدة كائنات Pod وتوفر نقطة وصول واحدة إليها وقِس على ذلك، فيخفف هذا التجريد على المطوّر كمية التفاصيل التي عليه التعامل معها، فنحن هنا نتعامل مع مفاهيم منطقية دون أن نربطها بآلة فيزيائية أو افتراضية معينة.
</p>

<p>
	يضم Kubernetes في قاعدته عنقودًا cluster من الآلات الفيزيائية أو الافتراضية (VMs) يجمعها مع بعضها شبكة اتصال مشتركة، ويُعدّ هذا العنقود المنصة الفيزيائية التي تُضبَط فيها جميع مكونات Kubernetes، وإمكاناته، وأحمال العمل workloads، ويُقصد بأحمال العمل هنا تطبيقك الذي ستُشغله ضمن الحاوية سواء كان تطبيق ويب أو أي نوع آخر من التطبيقات.
</p>

<p>
	تتمتع كل آلة ضمن العنقود بدورٍ خاص في نظام Kubernetes. ويعمل خادم واحد (أو مجموعة خوادم في عمليات النشر التي تتطلب توافرية عالية) دور <strong>الخادم الرئيسي master server</strong>، فيكون بمثابة بوابة العنقود أو عقله المُدبِّر، ويؤدي مهامًا مثل: إتاحة واجهة برمجة التطبيقات Kubernetes <abbr title="Application Programming Interface | واجهة برمجية"><abbr title="Application Programming Interface | واجهة برمجية">API</abbr></abbr> للمستخدمين والعملاء، والتحقق من سلامة الخوادم الأخرى وتقسيم العمل عليها (بعملية تسمى "الجدولة scheduling")، بالإضافة إلى تنظيم الاتصال بين مكونات العنقود (أو ما يُعرف <a href="https://academy.hsoub.com/devops/cloud-computing/docker/%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A7%D8%AA-%D8%AA%D9%86%D8%B3%D9%8A%D9%82-%D8%A7%D9%84%D8%AD%D8%A7%D9%88%D9%8A%D8%A7%D8%AA-r643/" rel="">بتنسيق الحاويات container orchestration</a>). إذًا فالخادم الرئيسي هو نقطة الاتصال الأساسية مع عنقود Kubernetes والمسؤول عن معظم أعماله المركزية.
</p>

<p>
	تدعى الآلات الأخرى في العنقود <strong>عقدًا nodes</strong>: وهي مجموعة خوادم مسؤولة عن استقبال أحمال العمل workloads وتشغيلها باستخدام الموارد الحاسوبية المتوفرة لها المحلية والخارجية. وتُجَهَّز كل عقدة ببرنامج لتشغيل الحاويات مثل دوكر <a href="https://academy.hsoub.com/devops/cloud-computing/docker/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%AF%D9%88%D9%83%D8%B1-docker-r607/" rel="">Docker</a> أو روكيت rkt، إذ إن Kubernetes يُشغِّل التطبيقات والخدمات ضمن <strong>حاويات containers</strong> ليؤمن لها المستويات المرجوة من العزل والمرونة والإدارة الفعالة، وتتلقى العقدة تعليمات العمل الخاصة بها من الخادم الرئيسي، فتُنشئ بناءً عليها حاوياتٍ جديدة أو تُدمِّر حاوياتٍ أخرى، وتُعدِّل قواعد المرور عبر الشبكة لتُوجّه حركة البيانات حسب المطلوب.
</p>

<p>
	تعمل التطبيقات والخدمات على العنقود وهي ضمن الحاويات (كما ذكرنا أعلاه)، وتتأكد المكونات الأساسية باستمرار من توافق الحالة المرغوبة للتطبيقات مع الحالة الفعلية للعنقود. أما المستخدمون فيتفاعلون مع العنقود عبر الاتصال مع خادم Kubernetes <abbr title="Application Programming Interface | واجهة برمجية"><abbr title="Application Programming Interface | واجهة برمجية">API</abbr></abbr> الرئيسي مباشرةً أو بواسطة تطبيقات العملاء clients والمكتبات البرمجية.
</p>

<p>
	والخطوة الأولى التي يبدأ بها تشغيل أي تطبيق أو خدمة هي إعداد خطة تصريحية declarative plan بصيغة JSON أو YAML تتضمن ما ينبغي إنشاؤه لتشغيل التطبيق، وكيف سيُدّار. ثم يُحلل الخادم الرئيسي هذه الخطة، ويحدد أنسب الطرق لتشغيلها على البنية التحتية المتوفرة له، وذلك عبر فحص المتطلبات اللازمة والحالة الحالية للنظام والموازنة بينهما. وتمثل مجموعة التطبيقات التي خصصها المستخدم لتعمل وفق خطة محددة الطبقة الأخيرة في <a href="https://academy.hsoub.com/devops/cloud-computing/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-kubernetes-r467/" rel="">نظام Kubernetes</a>.
</p>

<p>
	يجعل هذا النهج التصريحي من إدارة التطبيقات المعقدة أكثر سهولة وقابلية للتوسع ويسمح للمطورين بالتركيز على وصف ما يريدونه، بينما يتولى كوبرنيتس Kubernetes تفاصيل التنفيذ.
</p>

<h2 id="masterserver">
	مكونات الخادم الرئيسي Master Server
</h2>

<p>
	يتحكم الخادم الرئيسي بعناقيد Kubernetes، ويؤمن نقطة اتصال رئيسية لمدراء الأنظمة administrators والمستخدمين، ويوفر العديد من الأنظمة لإدارة العقد العاملة worker nods الأقل منه تطورًا على نطاق العنقود.
</p>

<p>
	بالعموم، تؤدي مكونات الخادم الرئيسي مجموعةً من الوظائف أبرزها: قبول طلبات المستخدمين، وتحديد أفضل الطرق لجدولة حاويات أحمال العمل workload containers، وإجراء المصادقة بين العملاء والعقد، وضبط قواعد التوجيه والوصول الشبكي على مستوى العنقود، وإدارة مهام التوسعة والتحقق من سلامة النظام.
</p>

<p>
	تُثبَّت مكونات الخادم الرئيسي (التي سنذكرها تاليًا) على خادم واحد أو على عدة خوادم حسب الحالة.
</p>

<h3 id="etcd">
	المَخزَّن العام للإعدادات etcd
</h3>

<p>
	يُعدّ المَخزَّن العام للإعدادات واحدًا من أهم المكونات الضرورية لعمل عنقود Kubernetes، يوفره <a href="https://etcd.io/" rel="external nofollow">مشروع etcd</a> الذي أنشأه فريق تطوير CoreOS (وهو نظام التشغيل الموجه للحاويات ويمكنك معرفة المزيد عنه بقراءة <a href="https://academy.hsoub.com/devops/cloud-computing/%D9%85%D9%82%D8%AF%D9%91%D9%85%D8%A9-%D8%A5%D9%84%D9%89-%D9%85%D9%83%D9%88%D9%86%D8%A7%D8%AA-%D9%86%D8%B8%D8%A7%D9%85-coreos-r11/" rel="">مقدّمة إلى مكونات نظام CoreOS</a>). و etcd هو نظام لتخزين ملفات الإعدادت وإدارتها بشكل موزع، وهو عبارة عن مَخزَنَ قيم-مفاتيح موزّع على المستوى العام لنظام Kubernetes، ويتصف بأنه خفيف في استخدام الموارد، ويمكن تهيئته لتمرير الإعدادات بين عدة عقد.
</p>

<p>
	إذ يُخزِّن Kubernetes بيانات الإعدادات التي يُسمح لكل عقدة بالوصول إليها في مَخزَّن <code>etcd</code>. وتستخدم مكونات Kubernetes هذه البيانات لاكتشاف الخدمة المطلوبة، وتهيئة نفسها للعمل حسب المعطيات الجديدة، وتساهم أيضًا في الحفاظ على حالة العنقود بواسطة ميزات، مثل: اختيار القائد leader election، والقفل الموزع distributed locking وغيرها. وتجري عملية تعيين القيم أو استردادها بواسطة <a href="https://academy.hsoub.com/programming/general/%D9%85%D8%A7-%D9%87%D9%8A-%D8%A7%D9%84%D9%88%D8%A7%D8%AC%D9%87%D8%A9-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D9%8A%D8%A9-%D9%84%D9%84%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA-api%D8%9F-r1512/" rel="">واجهة برمجة تطبيقات HTTP/JSON <abbr title="Application Programming Interface | واجهة برمجية"><abbr title="Application Programming Interface | واجهة برمجية">API</abbr></abbr></a> بسيطة تجعل العملية سلسة وواضحة.
</p>

<p>
	يمكن بناء <code>etcd</code> على خادم رئيسي واحد أو جعله موزعًا على عدة آلات في بعض بيئات الإنتاج، والشرط الوحيد هو توفر اتصال شبكي يصله بجميع آلات العنقود.
</p>

<h3 id="kubeapiserverapi">
	خادم kube-apiserver <abbr title="Application Programming Interface | واجهة برمجية"><abbr title="Application Programming Interface | واجهة برمجية">API</abbr></abbr>
</h3>

<p>
	خادم <abbr title="Application Programming Interface | واجهة برمجية"><abbr title="Application Programming Interface | واجهة برمجية">API</abbr></abbr> من أهم الخدمات المحورية على الخادم الرئيسي لعنقود Kubernetes، ويُعدّ نقطة الإدارة الرئيسية للعنقود بأكمله فهو يسمح للمستخدم بإعداد أحمال العمل والوحدات التنظيمية، والتحقق من توافق تفاصيل الخدمة على الحاويات المنشورة مع البيانات الموجودة في مخزَّن <code>etcd</code>. يمكنك النظر إلى خادم <abbr title="Application Programming Interface | واجهة برمجية"><abbr title="Application Programming Interface | واجهة برمجية">API</abbr></abbr> مثل جسر يصل المكونات ببعضها، ويعمل للحفاظ على سلامة العنقود، ولنقل المعلومات والأوامر عبره.
</p>

<p>
	يطبق هذا الخادم واجهة برمجة تطبيقات من نوع <a href="https://academy.hsoub.com/programming/general/%D8%B4%D8%B1%D8%AD-%D9%81%D9%84%D8%B3%D9%81%D8%A9-restful-%D8%AA%D8%B9%D9%84%D9%85-%D9%83%D9%8A%D9%81-%D8%AA%D8%A8%D9%86%D9%8A-%D9%88%D8%A7%D8%AC%D9%87%D8%A7%D8%AA-rest-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D9%8A%D8%A9-r635/" rel="">RESTful <abbr title="Application Programming Interface | واجهة برمجية"><abbr title="Application Programming Interface | واجهة برمجية">API</abbr></abbr></a>، وتضع شهرتها الواسعة العديد من المكتبات والأدوات في أيدي مستخدمي Kubernetes لتيسير عليهم التخاطب مع خادم <abbr title="Application Programming Interface | واجهة برمجية"><abbr title="Application Programming Interface | واجهة برمجية">API</abbr></abbr>. يتوفر لخادم kube-apiserver عميلٌ افتراضي يدعى kubectl يتيح لك الاتصال مع عنقود Kubernetes من حاسبك المحلي.
</p>

<p>
	<iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="" frameborder="0" height="480" id="ips_uid_9500_6" src="https://academy.hsoub.com/applications/core/interface/index.html" title="شرح مفاهيم RESTful - تعلم كيف تبني واجهات REST برمجية API" width="853" data-embed-src="https://www.youtube.com/embed/MgWJympekBU"></iframe>
</p>

<h3 id="kubecontrollermanager">
	مدير التحكم kube-controller-manager
</h3>

<p>
	مدير التحكم controller manager هو خدمة عامة تتولى عدة مسؤوليات ضمن العنقود، أولها إدارة المتحكمات المختلفة التي تنظم حالة العنقود، وإدارة دورات حياة حمل العمل workload، بالإضافة لبعض المهام الروتينية الأخرى. فعلى سبيل المثال: يفحص متحكم النظائر replication controller عدد النظائر المحددة لكائن <a href="https://academy.hsoub.com/devops/cloud-computing/%D8%AA%D8%B9%D9%84%D9%85-%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A7%D8%AA-kubernetes-r468/" rel="">pod</a> معين (أي عدد تكراراته أو النسخ المماثلة له)، ويتأكد أن هذا العدد مطابقٌ للعدد الفعلي المنشور حاليًا على العنقود. تُكتب تفاصيل العمليات جميعها في <code>etcd</code>، ويراقب مدير التحكم التغييرات التي تطرأ على المعلومات ضمنه بواسطة خادم <abbr title="Application Programming Interface | واجهة برمجية"><abbr title="Application Programming Interface | واجهة برمجية">API</abbr></abbr>.
</p>

<p>
	عندما يحدث أي تغيير، يقرأ المتحكم المعلومات الجديدة، ويُطبق الإجراءات اللازمة للوصول إلى الحالة المطلوبة، فقد يعمل مثلًا على توسيع نطاق التطبيق أو تقليصه، أو على ضبط نقاط الوصول الخاصة به endpoints أو غير ذلك.
</p>

<h3 id="kubescheduler">
	المُجَدّوِل kube-scheduler
</h3>

<p>
	الجدولة هي ربط أحمال العمل بالعقد؛ فتحدد خدمة المُجَدّوِل ما ستُنفذه كل عقدة. تقرأ الخدمة متطلبات تشغيل كل حمل عمل، وتُحلل مواصفات بيئة البنية التحتية الحالية المتوفرة، وبناءً على ذلك تقرر أي عقد أو مجموعة عقد هي المقبولة لتنفيذ العمل.
</p>

<p>
	يتتبع المُجَدّوِل الإمكانات المتاحة على كل مضيف، ليضمن أن أحمال العمل لم تُجَدول على العقد بطريقة خاطئة تتعارض مع الموارد المتاحة. وبالتالي يعرف المُجَدّوِل في كل لحظة الموارد الإجمالية المتوفرة والموارد المخصصة حاليًّا لأحمال العمل.
</p>

<h3 id="cloudcontrollermanager">
	مدير التحكم السحابي cloud-controller-manager
</h3>

<p>
	نظام Kubernetes قابلٌ للنشر في بيئات متعددة، ويمكنه التعامل مع خدمات البنى التحتية لمزودين مختلفين، فيأخذ معلومات عن حالة الموارد الحاسوبية التي توفرها للعنقود ويديرها حسب متطلباته. ولكونه يتعامل مع تمثيلات عامة للموارد الحاسوبية مثل: <a href="https://academy.hsoub.com/devops/servers/web/nginx/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%A5%D8%B9%D8%AF%D8%A7%D8%AF-%D9%85%D9%88%D8%A7%D8%B2%D9%86%D8%A9-%D8%A7%D9%84%D8%AD%D9%85%D9%84-load-balancing-%D8%B9%D9%84%D9%89-nginx-r20/" rel="">موازنات الحمل Load Balancers</a> والحجوم التخزينية وغيرها، فإنه يحتاج لربط map هذه التمثيلات بالموارد الفعلية التي يوفرها له مزودو الخدمات السحابية المتعددون.
</p>

<p>
	وهنا تبرز أهمية مدير التحكم السحابي، إذ يسمح لنظام Kubernetes بالتخاطب مع مزودي خدمات مختلفين في المزايا والإمكانات وواجهات <abbr title="Application Programming Interface | واجهة برمجية"><abbr title="Application Programming Interface | واجهة برمجية">API</abbr></abbr>، مع الحفاظ على بنيته الداخلية عامة نوعًا ما بالرغم من تنوع الخدمات السحابية التي يتعامل معها. يعطي ذلك Kubernetes القدرة على تحديث معلومات الحالة لديه بناءً على المعلومات التي يوفرها له المزود السحابي، ويستخدمها لضبط الموارد السحابية المخصصة له لتلبي متغيرات العمل، فقد يُنشئ مثلًا خدمات سحابية إضافية عندما تزداد احتياجات العمل المطلوبة من العنقود.
</p>

<h2 id="nodeserver">
	مكونات خادم العقدة Node Server
</h2>

<p>
	<strong>العقد Nodes</strong> في Kubernetes هي الخوادم التي تعمل عليها حاويات التطبيق؛ تتطلب العقد بعض الضروريات لتؤدي أعمالها في التخاطب مع مكونات الخادم الرئيسي، وضبط إعدادات الاتصال الشبكي للحاويات، وتشغيل أحمال العمل التي يكلفها بها الخادم الرئيسي.
</p>

<h3 id="containerruntime">
	بيئة تشغيل الحاوية Container Runtime
</h3>

<p>
	بيئة تشغيل الحاوية Container Runtime من أهم مكونات العقدة، ودوكر <a href="https://academy.hsoub.com/devops/cloud-computing/docker/%D9%86%D8%B8%D8%B1%D8%A9-%D8%B9%D8%A7%D9%85%D9%91%D8%A9-%D8%B9%D9%84%D9%89-%D8%A5%D8%B9%D8%AF%D8%A7%D8%AF-%D8%A7%D9%84%D8%AD%D8%A7%D9%88%D9%8A%D9%91%D8%A7%D8%AA-containerization-%D8%B9%D9%84%D9%89-docker-r23/" rel="">Docker</a> هو من أشهر بيئات التشغيل المعتمدة، لكنه ليس الوحيد، إذ يوجد بدائل له أخرى مثل <a href="https://www.redhat.com/en/technologies/cloud-computing/openshift" rel="external nofollow">rkt</a> المطُور من قبل CoreOS وكان يُعتبر بديلاً أكثر أماناً وقابلية للتحكم مقارنة بدوكر و <a href="https://github.com/opencontainers/runc" rel="external nofollow">runc</a> وهو مكون منخفض المستوى يستخدمه دوكر نفسه لتنفيذ الحاويات.
</p>

<p>
	تتولى أدوات بيئة تشغيل الحاوية عمليات بدء تشغيل الحاويات وإدارتها، و<a href="https://academy.hsoub.com/devops/cloud-computing/%D8%A3%D8%A8%D8%B1%D8%B2-%D8%A7%D9%84%D9%85%D9%81%D8%A7%D9%87%D9%8A%D9%85-%D8%A7%D9%84%D8%AA%D9%8A-%D9%8A%D8%AC%D8%A8-%D8%B9%D9%84%D9%8A%D9%83-%D8%A7%D9%84%D8%A5%D9%84%D9%85%D8%A7%D9%85-%D8%A8%D9%87%D8%A7-%D8%B9%D9%86-%D8%A7%D9%84%D8%AD%D8%A7%D9%88%D9%8A%D8%A7%D8%AA-r561/" rel="">الحاويات Containers</a> هي تطبيقات خفيفة مغلفة في بيئة تشغيل معزولة، وتُعدّ المكون الأساسي في وحدات عمل عنقود Kubernetes، فتشتمل كل وحدة عمل على حاوية واحدة ينبغي نشرها أو أكثر حسب متطلبات المشروع. وعندما ترد أحمال العمل إلى العنقود تعمل بيئة تشغيل الحاوية على تشغيل الحاويات المطلوبة لتنفيذ العمل.
</p>

<h3 id="kubelet">
	نقطة اتصال العقدة kubelet
</h3>

<p>
	نقطة اتصال العقدة kubelet هي صلة الوصل التي تربط كل عقدة ببقية أجزاء العنقود. وهي خدمة صغيرة تنقل المعلومات ذهابًا وإيابًا بين العقدة وخدمات مستوى التحكم على الخادم الرئيسي، وتتخاطب أيضًا مع مخزن الإعدادات <code>etcd</code> لقراءة بيانات العمل منه أو كتابة بيانات جديدة فيه.
</p>

<p>
	تتواصل <code>kubelet</code> مع مكونات الخادم الرئيسي لإتمام عملية المصادقة بين العقدة والعنقود، وللحصول على الأوامر وتفاصيل الأعمال المُسندة إليها، والتي تردها بصيغة <strong>بيان manifest</strong> أو خطة تحدد حمل العمل المطلوب ومعطيات parameters التشغيل. تحافظ <code>kubelet</code> على حالة العمل على العقدة، وتتحكم ببيئة تشغيل الحاوية لإنشاء الحاويات أو تدميرها حسب الحاجة.
</p>

<h3 id="kubeproxy">
	الوكيل kube-proxy
</h3>

<p>
	يستخدم الوكيل لإدارة الشبكات الفرعية داخل المضيف، وجعل الخدمات متاحة بين المكونات، وهو خدمة صغيرة تدعى <strong>kube-proxy</strong> توجد على كل عقدة، توجه الطلبات الواردة إليها إلى الحاوية المسؤولة عن تنفيذها، وتجري نوعًا مبسطًا من موازنة الحمل Load Balancing، وتضمن أن سلوك الشبكة قابلًا للتنبؤ به، وأنها متاحة أو معزولة حيث ينبغي ذلك.
</p>

<h2 id="kubernetes-3">
	كائنات Kubernetes وأحمال العمل
</h2>

<p>
	يستخدم Kubernetes طبقات تجريد abstraction إضافية فوق الحاويات -التي تُعدّ الآلية الرئيسية لنشر التطبيقات المغلفة containerized applications- توفر هذه التجريدات للمستخدمين ميزات المرونة والتوسع وإدارة دورة الحياة، فبدلًا من تعاملهم مع الحاويات مباشرةً يتفاعلون مع المثيلات instances التي تتألف من مجموعة مكونات أولية يوفرها نموذج عمل كائن Kubernetes، سنعرض في هذه الفقرة كائنات Kubernetes وكيفية استخدامها للتعامل مع أحمال الحمل.
</p>

<h3 id="pods">
	الكائنات Pods
</h3>

<p>
	الكائن Pod هو أصغر وحدة تنظيمية يتعامل معها عنقود Kubernetes، تتكون من حاوية أو مجموعة حاويات، فعند الإعداد لا نخصص الحاويات على مضيف معين، إنما نشير إليها بكائن Pod الذي تنتمي إليه.
</p>

<p>
	تمثل الحاويات الموجودة في Pod واحد تطبيقًا واحدًا أي أنها تعمل معًا بارتباطٍ وثيق، فتتشارك دورة الحياة، وتُجدّوَل أعمالها على عقدة واحدة، وتُدار بصفتها وحدة واحدة، وتتقاسم بيئة التشغيل والموارد مثل: المساحات التخزينية وعناوين IP. فِكِّر دائمًا بالكائن Pod على أنه تطبيق واحد متجانس بالرغم من تعدد حاوياته، لتفهم كيف يتعامل معه العنقود، ويُدّير موارده، ويُجدّول مهامه.
</p>

<p>
	يحتوي كل Pod على حاوية رئيسية لا غنى عنها تلبي الهدف العام من حمل العمل workload، وقد يحتوي حاويات أخرى اختيارية تؤدي مهامًا مساعدة حسب احتياجات مشروعك، تتضمن الحاويات المساعدة عادةً برامج مستقلة تعمل وتُدار فيها باستقلالية لكنها ترتبط بالمشروع بطريقة أو بأخرى، لذا توضع معه في كائن Pod واحد. على سبيل المثال: قد يتضمن Pod معين حاويةً رئيسية لتشغيل خادم التطبيق، وحاويةً مساعدة تتحسس لأي تغييرات تحدث على مستودع خارجي متعلق به، وتسحب الملفات المرتبطة منه إلى نظام الملفات المشترك داخل Pod. لا يُنصح عادةً بالتوسع الأفقي على مستوى كائنات Pods إذ تترك هذه المهمة عادة لكائنات أخرى بمستوى أعلى.
</p>

<p>
	لا يُدّير المستخدمون عمومًا كائنات Pods بأنفسهم، فهي لا توفر لهم المميزات التي غالبًا ما يحتاجونها لإدارة تطبيقاتهم، مثل: الإدارة المتقدمة لدورة حياة التطبيق أو إدارة عمليات التوسعة Scaling، وبالمقابل تشجعهم بنية Kubernetes على استخدام كائنات بمستوى أعلى، تستخدم بدورها كائنات Pods أو قوالب Pods لتأدية الوظائف.
</p>

<h3 id="">
	متحكمات النظائر ومجموعات النظائر
</h3>

<p>
	يعمل معظم من يستخدم Kubernetes مع نظائر متعددة للكائنات Pods مطابقة لها تمامًا، بدلًا من التعامل مع Pods مفردة. تُنشئ هذه النظائر انطلاقًا من قوالب Pod، وتوسعها أفقيًا متحكماتٌ خاصة تدعى متحكمات النظائر Replication Controllers ومجموعات النظائر Replication Sets.
</p>

<p>
	<strong>متحكم النظائر replication controller</strong> هو أحد كائنات Kubernetes، مسؤول عن تحديد قالب Pod الذي ستُبنى النظائر انطلاقًا منه، وأيضًا عن تحديد معطيات التحكم التي تُمَكِّنهُ من إدارة التوسعة الأفقية لنظائر Pod فيزيد عدد النظائر قيد التشغيل أو ينقصها حسب الحاجة. تمثل هذه العملية طريقةً سهلة لموازنة الحمل وتحسين التوافرية availability داخل نظام Kubernetes، فالقالب الذي ستنشئ منه النظائر الجديدة، والذي يشبه إلى حدٍ كبير تعريف للكائن Pod، يكون مضمنًا embedded في إعدادات متحكم النظائر.
</p>

<p>
	يتأكد متحكم النظائر باستمرار من تطابق عدد Pods المنشورة فعليًّا على العنقود مع العدد المطلوب والمحدد في إعدادته. وفي حال فشل أي Pod أو مضيف، سيستجيب المتحكم على الفور، ويبدأ بتشغيل Pods جديدة لتعويض النقص. أما إذا طرأ أي تغيير على عدد النظائر المحدد في إعداداته بالزيادة أو النقصان فسيُشغِّل المتحكم حاويات جديدة أو يدمر الحاويات الموجودة أصلًا ليصل للعدد المطلوب. يؤدي متحكم النظائر أيضًا مهمة التحديثات التدريجية rolling updates فيَنقُل مجموعة Pods إلى الإصدار الجديد بالتتابع واحدًا تلو الآخر حتى لا يسبب انقطاع كلي للخدمة فيؤثر على توافرية التطبيق.
</p>

<p>
	<strong>مجموعات النظائر Replication sets </strong> تتمتع بتصميم مشابه لتصميم متحكم النظائر، مع مرونة أكبر في آلية تعريف المتحكم لكائنات Pods التي سيُدِّيرها. يتسع نطاق الاعتماد على مجموعات النظائر على حساب متحكمات النظائر، بسبب إمكاناتها الكبيرة في اختيار النظائر، لكنها بالمقابل قاصرة عن إجراء التحديثات التدريجية للتطبيق وترقية واجهاته الخلفية إلى إصدار جديد كما تفعل متحكمات النظائر، فقد صممت مجموعات النظائر لتعمل في وحدات تنظيمية أخرى أعلى منها مستوى تؤدي هذه المهمة.
</p>

<p>
	تمامًا مثل Pods، تُعدّ متحكمات النظائر ومجموعات النظائر وحداتٍ أولية في نظام Kubernetes وناردًا ما يتعامل معها المستخدم العادي، رغم أنها توفر لتطبيقاته التوسعة الأفقية والوثوقية في العمل، إلَا أنها تفتقر لمميزات إدارة دورات الحياة بطريقة سلسة يفضلها المستخدمون والموجودة في مكونات Kubernetes الأكثر تعقيدًا.
</p>

<h3 id="deployments">
	النشر Deployments
</h3>

<p>
	يُعدّ النشر Deployments واحدًا من أشهر أحمال العمل التي تُنشئ وتُدار مباشرةً على Kubernetes. تستخدم عمليات النشر مجموعات النظائر بوصفها كتلة بناء أو مكون أساسي تُبنى منه، وهذا ما يمنح مجموعات النظائر المرونة التي تفتقدها في إدارة دورة الحياة.
</p>

<p>
	للوهلة الأولى قد تبدو لك عمليات النشر deployments المكونة من اجتماع عدد من مجموعات النظائر مشابهة في وظائفها لمتحكمات النظائر، إلّا أنها في الواقع تعالج العديد من نقاط ضعفها في إطلاق التحديثات. فعند استخدام المتحكمات ينبغي عليك إعداد خطة لمتحكم النظائر الجديد الذي سيحل محل المتحكم الحالي، وستكون أعمال كثيرة مثل: سجلات تتبع الأحداث، واستعادة التطبيق في حال طرأ عطل في الشبكة، والتراجع عن التحديث rolling back، عملياتٍ صعبة التنفيذ أو تلقى مسؤوليتها على المستخدم.
</p>

<p>
	إذًا فالنشر Deployments هو كائن عالي المستوى، ومصمم لتسهيل إدارة دورة حياة نظائر Pods، وهو أكثر الكائنات التي ستعمل معها مباشرةً في Kubernetes، إذ يمكنك تعديله بسهولة حسب ما تريد فكل ما يتطلبه الأمر تعديل إعداداته، وبعدها سيضبط Kubernetes مجموعات النظائر replica sets بناءً على إعداداتك، ويدير الانتقالات بين إصدارات التطبيق مع تفعيل اختياري لميزات مثل: سجل تتبع الأحداث والتراجع الآلي عن التحديث وغيرها.
</p>

<h3 id="statefulsets">
	مجموعات الحالة Stateful sets
</h3>

<p>
	مجموعات الحالة Stateful sets هي pod تحكم متخصصة نوعًأ ما، تضمن ترتيب طلبات إنشاء Pods في مجموعة الحالة، وأن يمتلك كل Pod في هذه المجموعة معرفًا فريدًا خاصًا به. وتوفر للمستخدمين تحكمًا دقيقًا في المشاريع ذات المتطلبات الخاصة سواءً على صعيد النشر أو الاستقرار الشبكي أو وجود البيانات الدائمة Persistent data التي تبقى متاحة لوقت طويل دون تغيير. فغالبًا ما ترتبط مجموعات الحالة بالتطبيقات الموجهة للبيانات، مثل قواعد البيانات التي تتطلب وصولًا دائمًا لوحدات التخزين نفسها في جميع الظروف حتى إذا أُعِيدَت جدولتها على عقدة جديدة.
</p>

<p>
	توفر مجموعات الحالة مُعرِّفًا شبكيًا ثابتًا لكل Pod، هو اسمٌ عددي فريد يشير إلى Pod بعينها دائمًا حتى إذا انتقلت إلى عقدة أخرى. والأمر نفسه مع وحدات التخزين الدائمة التي تنتقل مع Pod إن أُعِيدَت جدولتها لسبب ما. علماً أن وحدات التخزين الدائمة هذه تبقى موجودة ولا تحذف تلقائيًا مع حذف Pod لمنع الفقدان غير المقصود للبيانات.
</p>

<p>
	تنفذ مجموعات الحالة العمليات المناطة بها في أثناء النشر أو ضبط التوسعة وفقًا للمُعرِّف الفريد، ويعزز ذلك إمكانية التنبؤ والتحكم بترتيب التنفيذ، ويُعدّ مفيدًا في بعض المشاريع ذات الطبيعة الخاصة.
</p>

<h3 id="daemonsets">
	مجموعات برامج التشغيل الخلفية Daemon Sets
</h3>

<p>
	<strong>مجموعات البرامج الخفية Daemon sets</strong> هي نموذج متخصص آخر من متحكمات pod التي تُشَغِّل نسخة من pod معين على كل عقدة (أو مجموعة عقد مترابطة) في العنقود. وتبرز فائدتها عند نشر Pods الخدمية لعقد Kubernetes مثل Pods الصيانة وغيرها.
</p>

<p>
	فعلى سبيل المثال تُعدّ خدمات نحو: جمع ملفات تسجيل الأحداث وإعادة توجيهها، وتنظيم المقاييس، وتشغيل الخدمات التي تزيد من إمكانات العقد وغيرها، حالات شائعة للاستفادة من مجموعات البرامج الخفية. ولا تخضع مجموعات البرامج الخفية لقيود الجدولة المفروضة على pods العادية والتي تربطها بمضيفين معينين، ذلك أنها تقدم خدمات أساسية ومطلوبة في كامل نظام Kubernetes حتى **على الخادم الرئيسي، الذي يُعدّ محظورًا على المجدول بسبب مسؤولياته الخاصة، إلّا أن مجموعات البرامج الخلفية تتجاوز هذه القيود لتتأكد من سلامة تشغيل الخدمات الرئيسية.
</p>

<h3 id="jobscronjobs">
	المهام Jobs والمهام الدورية Cron Jobs
</h3>

<p>
	تتصف معظم أحمال العمل التي أوردناها في المقال بدورة حياة طويلة الأمد تشبه دورة حياة الخدمة، لكن Kubernetes يستخدم أيضًا نوعًا آخر من أحمال العمل يسمى <strong>المهام jobs</strong> لتأمين سير عمل أشبه بالمأمورية المؤقتة task-based تخرج فيه الحاوية من الخدمة بعد مضي بعض الوقت وانتهاء مهمتها. تساعدك كائنات المهام Jobs على تنفيذ العمليات التي لا تتطلب تشغيل خدمات دائمة، مثل: العمليات الدفعية batch أو العمليات التي تُجرى لمرة واحدة.
</p>

<p>
	تُبنى <strong>المهام الدورية cron jobs</strong> على المهام jobs. وهي تماثل جدولة المهام بتقنية <code>cron</code> في لينكس وغيره من أنظمة يونيكس المشابهة التي تُنَفَذ بموجبها السكربتات وفقًا لجدول زمني محدد، إذ توفر المهام الدورية في Kubernetes واجهة لتشغيل المهام بواسطة المجدول (مكون الخادم الرئيسي الذي ذكرناه سابقًا). تستخدم المهام الدورية لضبط تنفيذ مهمة معينة بوقت محدد في المستقبل، سواء لمرة واحدة أو لتكرار تنفيذها بانتظام. ويمكنك النظر إلى المهام الدورية في Kubernetes على أنها تطبيق لمهام cron التقليدية ولكن على منصة كاملة هي العنقود بدلًا من نظام تشغيل منفرد.
</p>

<p>
	<iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="" frameborder="0" height="534" id="ips_uid_9500_7" src="https://academy.hsoub.com/applications/core/interface/index.html" title="ما هي تقنية cron لجدولة المهام" width="1519" data-embed-src="https://www.youtube.com/embed/uLnPBHU_lw4"></iframe>
</p>

<h2 id="kubernetes-4">
	مكونات أخرى لنظام Kubernetes
</h2>

<p>
	يوفر Kubernetes عددًا من التجريدات إضافةً إلى أحمال العمل تساعدك على إدارة تطبيقاتك، والتحكم بالشبكات، وتأمين الاستمرارية وغير ذلك، سنناقش بعضًا منها أدناه:
</p>

<h3 id="kubernetes-5">
	خدمات Kubernetes
</h3>

<p>
	استخدمنا مصطلح "خدمة service" بالمعنى التقليدي كما في أنظمة يونيكس، أي للدلالة على العمليات طويلة الأمد، والتي غالبًا ما تتصل بالشبكة، وتستجيب للطلبات. إنما في Kubernetes تعمل <strong>الخدمة</strong> بصفتها موازن حمل أساسي داخلي ومرسال لوحدات pods. وتجمع الخدمة مجموعات منطقية من pods التي تؤدي الوظيفة نفسها، وتقدمها بوصفها كيان واحد.
</p>

<p>
	يمكنك مثلًا نشر خدمة لتتبع الحاويات الخلفية من نوع معين وتوجيه الطلبات إليها. علمًا أن كل ما يحتاج المستهلكون الداخليون لمعرفته عن الخدمة هو نقطة النهاية الثابتة التي توفرها فقط دون أي تفاصيل أخرى، يتيح لك هذا التجريد توسيع نطاق وحدات العمل العاملة في الخلفية أو استبدالها حسب الحاجة، وسيبقى عنوان IP المخصص للخدمة ثابتًا بصرف النظر عن أي تغيير يطرأ على pods المرتبطة به. يكسبك نشر الخدمات قابلية الاكتشاف ويبسيط تصميم حاوياتك.
</p>

<p>
	تفيدك الخدمات في الحالات التي تحتاج فيها للوصول إلى pods تطبيق آخر أو للاتصال مع مستهلكين خارجيين. فعلى سبيل المثال: إذا كان لتطبيقك عددٌ من pods العاملة على <a href="https://academy.hsoub.com/devops/servers/web/" rel="">خوادم الويب</a> ويتصل بها العملاء عن طريق الإنترنت، فإن بناء خدمة خاصة بهذه الحالة سيوفر لك التجريد اللازم. وهذا مثال آخر: لنفترض أن خوادم الويب في مشروعك بحاجة لتخزين البيانات واستردادها في <a href="https://academy.hsoub.com/devops/servers/databases/" rel="">قاعدة بيانات</a> معينة، فيمكنك تأمين وصولها إلى pods قاعدة البيانات عبر بناء خدمة داخلية تتكفل بالأمر.
</p>

<p>
	خدمات Kubernetes متاحة افتراضيًا داخل العنقود بعنوان IP الخاص بها، وإذا أردت طلبها من الخارج فيمكنك تحقيق ذلك بعدة طرق، تتمثل إحداها بفتح منفذ ثابت static port خاص بالخدمة على واجهة الشبكة الخارجية لكل عقدة، ثم توجيه حركة المرور الواردة إليه تلقائيًا إلى عنوان IP الداخلي للخدمة، وبالتالي إلى pods المناسبة. تسمى هذه الطريقة NodePort.
</p>

<p>
	أو يمكنك استخدام خدمة خاصة من نوع موازن حمل LoadBalancer تُنشئ لك موازن حمل خارجي يوجه حركة البيانات نحو الخدمة الداخلية المقصودة، تُنَفَذ هذه الطريقة باستخدام تكامل موازن الحمل الخاص بمزود Kubernetes السحابي، إذ ينشئ مدير التحكم السحابي الموارد اللازمة ويربطها بعناوين خدمة موازن الحمل التي تشير لخدمتنا الداخلية المقصودة.
</p>

<h3 id="-1">
	وحدات التخزين ووحدات التخزين الدائمة
</h3>

<p>
	تُعدّ مشاركة البيانات بين أكثر من حاوية مشاركةً موثوقة، والحفاظ عليها وضمان توفرها بين عمليات إعادة تشغيل الحاويات، تحدّيًا كبيرًا في العديد من بيئات الحاويات. وتوفر بعض بيئات تشغيل الحاويات آليات خاصة ترتبط وحدات التخزين بالحاوية، وتحافظ عليها بعد انتهاء عمر الحاوية، لكن هذه الآليات تفتقد غالبًا للمرونة في التنفيذ العملي.
</p>

<p>
	يستخدم Kubernetes تجريدًا خاصًا لمعالجة هذا التحدّي يدعى <strong>وحدات التخزين volumes</strong>، يسمح للحاويات المغلفة في pod واحد بمشاركة البيانات فيما بينها، والإبقاء عليها متاحة لحين انتهاء عمل pod، وحتى إذا فشلت حاوية معينة أو توقفت لسبب من الأسباب فالبيانات المشتركة ستبقى قابلة للوصول طالما أن pod موجود، وعند إنهاء عمله يُحذف المجلد المشترك. يُسهّل ذلك مشاركة الملفات بين عناصر pod الواحد دون الحاجة لأي آليات خارجية معقدة، لكنه لا يُعدّ حلًا مناسبًا للبيانات الدائمة التي لا تتعلق بعمر pod بل تستمر بعدها.
</p>

<p>
	لذا يوفر Kubernetes تجريدًا أقوى لتخزين البيانات الدائمة، يسمى <strong>وحدات التخزين الدائمة Persistent volumes</strong>، لا يرتبط بدورة حياة pod، ويسمح لمديري النظام بإعداد موارد التخزين على مستوى العنقود ليتمكن المستخدمون من حجزها لكائنات pod التي يُشغِّلونها حسب تفضيلاتهم. ويحدد كل مستخدم سياسة الاسترداد الخاصة به، التي تقرر فيما إذا كانت وحدة التخزين وبياناتها ستُحذف يدويًا من قبله أم آليًّا عند انتهاء عمر pod. يخفف استخدام وحدات التخزين الدائمة من المخاطر المترتبطة بحالات فشل العقدة، ويساعدك على زيادة مساحات التخزين المخصصة لصالح مشروعك عمّا هو متاحٌ له محليًّا على المضيف.
</p>

<h3 id="annotationslabels">
	التعليقات التوضيحية Annotations والتسميات التوضيحية Labels
</h3>

<p>
	<strong>التسميات التوضيحية label</strong> هي تجريد تنظيمي في Kubernetes ينظم المفاهيم الأخرى في النظام ويوضحها، وهي علاماتٌ دلالية ترفق بكائنات Kubernetes لوسمها بوسمٍ خاص يشير لانتمائها لمجموعة معينة، أي أنها تُستَخدم لتصنيف الكائنات ولاستهداف مثيلات مختلفة لأغراض الإدارة أو التوجيه أو غيرها، فمثلًا تعتمد الخدمات على التسميات التوضيحية لمعرفة pods الواجهة الخلفية التي ينبغي توجيه الطلبات إليها، وكذلك الأمر مع كائنات التحكم التي تستعمل التسميات التوضيحية لتحديد pods التي ستعمل عليها.
</p>

<p>
	تُوضع التسميات التوضيحية بهيئة أزواج مفتاح-قيمة، ويمكن أن تحظى الوحدة التنظيمية عدة لصائق، لكنها لا تحمل أبدًا إلّا بقيمة واحدة لكل مفتاح. ومفتاح "الاسم name" هو أشهر المفاتيح، ويُعدّ مُعَرِّفًا عامًا متعدد الأغراض، يمكنك أيضًا تصنيف الكائنات وفق معايير أخرى حسب احتياجات عملك، مثل: مرحلة التطوير، وإمكانية الوصول العام، وإصدار التطبيق… إلخ.
</p>

<p>
	تشبه **التعليقات التوضيحية Annotations ** التسميات التوضيحية لكنها تترك لك الحرية في إرفاق أي تعليق تريده ضمن خانة القيمة للدلالة على الكائن ما دون الالتزام بمعايير محددة، في حين تفرض عليك التسميات التوضيحية قواعد معينة في كتابة المعلومات الدلالية لتجري مطابقتها عند اختيار pod. باختصار تساعدك التعليقات التوضيحية في إضافة بيانات تعريفية غنية للكائن لكنها لا تفيدك في تصنيفه أو تحديده لأمرٍ معين.
</p>

<h2 id="-2">
	الخلاصة
</h2>

<p>
	يتيح Kubernetes لمستخدميه تشغيل مشاريعهم المغلفة في الحاويات على منصة قوية وعالية التجريد، وبطريقة تكفل لهم قابلية التوسع والتوافرية العالية. وعندما تبدأ بالتعرف عليه ستبدو لك بنيته معقدة، ويصعب التعامل معها، لكن ما أن تفهم أساسياتها وكيفية توافق عناصرها معًا ستشعر بمرونتها وفائدتها الكبيرة للمشاريع مفتوحة المصدر والتطوير السحابي الأصلي، وبمزيد من التدريب ستصبح قادرًا على استثمار ميزاتها المتنوعة لتشغيل أحمال العمل وإدارتها على نطاق واسع، ولإنشاء تطبيقاتك السحابية الأصلية.
</p>

<p>
	ترجمة -وبتصرف- للمقال <a href="https://www.digitalocean.com/community/tutorials/an-introduction-to-kubernetes" rel="external nofollow">?What is Kubernetes</a> لصاحبه Justin Ellingwood.
</p>

<h2>
	اقرأ أيضًا
</h2>

<ul>
	<li>
		<a href="https://academy.hsoub.com/devops/cloud-computing/%D8%AA%D8%B9%D9%84%D9%85-%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A7%D8%AA-kubernetes-r468/" rel="">تعلم أساسيات Kubernetes</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/deployment/%D9%86%D8%B4%D8%B1-%D8%AA%D8%B7%D8%A8%D9%8A%D9%82-%D8%AC%D8%A7%D9%86%D8%BA%D9%88-%D8%A2%D9%85%D9%86-%D9%88%D9%82%D8%A7%D8%A8%D9%84-%D9%84%D9%84%D8%AA%D9%88%D8%B3%D9%8A%D8%B9-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D9%83%D9%88%D8%A8%D9%8A%D8%B1%D9%86%D8%AA%D8%B3-kubernetes-r662/" rel="">نشر تطبيق جانغو آمن وقابل للتوسيع باستخدام كوبيرنتس Kubernetes</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/cloud-computing/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-kubernetes-r467/" rel="">مدخل إلى Kubernetes</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/cloud-computing/docker/%D9%85%D8%A7-%D8%A7%D9%84%D9%81%D8%B1%D9%82-%D8%A8%D9%8A%D9%86-%D8%AF%D9%88%D9%83%D8%B1-docker-%D9%88%D9%83%D9%88%D8%A8%D9%8A%D8%B1%D9%86%D9%8A%D8%AA%D9%8A%D8%B3-kubernetes%D8%9F-r612/" rel="">ما الفرق بين دوكر Docker وكوبيرنيتيس Kubernetes؟</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">815</guid><pubDate>Wed, 07 Aug 2024 15:04:03 +0000</pubDate></item><item><title>&#x645;&#x642;&#x62F;&#x645;&#x629; &#x625;&#x644;&#x649; &#x627;&#x644;&#x627;&#x633;&#x62A;&#x636;&#x627;&#x641;&#x629; &#x627;&#x644;&#x633;&#x62D;&#x627;&#x628;&#x64A;&#x629; Cloud Hosting</title><link>https://academy.hsoub.com/devops/cloud-computing/%D9%85%D9%82%D8%AF%D9%85%D8%A9-%D8%A5%D9%84%D9%89-%D8%A7%D9%84%D8%A7%D8%B3%D8%AA%D8%B6%D8%A7%D9%81%D8%A9-%D8%A7%D9%84%D8%B3%D8%AD%D8%A7%D8%A8%D9%8A%D8%A9-cloud-hosting-r812/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2024_07/1764539349_.png.456e6e4a345d1fb6775e0839b68a4bc0.png" /></p>
<p>
	الاستضافة السحابية Cloud Hosting هي التقنية التي تتيح لك استخدام الخوادم الافتراضية حسب طلبك عبر الإنترنت، إذ يمكنك إنشاؤها أو تعديلها أو حذفها وفق ما تريد. تُستضاف الخوادم السحابية على خوادم مادية موجودة لدى مزود الخدمة، وتأخذ منها الموارد الحاسوبية التي تحتاجها من وحدات معالجة وذواكر ومساحات تخزين وغيرها، وبإمكانك تثبيت نظم التشغيل والبرمجيات التي تختارها على الخوادم السحابية. تستخدم الاستضافة السحابية عمومًا لاستضافة مواقع الويب أو التطبيقات الموزعة المعتمدة على الويب أو أي خدمات أخرى مشابهة.
</p>

<p>
	يتناول المقال المفاهيم الأساسية للاستضافة السحابية، ويشرح آلية عمل الحوسبة الافتراضية Virtualization مع عرضٍ لأهم مكوناتها، وأخيرًا مقارنة موجزة بين الاستضافة السحابية والاستضافات الأخرى.
</p>

<h2 id="">
	ما هي السحابة؟
</h2>

<p>
	السحابة مصطلح شائع يشير إلى <a href="https://academy.hsoub.com/devops/cloud-computing/%D9%85%D9%82%D8%AF%D9%85%D8%A9-%D8%A5%D9%84%D9%89-%D8%A7%D9%84%D8%AE%D9%88%D8%A7%D8%AF%D9%85-%D8%A7%D9%84%D8%B3%D8%AD%D8%A7%D8%A8%D9%8A%D8%A9-r807/" rel="">الخوادم</a> المتاحة للاستخدام العام عبر الإنترنت، وذلك إما باستئجارها استئجارًا مدفوعًا أو استخدامها بوصفها جزءًا من برنامج أو منصة خدمية. تتنوع الخدمات السحابية التي تستطيع استخدامها ومنها مثلًا: استضافة مواقع الويب، واستضافة الملفات ومشاركتها، واستضافة البرامج الموزعة وغير ذلك. تشير السحابة أيضًا إلى <a href="https://academy.hsoub.com/devops/cloud-computing/%D9%86%D8%B8%D8%B1%D8%A9-%D8%B9%D8%A7%D9%85%D8%A9-%D8%B9%D9%84%D9%89-%D8%A7%D9%84%D8%AD%D9%88%D8%B3%D8%A8%D8%A9-%D8%A7%D9%84%D8%B3%D8%AD%D8%A7%D8%A8%D9%8A%D8%A9-r809/" rel="">الحوسبة السحابية Cloud Computing</a>، وهي التقنية التي تتيح لك توسيع نطاق المهمة التي تنفذها لتشمل خوادم متعددة، فبدلًا من تنفيذها على خادم واحد بمواصفات عالية توزع المهمة على مجموعة خوادم أصغر تسمى العقد nodes.
</p>

<h2 id="-1">
	كيف تعمل الحوسبة الافتراضية؟
</h2>

<p>
	تتضمن بيئة الاستضافة السحابية مكونين رئيسيين: الخوادم الافتراضية التي تستضيف التطبيقات ومواقع الويب، والمضيفين الماديين المسؤولين عن إدارة الخوادم الافتراضية، وتتمثل الحوسبة الافتراضية في العلاقة بينهما، وهي التي تمنح الاستضافة السحابية مرونتها وقابليتها للتوسع مميزةً إياها عن الاستضافات الأخرى.
</p>

<h3 id="virtualservers">
	الخوادم الافتراضية Virtual Servers
</h3>

<p>
	الخادم الافتراضي الخاص Virtual private server أواختصارًأ VPS هو الأسلوب الأكثر انتشارًا للاستضافة السحابية، وخادم VPS هو خادم افتراضي يكافئ في عمله الحاسوب المادي، وله نظام تشغيله الخاص وعملياته الخاصة، ورغم أن الخوادم الافتراضية الموجودة على المضيف نفسه تتشارك في موارده الفيزيائية إلّا أن عمليات كل خادم افتراضي تبقى مستقلة تمامًا عن عمليات الخوادم الافتراضية الأخرى، فلا تتأثر أو تؤثر بها.
</p>

<p>
	تُنشر الخوادم الافتراضية وتُدار بواسطة برنامج خاص يسمى المراقب Hypervisor ويكون موجودًا على المضيف الفيزيائي، وبواسطته تُثبت نظم التشغيل على الخوادم الافتراضية. عمليًّا يعادل استخدام الخادم الافتراضي استخدام خادم مادي مخصص فلن تشعر بفرق بينهما، رغم أن الخادم الافتراضي يتشارك موارد مضيفه مع الخوادم الافتراضية الأخرى التي تقاسمه الاستضافة.
</p>

<h3 id="hosts">
	المضيفون Hosts
</h3>

<p>
	المُضيف هو الخادم الفيزيائي أو المادي الذي يستضيف الخادم الافتراضي، ويزوده بالموارد الحاسوبية اللازمة لعمله. يستخدم المُضيف طبقة برمجية تدعى برنامج المراقب Hypervisor لإدارة الموارد الحاسوبية ونشرها ومنحها للخوادم الافتراضية الموجودة تحت سلطته. يستخدم البعض مصطلح Hypervisor للإشارة إلى المضيفين الفيزيائيين المّثبت عليهم برامج المراقب مع خوادمهم الافتراضية.
</p>

<p>
	يخصص المضيف كل خادم افتراضي بذاكرة، ووحدات معالجة مركزية CPU، واتصالًا شبكيًا بمجرد تشغيله، ويعمل المراقب على جدولة العمليات بين CPU الافتراضية ونوى المعالجة الحقيقية في مهمة مستمرة وعالية الدقة فقد تستخدم خوادم افتراضية متعددة نوى المعالجة الحقيقية نفسها. يوجد عدة أنواع لبرنامج المراقب، تختلف عن بعضها بطريقة جدولة العمليات ومشاركة الموارد.
</p>

<h3 id="hypervisors">
	المراقبون Hypervisors
</h3>

<p>
	يتوفر لمضيفي السحابة اليوم عددٌ قليل من برامج Hypervisor الشائعة، ولكل منها أساليبه الخاصة في الحوسبة الافتراضية، لكن مهما بلغت الاختلافات بينها فجميع برمجيات المراقب في نهاية الأمر تؤدي دورًا جوهريًا واحدًا، هو تأمين الأدوات التي يحتاجها المضيف لنشر الخوادم الافتراضية، وصيانتها، ونقلها، وحذفها حسب الطلب.
</p>

<p>
	<strong>KVM</strong>، تختصر العبارة Kernel-Based Virtual Machine أو الأجهزة الافتراضية المعتمدة على نواة لينكس. تمامًا كما يوحي الاسم فهي بنية تحتية للحوسبة الافتراضية مدمجة في نواة نظام لينكس، وبمجرد تفعيلها يتحول الخادم المثبت عليه لينكس إلى Hypervisor، ويمكنه استضافة الخوادم الافتراضية مباشرةً بدون أي إضافات أخرى. تختلف KVM عن بقية برامج Hypervisor بأنها لا تحتاج إلى القيام بعملية إنشاء أو محاكاة لمكونات نواة خاصة بالاستضافة الافتراضية. يمكنك التعرف عليها عن قرب بمراجعة المقال <a href="https://academy.hsoub.com/devops/linux/redhat/%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D9%91%D8%A7%D8%AA-%D8%A7%D9%84%D8%AD%D9%88%D8%B3%D8%A8%D8%A9-%D8%A7%D9%84%D8%A7%D9%81%D8%AA%D8%B1%D8%A7%D8%B6%D9%8A%D9%91%D8%A9-virtualization-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-kvm-%D8%B9%D9%84%D9%89-red-hat-enterprise-linux-r750/" rel="">أساسيّات الحوسبة الافتراضيّة Virtualization باستخدام KVM على Red Hat Enterprise Linux</a>.
</p>

<p>
	<strong>Xen</strong>، من أشهر برامج Hypervisor، يعتمد على نواته المصغرة الخاصة لتأمين الأدوات اللازمة لدعم الخوادم الافتراضية بدون الحاجة لإجراء أي تعديل على نواة المضيف كما في KVM، يدعم Xen طريقتين مختلفتين للحوسبة الافتراضية: تدعى الطريقة الأولى الحوسبة شبه الافتراضية Paravirtualization، ليست حوسبة افتراضية كاملة لأنها لا تجري محاكاةً للعتاد الصلب إنما فقط تعديلات على نظم تشغيل الخوادم الافتراضية لتتمكن من التخاطب معه بكفاءة، أما الطريقة الثانية تسمى الحوسبة الافتراضية بمساعدة العتاد الصلب أو HVM فإنها تستخدم ميزات خاصة موجودة في بعض أنواع العتاد الصلب لمحاكاة الخادم الافتراضي بدون أي تعديل على نظام التشغيل. لاقت HVM انتشارًا واسعًا حوالي العام 2006 وخصوصًا مع توفر المعالجات الاستهلاكية عالية الأداء التي سمحت لمعظم الحواسيب المكتبية والمحمولة بتحقيق الأداء نفسه عند تشغيلها أجهزة افتراضية أو حاويات معتمدة على النوى المصغرة مثل <a href="https://academy.hsoub.com/devops/cloud-computing/docker/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%AF%D9%88%D9%83%D8%B1-docker-r607/" rel="">حاويات دوكر</a>.
</p>

<p>
	<strong>ESXi</strong>، موجه للمؤسسات، طورته شركة VMware. ميزته الأساسية أنه لا يتطلب وجود نظام تشغيل على المضيف لأن ESXi نفسه يؤدي دور نظام التشغيل، يسمى هذا النوع من المراقبين بالنمط الأول type one، ويعمل بكفاءة عالية بسبب عدم وجود أي برمجية وسيطة بين العتاد الصلب والخوادم الافتراضية.
</p>

<p>
	<strong>Hyper-V</strong>، من أشهر تقنيات الحوسبة الافتراضية المستخدمة مع خوادم ويندوز، تجده بين خدمات النظام في ويندوز سيرفر ومعظم نسخ الويندوز الحديثة، يتوفر أيضًا بوصفه خادمًا مستقلًا يمكنك العمل معه مباشرةً بدون نظام تشغيل آخر. يمكنك قراءة المقال <a href="https://academy.hsoub.com/apps/operating-systems/windows/%D8%AA%D8%B7%D8%A8%D9%8A%D9%82-hyper-v-%D9%81%D9%8A-%D9%88%D9%8A%D9%86%D8%AF%D9%88%D8%B2-10-r432/" rel="">تطبيق Hyper-V في ويندوز 10</a> المتضمن خطوات إرشادية لتثبيت Hyper-V.
</p>

<h2 id="-2">
	لماذا أختار الاستضافة السحابية؟
</h2>

<p>
	تتبلور مميزات الحوسبة الافتراضية في بيئات الاستضافة السحابية، فيسهل في هذه البيئات بناء الخوادم الافتراضية، وإعدادها، وتخصيصها بالموارد حسب الطلب، ويمكنك مع مرور الوقت زيادة الموارد المخصصة أو إنقاصها حسب تغيرات عملك، أضف إلى ذلك ما يقدمه لك بعض مضيفي السحابة من توافرية عالية للخدمة، فيعملون على نقل الخادم الافتراضي من مراقب إلى آخر عند الحاجة بأدنى فترة ممكنة من التوقف عن العمل أو حتى دون أي توقف، ويؤمنون في بعض الحالات بديلًا عن الخادم الافتراضي يماثله تمامًا لينوب عنه في حال فشلت إحدى العقد.
</p>

<h3 id="-3">
	التخصيص
</h3>

<p>
	يفضل المطورون غالبًا استخدام الخوادم الافتراضية الخاصة VPS لما توفره لهم من تحكم كامل ببيئتهم الافتراضية. فيحصلون افتراضيًا على حسابات الجذر ذات الصلاحيات الكاملة أو <code>sudo</code>، ليتمكنوا من تثبيت البرامج التي يحتاجونها أو التعديل عليها حسب طلباتهم.
</p>

<p>
	تبدأ أريحية التخصيص لديهم من حرية اختيار نظام التشغيل، إذ تقبل معظم برمجيات المراقب تثبيت أي نظام تشغيل على الخادم الضيف بدون قيود، بدءًا من النظم مفتوحة المصدر مثل لينكس و <a href="https://academy.hsoub.com/devops/freebsd/" rel="">BSD</a> إلى نظم المملوكة مثل ويندوز، وبعد اعتماد نظام التشغيل يستطيع كل مطور تثبيت البرمجيات التي يحتاجها بالتتابع ليصل للبنية الحاسوبية التي يحتاجها على الخادم السحابي، والتي قد تتضمن <a href="https://academy.hsoub.com/devops/servers/web/" rel="">خادم ويب</a> مثلًا أو <a href="https://academy.hsoub.com/devops/servers/databases/%D9%82%D9%88%D8%A7%D8%B9%D8%AF-%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-database/" rel="">قاعدة بيانات</a> أو تطبيقًا جاهزًا للتوزيع أو غير ذلك.
</p>

<h3 id="-4">
	التوسعة
</h3>

<p>
	تتميز الخوادم السحابية بمرونتها وقابليتها للتوسع أفقيًا وعموديًا، وهو أمرٌ تتفوق فيه الاستضافة السحابية على غيرها من الاستضافات، فمعظم الاستضافات الأخرى تقبل التوسعة إما أفقيًا أو عموديًا، ويرجع ذلك إلى البيئة الافتراضية المبني عليها الخادم السحابي، فموارده في نهاية الأمر جزءٌ من مجموعة موارد مادية أوسع بكثير، يمكنك نقلها إلى مراقبين آخرين أو إنشاء تكرارات عنها لديهم حسب الحاجة.
</p>

<p>
	<strong>التوسع الأفقي</strong>، أو scaling out هو زيادة عدد العقد في النظام العنقودي، قد يعني ذلك زيادة عدد خوادم الويب لتحسين إدارة حركة مرور البيانات إلى تطبيقك، أو إضافة خوادم لمناطق معينة لتسريع الاستجابة، أو زيادة عدد العاملين workers في قاعدة البيانات لرفع سرعة نقل البيانات أو غير ذلك.
</p>

<p>
	<strong>التوسع العمودي</strong>، أو scaling up يُقصد به ترقية خادم واحد، وزيادة موارده ليتمتع بمواصفات أعلى، بزيادة الذواكر المخصصة له أو نوى المعالجة المركزية أو غير ذلك، توفر هذه الموارد المحسنة البيئة اللازمة لتشغيل مثيلات البرامج الإضافية بكفاءة على الخادم، على سبيل المثال: إذا وسعت عدد عمال قاعدة البيانات، فإن ترقية الخادم عموديًا تعطيهم الموارد اللازمة للعمل بكفاءة أعلى. بقي التوسع العمودي لفترة طويلة الطريقة السائدة لرفع مواصفات الاستضافة السحابية، ثم تغير الأمر مع تقديم المزودين عروضًا اقتصادية للتوسعة الأفقية.
</p>

<p>
	بالنتيجة يستطيع المطورون توسعة استضافاتهم السحابية، إما أفقيًا بزيادة عدد عقد VPS التي يستخدمونها، أو عموديًا ترقية مواصفات الخادم، أو القيام بالأمرين معًا حسب احتياجات عملهم.
</p>

<h2 id="-5">
	الخلاصة
</h2>

<p>
	نأمل أنك أخذت فكرةً جيدة عن آلية عمل الاستضافة السحابية، والعلاقة بين الخوادم الافتراضية والمراقب Hypervisor المسؤول عن إدارتها، وتبينت خصائص الاستضافة السحابية التي تميزها عن غيرها من الاستضافات، لتتمكن من اختيار الاستضافة المناسبة لحالتك.
</p>

<p>
	ترجمة -وبتصرف- للمقال <a href="https://www.digitalocean.com/community/tutorials/an-introduction-to-cloud-hosting#what-is-the-cloud" rel="external nofollow">An Introduction to Cloud Hosting</a> لصاحبه Josh Barnett.
</p>

<h2>
	اقرأ أيضًا
</h2>

<ul>
	<li>
		المقال السابق: <a href="https://academy.hsoub.com/devops/cloud-computing/%D9%86%D8%B8%D8%B1%D8%A9-%D8%B9%D8%A7%D9%85%D8%A9-%D8%B9%D9%84%D9%89-%D8%A7%D9%84%D8%AD%D9%88%D8%B3%D8%A8%D8%A9-%D8%A7%D9%84%D8%B3%D8%AD%D8%A7%D8%A8%D9%8A%D8%A9-r809/" rel="">نظرة عامة على الحوسبة السحابية</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/cloud-computing/%D9%85%D9%82%D8%AF%D9%85%D8%A9-%D8%A5%D9%84%D9%89-%D8%A7%D9%84%D8%AE%D9%88%D8%A7%D8%AF%D9%85-%D8%A7%D9%84%D8%B3%D8%AD%D8%A7%D8%A8%D9%8A%D8%A9-r807/" rel="">مقدمة إلى الخوادم السحابية</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/cloud-computing/%D9%85%D9%81%D9%87%D9%88%D9%85-%D8%A7%D9%84%D8%B3%D8%AD%D8%A7%D8%A8%D8%A9-cloud-r624/" rel="">مفهوم السحابة Cloud</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/servers/%D9%83%D9%84-%D9%85%D8%A7-%D8%AA%D9%88%D8%AF-%D9%85%D8%B9%D8%B1%D9%81%D8%AA%D9%87-%D8%B9%D9%86-%D8%A7%D9%84%D8%B3%D8%AD%D8%A7%D8%A8%D8%A9-%D8%A7%D9%84%D9%87%D8%AC%D9%8A%D9%86%D8%A9-hybrid-cloud-r358/" rel="">كل ما تود معرفته عن السحابة الهجينة Hybrid Cloud</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/cloud-computing/%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%AD%D9%88%D8%B3%D8%A8%D8%A9-%D8%A7%D9%84%D8%B3%D8%AD%D8%A7%D8%A8%D9%8A%D9%91%D8%A9-%D8%A7%D9%84%D9%85%D8%AA%D8%B7%D9%84%D8%A8%D8%A7%D8%AA-%D8%A7%D9%84%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D9%91%D8%A9%D8%8C-%D9%88%D9%83%D9%8A%D9%81-%D8%AA%D8%B5%D8%A8%D8%AD-%D9%85%D9%87%D9%86%D8%AF%D8%B3-%D8%AD%D9%88%D8%B3%D8%A8%D8%A9-%D8%B3%D8%AD%D8%A7%D8%A8%D9%8A%D9%91%D8%A9-r457/" rel="">تعلم الحوسبة السحابيّة: المتطلبات الأساسيّة، وكيف تصبح مهندس حوسبة سحابيّة</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">812</guid><pubDate>Sun, 07 Jul 2024 15:04:01 +0000</pubDate></item><item><title>&#x646;&#x638;&#x631;&#x629; &#x639;&#x627;&#x645;&#x629; &#x639;&#x644;&#x649; &#x627;&#x644;&#x62D;&#x648;&#x633;&#x628;&#x629; &#x627;&#x644;&#x633;&#x62D;&#x627;&#x628;&#x64A;&#x629;</title><link>https://academy.hsoub.com/devops/cloud-computing/%D9%86%D8%B8%D8%B1%D8%A9-%D8%B9%D8%A7%D9%85%D8%A9-%D8%B9%D9%84%D9%89-%D8%A7%D9%84%D8%AD%D9%88%D8%B3%D8%A8%D8%A9-%D8%A7%D9%84%D8%B3%D8%AD%D8%A7%D8%A8%D9%8A%D8%A9-r809/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2024_06/145653108_.png.0ad8e4504b831b758b266850b0a11786.png" /></p>
<p>
	لقد غيّرت الحوسبة السحابية كثيرًا في طريقة عمل الشركات والمستخدمين، ولا يسعنا اليوم تجاهل أثرها، فمعظم البرامج التي نستعملها باتت توجد على السحابة، وبفضلها أصبحت الشركات الناشئة قادرة على تطوير برمجياتها ونشرها بدون شراء خوادم مرتفعة الثمن وتجهيز مراكز بيانات قياسية لتشغيلها، بل وأصبح المطورون المستقلون قادرين على إطلاق تطبيقاتهم الخاصة عبر الإنترنت بأقل التكاليف، والحالة مشابهة للباحثين، فقد مكنتهم الحوسبة السحابية من مشاركة البيانات وتحليلها على نطاق واسع كان في الماضي حكرًا على المشاريع كبيرة التمويل، وحتى المستخدم العادي استفاد منها فقد وضعت في متناوله مساحات تخزين كبيرة تتجاوز بكثير قدرات حاسوبه الشخصي لتخزين الوسائط الرقمية ومشاركتها.
</p>

<p>
	فما هي السحابة بالضبط؟ كيف تقدم خدماتها للمشتركين؟ وما هي فوائدها؟ وما المخاطر التي تنطوي عليها؟ وكيف تستخدمها لمشروعك الخاص؟ سنجيبك في الفقرات التالية على كل هذه التساؤلات.
</p>

<h2 id="-1">
	ما هي الحوسبة السحابية؟
</h2>

<p>
	الحوسبة السحابية <a href="https://academy.hsoub.com/devops/cloud-computing/%D8%A7%D9%84%D8%A7%D9%86%D8%AA%D9%82%D8%A7%D9%84-%D8%A5%D9%84%D9%89-%D8%A7%D9%84%D8%AD%D9%88%D8%B3%D8%A8%D8%A9-%D8%A7%D9%84%D8%B3%D8%AD%D8%A7%D8%A8%D9%8A%D9%91%D8%A9-r458/" rel="">Cloud Computing</a> هي توفير الموارد الحاسوبية للمستخدم بصيغة خدمة، وتبقى ملكية هذه الموارد لمزود الخدمة السحابية، وهو المسؤول عن إدارتها، قد تتضمن أي شيء تحتاجه بدءً من التطبيقات المستندة إلى المتصفح وهي تطبيقات تعمل مباشرة من خلال متصفح الويب دون الحاجة إلى تثبيت أي برامج إضافية على الجهاز مثل يوتيوب وسبوتيفاي، ومنصات الطرف الثالث المخصصة لتخزين الصور والوسائط الرقمية الأخرى، مثل: أيكلاود ودروبوكس، ووصولًا إلى خوادم الطرف الثالث التي تستخدم لدعم البنية التحتية للأعمال أو المشاريع البحثية أو الشخصية.
</p>

<p>
	قبل انتشار الحوسبة السحابية كان كل من يرغب باستخدام الموارد الحاسوبية يذهب لشراء التجهيزات والبرمجيات التي يحتاجها، ويتولى مهمة تشغيلها وصيانتها بنفسه أو يوظف تقنيين مؤهلين لأداء المهمة، أما اليوم مع التوفر الواسع للتطبيقات وخدمات التخزين والأجهزة الافتراضية المستندة إلى السحابة، أصبح بإمكان الأفراد والشركات تحصيل إمكانات هائلة من الموارد حسب طلبهم عبر الإنترنت. وقد وفر عليهم هذا الانتقال من الموارد المحلية إلى الموارد الموزعة تكاليف شراء البرمجيات والتجهيزات، وتشغيلها، وصيانتها.
</p>

<p>
	ترافق ذلك مع ظهور نمط جديد من الأعمال المعتمدة كليًّا على السحابة، وتغيرت مهام تقنية المعلومات في الشركات، وتحولت الكثير من النشاطات اليومية إلى عمليات حاسوبية. ولم يقتصر تأثيرها على الأعمال فقط بل امتدّ للأفراد أيضًا، فيمكنهم اليوم عقد اجتماعات افتراضية عبر الإنترنت أو استخدام المنصات التعاونية للعمل على المشاريع المشتركة، بالإضافة إلى إمكانية الوصول للمحتوى الترفيهي والتعليمي حسب الطلب، ولا ننسَى تقنيات المنازل الذكية التي تتيح التحكم بالأجهزة المنزلية عن بعد، والتطبيقات الذكية التي تسمح لنا بطلب سيارة أجرة أو إجراء حجز فندقي من منازلنا بمنتهى السهولة عبر هواتفنا المحمولة.
</p>

<h3 id="-2">
	تعريف الحوسبة السحابية
</h3>

<p>
	نورد فيما يلي تعريف الحوسبة السحابية حسب <a href="https://csrc.nist.gov/pubs/sp/800/145/final" rel="external nofollow">المعهد الوطني للمعايير والتكنولوجيا (NIST)</a>، وهو وكالة غير تنظيمية تتبع لوزارة التجارة الأمريكية وتشجع على الابتكار:
</p>

<blockquote class="ipsQuote" data-ipsquote="">
	<div class="ipsQuote_citation">
		اقتباس
	</div>

	<p data-gramm="false">
		الحوسبة السحابية هي نموذج يتيح الوصول الشبكي الواسع والسهل وحسب الطلب إلى مجموعة مشتركة من الموارد الحاسوبية القابلة للإعداد، مثل: الشبكات والخوادم ووحدات التخزين والتطبيقات والخدمات، التي يمكن تأمينها وإطلاقها بسرعة قياسية، وبأقل مجهود إداري أو تفاعل مع مزود الخدمة.
	</p>
</blockquote>

<p>
	يحدد NIST خمس خصائص رئيسية للحوسبة السحابية:
</p>

<ul>
	<li>
		<p>
			<strong>الخدمة الذاتية حسب الطلب:</strong> لا يستلزم الوصول إلى الموارد السحابية أو توفيرها أي تفاعل بشري مع مزود الخدمة، إذ يصل المشترك مباشرةً إلى الخدمات السحابية بمجرد التسجيل SignUp. وتستطيع المؤسسات أيضًا إنشاء آليات خاصة تمنح بواسطتها موظفيها أو عملائها أو شركائها صلاحيات الوصول إلى خدماتها السحابية الداخلية وفق قواعد تحددها مسبقًا، وبطريقة سهلة بدون الاستعانة بخدمات تقنية المعلومات.
		</p>
	</li>
	<li>
		<p>
			<strong>الوصول الشبكي واسع النطاق:</strong> يستطيع المستخدمون الوصول إلى الخدمات والموارد السحابية من أي جهاز وفي أي موقع متصل بالشبكة بشرط امتلاكهم أذونات الوصول.
		</p>
	</li>
	<li>
		<p>
			<strong>تجميع الموارد:</strong> موارد مزود الخدمة السحابة مشتركة بين عدة مشتركين، مع ضمان الاستقلالية والخصوصية وحجب بيانات كل مشترك عن الآخرين.
		</p>
	</li>
	<li>
		<p>
			<strong>المرونة السريعة:</strong> يمكن للمشترك زيادة موارد الحوسبة السحابية المحجوزة لصالحه أو تخفيضها أو تعديلها حسب احتياجات عمله بسرعة ومرونة، على عكس التجهيزات والبرامج الموجودة لديه محليًّا في منزله أو شركته.
		</p>
	</li>
	<li>
		<p>
			<strong>قياس الخدمة:</strong> توفر الحوسبة السحابية أدوات خاصة لقياس نسب استخدام الموارد السحابية، ويدفع المشتركون مقابل الموارد التي استخدموها فقط في كل دورة فوترة.
		</p>
	</li>
</ul>

<p>
	تساعد هذه الخصائص الشركات على <a href="https://academy.hsoub.com/devops/cloud-computing/%D8%A7%D9%84%D8%A7%D9%86%D8%AA%D9%82%D8%A7%D9%84-%D8%A5%D9%84%D9%89-%D8%A7%D9%84%D8%AD%D9%88%D8%B3%D8%A8%D8%A9-%D8%A7%D9%84%D8%B3%D8%AD%D8%A7%D8%A8%D9%8A%D9%91%D8%A9-r458/" rel="">الانتقال إلى الحوسبة السحابية</a>، وتوفر لهم فوائد عديدة سنعرضها في متن المقال، أما فقرتنا التالية فسنتناول تاريخ الحوسبة السحابية.
</p>

<h2 id="-3">
	تاريخ الحوسبة السحابية
</h2>

<p>
	ترجع جذور الحوسبة السحابية إلى خمسينيات القرن العشرين، عندما كانت الشركات والجامعات تؤجر حواسيبها المركزية للمستخدمين لأوقات عمل محددة، فقد كانت الحواسيب حينها غالية الثمن وكبيرة الحجم لدرجة لا تسمح للأفراد العاديين باقتنائها، فاستئجار العمل عليها كان سبيلهم الوحيد لاستخدامها. لاحقًا مع بداية الستينيات، بدأ علماء الحاسوب أمثال جون مكارثي John McCarthy من جامعة ستانفورد، وجي سي آر ليكليدر J.C.R Licklider  من وكالة مشاريع الأبحاث المتقدمة التابعة لوزارة الدفاع الأمريكية (ARPA)، باقتراح أفكار مهدت للحوسبة السحابية كما نعرفها اليوم، مثل: تصور مفهوم الحوسبة بهيئة مرفق عام أو منفعة عامة يمكن للناس الوصول إليها بواسطة شبكة من الحواسيب المنتشرة حول العالم.
</p>

<p>
	وبالرغم من هذه الأفكار المبكرة لم تصبح الحوسبة السحابية حقيقة ملموسة ومفهومًا واسع الانتشار حتى العقد الأول من القرن الحادي والعشرين، فقد شهدت هذه الفترة إطلاق أشهر الخدمات السحابية العالمية، مثل: Amazon’s Elastic Compute وخدمة التخزين البسيطة S3 في العام 2006، و Heroku في 2007، و Google Cloud Platform في 2008، ومنصة Alibaba Cloud في 2009، و Windows Azure في 2010 المعروفة حاليًّا بمنصة Microsoft Azure، وأخيرًا SmartCloud من شركة IBM و DigitalOcean في العام 2011. ساعدت هذه الخدمات أصحاب الأعمال على ضبط نفقاتهم المالية، عبر تهجير البنى التقنية من مقرات شركاتهم إلى المنصات السحابية، وأيضًا أفادت المطورين المستقلين وفرق التطوير الصغيرة، فوفرت لهم الموارد الحاسوبية اللازمة لتطوير تطبيقاتهم ونشرها.
</p>

<p>
	انتشرت في هذه الفترة التطبيقات القائمة على السحابة، والمعروفة باسم البرمجيات بصيغة خدمة <a href="https://academy.hsoub.com/entrepreneurship/tips/%D9%85%D8%AD%D8%A7%D8%B3%D8%A8%D8%A9-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D9%8A%D8%A7%D8%AA-%D8%A7%D9%84%D8%AE%D8%AF%D9%85%D9%8A%D8%A9-saas-r1089/" rel="">SaaS</a>، التي نناقشها بالتفصيل في فقراتنا القادمة، وتزامن انتشارها مع تراجع أعداد البرمجيات المستضافة محليًا على خوادم الشركات، وأيضًا البرمجيات التي يتعين على المستخدمين تثبيتها على أجهزتهم قبل استثمارها وصيانتها على الدوام. خلاصة القول: أن SaaS سهلت توافر التطبيقات، وساهمت في انتشارها عبر السماح للمستخدمين بالوصول إليها من مجموعة متنوعة من الأجهزة وحسب الطلب.
</p>

<p>
	تتنوع التطبيقات القائمة على السحابة، فبعضها يعود للشركات نفسها التي تمتلك المنصات السحابية، مثل: تطبيقات جوجل (أي جيميل وجوجل درايف ومستندات جوجل)، وتطبيق مايكروسوفت 365 النسخة السحابية من Microsoft Office Suite، وبعضها الآخر مملوك لشركات أخرى استثمرت خدمات مزودي الخدمات السحابية ووائمت تطبيقاتها الموجودة مسبقًا معها، مثل تطبيق Adobe Creative Cloud. وظهرت أيضًا موجة من التطبيقات السحابية الخالصة المعتمدة على SaaS، أبرزها: منصة Spotify في 2008، وخدمة استضافة الملفات Dropbox التي انطلقت في 2009، ومنصة زووم لاتصالات الفيديو في العام 2012، و Slack للتواصل الاجتماعي في 2013. أصبحت البنية التقنية القائمة على السحابة خيارًا مفضلًا لكثير من الشركات، وعلى ما يبدو أن انتشارها أخذٌ بالازدياد أكثر فأكثر.
</p>

<h2 id="-4">
	نماذج الحوسبة السحابية
</h2>

<p>
	تُقَدَّم الخدمات السحابية للمشتركين بنماذج متعددة كلٌ حسب احتياجات عمله، ولكل نموذم مستوى معين من الدعم والمرونة.
</p>

<h3 id="iaas">
	البنية التحتية بصيغة خدمة IaaS
</h3>

<p>
	البنية التحتية بصيغة خدمة Infrastructure as a Service واختصارها Iaas، هي تقديم مكونات البنية التحتية للمشترك حسب الطلب، مثل: نظم التشغيل والشبكات ومساحات التخزين وغيرها، يمثل هذا النموذج المكافئ الافتراضي للخوادم المادية، لأنه يغني المشترك عن شرائها وصيانتها، ويقدم له المرونة في توسيع الموارد حسب حاجته والدفع لقائها. يناسب Iaas الشركات الراغبة باستثمار الحوسبة السحابية، ولديها مهندسين ومديري نظم أكفاء وقادرين على تثبيت نظم التشغيل، وأدوات التطوير، وكافة مكونات البنية التحتية الأخرى، مع إعدادها وإدارتها، ويستخدمه أيضًا المطورون والباحثون وغيرهم من الراغبين بتخصيص البنية التحتية للحوسبة السحابية كما يريدون. تدعم خدمات IaaS كامل احتياجات البنية التحتية بسبب مرونتها العالية، بدءًا من البنية التحتية لحوسبة الشركة، وصولًا إلى استضافة الويب، وتحليل البيانات الضخمة.
</p>

<h3 id="paas">
	النظام الأساسي بصيغة خدمة PaaS
</h3>

<p>
	النظام الأساسي بصيغة خدمة Platform as a Service واختصارها Paas، يعمل مزود الخدمة هنا على تثبيت البنية التحتية الأساسية، مثل: نظام التشغيل، والبرامج الأساسية الأخرى، ويكون مسؤولًا عن إعدادها وصيانتها، وهو ما يؤمن للمستخدمين بيئةً معيارية مستقرة الأداء، ومختبرة جيدًا، تتيح لهم التركيز على تطوير تطبيقاتهم ونشرها، لذا فمطورو البرمجيات وفرق التطوير التعاونية هم أكثر من يستخدم خدمات PaaS فهي تخفف عنهم عبء إعداد البيئة الحاسوبية للتطوير، وصيانتها فيما بعد، بالإضافة لكونها تناسب طبيعة العمل الموزع، وتسهل التعاون بينهم. إذًا PaaS خيارٌ مثالي لكل مطور لا يحتاج بالضرورة إلى تخصيص البنية التحتية لبيئته الحاسوبية بنفسه، أو يفضل تركيز اهتمامه على تطوير التطبيق بدلًا من تنفيذ مهام <a href="https://academy.hsoub.com/devops/" rel="">DevOps</a> وإدارة النظام.
</p>

<h3 id="saas">
	البرمجيات بصيغة خدمة SaaS
</h3>

<p>
	البرمجيات بصيغة خدمة Software as a Service واختصارها SaaS، هي تطبيقات قائمة على السحابة cloud-based، يصلها المستخدمون عبر الإنترنت، ولا يحتاجون لتثبيتها على أجهزتهم ولا إلى صيانتها، والأمثلة كثيرة نحو: مستندات جوجل، و <a href="https://academy.hsoub.com/programming/workflow/git/" rel="">GitHub</a>، و Slack، و Adobe Creative Cloud وغيرها. تحظى خدمات SaaS بشعبية كبيرة بين الشركات والمستخدمين عمومًا لعدة أسباب أبرزها: سهولة الاعتماد عليها، وتبنيها نهجًا جديدًا للعمل، وإمكانية الوصول إليها من أي جهاز، وتوفيرها إصدارات أو باقات متنوعة تناسب جميع الفئات، مثل: المجانية، والمميزة Premium، والخاصة بالمؤسسات Enterprise. تتشابه SaaS مع PaaS بأنها تعفي المشترك من المسؤوليات الخاصة بالبنية التحتية للتطبيق فلا يتاح له التفاعل مع الواجهة إلّا التي يستخدمها.
</p>

<h2 id="-5">
	البيئات السحابية
</h2>

<p>
	تستند الخدمات السحابية إلى موارد حاسوبية عامة أو خاصة، ولكل منها أغراض محددة:
</p>

<h3 id="-6">
	السحابة العامة
</h3>

<p>
	تشير السحابة العامة Public Cloud إلى الخدمات السحابية التي يقدمها مزود خدمة تجاري للأفراد والشركات، مثل: الأجهزة الافتراضية أو مساحات التخزين أو التطبيقات، والتي تكون مواردها أو بنيتها التحتية مستضافة بالكامل في مقر المزود، ويصل إليها المشتركون عبر الإنترنت. لا تُعدّ هذه الخدمات مناسبة دائمًا للمؤسسات التي تشترط مستوى عالي من الأمان، مثل: مؤسسات الرعاية الصحية أو المؤسسات المالية، فقد لا تتوافق مع لوائحها المتعلقة بخصوصية بيانات العملاء.
</p>

<h3 id="-7">
	السحابة الخاصة
</h3>

<p>
	يُقصد بالسحابة الخاصة Private Cloud الخدمات السحابية التي تملكها وتديرها المؤسسة التي تستخدمها، وتكون متاحة حصرًا لموظفيها وعملائها. توفر السحابة الخاصة للمؤسسة إمكانات تحكم عالية ببيئتها الحاسوبية والبيانات المخزنة عليها، وموازنةً بالسحابة العامة فهي تقدم مستويات أمان أعلى إذ يصل إليها المستخدمون عبر شبكات خاصة، وتشرف المؤسسة بنفسها على أمان السحابة، وهذا يجعلها الخيار الأفضل للمؤسسات عالية التنظيم، مثل المؤسسات الحكومية والمالية. يقدم بعض مزودي الخدمة السحابية العامة خدماتهم بهيئة تطبيقات يستطيع المشترك تثبيتها على سحابته الخاصة، وبذلك تحتفظ المؤسسات ببنيتها التحتية وبياناتها في مقر عملها، وتحقق معايير الأمان، وتستفيد بالوقت نفسه من أحدث ميزات السحابة العامة. يفيدك الاطلاع على المقال <a href="https://academy.hsoub.com/devops/security/7-%D8%AA%D8%AF%D8%A7%D8%A8%D9%8A%D8%B1-%D8%A3%D9%85%D9%86%D9%8A%D8%A9-%D9%84%D8%AD%D9%85%D8%A7%D9%8A%D8%A9-%D8%AE%D9%88%D8%A7%D8%AF%D9%8A%D9%85%D9%83-r60/" rel="">7 تدابير أمنية لحماية خواديمك</a> بصفته دليلًا مبدئيًا تستند إليه في تأمين خوادمك الخاصة.
</p>

<h3 id="-8">
	السحابة الهجينة والسحابة المتعددة
</h3>

<p>
	تستخدم العديد من المؤسسات بيئة سحابية هجينة Hybrid Cloud تجمع بين السحابة العامة والخاصة، وتحقق التوازن بين حاجتها للاعتماد على مزود سحابة عامة في بعض الجوانب، وضرورة التزامها باللوائح التي تنظم عملها. أما السحابة المتعددة Multicloud فيقصد بها اعتماد المؤسسة على أكثر من مزود سحابي عام لتأمين احتياجاتها، على سبيل المثال: الاشتراك بالخدمات السحابية لأمازون وديجتال أوشن بالوقت نفسه.
</p>

<h2 id="-9">
	فوائد الحوسبة السحابية
</h2>

<p>
	تقدم الحوسبة السحابية فوائد جمّة للأفراد أصحاب الأعمال والمطورين والمؤسسات المختلفة، تختلف باختلاف أهدافهم وطبيعة نشاطاتهم.
</p>

<h3 id="-10">
	للأعمال والقطاعات المختلفة
</h3>

<p>
	تحتاج أي مؤسسة مهما كان نشاطها إلى موارد حاسوبية من تجهيزات وبرمجيات لتتمكن من أداء أعمالها الحاسوبية، وقبل انتشار الحوسبة السحابية، كانت معظم الشركات والمؤسسات تشتري هذه الموارد من تجهيزات وبرامج وتهتم بتشغيلها وصيانتها، أما اليوم مع توفر الحوسبة السحابية على نطاق واسع اعتمدت عليها معظم المؤسسات في تخزين بياناتها وتوفير برمجيات عملها سواء التجارية أو المؤسساتية، بالإضافة لاستخدامها في نشر تطبيقاتها وخدماتها الإلكترونية للعملاء عبر الإنترنت.
</p>

<p>
	تتخصص بعض الخدمات السحابية بمجالٍ معين، مثل: الرعاية الصحية أو التعليم أو غيره، فتجد مثلًا خدمات سحابية مصممة خصصيًا لتخزين بيانات المرضى ومشاركتها أو للتواصل معهم، وخدمات أخرى مناسبة للأوساط الأكاديمية يعتمدها المعلمون والباحثون، نحو: تطبيقات التدريس، والبحث المستندة إلى السحابة. ومع ذلك يوجد أيضًا عدد كبير من الأدوات السحابية العامة التي لا تنحصر فائدتها لصناعة معينة أو قطاع محدد، مثل: تطبيقات الإنتاجية، والمراسلة، وإدارة النفقات، ومؤتمرات الفيديو، وإدارة المشاريع، والنشرات الإخبارية، والاستطلاعات، وإدارة علاقات العملاء، وخدمات إدارة الهوية، وجدولة المهام والقائمة تطول. يُظهر هذا النمو المتسارع لتطبيقات الأعمال والبنى التحتية القائمة على السحابة، أن الحوسبة السحابية أكثر من تقنية غيرت إستراتيجية تقنية المعلومات للأعمال المختلفة: بل أنها أيضًا عملٌ مزدهر في حد ذاته.
</p>

<p>
	تتعدد المزايا التي توفرها التقنيات السحابية للشركات، ولعل أبرزها تخفيض تكاليف تجهيز البنية التحتية التقنية للشركة داخل مقرها، وتخفيض نفقات تشغيلها وصيانتها، بسبب الاستعاضة عنها بالموارد الحاسوبية المستأجرة على السحابة، والتي يمكن توسيعها بسرعة ومرونة حسب رغبة الشركة، والدفع لقاء ما تستهلك منها فقط، أضف إلى ذلك مساهمة الخدمات السحابية في تعزيز التعاون داخل الشركة، ومشاركة البيانات بين الموظفين في الزمن الحقيقي، ورفع كفاءة عمليات تقنية المعلومات الداخلية، فتسرع مثلًا وصول الموظفين إلى الخدمة عند الطلب دون المرور بسلسلة طويلة من الإجراءات والموافقات التقنية.
</p>

<h3 id="-11">
	للمطورين المستقلين
</h3>

<p>
	جعلت الحوسبة السحابية الموارد -التي كانت سابقًا حكرًا على الشركات والمؤسسات الكبيرة- في متناول المطورين المستقلين حسب الطلب عبر الإنترنت، وبتكاليف بسيطة نسبةً إلى تكاليفها السابقة، فيمكنهم الآن إنجاز عمليات نشر البرمجيات واختبارها بسرعة ويُسر باستخدام التطبيقات السحابية، وبالإضافة إلى ذلك سهلت هذه التطبيقات مثل <a href="https://academy.hsoub.com/programming/workflow/git/%D9%83%D9%8A%D9%81-%D8%AA%D8%B3%D8%A7%D9%87%D9%85-%D9%81%D9%8A-%D9%85%D8%B4%D8%A7%D8%B1%D9%8A%D8%B9-%D9%85%D9%81%D8%AA%D9%88%D8%AD%D8%A9-%D8%A7%D9%84%D9%85%D8%B5%D8%AF%D8%B1-%D8%B9%D9%84%D9%89-github-r265/" rel="">GitHub</a> مشاركة الشيفرات البرمجية بين المطورين، والتعاون على مشاريع <a href="https://academy.hsoub.com/programming/general/%D9%85%D8%A7-%D9%87%D9%8A-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D9%8A%D8%A7%D8%AA-%D9%85%D9%81%D8%AA%D9%88%D8%AD%D8%A9-%D8%A7%D9%84%D9%85%D8%B5%D8%AF%D8%B1%D8%9F-r1650/" rel="">مفتوحة المصدر</a>. كما أتاحت المنصات التعليمية السحابية <a href="https://academy.hsoub.com/#courses" rel="">دورات برمجة</a> تفاعلية ووسّعت خيارات التَعلُّم أمام المطورين، ومكنتهم من <a href="https://academy.hsoub.com/programming/general/%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-r662/" rel="">تعلم البرمجة</a> بمرونة في الوقت الذي يناسبهم.
</p>

<p>
	ساهمت هذه الموارد الحاسوبية والتعليمية القائمة على السحابة بتخفيف العوائق التي تحول دون تعلُّم المطورين المهارات البرمجية التي يحتاجونها، ونشرهم التطبيقات عبر إلى السحابة. فبوجودها لم يعد تلقي التدريب الرسمي، ووجود الشركة الداعمة، ورأس المال الكبير شروطًا إلزامية ليخوض الأفراد تجربة إنشاء التطبيقات ونشرها، بل ولينافسوا اللاعبين الأساسيين في هذا المجال.
</p>

<h3 id="-12">
	للباحثين
</h3>

<p>
	برزت الحاجة إلى الحوسبة السحابية في مشاريع البحث العلمي مثل: الفلك والفيزياء وعلم الوراثة و<a href="https://academy.hsoub.com/programming/artificial-intelligence/" rel="">الذكاء الاصطناعي</a>، ومع تزايد اعتماد هذه البحوث على أساليب <a href="https://academy.hsoub.com/programming/artificial-intelligence/%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%A2%D9%84%D8%A9/" rel="">التعلم الآلي</a> الذي يجمع ويحلل كميات كبيرة من <a href="https://academy.hsoub.com/programming/general/%D9%85%D9%82%D8%AF%D9%85%D8%A9-%D8%A5%D9%84%D9%89-%D9%85%D9%81%D9%87%D9%88%D9%85-%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-%D8%A7%D9%84%D8%B6%D8%AE%D9%85%D8%A9-big-data-r1579/" rel="">البيانات الضخمة</a> التي تستوجب موارد حاسوبية عالية الأداء تتجاوز مواصفات أي حاسوب يملكه باحث فردي أو توفره جامعة. وهنا يأتي دور الخدمات السحابية فهي تسمح للباحثين بالوصول إلى الموارد الحاسوبية التي يتطلبها عملهم والدفع لقائها فقط، بالإضافة إلى تسهيل التعاون مع شركاء البحث في الزمن الحقيقي وأينما كانوا حول العالم. ولولا الخدمات السحابية المتوفرة للمستخدمين اليوم كانت غالبية بحوث التعلم الآلي الأكاديميةمقتصرة على قلة من الأفراد المتاح لهم الوصول إلى موارد حاسوبية عالية المواصفات.
</p>

<h3 id="-13">
	للمعلمين والطلاب
</h3>

<p>
	أمنت الحوسبة السحابية للطلاب أدواتٍ وفرصًا متعددة لاستكمال تحصيلهم العلمي، وتطبيق مهاراتهم التقنية عمليًّا في أثناء تعلمهم. فهناك العديد من المنصات السحابية التي تتيح مشاركة البيانات والشيفرات البرمجية، وتدريسها، والتعاون عليها، مثل: <a href="https://academy.hsoub.com/programming/workflow/git/%D8%A5%D9%86%D8%B4%D8%A7%D8%A1-%D8%B7%D9%84%D8%A8-%D8%B3%D8%AD%D8%A8-%D8%B9%D9%84%D9%89-github-r1581/" rel="">GitHub</a>، و <a href="https://academy.hsoub.com/devops/linux/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%AA%D9%87%D9%8A%D8%A6%D8%A9-%D8%AA%D8%B7%D8%A8%D9%8A%D9%82-%D8%A7%D9%84%D9%85%D9%81%D9%83%D8%B1%D8%A9-jupyter-notebook-%D9%84%D9%84%D8%B9%D9%85%D9%84-%D9%85%D8%B9-%D9%84%D8%BA%D8%A9-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-python-3-r388/" rel="">Jupyter Notebooks</a>، وهو ما يساعد الطلاب على صقل مهاراتهم والتدّرب العملي عليها عبر الدراسة، والنشر، و<a href="https://academy.hsoub.com/programming/general/%D9%85%D8%AA%D9%84%D8%A7%D8%B2%D9%85%D8%A9-%D8%A7%D9%84%D9%85%D8%AD%D8%AA%D8%A7%D9%84-%D8%B9%D9%86-%D9%85%D8%B3%D8%A7%D9%87%D9%85%D8%AA%D9%8A-%D8%A7%D9%84%D8%A3%D9%88%D9%84%D9%89-%D9%81%D9%8A-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D9%8A%D8%A7%D8%AA-%D9%85%D9%81%D8%AA%D9%88%D8%AD%D8%A9-%D8%A7%D9%84%D9%85%D8%B5%D8%AF%D8%B1-r1709/" rel="">المساهمة في المشاريع مفتوحة المصدر</a> والمشاريع البحثية المتعلقة بمجال دراستهم أو طموحاتهم المهنية. ويستطيع الطلاب أيضًا، مثل المطورين المستقلين، الاستفادة من موارد الحوسبة السحابية، ونشر شيفراتهم البرمجية والتطبيقات التي عملوا عليها للعموم لتلقي الآراء، وفهم المتطلبات والاحتياجات الحقيقية للعملاء وسوق العمل.
</p>

<p>
	كما تساعد الحوسبة السحابية الطلاب والباحثين والمعلمين على دعم البنية التحتية الأكاديمية الخاصة بالمؤسسات العلمية التي ينتمون إليها، وزيادة مستوى التحكم في بيئاتها الحاسوبية، فيحددون مثلًا الأدوات والتطبيقات التي يفضلون استخدامها، ويخصصون وظائفها المختلفة حسب شروطهم، أو يضعون قيودًا على عمليات جمع البيانات أو غير ذلك. وفي هذا الإطار ظهرت مجموعة من المنصات المخصصة للقطاع الأكاديمي، والتي حلت بالتدريج مكان العروض السحابية الموجهة للأكاديميين، على سبيل المثال لا الحصر: <a href="https://voyant-tools.org/" rel="external nofollow">منصة voyant</a> التي توفر وظائف التحليل النصي للمستندات بدون برمجة، و <a href="https://www.hathitrust.org/about/mission-history/" rel="external nofollow">منصة The HathiTrust</a> التي تتيح الوصول إلى مجموعة كبيرة من المجلدات العلمية الإلكترونية في مختلف المجالات، بالإضافة إلى منصات <a href="https://www.reclaimhosting.com/" rel="external nofollow">Reclaim Hosting</a>، و <a href="https://commonsinabox.org/" rel="external nofollow">Commons in a Box</a>، و <a href="https://hcommons.org/" rel="external nofollow">Humanities Commons</a>، و <a href="https://manifoldapp.org/" rel="external nofollow">Manifold</a> المتضمنة مجموعة مهمة من الأدوات التعليمية، والشبكية، والأدوات المساعدة على نشر البحوث المصممة خصيصًا لدعم الأكاديميين.
</p>

<h3 id="-14">
	للبنية التحتية المجتمعية
</h3>

<p>
	يفضل بعض الأفراد والمجتمعات في الشركات أو فرق العمل تثبيت برنامجهم السحابي وإدارته بأنفسهم، لعدة أسباب منها: تلبية احتياجات مجتمعهم وقيمه التي يلتزم بها، وتخصيص وظائف البرنامج بالكيفية التي يريدونها، وحماية بيانات المستخدمين، والتحكم أكثر ببيئتهم الحاسوبية. ويوجد العديد من البرمجيات مفتوحة المصدر التي تؤمن طلبهم، على الرغم من كونها تتطلب جهدًا أكبر في الإدارة والتحكم، إلّا أنها تُعدّ بدائل مقبولة لخدمات SaaS التجارية، ومنصات التواصل الاجتماعي التجارية التي تحدّ غالبًا إمكانات التحكم والخصوصية وإدارة البيئة الحاسوبية الممنوحة للمستخدمين، وتفضلها بعض المجتمعات على خدمات SaaS بسبب مخاوفهم من طريقة تعامل المنصات الشهيرة والشركات التجارية مع البيانات الشخصية للمستخدمين، نذكر لك بعضًا من هذه المنصات مفتوحة المصدر على سبيل المثال لا الحصر: أداة التواصل الاجتماعي <a href="https://joinmastodon.org/" rel="external nofollow">Mastodon</a>، وبرنامج مؤتمرات الفيديو <a href="https://academy.hsoub.com/devops/deployment/%D9%86%D8%B4%D8%B1-%D8%AA%D8%B7%D8%A8%D9%8A%D9%82-%D8%A7%D9%84%D8%A7%D8%AC%D8%AA%D9%85%D8%A7%D8%B9%D8%A7%D8%AA-%D8%AC%D9%8A%D8%AA%D8%B3%D9%8A-jitsi-%D9%85%D8%AD%D9%84%D9%8A%D8%A7-%D8%B9%D9%84%D9%89-%D8%AE%D8%A7%D8%AF%D9%85-%D8%AE%D8%A7%D8%B5-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%AF%D9%88%D9%83%D8%B1/" rel="">Jitsi</a>، ومحرر النصوص التعاوني <a href="https://etherpad.org/" rel="external nofollow">Etherpad</a>، وأداة الدردشة <a href="https://www.digitalocean.com/community/tutorials/how-to-install-configure-and-deploy-rocket-chat-on-ubuntu-14-04" rel="external nofollow">Rocket Chat</a>.
</p>

<h2 id="-15">
	المخاطر والتكاليف والأخلاقيات في الحوسبة السحابية
</h2>

<p>
	وسط كل الفوائد التي تقدمها الحوسبة السحابية للمستخدمين، يوجد بعض الاعتبارات التي ينبغي أخذها بالحسبان عند الاعتماد على أي خدمة سحابية، أهمها: المخاطر المحتملة، والتكاليف، والمعايير الأخلاقية. ويختلف أثرها على المستخدمين باختلاف طبيعة عملهم على السحابة، فبعضها يؤثر على جميع المستخدمين سواء كانوا أفرادًا أم شركات، وبعضها الآخر يملك تأثيرًا أكبر على الشركات والمؤسسات التي تخزن بيانات عملائها على السحابة.
</p>

<h3 id="-16">
	اعتبارات تهم جميع مستخدمي السحابة
</h3>

<ul>
	<li>
		<p>
			<strong>الأمان:</strong> الموارد السحابية معرضة للثغرات الأمنية أكثر من مراكز البيانات التقليدية الموجودة داخل مقرات الشركات، لأن مرونتها في الوصول إلى قطاعات واسعة من المستخدمين تفرض عليها استعمال أدوات، مثل: واجهات برمجة التطبيقات APIs، وبيانات المصادقة القائمة على السحابة، والخدمات عند الطلب، التي قد تسهل حصول المخترقين على وصول غير مصرح به للموارد السحابية. لذا ننصحك عند اختيار خدمتك السحابية بتحري تدابير الحماية التي يعتمدها مزود الخدمة لحماية بيانات مشتركيه من السرقة والهجمات الأخرى، وبالاطلاع على أفضل الممارسات التي يتبعها المستخدمون عادةً لحماية بياناتهم على السحابة، وأيضًا على خدمات الحماية الإضافية التي يمكنهم استخدامها. يمكنك مراجعة مقال <a href="https://academy.hsoub.com/devops/security/%D9%85%D8%A7-%D9%87%D9%88-%D8%A7%D9%84%D8%A3%D9%85%D9%86-%D8%A7%D9%84%D8%B3%D9%8A%D8%A8%D8%B1%D8%A7%D9%86%D9%8A-%D9%88%D9%85%D8%A7-%D8%A3%D9%87%D9%85%D9%8A%D8%AA%D9%87%D8%9F-r664/" rel="">ما هو الأمن السيبراني وما أهميته؟</a>.
		</p>
	</li>
	<li>
		<p>
			<strong>فقدان البيانات:</strong> تتعرض البيانات المخزنة على السحابة لخطر الفقدان، مثلها مثل البيانات المخزنة على الأجهزة المملوكة أو المُدارة من المستخدم، وذلك بسبب الكوارث أو الأعطال أو الأخطاء البرمجية أو أخطاء المستخدم أو غيرها من الحالات الطارئة. لذا احرص على تفحص خدمات النسخ الاحتياطي التي يوفر لك المزود السحابي، وفيما إذا كانت أوتوماتيكية أم يدوية، مجانية أم مدفوعة، وانظر أيضًا إذا كان باستطاعتك تشغيل النسخ الاحتياطي بنفسك.
		</p>
	</li>
	<li>
		<p>
			<strong>التمسك بالبيانات:</strong> يفضل بعض مستخدمي الخدمات السحابية التأكد من حذف بياناتهم الشخصية التي قدموها لمزود الخدمة في أثناء اشتراكهم، ويصعب عليهم التأكد من حذفها، فهذه العملية طويلة ومعقدة وتاكد تكون مستحيلة. فإذا كنت أحد هؤلاء وتفكر بحذف بياناتك لاحقًا، حاول التعرّف أكثر على سياسات مزود الخدمة بخصوص حذف بيانات المستخدمين قبل منحه حق الوصول لبياناتك الشخصية.
		</p>
	</li>
	<li>
		<p>
			<strong>التكاليف:</strong> توفر الحوسبة السحابية على المستخدمين تكاليف امتلاك الموارد نفسها محليًا هذا أمرٌ لا ريب فيه، لكن فواتير استخدامها قد ترتفع مع زيادة الاستهلاك، لذا ننصحك عند الاشتراك بأي خدمة سحابية بتفقد كافة تفاصيل الفوترة، وفهم طرق احتسابها، وآليات قياس الخدمات والاستهلاك، ويمكنك أيضًا الاستفادة من خصائص توفيرية، مثل: تثبيت حدود قصوى للاستهلاك لا يسمح لك بتخطيها، أو تلقي إشعارات عند تجاوزك حد معين من الباقة.
		</p>
	</li>
	<li>
		<p>
			<strong>التقيُّد بمزود معين:</strong> مستخدمو الخدمات السحابية المملوكة أو مغلقة المصدر هم الفئة الأكثر عرضة لخطر التقيُّد بمزود خدمة معين، فيصعب أو يستحيل عليهم تغيره فيما بعد، فقد نظموا جميع عملياتهم الحاسوبية لتتلائم مع نظامه المغلق. يساعدك استخدام المنصات السحابية مفتوحة المصدر في تخفيف هذه المخاطر، فتُسهّل عليك المعايير المفتوحة التي تعتمدها ترحيل عملياتك من مزود خدمة سحابية إلى آخر. لكن في جميع الأحوال، تُعدّ عمليات ترحيل الأنظمة من أدق العمليات التقنية التي ينبغي لمستخدمي الحوسبة السحابية إدراك حساسيتها وحاجتها لقدر كبير من العمل والتخطيط والخبرة.
		</p>
	</li>
	<li>
		<p>
			<strong>استخدام المزود لبياناتك:</strong> يستخدم بعض مزودي الخدمات السحابية بيانات عملائهم، لأغراض متعددة، مثل: فهم سلوكهم وطريقة تفاعلهم مع المنتجات السحابية، وبيع الإعلانات أو تخصيصها لاستهداف شرائح معينة منهم، وتدريب خوارزميات التعلم الآلي، وقد يبيعونها لجهات خارجية أو غير ذلك. لذا إذا كنت متخوفًا من كيفية استخدام المزود السحابي لبياناتك الشخصية أو بيانات شركتك أو مؤسستك، تأكد من سياسات مزود الخدمة فيما يتعلق بطرق استخدامه للبيانات قبل الاشتراك بخدماته.
		</p>
	</li>
	<li>
		<p>
			<strong>القيم الأخلاقية للمزود:</strong> يتمتع بعض مزودي الخدمات السحابية بتأثير وسلطة لا يستهان بها على القضايا العالمية، لذا يسعى الكثير من مستخدمي السحابة عند اختيارهم للمزود إلى معرفة القيم التي يدعمها ومواقفه الأخلاقية من مسائل مثل: جمع بيانات المستخدمين، والإعلانات، وخطاب الكراهية، والبيئة، وتقديم المعلومات المضللة، والعمالة… إلخ.
		</p>
	</li>
	<li>
		<p>
			<strong>فقدان التحكم الكامل:</strong> موارد الحوسبة السحابية في نهاية الأمر هي موارد طرف ثالث لذا يستحيل على المشترك التحكم بها تحكمًا كاملًا، والحصول على رؤية شاملة لكل جوانبها، يوّلد هذا النقص لدى المستخدم السحابي مخاوف تقنية، ومخاوف أخرى تتعلق بالثقة وآلية استخدام البيانات الشخصية، فهو يشعر دائمًا أن خللًا ما قد يحدث دون أن يتحوط له. يتعامل المستخدمون عادةً مع هذه المخاوف بعدة طرق، أبرزها: استخدام أدوات المراقبة والتحليل ليبقوا على اطلاعٍ دائم بمدى جاهزية بنيتهم التحتية، ويكونوا على استعداد للاستجابة العاجلة لأي طارئ، بالإضافة إلى اهتمامهم بمعرفة سياسات مزود الخدمة حول استخدام بيانات العملاء.
		</p>
	</li>
</ul>

<h3 id="-17">
	اعتبارات إضافية تهم الشركات والمؤسسات
</h3>

<ul>
	<li>
		<p>
			<strong>القوانين الناظمة:</strong> تخضع بعض القطاعات، مثل: الصحة والمالية والتعليم، إلى قوانين صارمة تحدد شروط تعاملهم مع بيانات العملاء لجهة تخزينها واستخدامها، وقد يمنع بعضها تخزين بياناتهم في الخدمات السحابية العامة، لذا تلجأ الجهات التابعة لهذه القطاعات إلى استخدام نماذج سحابية هجينة وحلول تقنية خاصة للامتثال لهذه الضوابط، وإلى جانب القوانين الخاصة بكل قطاع توجد أيضًا لوائح تنظيمية تتعلق بحماية بيانات العملاء في بعض المناطق حول العالم، فيتعين عليهم أيضًا الامتثال لقوانين البلد الذي يقطن فيه عملائهم، فعلى سبيل المثال يلتزم مزودو الخدمات السحابية <a href="https://ar.wikipedia.org/wiki/%D8%A7%D9%84%D9%86%D8%B8%D8%A7%D9%85_%D8%A7%D9%84%D8%A3%D9%88%D8%B1%D9%88%D8%A8%D9%8A_%D8%A7%D9%84%D8%B9%D8%A7%D9%85_%D9%84%D8%AD%D9%85%D8%A7%D9%8A%D8%A9_%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA" rel="external nofollow">بالنظام الأوروبي العام لحماية البيانات (GDPR)</a> عند تعاملهم مع عملاء من الاتحاد الأوروبي.
		</p>
	</li>
	<li>
		<p>
			<strong>التعقيد:</strong> تهجير الموارد الحاسوبية للمؤسسة إلى البيئة السحابية عملية حساسة ومعقدة للغاية، وتتطلب تخطيطًا دقيقًا، وحوكمة إدارية، وإشرافًا مستمرًا لتجنب مشكلات عدم التوافق، ومخاطر فقدان البيانات، وزيادة التكاليف غير المدروسة. خلاصة القول: تساعد الحوسبة السحابية المؤسسات على خفض تكاليف تجهيز بنيتها التحتية، لكنها بالمقابل تحتاج خبراء تقنيين للتخطيط للبنية التحتية وإدارتها وتوجيهها بالاتجاه الصحيح.
		</p>
	</li>
</ul>

<h2 id="-18">
	الملخص
</h2>

<p>
	تؤمن التقنيات السحابية فرصًا كبيرة للشركات والمطورين المستقلين والباحثين والمعلمين والطلاب. لكن استفادتك الحقيقية من ميزاتها وعروضها تتطلب منك فهمًا جيدًا لأنواع الخدمات السحابية، ونماذج تقديمها، وفوائدها، ومخاطرها، لتختر منها ما يناسب طبيعة عملك، وميزانيتك، وخصوصية بياناتك.
</p>

<p>
	ترجمة -وبتصرف- للمقال <a href="https://www.digitalocean.com/community/tutorials/a-general-introduction-to-cloud-computing#risks-costs-and-ethics-in-cloud-computing" rel="external nofollow">A General Introduction to Cloud Computing</a> لصاحبته Erin Glass.
</p>

<h2>
	اقرأ أيضًا
</h2>

<ul>
	<li>
		المقال السابق: <a href="https://academy.hsoub.com/devops/cloud-computing/%D9%85%D9%82%D8%AF%D9%85%D8%A9-%D8%A5%D9%84%D9%89-%D8%A7%D9%84%D8%AE%D9%88%D8%A7%D8%AF%D9%85-%D8%A7%D9%84%D8%B3%D8%AD%D8%A7%D8%A8%D9%8A%D8%A9-r807/" rel="">مقدمة إلى الخوادم السحابية</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/cloud-computing/%D9%85%D9%81%D9%87%D9%88%D9%85-%D8%A7%D9%84%D8%B3%D8%AD%D8%A7%D8%A8%D8%A9-cloud-r624/" rel="">مفهوم السحابة Cloud</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/cloud-computing/%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%AD%D9%88%D8%B3%D8%A8%D8%A9-%D8%A7%D9%84%D8%B3%D8%AD%D8%A7%D8%A8%D9%8A%D9%91%D8%A9-%D8%A7%D9%84%D9%85%D8%AA%D8%B7%D9%84%D8%A8%D8%A7%D8%AA-%D8%A7%D9%84%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D9%91%D8%A9%D8%8C-%D9%88%D9%83%D9%8A%D9%81-%D8%AA%D8%B5%D8%A8%D8%AD-%D9%85%D9%87%D9%86%D8%AF%D8%B3-%D8%AD%D9%88%D8%B3%D8%A8%D8%A9-%D8%B3%D8%AD%D8%A7%D8%A8%D9%8A%D9%91%D8%A9-r457/" rel="">تعلم الحوسبة السحابيّة: المتطلبات الأساسيّة، وكيف تصبح مهندس حوسبة سحابيّة</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/servers/%D9%83%D9%84-%D9%85%D8%A7-%D8%AA%D9%88%D8%AF-%D9%85%D8%B9%D8%B1%D9%81%D8%AA%D9%87-%D8%B9%D9%86-%D8%A7%D9%84%D8%B3%D8%AD%D8%A7%D8%A8%D8%A9-%D8%A7%D9%84%D9%87%D8%AC%D9%8A%D9%86%D8%A9-hybrid-cloud-r358/" rel="">كل ما تود معرفته عن السحابة الهجينة Hybrid Cloud</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">809</guid><pubDate>Fri, 07 Jun 2024 15:00:00 +0000</pubDate></item><item><title>&#x645;&#x642;&#x62F;&#x645;&#x629; &#x625;&#x644;&#x649; &#x627;&#x644;&#x62E;&#x648;&#x627;&#x62F;&#x645; &#x627;&#x644;&#x633;&#x62D;&#x627;&#x628;&#x64A;&#x629;</title><link>https://academy.hsoub.com/devops/cloud-computing/%D9%85%D9%82%D8%AF%D9%85%D8%A9-%D8%A5%D9%84%D9%89-%D8%A7%D9%84%D8%AE%D9%88%D8%A7%D8%AF%D9%85-%D8%A7%D9%84%D8%B3%D8%AD%D8%A7%D8%A8%D9%8A%D8%A9-r807/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2024_04/804584523_.png.ebd1f188eadd52c92baf161d2a91d563.png" /></p>
<p>
	الخادم السحابي Cloud Server هو بنية تحتية متاحة للمستخدمين عبر الإنترنت، تؤمن لهم ما يحتاجونه من الموارد الحاسوبية عن بعد، مثل مساحات التخزين والذواكر والمعالجات وغيرها، يمكنك النظر إليه على أنه حاسوب خاص تستطيع إعداده والتحكم به بالطريقة نفسها التي تتعامل بها مع أجهزتك المحلية، سواء كانت خوادم أو حواسيب شخصية أو محمولة. يعرض هذا المقال بنية الخادم السحابي ومكوناته، والفرق بينه وبين عروض الاستضافة السحابية الأخرى، مع بعض النصائح لاختيار الاستضافة الأنسب لموقعك الإلكتروني أو تطبيقك على الويب.
</p>

<p>
	ستصادف في هذا المجال مصطلحات "خادم" و"خادم سحابي" و"خادم ويب" بالتبادل، ويشير الخادم السحابي عادةً إلى بيئة <a href="https://academy.hsoub.com/devops/linux/" rel="">لينكس</a> كاملة أو فعليًّا إلى حاسوب كامل. تعمل الخوادم السحابية بصفتها أجهزة افتراضية (VMs) أو برمجيات تحاكي الحواسيب التقليدية، وتجدها دائمًا ضمن مجموعات كبيرة أو عناقيد Clusters في تقنية تسمى الحوسبة الافتراضية Virtualization. يمكنك معرفة المزيد عن آلية عملها بمراجعة مقال [مقدمة إلى الاستضافة السحابية]().
</p>

<h2 id="-1">
	البرمجيات المستخدمة على السحابة
</h2>

<p>
	التعرُّف عليها ضروري لفهم الخوادم السحابية، سنعرضها باختصار:
</p>

<p>
	<strong>نظم التشغيل:</strong> تثبيت نظام التشغيل هو خطوتك الأولى في إعداد الخادم السحابي، يعتمد معظم مستخدمي السحابة نظام تشغيل لينكس بتوزيعاته المختلفة، مثل: <a href="https://academy.hsoub.com/devops/linux/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%AA%D8%AB%D8%A8%D9%8A%D8%AA-%D8%AA%D9%88%D8%B2%D9%8A%D8%B9%D8%A9-%D8%A3%D9%88%D8%A8%D9%86%D8%AA%D9%88-%D9%85%D9%86-%D9%84%D9%8A%D9%86%D9%83%D8%B3-%D8%A8%D8%A3%D8%A8%D8%B3%D8%B7-%D8%B7%D8%B1%D9%8A%D9%82%D8%A9-r575/" rel="">أوبنتو Ubuntu</a> أو روكي لينكس Rocky Linux لبناء خوادمهم، نظرًا لانتشاره الواسع في بيئات الخوادم، والدعم الكبير الذي يحظى به من المجتمع التقني، والذي يسهل عليك إيجاد مصادر للتعلُّم، بالإضافة لكونه مجاني في الأساس، وحتى إن احتجت لتراخيص فتراخيصه مرنة موازنةً بغيره. يمكنك الاطلاع على مقال [كيف تختار توزيعة لينكس المناسبة لك؟]() لتتعرف أكثر على توزيعات لينكس، وتختار ما يناسبك منها.
</p>

<p>
	<strong>برمجيات جانب الخادم:</strong> يقصد بها مجموعة واسعة من البرمجيات والأدوات المستخدمة لإعداد الخوادم، وهي مصممة للعمل في البيئات السحابية، ومناسبة تمامًا لها، حيث لا شاشات عرض ولا بيئة سطح مكتب، فغالبًا ما تُثَبّت برمجيات <a href="https://academy.hsoub.com/devops/servers/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D9%85%D9%88%D8%A7%D9%82%D8%B9-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-%D9%85%D9%86-%D8%B7%D8%B1%D9%81-%D8%A7%D9%84%D8%AE%D8%A7%D8%AF%D9%85-r783/" rel="">جانب الخادم</a> Server-Side وتُضبَط إعداداتها باستخدام واجهة سطر الأوامر، ويصل إليها المستخدم النهائي عبر المتصفح أو التطبيقات الأخرى. تتنوع هذه الأدوات وسيساعدك فهم أساسياتها على تجهيز خادمك السحابي.
</p>

<p>
	<strong>خوادم الويب:</strong> تسمح خوادم الويب لخادمك السحابي بالتواصل مع المستخدمين عبر الإنترنت بواسطة <a href="https://academy.hsoub.com/programming/general/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-http-r73/" rel="">بروتوكول HTTP</a>، وهي من أدوات جانب الخادم، تُبَرمَج للاستجابة بطريقة محددة مع كل طلب يطلبه العميل عبر برمجيات جانب العميل Client-Side، لنفترض على سبيل المثال: أن المستخدم طلب URL معين من المتصفح (الذي يلعب هنا دور العميل)، سيستجيب له الخادم، ويجلب مستند HTML المناسب، ثم يرسله للمتصفح فيعرض صفحة الويب المطلوبة. ستحتاج خادم ويب حتمًا، إذا كنت تبني خادمك السحابي من الصفر، وتنوي تجهيزه لاستضافة موقع إلكتروني أو تطبيق ويب، وأشهر خوادم الويب المستخدمة هي <a href="https://academy.hsoub.com/devops/servers/web/nginx/" rel="">Nginx</a> و <a href="https://academy.hsoub.com/devops/servers/web/apache/" rel="">Apache</a>. يمكنك الاطلاع على <a href="https://academy.hsoub.com/devops/servers/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%AE%D8%A7%D8%AF%D9%85-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-r574/" rel="">مدخل إلى خادم الويب</a> لمزيد من المعلومات.
</p>

<p>
	<strong>خوادم <abbr title="Application Programming Interface | واجهة برمجية"><abbr title="Application Programming Interface | واجهة برمجية">API</abbr></abbr>:</strong> <a href="https://academy.hsoub.com/programming/general/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%A7%D9%84%D9%88%D8%A7%D8%AC%D9%87%D8%A7%D8%AA-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D9%8A%D8%A9-api-r1314/" rel="">واجهات برمجة التطبيقات</a> أو APIs هي برمجيات وسيطة تسمح للتطبيقات المختلفة بالتخاطب مع بعضها. خادم الويب نفسه هو خادم <abbr title="Application Programming Interface | واجهة برمجية"><abbr title="Application Programming Interface | واجهة برمجية">API</abbr></abbr> يطبق HTTP <abbr title="Application Programming Interface | واجهة برمجية"><abbr title="Application Programming Interface | واجهة برمجية">API</abbr></abbr>، ويوجد أنواع كثيرة غيره، مثل APIs الخاصة بمعلومات الطقس أو رحلات الطيران أو غيرها، يستخدمها الخادم السحابي لتبادل البيانات مع التطبيقات الخارجية ومصادر البيانات الخارجية، وقد يتصل الخادم بأكثر من واجهة <abbr title="Application Programming Interface | واجهة برمجية"><abbr title="Application Programming Interface | واجهة برمجية">API</abbr></abbr> حسب طبيعة تطبيقك، وتدعى نقاط اتصال <abbr title="Application Programming Interface | واجهة برمجية"><abbr title="Application Programming Interface | واجهة برمجية">API</abbr></abbr> بالتطبيق، أي النقاط التي تنفذ عمليات <abbr title="Application Programming Interface | واجهة برمجية"><abbr title="Application Programming Interface | واجهة برمجية">API</abbr></abbr>، بنقاط الوصول أو endpoints، وتكون مثلًا عناوين URL تدل على الموارد المطلوب الاستعلام عنها.
</p>

<p>
	<strong>خوادم قواعد البيانات:</strong> يمكنك تسميها بقواعد البيانات فقط، وهي نوع آخر من خوادم <abbr title="Application Programming Interface | واجهة برمجية"><abbr title="Application Programming Interface | واجهة برمجية">API</abbr></abbr>، لكنها بخلاف خوادم الويب لا تعرض البيانات المطلوبة منها بهيئة صفحات HTML ضمن المتصفح، إنما يجري التواصل معها عبر واجهات برمجة تطبيقات خاصة تسمى واجهات استعلام قاعدة البيانات. بعض قواعد البيانات متاح للاستعلام الخارجي عبر الويب، وبعضها الآخر مخصص للاستخدام الداخلي من قبل برمجياتك السحابية فقط.
</p>

<blockquote class="ipsQuote" data-ipsquote="">
	<div class="ipsQuote_citation">
		اقتباس
	</div>

	<p data-gramm="false">
		<strong>تنويه:</strong> يطلق اسم استضافة Bare-Metal أو الاستضافة العتادية التي تتعامل مباشرة مع العتاد الصلب، على الحالة التي تُبنى فيها الخوادم بتثبيت لينكس مباشرةً على الحاسوب المادي المخصص، بدون أي طبقة من الحوسبة الافتراضية Virtualization وبدون أي مشتركين آخرين، وبسبب تراجع أعداد مزودي الخدمات السحابية ممن يقدمون هذا النوع من الاستضافة لمشتركيهم، يلجأ بعض أصحاب المشاريع الصغيرة لبناء خوادمهم بإعداد بيئة لينكس على جهاز راسبيري باي، لمعرفة المزيد يفيدك مقال <a href="https://academy.hsoub.com/devops/servers/%D8%A5%D8%B9%D8%AF%D8%A7%D8%AF-%D8%A7%D8%B3%D8%AA%D8%B6%D8%A7%D9%81%D8%A9-%D9%84%D9%85%D8%AF%D9%88%D9%86%D8%A9-%D8%B4%D8%AE%D8%B5%D9%8A%D8%A9-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%B1%D8%A7%D8%B3%D8%A8%D9%8A%D8%B1%D9%8A-%D8%A8%D8%A7%D9%8A-raspberry-pi-r605/" rel="">إعداد استضافة لمدونة شخصية باستخدام راسبيري باي Raspberry Pi</a>، وسلسلة <a href="https://academy.hsoub.com/tags/%D8%AF%D9%84%D9%8A%D9%84%20%D8%B1%D8%A7%D8%B3%D8%A8%D9%8A%D8%B1%D9%8A%20%D8%A8%D8%A7%D9%8A/" rel="">دليل راسبيري باي</a> على أكاديمية حسوب.
	</p>
</blockquote>

<h2 id="-2">
	الخوادم السحابية وبدائلها
</h2>

<p>
	الخادم السحابي هو حاسوب افتراضي كامل، لذا فجميع المنتجات السحابية الأخرى تتعلق به، ومزودو الخدمة السحابية يقدمون لك في عروضهم ميزة أو وظيفة محددة فقط من وظائف هذا الخادم، على سبيل المثال استضافة ويب مخصصة أو استضافة قاعدة بيانات مخصصة، وكل حل سحابي يوفر خادم ويب أو قاعدة بيانات ينبثق فعليًّا من خادم سحابي، غالبًا ما تبنى الخوادم السحابية باستخدام عناقيد من الخوادم المادية أو الفيزيائية التي تعمل معًا بتقنية الحوسبة الافتراضية. فالفرق الجوهري إذًا بين الخادم السحابي (الذي يسمى VPS أو الخادم الافتراضي الخاص Virtual Private Server) والعروض السحابية الأخرى هو أنك تستطيع تثبيت التطبيقات التي تريدها على الخادم السحابي، وتشغيلها بحرية حسب احتياجك، بينما تفرض عليك العروض الأخرى مجموعة ميزات ووظائف بعينها لا يسعك الخروج عنها.
</p>

<p>
	أحدثت <a href="https://academy.hsoub.com/devops/cloud-computing/%D8%A7%D9%84%D8%AD%D9%88%D8%B3%D8%A8%D8%A9-%D8%A7%D9%84%D8%A7%D9%81%D8%AA%D8%B1%D8%A7%D8%B6%D9%8A%D8%A9-virtualization-%D9%88%D8%A3%D9%88%D8%AC%D9%87-%D8%A7%D8%AE%D8%AA%D9%84%D8%A7%D9%81%D9%87%D8%A7-%D8%B9%D9%86-%D8%A7%D9%84%D8%AD%D8%A7%D9%88%D9%8A%D8%A7%D8%AA-containers-r599/" rel="">الحوسبة الافتراضية</a> تغييرًا كبيرًا في سوق الخدمات السحابية خلال العقود الماضية، فقبل ظهورها كان مزود الخدمة يوفر خادمًا مثل Nginx أو Apache لتقديم الاستضافة لعشرات المواقع مع أذونات مخصصة لكل مشترك، ولم يكن المشترك مسؤولًا عن أي مهام إدارية على الخادم، لكن بالمقابل اقتصرت المواقع المستضافة وقتها على المواقع ذات الطبيعة الثابتة أي التي تتضمن عناصر HTML و CSS وجافا سكريبت ثابتة بدون محرك خلفي، وأيضًا مواقع drop-in PHP التي لا تمتلك أي اعتماديات سوى خادم الويب.
</p>

<p>
	ولاحقًا بعد انتشار الحوسبة الافتراضية، ازداد الطلب على عروض VPS أو الخوادم السحابية الكاملة، بسبب مرونتها العالية، لكن تشغيلها وتحديدًا في بيئة الإنتاج، يتطلب منك مهارات خاصة، لا يهتم المبرمجون بتحصيلها عادةً، لأنها لا ترتبط مباشرةً بكتابة الشيفرات البرمجية، أبرزها مثلًا: معرفة جيدة بأساسيات لينكس، وكيفية التعامل مع سطر الأوامر، ومهام إدارة النظام، بالإضافة إلى <a href="https://academy.hsoub.com/devops/general/%D8%AA%D8%B9%D9%84%D9%85-devops/" rel="">هندسة DevOps</a> لإدارة عمليات النشر وتلبية المعايير الأمنية للتشغيل.
</p>

<h2 id="-3">
	هل أستخدم خادمًا سحابيًا لمشروعي؟
</h2>

<p>
	تحتوي الخوادم السحابية ميزات حماية افتراضية مدمجة فيها، ولست مضطرًا لخوض عملية نشر على نطاق تجاري بحذافيرها لتُشغل تطبيقًا مفتوح المصدر بطريقة آمنة وموثوقة على خادم سحابي، أضف إلى ذلك أن إعدادات الأمان الافتراضية مضبوطة بإحكام على معظم الحزم المستخدمة في الخوادم، وتخضع للتحديث الدوري لسد ثغراتها الأمنية، لذا يكفيك في معظم الأحيان تثبيت جدار حماية بسيط مثل <code>ufw</code> أو <a href="https://academy.hsoub.com/devops/security/firewalls/%D9%83%D9%8A%D9%81-%D8%AA%D8%B6%D8%A8%D8%B7-%D8%AC%D8%AF%D8%A7%D8%B1%D8%A7-%D9%86%D8%A7%D8%B1%D9%8A%D8%A7-%D9%81%D9%8A-%D8%A3%D9%88%D8%A8%D9%86%D8%AA%D9%88-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-ufw-r120/" rel="">الجدار الناري غير المعقد</a> ليتحكم ببوابات الشبكة على خادمك السحابي، فيسمح أو يمنع اتصالات معينة حسب متطلبات عملك، أو على الأقل يمررها إلى خادم ويب مخضرم مثل Nginx تعتمده ملايين الخوادم حول العالم.
</p>

<p>
	إضافةً إلى الخوادم السحابية، يوفر بعض مزودي الخدمات السحابية عروضًا أخرى يمكن تشبيهها بمضيفي الويب، تلائم <a href="https://academy.hsoub.com/programming/general/%D9%85%D8%A7-%D9%87%D9%8A-%D8%B5%D9%81%D8%AD%D8%A7%D8%AA-%D8%A7%D9%84%D9%88%D9%8A%D8%A8%D8%9F-r2094/" rel="">مواقع الويب ذات المكونات الثابتة</a> المعتمدة على ميزات جافا سكريبت الحديثة، التي تخفف الحاجة إلى الخادم الخلفي Backend، يسمى هذا النوع من الاستضافة نظام إدارة محتوى بدون رأس Headless CMS، ويقدم المزود معه عادةً أدوات تأليف ونماذج ويب تعد جزءًا من عرض أوسع يسمى البرنامج بصيغة خدمة أو Software As A Service.
</p>

<p>
	ويقدم بعض المزودين أيضًا استضافة <a href="https://academy.hsoub.com/devops/cloud-computing/%D8%B3%D8%A8%D8%B9-%D9%85%D9%86%D8%B5%D8%A7%D8%AA-%D9%85%D9%81%D8%AA%D9%88%D8%AD%D8%A9-%D8%A7%D9%84%D9%85%D8%B5%D8%AF%D8%B1-%D9%84%D9%84%D8%A8%D8%AF%D8%A1-%D9%81%D9%8A-%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%A7%D9%84%D8%AD%D9%88%D8%B3%D8%A8%D8%A9-%D8%AE%D9%81%D9%8A%D8%A9-%D8%A7%D9%84%D8%AE%D9%88%D8%A7%D8%AF%D9%85-serverless-r408/" rel="">الخوادم الخفية Serverless</a> أو ما يسمى الوظائف بدون خادم، ويقصد بها كتابتك التعليمات البرمجية لتطبيقك مرةً واحدة بمعزل عن البنية التحتية للخوادم، ثم نشرها في البيئة السحابية ليجري تشغيلها فقط عند الطلب، يطلق على هذا الأسلوب عند استخدامه مع مواقع الويب الثابتة اسم <a href="https://en.wikipedia.org/wiki/Jamstack" rel="external nofollow">جامستاك Jamstack</a>.
</p>

<p>
	تتميز خدمات الحوسبة خفية الخوادم وخدمات نشر مواقع الويب الثابتة بأنها تقنيات قابلة للنقل، وتشبه الاستضافات القديمة إذ تعفي صاحب التطبيق تقريبًا من جميع مسؤوليات الأمن والصيانة التي ترافق عمليات النشر الكاملة على الخوادم، لكنها مع ذلك تظل محدودة النطاق، وقد لا تفي بالغرض في بعض الحالات، فإذا تطلب مشروعك على سبيل المثال <a href="https://academy.hsoub.com/devops/cloud-computing/docker/%D8%A5%D8%B9%D8%AF%D8%A7%D8%AF-%D9%84%D8%A7%D8%B1%D8%A7%D9%81%D9%8A%D9%84-%D9%85%D8%B9-%D8%AE%D8%A7%D8%AF%D9%85-nginx-%D9%88%D9%82%D8%A7%D8%B9%D8%AF%D8%A9-%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-mysql-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%AF%D9%88%D9%83%D8%B1-%D9%83%D9%88%D9%85%D8%A8%D9%88%D8%B2-docker-compose-r651/" rel="">نشر حاوية دوكر خلف خادم Nginx</a> في مكدس واحد، لن تكفيك هذه الاستضافات وستحتاج خادمًا سحابيًا كاملًا.
</p>

<p>
	عمومًا، أي تطبيق تنشره على الخادم السحابي يمكنك نشره على حاسوبك المحلي أيضًا، مع بعض الاختلافات لصالح الخادم السحابي، فنادرًا ما يثبت الأفراد نظام تشغيل لينكس على حواسيبهم الشخصية، كما هو الحال في الخوادم السحابية، بل يعتمدون ويندوز أو ماك، ومعظم أدوات جانب الخادم لا تعمل مباشرةً مع هذه النظم على عكس لينكس. قد لا تكون هذه النقطة مؤثرة كثيرًا بالنسبة لك، لكن ما نريد إيصاله أن الخادم السحابي يناسب جميع الاحتياجات، ويمكنك إعداده لأي غرض تريده تمامًا كما تفعل مع حاسوبك المحلي.
</p>

<h2 id="-4">
	كيفية تحديد مواصفات الخادم
</h2>

<p>
	يعتمد أداء الخوادم السحابية وسعرها على مواصفات العتاد الصلب، ويخصص لكل خادم سحابي ضمن العنقود Cluster مقدار معين من الموارد الحاسوبية، يمكن زيادته أو إنقاصه بمرونة تامة وبسرعة، على عكس الحواسيب الفيزيائية، لذا قبل حجز خادمك السحابي حدد أولًا مواصفاته الفنية، وادرس تأثيرها على جودة عمل التطبيق، ثم وازن ذلك مع ميزانيتك، وبعدها اختر الخادم المناسب.
</p>

<p>
	تُحَدَّد مواصفات الخوادم السحابية عادةً بعدد نوى المعالجات المركزية <a href="https://academy.hsoub.com/apps/operating-systems/%D9%88%D8%AD%D8%AF%D8%A9-%D8%A7%D9%84%D9%85%D8%B9%D8%A7%D9%84%D8%AC%D8%A9-%D8%A7%D9%84%D9%85%D8%B1%D9%83%D8%B2%D9%8A%D8%A9-r879/" rel="">CPU</a> المتوفرة لديها، وحجم ذاكرة الوصول العشوائي <a href="https://academy.hsoub.com/apps/operating-systems/%D8%A7%D9%84%D8%B0%D8%A7%D9%83%D8%B1%D8%A9-%D9%88%D8%A3%D9%86%D9%88%D8%A7%D8%B9%D9%87%D8%A7-r880/" rel="">RAM</a> المتاحة، وما يخصص لها من مساحات تخزينية على الأقراص الصلبة. ونظرًا لاختلاف مقاييس سرعة الأقراص والمعالجات في الخوادم السحابية عنها في ظروف التشغيل في العالم الحقيقي، فقد اعتمد معظم مزودي الخدمات السحابية مواصفاتٍ موحدة لها، فمتوسط سرعة الأقراص يعادل تقريبًا سرعة أقراص SSD، وسرعة وحدة المعالجة المركزية تماثل سرعة نواة Intel Xeon. وبالإضافة إلى المواصفات السابقة يفرض بعض المزودين قيودًا على الخوادم السحابية في الطبقة الدنيا، مثل: تحديد عدد عمليات الإدخال والإخراج المسموحة على القرص (IOPS)، وإجمالي حركة المرور المتبادلة مع الخودام عبر الشبكة وغير ذلك، قد تسبب هذه القيود اختناقات لبعض البرامج المستضافة.
</p>

<p>
	أما بخصوص الحجوم التخزينية، فيوفر لك معظم المزودين إمكانية حجز مساحات تخزين إضافية حسب احتياجاتك، بتقنيات مثل: <a href="https://academy.hsoub.com/devops/cloud-computing/%D9%85%D9%82%D8%A7%D8%B1%D9%86%D8%A9-%D8%A8%D9%8A%D9%86-%D8%AE%D8%AF%D9%85%D8%A7%D8%AA-%D8%A7%D9%84%D8%AA%D8%AE%D8%B2%D9%8A%D9%86-%D8%A7%D9%84%D9%83%D8%A7%D8%A6%D9%86%D9%8A-%D9%88%D8%A7%D9%84%D8%AA%D8%AE%D8%B2%D9%8A%D9%86-%D8%A7%D9%84%D9%83%D8%AA%D9%84%D9%8A-r344/" rel="">التخزين الكتلي والتخزين الكائني</a>، وربطها بخادمك الخاص VPS، وهذا أفضل من احتفاظك بجميع البيانات في مكان واحد على القرص التخزين الأساسي داخل VPS وتوسيع مساحته باستمرار.
</p>

<p>
	يُعطى لكل خادم سحابي عنوان IP عام مخصص له، للاتصال به عبر شبكة الإنترنت، وقد يكون العنوان من الإصدار الرابع IP4 وفق الصيغة <code>123.123.123.123</code> أو من الإصدار السادس IP6 من نمط <code>2001:0db8:0000:0000:0000:ff00:0042:8329</code>، والحالة المعتادة أن يقابل عنوان IP اسم دومين مثل: <code>https://my_domain.com</code>. تتضمن بعض عروض الاستضافة السحابية تزويدك بعنوان IP لكل خادم VPS تحجزه، بينما يطلب منك بعض المزودين شراء عناوين IP بنفسك وتسجيلها للخوادم، تسمى هذه العناوين بعناوين IP المحجوزة Reserved IPs، وهي مناسبة لعمليات النشر واسعة النطاق.
</p>

<p>
	يمكنك شراء اسم الدومين من مزود الاستضافة نفسه فبعضهم مثل ديجيتال أوشن يقدمون لك المنتجين معًا، وتستطيع أيضًا الحصول عليه من مصدر آخر ثم إنجاز الربط بينهما بواسطة سجلات <a href="https://academy.hsoub.com/devops/servers/dns/" rel="">DNS</a>.
</p>

<h2 id="-5">
	الوصول للخادم السحابي
</h2>

<p>
	يتطلب الوصول إلى الخوادم السحابية إتقانك العمل في بيئة <a href="https://academy.hsoub.com/devops/servers/%D9%85%D8%A7-%D9%87%D9%88-%D8%B3%D8%B7%D8%B1-%D8%A7%D9%84%D8%A3%D9%88%D8%A7%D9%85%D8%B1-%D8%9F-r353/" rel="">سطر الأوامر أو الطرفية Terminal</a> محليًا أو عن بعد، وأكثر البروتوكولات استخدامًا في هذا المجال بروتوكول <abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة"><a href="https://academy.hsoub.com/devops/security/ssh/" rel=""><abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">SSH</abbr></a></abbr> الذي يستخدم البوابة <code>22</code> ويعتمد عليه مسؤولو الخادم، وبروتوكول HTTP على البوابة <code>80</code> و HTTPS على البوابة <code>443</code> المخصصين أكثر للمستخدم النهائي، تتمحور إدارة النظام السحابي حول هذه الخوادم والخدمات والبروتوكولات.
</p>

<h2 id="-6">
	الخاتمة
</h2>

<p>
	تناول هذا المقال التعليمي نظرة عامة على الخوادم والعروض السحابية، وكيفية تطورها مع الزمن، ليضعك على بداية الطريق في العمل مع هذه الخدمات، ويعينك على اختيار أنسبها لمشروعك.
</p>

<p>
	ترجمة -وبتصرف- للمقال <a href="https://www.digitalocean.com/community/conceptual-articles/cloud-servers-an-introduction" rel="external nofollow">Cloud Servers: An Introduction</a> لصاحبه Alex Garnett.
</p>

<h2>
	اقرأ أيضًا
</h2>

<ul>
	<li>
		<a href="https://academy.hsoub.com/devops/cloud-computing/%D9%85%D9%81%D9%87%D9%88%D9%85-%D8%A7%D9%84%D8%B3%D8%AD%D8%A7%D8%A8%D8%A9-cloud-r624/" rel="">مفهوم السحابة Cloud</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/cloud-computing/%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%AD%D9%88%D8%B3%D8%A8%D8%A9-%D8%A7%D9%84%D8%B3%D8%AD%D8%A7%D8%A8%D9%8A%D9%91%D8%A9-%D8%A7%D9%84%D9%85%D8%AA%D8%B7%D9%84%D8%A8%D8%A7%D8%AA-%D8%A7%D9%84%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D9%91%D8%A9%D8%8C-%D9%88%D9%83%D9%8A%D9%81-%D8%AA%D8%B5%D8%A8%D8%AD-%D9%85%D9%87%D9%86%D8%AF%D8%B3-%D8%AD%D9%88%D8%B3%D8%A8%D8%A9-%D8%B3%D8%AD%D8%A7%D8%A8%D9%8A%D9%91%D8%A9-r457/" rel="">تعلم الحوسبة السحابيّة: المتطلبات الأساسيّة، وكيف تصبح مهندس حوسبة سحابيّة</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/cloud-computing/%D8%A7%D9%84%D8%AD%D9%88%D8%B3%D8%A8%D8%A9-%D8%A7%D9%84%D8%A7%D9%81%D8%AA%D8%B1%D8%A7%D8%B6%D9%8A%D8%A9-virtualization-%D9%88%D8%A3%D9%88%D8%AC%D9%87-%D8%A7%D8%AE%D8%AA%D9%84%D8%A7%D9%81%D9%87%D8%A7-%D8%B9%D9%86-%D8%A7%D9%84%D8%AD%D8%A7%D9%88%D9%8A%D8%A7%D8%AA-containers-r599/" rel="">الحوسبة الافتراضية virtualization وأوجه اختلافها عن الحاويات containers</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/servers/%D9%83%D9%84-%D9%85%D8%A7-%D8%AA%D9%88%D8%AF-%D9%85%D8%B9%D8%B1%D9%81%D8%AA%D9%87-%D8%B9%D9%86-%D8%A7%D9%84%D8%B3%D8%AD%D8%A7%D8%A8%D8%A9-%D8%A7%D9%84%D9%87%D8%AC%D9%8A%D9%86%D8%A9-hybrid-cloud-r358/" rel="">كل ما تود معرفته عن السحابة الهجينة Hybrid Cloud</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">807</guid><pubDate>Wed, 24 Apr 2024 12:09:01 +0000</pubDate></item><item><title>&#x645;&#x627; &#x647;&#x648; &#x643;&#x648;&#x628;&#x631;&#x646;&#x64A;&#x62A;&#x633; Kubernetes&#x61F;</title><link>https://academy.hsoub.com/devops/cloud-computing/%D9%85%D8%A7-%D9%87%D9%88-%D9%83%D9%88%D8%A8%D8%B1%D9%86%D9%8A%D8%AA%D8%B3-kubernetes%D8%9F-r788/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2023_08/2080892321_.png.24764ddc9609054045bb95737ea40cab.png" /></p>
<p>
	سنستكشف سويةً بتبسيط شديد ما هي تقنية كوبرنتيس Kubernetes أو K8s، وكيف تستعمل لأتمتة عملية نشر Deploy الحاويات containers على خوادم لينكس موزعة.
</p>

<p>
	سنناقش في هذا الفيديو ميزات كوبرنتيس الأساسية ولماذا أصبحت تستعمله الشركات ذات التطبيقات الضخمة، ثم نستكشف متى يكون من المنطقي استعماله لنشر تطبيقاتنا.
</p>

<p>
	<iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="" frameborder="0" height="603" id="ips_uid_39_5" src="https://academy.hsoub.com/applications/core/interface/index.html" title="ما هو كوبرنيتس Kubernetes" width="1072" data-embed-src="https://www.youtube.com/embed/OQVZ_jyZwh4"></iframe>
</p>

<p>
	إذا أردت التعرف أكثر على البرمجة ولينكس، فننصحك بالانضمام إلى <a href="https://academy.hsoub.com/learn/computer-science/" rel="">دورة علوم الحاسوب</a>، ولا تنسَ الاستعانة خلال رحلة تعلمك وعملك بتوثيقات <a href="https://wiki.hsoub.com/%D8%A7%D9%84%D8%B5%D9%81%D8%AD%D8%A9_%D8%A7%D9%84%D8%B1%D8%A6%D9%8A%D8%B3%D9%8A%D8%A9" rel="external">موسوعة حسوب</a> المجانية. وإذا أردت متابعة المعلومات البرمجية العلمية مكتوبة فيمكنك الاطلاع على <a href="https://academy.hsoub.com/programming/" rel="">قسم البرمجة في أكاديمية حسوب</a>، كما يمكنك متابعة جديد الفيديوهات التقنية المتاحة على <a href="https://www.youtube.com/@HsoubAcademy" rel="external nofollow">يوتيوب أكاديمية حسوب</a> مجانًا.
</p>
]]></description><guid isPermaLink="false">788</guid><pubDate>Thu, 16 Feb 2023 15:00:00 +0000</pubDate></item><item><title>&#x62A;&#x62B;&#x628;&#x64A;&#x62A; &#x627;&#x644;&#x628;&#x631;&#x645;&#x62C;&#x64A;&#x627;&#x62A; &#x636;&#x645;&#x646; &#x639;&#x646;&#x627;&#x642;&#x64A;&#x62F; Kubernetes &#x628;&#x627;&#x633;&#x62A;&#x62E;&#x62F;&#x627;&#x645; &#x645;&#x62F;&#x64A;&#x631; &#x627;&#x644;&#x62D;&#x632;&#x645; Helm</title><link>https://academy.hsoub.com/devops/cloud-computing/%D8%AA%D8%AB%D8%A8%D9%8A%D8%AA-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D9%8A%D8%A7%D8%AA-%D8%B6%D9%85%D9%86-%D8%B9%D9%86%D8%A7%D9%82%D9%8A%D8%AF-kubernetes-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D9%85%D8%AF%D9%8A%D8%B1-%D8%A7%D9%84%D8%AD%D8%B2%D9%85-helm-r653/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2022_10/6340103003dd2_----Kubernetes----Helm.jpg.b3e935fefc6512d4594fd34c18b54a70.jpg" /></p>

<p>
	يُعد <a href="https://helm.sh/" rel="external nofollow">Helm</a> مدير حزم ضمن <a href="https://academy.hsoub.com/devops/cloud-computing/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-kubernetes-r467/" rel="">كوبيرنتس Kubernetes</a>، وهو يسمح للمطورين و المشغلين إعداد وتطوير التطبيقات ضمن عناقيد Kubernetes.
</p>

<p>
	يُطلق على حزم Helm اسم <strong>المخططات Charts</strong>، وهي تتضمن قوالبًا لتعريف الموارد التي تضبط وتركب التطبيقات بأقل جهد ممكن. يستطيع المستخدم باستخدام القولبة templating إدارة المخططات وضبطها والتحكم بسلوكها بتمرير تعريفات متنوعة دون تعديل المخططات الأساسية. ويدير Helm تعريفات الموارد المخصصة إضافةً الى التعديلات على التعريفات المستخدمة مسبقًا. تسمى المخططات المنفذة مع المُخصصة من قبل المستخدم باسم <strong>الإصدار Release</strong>.
</p>

<p>
	سنعمل في هذا المقال على إعداد <a href="https://academy.hsoub.com/devops/cloud-computing/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-helm-%D9%85%D8%AF%D9%8A%D8%B1-%D8%AD%D8%B2%D9%85-kubernetes-r470/" rel="">Helm</a> وتوضيح كيفية تثبيت وترقية والتراجع عن الترقية، إضافةً إلى إدارة المخططات والإصدارات، كما سننشئ المخططات الخاصة بنا مع إعداد مخازن المخططات التي تحتضن هذه المخططات.
</p>

<h2>
	المتطلبات الأساسية
</h2>

<ul>
<li>
		عنقود Kubernetes يدعم التحكم بالوصول على أساس الدور role-based access control -أو اختصارًا RBAC- كما هو متاح في <a href="https://github.com/helm/helm/releases" rel="external nofollow">المخزن الرسمي</a>.
	</li>
	<li>
		أداة موجه الأوامر"kubectl" ضمن الحاسب المحلي قادرة على الاتصال بالعنقود، والتي تُعد وفقًا <a href="https://kubernetes.io/docs/tasks/tools/install-kubectl/" rel="external nofollow">للتوثيق الرسمي</a>.
	</li>
</ul>
<p>
	نتحقق من الاتصال بالعنقود بتنفيذ الأمر التالي:
</p>

<pre class="ipsCode">
$ kubectl cluster-info
</pre>

<p>
	يكون الاتصال بالعنقود ناجحًا ما لم تظهر أخطاء نتيجةً للأمر السابق، أما في حالة وجود عدة عناقيد، نحدد سياق context العنقود المطلوب عبر تنفيذ الأمر التالي:
</p>

<pre class="ipsCode">
$ kubectl config get-contexts
</pre>

<p>
	يظهر الخرج لائحةً بالإعدادات المتوفر ة كما يلي:
</p>

<pre class="ipsCode">
CURRENT   NAME                    CLUSTER                 AUTHINFO                      NAMESPACE
*         do-fra1-helm3-example   do-fra1-helm3-example   do-fra1-helm3-example-admin
</pre>

<p>
	تشير النجمة <code>*</code> إلى أن الاتصال الحالي خاص بالعنقود <code>do-fra1-helm3-example</code>؛ وللتبديل إلى عنقود آخر ننفذ الأمر التالي:
</p>

<pre class="ipsCode">
$ kubectl config use-context context-name
</pre>

<p>
	ننتقل إلى الخطوة التالية بعد التأكد من اختيار العنقود الذي نرغب باستخدامه لتثبيت مدير الحزم Helm عليه.
</p>

<h2>
	الخطوة 1- تثبيت مدير الحزم Helm 3
</h2>

<p>
	نعتمد طريقة تثبيت مدير الحزم <a href="https://helm.sh/docs/intro/install/" rel="external nofollow">Helm 3</a> باستخدام السكربت script المُتاح على الموقع الرسمي. نبدأ بالتنقل إلى المجلد "tmp/"حيث نخزّن البرنامج النصي الخاص بالتثبيت. نحقق التنقل بتنفيذ الأمر:
</p>

<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_1347_12" style="">
<span class="pln">$ cd </span><span class="pun">/</span><span class="pln">tmp</span></pre>

<p>
	نحمّل السكربت بتنفيذ الأمر التالي:
</p>

<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_1347_14" style="">
<span class="pln">$ curl </span><span class="pun">-</span><span class="pln">fsSL </span><span class="pun">-</span><span class="pln">o get_helm</span><span class="pun">.</span><span class="pln">sh https</span><span class="pun">:</span><span class="com">//raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3</span></pre>

<p>
	يُعد التحقق من محتوى السكربت قبل تثبيته من الممارسات الجيدة المتعلّقة بالأمان، ونستخدم محرر النصوص المفضل من أجل ذلك، إذ نستعرض محتوى الملف "get_helm.sh" قبل تثبيته. نضيف قابلية التنفيذ إلى السكربت بعد التأكد من سلامته بتنفيذ الأمر التالي:
</p>

<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_1347_16" style="">
<span class="pln">$ chmod u</span><span class="pun">+</span><span class="pln">x get_helm</span><span class="pun">.</span><span class="pln">sh</span></pre>

<p>
	ننفذ السكربت لتبدأ عندها عملية تثبيت مدير الحزم Helm 3 عبر تنفيذ الأمر:
</p>

<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_1347_18" style="">
<span class="pln">$ </span><span class="pun">./</span><span class="pln">get_helm</span><span class="pun">.</span><span class="pln">sh</span></pre>

<p>
	يظهر خرجٌ مشابهٌ لما يلي:
</p>

<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_1347_20" style="">
<span class="typ">Downloading</span><span class="pln"> https</span><span class="pun">:</span><span class="com">//get.helm.sh/helm-v3.5.2-linux-amd64.tar.gz</span><span class="pln">
</span><span class="typ">Verifying</span><span class="pln"> checksum</span><span class="pun">...</span><span class="pln"> </span><span class="typ">Done</span><span class="pun">.</span><span class="pln">
</span><span class="typ">Preparing</span><span class="pln"> to install helm into </span><span class="pun">/</span><span class="pln">usr</span><span class="pun">/</span><span class="pln">local</span><span class="pun">/</span><span class="pln">bin
helm installed into </span><span class="pun">/</span><span class="pln">usr</span><span class="pun">/</span><span class="pln">local</span><span class="pun">/</span><span class="pln">bin</span><span class="pun">/</span><span class="pln">helm</span></pre>

<p>
	وبهذا ينتهي تثبيت مدير الحزم Helm 3 على الجهاز المحلي.
</p>

<h2>
	الخطوة 2- إعداد مخازن المخططات
</h2>

<p>
	تُخزّن مخططات مدير الحزم Helm ضمن مخازن مخططات قابلة للاستضافة من أي مستخدم وضمن أي جهاز. لا يترافق مدير الحزم Helm 3 عادةً مع أي مخزن مُعد مسبقًا. وعلى الرغم من أن النسخ السابقة من مدير الحزم Helm تضمنت مخزن مخططات مركزي منسق، إلا أنّ تصميم مدير الحزم Helm 3 يحُث المطورين على إدارة مخازنهم الخاصة، إذ يسمح ذلك بحرية أكبر وكذلك الحصول على إصدارات بصورةٍ أسرع، ومعنى ذلك أننا نحتاج إضافة مخزن مستضيف لكل مخطط نستخدمه ضمن مدير الحزم Helm. نستخدم الموقع <a href="https://artifacthub.io/" rel="external nofollow">ArtifactHub.io</a> لإيجاد المخزن المناسب، وهو موقع مفتوح المصدر مُدار من قبل <a href="https://www.cncf.io/" rel="external nofollow">CNCF</a> التي تدير مخططات مدير الحزم Helm ومخازنها، كما تتعقب أكثر المخططات شعبيةً وفائدةً والتي تستخدمها مشاريع CNCF الأخرى. ولذلك تختلف عن المخازن المستقرة "stable" التي استخدمتها الإصدارات السابقة من مدير الحزم Helm. يتضمن الموقع كثيرًا من المخططات المهمة للمشاريع الشائعة، مثل مشاريع Nginx، ومشاريع أدوات المراقبة.
</p>

<p>
	نبحث عن المخططات الواجب تثبيتها عبر الصفحة الرئيسية، إذ نبدأ بالبحث عن "nginx" مثلًا لتظهر المخططات المتعلّقة به.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2022_10/step2a.png.5c2e003d7b7ef30a80a81ae7d1acc432.png" rel=""><img alt="step2a" class="ipsImage ipsImage_thumbnailed" data-fileid="109250" data-unique="h6acdth8o" src="https://academy.hsoub.com/uploads/monthly_2022_10/step2a.thumb.png.5ede2a91e6ea4bd9e5a6bb5e1fea2402.png" style="width: 780px; height: auto;"></a>
</p>

<p>
	نثبت النسخة المجانية Community edition المدارة من قبل فريق Kubernetes، كما نبحث عن "ingress-nginx" ونختاره من بين النتائج كما في الشكل التالي:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2022_10/step2b.png.2f6b4abac226e8a95aff06685fa7473a.png" rel=""><img alt="step2b" class="ipsImage ipsImage_thumbnailed" data-fileid="109251" data-unique="v2ntnokip" src="https://academy.hsoub.com/uploads/monthly_2022_10/step2b.thumb.png.d9f1e78271aff70145f320a3ccbd5b2d.png" style="width: 780px; height: auto;"></a>
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2022_10/step2c.png.bd275c1418615fdee7e4987d60c997cc.png" rel=""><img alt="step2c" class="ipsImage ipsImage_thumbnailed" data-fileid="109252" data-unique="a9zaebrt1" src="https://academy.hsoub.com/uploads/monthly_2022_10/step2c.thumb.png.f9d2f998ccad5a97637a588bda94fa8a.png" style="width: 780px; height: auto;"></a>
</p>

<p>
	يمتلك المخطط توصيفًا يبين المهام التي ينفذها مع الأوامر اللازمة لإضافة مخازنه الى الحاسب وتثبيت المخطط، ويمكن الحصول على الأوامر الضرورية عبر النقر على زر INSTALL في يمين الصفحة.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2022_10/step2d.png.cc86920cba1e6cfb9a20314ffed39307.png" rel=""><img alt="step2d" class="ipsImage ipsImage_thumbnailed" data-fileid="109253" data-unique="eieo09p6o" src="https://academy.hsoub.com/uploads/monthly_2022_10/step2d.thumb.png.adee0705deac3037fc37af1c09a45802.png" style="width: 749px; height: auto;"></a>
</p>

<p>
	ننقر على الزر الازرق الموجود إلى جانب الأمر لنسخه، ونبدأ بنسخ وتنفيذ الأمر الأول:
</p>

<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_1347_27" style="">
<span class="pln">$ helm repo add ingress</span><span class="pun">-</span><span class="pln">nginx https</span><span class="pun">:</span><span class="com">//kubernetes.github.io/ingress-nginx</span></pre>

<p>
	ننفذ الأمر <code>helm repo add</code> لاضافة المخزن إلى مدير الحزم Helm، إذ يتطلب هذا الأمر تمرير متغيرين، هما: اسم المخزن ورابطه، ويظهر خرجٌ مشابهٌ لما يلي:
</p>

<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_1347_29" style="">
<span class="str">"ingress-nginx"</span><span class="pln"> has been added to your repositories</span></pre>

<p>
	ننفذ الأمر التالي لإعلام مدير الحزم Helm بوجود مخزن جديد يجب عليه التعرّف على محتواه:
</p>

<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_1347_31" style="">
<span class="pln">$ helm repo update</span></pre>

<p>
	يظهر الخرج التالي ليشير إلى نجاح التحديث:
</p>

<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_1347_33" style="">
<span class="typ">Hang</span><span class="pln"> tight </span><span class="kwd">while</span><span class="pln"> we grab the latest from your chart repositories</span><span class="pun">...</span><span class="pln">
</span><span class="pun">...</span><span class="typ">Successfully</span><span class="pln"> got an update from the </span><span class="str">"ingress-nginx"</span><span class="pln"> chart repository
</span><span class="typ">Update</span><span class="pln"> </span><span class="typ">Complete</span><span class="pun">.</span><span class="pln"> </span><span class="pun">⎈</span><span class="typ">Happy</span><span class="pln"> </span><span class="typ">Helming</span><span class="pun">!⎈</span></pre>

<p>
	تعرفنا في هذه الخطوة على موقع ArtifactHub وما يقدمه، كما أضفنا أيضًا مخزنًا جديدًا إلى تثبيت مدير حزم Helm. وسنثبّت في الخطوة التالية مخطط Helm.
</p>

<h2>
	الخطوة 3- تثبيت مخطط Helm
</h2>

<p>
	يملك كل مخطط متغيرات خاصة بالإعداد تحدد سلوكه، إذ تُخزَّن هذه المتغيرات ضمن الملف "values.yaml" الموجود ضمن المخطط، ونستطيع التعرّف على هذه المتغيرات بتنفيذ الأمر التالي مع ضرورة استبدال <code>chart_name</code> باسم المخطط الذي نريد معرفة متغيراته كما يلي:
</p>

<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_1347_35" style="">
<span class="pln">$ helm show values chart_name</span></pre>

<p>
	نتعرّف على المتغيرات الخاصة بمخطط "ingress-nginx" بتنفيذ الأمر التالي:
</p>

<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_1347_37" style="">
<span class="pln">$ helm show values ingress</span><span class="pun">-</span><span class="pln">nginx</span><span class="pun">/</span><span class="pln">ingress</span><span class="pun">-</span><span class="pln">nginx</span></pre>

<p>
	يظهر خرج طويل جدًا يمثل محتويات "values.yaml" الخاص بمخطط "ingress-nginx".
</p>

<p>
	نثبت المخطط باستخدام الأمر<code>helm install</code> على النحو التالي:
</p>

<pre class="ipsCode">
$ helm install release_name repository/chart_name
</pre>

<p>
	عرّفنا الإصدار بأنه عينة من المخطط والتي ندعوها بالأمر السابق باسم "ingress-nginx". يثبّت الأمر السابق المخطط ضمن العنقود اعتمادًا على القيم الافتراضية للمتغيرات والتي تُعدّل عند الحاجة باستخدام <code>set--</code> يتلوها اسم المتغير والقيمة الجديدة كما يلي:
</p>

<pre class="ipsCode prettyprint lang-sql prettyprinted" id="ips_uid_1347_39" style="">
<span class="pln">$ helm install ingress</span><span class="pun">-</span><span class="pln">nginx</span><span class="pun">/</span><span class="pln">ingress</span><span class="pun">-</span><span class="pln">nginx </span><span class="pun">--</span><span class="kwd">set</span><span class="pln"> variable_name</span><span class="pun">=</span><span class="pln">variable_value</span></pre>

<p>
	يمكننا تكرار الإضافة <code>set--</code> لجميع المتغيرات التي تحتاج للتعديل، وطالما أننا لن نخصّص المخطط الآن سنستخدم القيم الافتراضية في عملية التثبيت ونتابع بتنفيذ الأمر التالي:
</p>

<pre class="ipsCode prettyprint lang-sql prettyprinted" id="ips_uid_1347_43" style="">
<span class="pln">$ helm install ingress</span><span class="pun">-</span><span class="pln">nginx ingress</span><span class="pun">-</span><span class="pln">nginx</span><span class="pun">/</span><span class="pln">ingress</span><span class="pun">-</span><span class="pln">nginx</span></pre>

<p>
	يظهر الخرج التالي بعد نجاح العملية:
</p>

<pre class="ipsCode prettyprint lang-sql prettyprinted" id="ips_uid_1347_45" style="">
<span class="pln">NAME</span><span class="pun">:</span><span class="pln"> ingress</span><span class="pun">-</span><span class="pln">nginx
LAST DEPLOYED</span><span class="pun">:</span><span class="pln"> </span><span class="typ">Wed</span><span class="pln"> </span><span class="typ">Feb</span><span class="pln"> </span><span class="lit">24</span><span class="pln"> </span><span class="lit">10</span><span class="pun">:</span><span class="lit">12</span><span class="pun">:</span><span class="lit">37</span><span class="pln"> </span><span class="lit">2021</span><span class="pln">
NAMESPACE</span><span class="pun">:</span><span class="pln"> </span><span class="kwd">default</span><span class="pln">
STATUS</span><span class="pun">:</span><span class="pln"> deployed
REVISION</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1</span><span class="pln">
TEST SUITE</span><span class="pun">:</span><span class="pln"> </span><span class="kwd">None</span><span class="pln">
NOTES</span><span class="pun">:</span><span class="pln">
</span><span class="typ">The</span><span class="pln"> ingress</span><span class="pun">-</span><span class="pln">nginx controller has been installed</span><span class="pun">.</span><span class="pln">
</span><span class="typ">It</span><span class="pln"> may take a few minutes </span><span class="kwd">for</span><span class="pln"> the </span><span class="typ">LoadBalancer</span><span class="pln"> IP to be available</span><span class="pun">.</span><span class="pln">
</span><span class="typ">You</span><span class="pln"> can watch the status </span><span class="kwd">by</span><span class="pln"> running </span><span class="str">'kubectl --namespace default get services -o wide -w ingress-nginx-controller'</span><span class="pln">
</span><span class="pun">…</span></pre>

<p>
	يجب الانتباه إلى أن المتغير <code>NAME</code> يقابل اسم الإصدار الذي حددناه سابقًا. يُدرج مدير الحزم Helm المعلومات العامة، مثل حالة الإصدار ونطاق الاسم namespace التي نُشرت ضمنه. يختلف قسم الملاحظات <code>NOTES</code> بين المخططات وغالبًا ما يحتوي دليلًا مختصرًا أو تحذيرات من بعض المشاكل الشائعة عند استخدام موارد المخطط. يتضمن جزء الملاحظات تحذيرًا بأن إعداد <a href="https://academy.hsoub.com/devops/servers/%D9%85%D8%A7-%D8%A7%D9%84%D9%85%D9%82%D8%B5%D9%88%D8%AF-%D8%A8%D8%AA%D9%88%D8%B2%D9%8A%D8%B9-%D8%A7%D9%84%D8%AD%D9%90%D9%85%D9%84-load-balancing-r319/" rel="">موازن الحمل Load Balancer</a> قيد الإنشاء وأن هذه العملية تستغرق وقتًا كي تنتهي. نتحقق من المخططات باستخدام الأمر التالي:
</p>

<pre class="ipsCode prettyprint lang-sql prettyprinted" id="ips_uid_1347_47" style="">
<span class="pln">$ helm list</span></pre>

<p>
	نجد أن المخطط "ingress-nginx" هو المخطط الوحيد المُتاح في الوقت الحالي:
</p>

<pre class="ipsCode prettyprint lang-sql prettyprinted" id="ips_uid_1347_49" style="">
<span class="pln">NAME            NAMESPACE       REVISION        UPDATED                                 STATUS          CHART                   APP VERSION
ingress</span><span class="pun">-</span><span class="pln">nginx   </span><span class="kwd">default</span><span class="pln">         </span><span class="lit">1</span><span class="pln">               </span><span class="lit">2021</span><span class="pun">-</span><span class="lit">02</span><span class="pun">-</span><span class="lit">24</span><span class="pln"> </span><span class="lit">10</span><span class="pun">:</span><span class="lit">12</span><span class="pun">:</span><span class="lit">37.281049711</span><span class="pln"> </span><span class="pun">+</span><span class="lit">0000</span><span class="pln"> UTC deployed        ingress</span><span class="pun">-</span><span class="pln">nginx</span><span class="pun">-</span><span class="lit">3.23</span><span class="pun">.</span><span class="lit">0</span><span class="pln">    </span><span class="lit">0.44</span><span class="pun">.</span><span class="lit">0</span></pre>

<p>
	ونجد الخدمات الخاصة بهذا المخطط ضمن العنقود عن طريق تنفيذ الأمر التالي:
</p>

<pre class="ipsCode prettyprint lang-sql prettyprinted" id="ips_uid_1347_51" style="">
<span class="pln">$ kubectl </span><span class="kwd">get</span><span class="pln"> services</span></pre>

<p>
	ليظهر خرجٌ مُشابهٌ لما يلي:
</p>

<pre class="ipsCode prettyprint lang-sql prettyprinted" id="ips_uid_1347_53" style="">
<span class="pln">NAME                                 TYPE           CLUSTER</span><span class="pun">-</span><span class="pln">IP      EXTERNAL</span><span class="pun">-</span><span class="pln">IP    PORT</span><span class="pun">(</span><span class="pln">S</span><span class="pun">)</span><span class="pln">                      AGE
ingress</span><span class="pun">-</span><span class="pln">nginx</span><span class="pun">-</span><span class="pln">controller             </span><span class="typ">LoadBalancer</span><span class="pln">   </span><span class="lit">10.245</span><span class="pun">.</span><span class="lit">211.81</span><span class="pln">   </span><span class="lit">46.101</span><span class="pun">.</span><span class="lit">68.67</span><span class="pln">   </span><span class="lit">80</span><span class="pun">:</span><span class="lit">30704</span><span class="pun">/</span><span class="pln">TCP</span><span class="pun">,</span><span class="lit">443</span><span class="pun">:</span><span class="lit">30700</span><span class="pun">/</span><span class="pln">TCP   </span><span class="lit">7m19s</span><span class="pln">
ingress</span><span class="pun">-</span><span class="pln">nginx</span><span class="pun">-</span><span class="pln">controller</span><span class="pun">-</span><span class="pln">admission   </span><span class="typ">ClusterIP</span><span class="pln">      </span><span class="lit">10.245</span><span class="pun">.</span><span class="lit">50.17</span><span class="pln">    </span><span class="str">&lt;none&gt;</span><span class="pln">         </span><span class="lit">443</span><span class="pun">/</span><span class="pln">TCP                      </span><span class="lit">7m19s</span><span class="pln">
kubernetes                           </span><span class="typ">ClusterIP</span><span class="pln">      </span><span class="lit">10.245</span><span class="pun">.</span><span class="lit">0.1</span><span class="pln">      </span><span class="str">&lt;none&gt;</span><span class="pln">         </span><span class="lit">443</span><span class="pun">/</span><span class="pln">TCP                      </span><span class="lit">83m</span></pre>

<p>
	الآن، بعد أن نشرنا إصدارًا في العنقود، سنعدل ضبطه أثناء عملية النشر.
</p>

<h2>
	الخطوة 4 - ترقية الإصدار
</h2>

<p>
	لا نحتاج إلى إزالة الإصدار كليًا عند الحاجة إلى إجراء تعديلات في ضبطه، إذ نستخدم الأمر<code>helm upgrade</code> لترقية الإصدار بنسخة جديدة من المخطط أو تطبيق الإعدادات الجديدة.
</p>

<p>
	يعرض المخطط "ingress-nginx" متغيرًا اسمه <code>controller.replicaCount</code> يتحكم بعدد حجيرات التحكم controller pods المنشورة، ويمكن التأكد من عددها باستخدام الأمر التالي وعادةً ما تكون القيمة الافتراضية لهذا المتغير تساوي الواحد:
</p>

<pre class="ipsCode prettyprint lang-sql prettyprinted" id="ips_uid_1347_55" style="">
<span class="pln">$ kubectl </span><span class="kwd">get</span><span class="pln"> pods</span></pre>

<p>
	يظهر الخرج بوجود حجيرة واحدة فقط على النحو التالي:
</p>

<pre class="ipsCode prettyprint lang-sql prettyprinted" id="ips_uid_1347_57" style="">
<span class="pln">NAME                                        READY   STATUS    RESTARTS   AGE
ingress</span><span class="pun">-</span><span class="pln">nginx</span><span class="pun">-</span><span class="pln">controller</span><span class="pun">-</span><span class="lit">7fc74cf778</span><span class="pun">-</span><span class="pln">kjtst   </span><span class="lit">1</span><span class="pun">/</span><span class="lit">1</span><span class="pln">     </span><span class="typ">Running</span><span class="pln">   </span><span class="lit">0</span><span class="pln">          </span><span class="lit">12m</span></pre>

<p>
	نستطيع إضافة مزيدٍ من الحجيرات من أجل التكرارية Redundancy (ثلاثة على سبيل المثال) عبر ترقية الإصدار وتعديل قيمة المتغير الى 4 من خلال الأمر التالي:
</p>

<pre class="ipsCode">
$ helm upgrade ingress-nginx ingress-nginx/ingress-nginx --set controller.replicaCount=3 --reuse-values
</pre>

<p>
	يمكن استخدام <code>values -reuse--</code>، الذي يوجّه مدير الحزم Helm ببناء التعديلات على أساس الإصدار المنشور مع الحفاظ على الإصدار السابق.
</p>

<p>
	نلاحظ في الخرج أنّ مدير الحزم Helm يزيد من رقم الاشعار لهذه المراجعة للإشارة إلى ترقية الإصدار:
</p>

<pre class="ipsCode prettyprint lang-sql prettyprinted" id="ips_uid_1347_59" style="">
<span class="pln">NAME</span><span class="pun">:</span><span class="pln"> ingress</span><span class="pun">-</span><span class="pln">nginx
LAST DEPLOYED</span><span class="pun">:</span><span class="pln"> </span><span class="typ">Wed</span><span class="pln"> </span><span class="typ">Feb</span><span class="pln"> </span><span class="lit">24</span><span class="pln"> </span><span class="lit">12</span><span class="pun">:</span><span class="lit">07</span><span class="pun">:</span><span class="lit">54</span><span class="pln"> </span><span class="lit">2021</span><span class="pln">
NAMESPACE</span><span class="pun">:</span><span class="pln"> </span><span class="kwd">default</span><span class="pln">
STATUS</span><span class="pun">:</span><span class="pln"> deployed
REVISION</span><span class="pun">:</span><span class="pln"> </span><span class="lit">2</span><span class="pln">
TEST SUITE</span><span class="pun">:</span><span class="pln"> </span><span class="kwd">None</span><span class="pln">
NOTES</span><span class="pun">:</span><span class="pln">
</span><span class="pun">…</span></pre>

<p>
	يمكن الحصول على قائمة بالحجيرات المتاحة بتنفيذ الأمر التالي:
</p>

<pre class="ipsCode prettyprint lang-sql prettyprinted" id="ips_uid_1347_62" style="">
<span class="pln">$ kubectl </span><span class="kwd">get</span><span class="pln"> pods</span></pre>

<p>
	نلاحظ وجود ثلاث حجيرات عوضًا عن حجيرة واحدة:
</p>

<pre class="ipsCode prettyprint lang-sql prettyprinted" id="ips_uid_1347_64" style="">
<span class="pln">NAME                                        READY   STATUS    RESTARTS   AGE
ingress</span><span class="pun">-</span><span class="pln">nginx</span><span class="pun">-</span><span class="pln">controller</span><span class="pun">-</span><span class="lit">7fc74cf778</span><span class="pun">-</span><span class="lit">4hk9g</span><span class="pln">   </span><span class="lit">1</span><span class="pun">/</span><span class="lit">1</span><span class="pln">     </span><span class="typ">Running</span><span class="pln">   </span><span class="lit">0</span><span class="pln">          </span><span class="lit">18s</span><span class="pln">
ingress</span><span class="pun">-</span><span class="pln">nginx</span><span class="pun">-</span><span class="pln">controller</span><span class="pun">-</span><span class="lit">7fc74cf778</span><span class="pun">-</span><span class="pln">kjtst   </span><span class="lit">1</span><span class="pun">/</span><span class="lit">1</span><span class="pln">     </span><span class="typ">Running</span><span class="pln">   </span><span class="lit">0</span><span class="pln">          </span><span class="lit">22m</span><span class="pln">
ingress</span><span class="pun">-</span><span class="pln">nginx</span><span class="pun">-</span><span class="pln">controller</span><span class="pun">-</span><span class="lit">7fc74cf778</span><span class="pun">-</span><span class="pln">wz595   </span><span class="lit">1</span><span class="pun">/</span><span class="lit">1</span><span class="pln">     </span><span class="typ">Running</span><span class="pln">   </span><span class="lit">0</span><span class="pln">          </span><span class="lit">18s</span></pre>

<p>
	سنتراجع في الخطوة التالية عن التغييرات ونحذف الإصدارات تمامًا.
</p>

<h2>
	الخطوة 5 - التراجع و حذف الإصدار
</h2>

<p>
	يخزّن مدير الحزم Helm رقم المراجعة لكل إصدار داخليًا، بحيث يزداد هذا الرقم عند ترقية الإصدار، ويسمح ذلك بالعودة الى المراجعة السابقة عند الحاجة. نستطيع إعادة عدد الحجيرات إلى واحد وهي القيمة الافتراضية التي عدلناها في الخطوة السابقة، ننفذ الأمر <code>helm upgrade</code> مرةً أخرى ونحدد العدد يدويًا لأنه تغيير بسيط. تصبح هذه العلمية في حالة المخططات الكبيرة التي تمتلك عددًا كبيرًا من المتغيرات دون جدوى ويجب أتمتة عملية تعديل هذه المتغيرات. نتراجع عن الإصدار بتنفيذ الأمر <code>helm rollback</code>:
</p>

<pre class="ipsCode prettyprint lang-sql prettyprinted" id="ips_uid_1347_66" style="">
<span class="pln">$ helm rollback release_name release_revision</span></pre>

<p>
	ويمكننا التراجع مثلًا عن التعديلات السابقة الخاصة بالمخطط "ingress-nginx" بالعودة الى المراجعة رقم 1 من خلال تنفيذ الأمر التالي:
</p>

<pre class="ipsCode prettyprint lang-sql prettyprinted" id="ips_uid_1347_68" style="">
<span class="pln">$ helm rollback ingress</span><span class="pun">-</span><span class="pln">nginx </span><span class="lit">1</span></pre>

<p>
	يظهر الخرج التالي الذي يشير إلى نجاح العملية:
</p>

<pre class="ipsCode">
Rollback was a success! Happy Helming!
</pre>

<p>
	نتحقق من رقم المراجعة الحالية عن طريق طلب قائمة الإصدارات بتنفيذ الأمر التالي:
</p>

<pre class="ipsCode prettyprint lang-sql prettyprinted" id="ips_uid_1347_70" style="">
<span class="pln">$ helm list</span></pre>

<p>
	نجد أن المراجعة أصبحت 3 بدلًا من 1:
</p>

<pre class="ipsCode prettyprint lang-sql prettyprinted" id="ips_uid_1347_72" style="">
<span class="pln">NAME            NAMESPACE       REVISION        UPDATED                                 STATUS          CHART                   APP VERSION
ingress</span><span class="pun">-</span><span class="pln">nginx   </span><span class="kwd">default</span><span class="pln">         </span><span class="lit">3</span><span class="pln">               </span><span class="lit">2021</span><span class="pun">-</span><span class="lit">02</span><span class="pun">-</span><span class="lit">24</span><span class="pln"> </span><span class="lit">12</span><span class="pun">:</span><span class="lit">43</span><span class="pun">:</span><span class="lit">21.523664768</span><span class="pln"> </span><span class="pun">+</span><span class="lit">0000</span><span class="pln"> UTC deployed        ingress</span><span class="pun">-</span><span class="pln">nginx</span><span class="pun">-</span><span class="lit">3.23</span><span class="pun">.</span><span class="lit">0</span><span class="pln">    </span><span class="lit">0.44</span><span class="pun">.</span><span class="lit">0</span></pre>

<p>
	ينظر مدير الحزم Helm لأي تغيير ومن ضمنها التراجع على أنه مراجعة جديدة للإصدار. نتحقق من أن المراجعة رقم 3 مماثلةٌ للأولى عن طريق التحقق من عدد الحجيرات المنشورة بتنفيذ الأمر التالي:
</p>

<pre class="ipsCode prettyprint lang-sql prettyprinted" id="ips_uid_1347_74" style="">
<span class="pln">$ kubectl </span><span class="kwd">get</span><span class="pln"> pods</span></pre>

<p>
	نلاحظ وجود حجيرةٍ واحدةٍ فقط في الخرج:
</p>

<pre class="ipsCode prettyprint lang-sql prettyprinted" id="ips_uid_1347_78" style="">
<span class="pln">NAME                                        READY   STATUS    RESTARTS   AGE
ingress</span><span class="pun">-</span><span class="pln">nginx</span><span class="pun">-</span><span class="pln">controller</span><span class="pun">-</span><span class="lit">7fc74cf778</span><span class="pun">-</span><span class="pln">kjtst   </span><span class="lit">1</span><span class="pun">/</span><span class="lit">1</span><span class="pln">     </span><span class="typ">Running</span><span class="pln">   </span><span class="lit">0</span><span class="pln">          </span><span class="lit">41m</span></pre>

<p>
	نستطيع حذف إصدار ما وكل المراجعات المتعلقة به بتنفيذ الأمر <code>helm delete</code>:
</p>

<pre class="ipsCode prettyprint lang-sql prettyprinted" id="ips_uid_1347_81" style="">
<span class="pln">$ helm </span><span class="kwd">delete</span><span class="pln"> release_name</span></pre>

<p>
	لم نعد بحاجة لمخطط "ingress-nginx"، لذالك نحذفه بتنفيذ الأمر التالي:
</p>

<pre class="ipsCode prettyprint lang-sql prettyprinted" id="ips_uid_1347_83" style="">
<span class="pln">$ helm </span><span class="kwd">delete</span><span class="pln"> ingress</span><span class="pun">-</span><span class="pln">nginx</span></pre>

<p>
	يظهر خرجٌ مشابهٌ لما يلي:
</p>

<pre class="ipsCode prettyprint lang-sql prettyprinted" id="ips_uid_1347_87" style="">
<span class="pln">release </span><span class="str">"ingress-nginx"</span><span class="pln"> uninstalled</span></pre>

<p>
	نتحقق من قائمة الإصدارات والتي يجب أن تكون فارغة بعد نجاح تنفيذ العملية بتنفيذ الأمر:
</p>

<pre class="ipsCode prettyprint lang-sql prettyprinted" id="ips_uid_1347_85" style="">
<span class="pln">$ helm list</span></pre>

<p>
	يظهر الخرج التالي ليشير إلى نجاح العملية:
</p>

<pre class="ipsCode prettyprint lang-sql prettyprinted" id="ips_uid_1347_90" style="">
<span class="pln">NAME    NAMESPACE       REVISION        UPDATED STATUS  CHART   APP VERSION</span></pre>

<p>
	نستطيع إعادة استخدام اسم الإصدار في المستقبل لأنه أصبح متاحًا.
</p>

<h3>
	الخطوة 6- إنشاء مخططات مخصصة -خطوة اختيارية
</h3>

<p>
	نعمل على إنشاء مخطط مخصص يتضمن تعريف الموارد وكيفية تحزيم هذه المخططات من أجل إعادة استخدامها لاحقًا. ننشئ مخططًا جديدًا يُدعى "example-chart" بتنفيذ الأمر التالي:
</p>

<pre class="ipsCode prettyprint lang-sql prettyprinted" id="ips_uid_1347_92" style="">
<span class="pln">$ helm create example</span><span class="pun">-</span><span class="pln">chart</span></pre>

<p>
	ينشئ ذلك مجلّدًا جديدًا يدعى "example-chart" يحتوي المجلدات ضمن البنية التالية:
</p>

<pre class="ipsCode prettyprint lang-sql prettyprinted" id="ips_uid_1347_96" style="">
<span class="pln">charts</span><span class="pun">/</span><span class="pln">
templates</span><span class="pun">/</span><span class="pln">
</span><span class="pun">├─</span><span class="pln"> tests</span><span class="pun">/</span><span class="pln">
</span><span class="pun">│</span><span class="pln">  </span><span class="pun">├─</span><span class="pln"> test</span><span class="pun">-</span><span class="pln">connection</span><span class="pun">.</span><span class="pln">yaml
</span><span class="pun">├─</span><span class="pln"> deployment</span><span class="pun">.</span><span class="pln">yaml
</span><span class="pun">├─</span><span class="pln"> hpa</span><span class="pun">.</span><span class="pln">yaml
</span><span class="pun">├─</span><span class="pln"> ingress</span><span class="pun">.</span><span class="pln">yaml
</span><span class="pun">├─</span><span class="pln"> NOTES</span><span class="pun">.</span><span class="pln">txt
</span><span class="pun">├─</span><span class="pln"> service</span><span class="pun">.</span><span class="pln">yaml
</span><span class="pun">├─</span><span class="pln"> serviceaccount</span><span class="pun">.</span><span class="pln">yaml
</span><span class="pun">├─</span><span class="pln"> _helpers</span><span class="pun">.</span><span class="pln">tpl
</span><span class="typ">Chart</span><span class="pun">.</span><span class="pln">yaml
values</span><span class="pun">.</span><span class="pln">yaml</span></pre>

<p>
	توجد تعريفات الموارد التي ثبتّها المخطط على العنقود الهدف في المجلد "templates"، إذ ينشئ مدير الحزم Helm مجموعة من التعريفات الافتراضية مثل نقطة بداية لتنشر متحكم "Nginx ingress". نستخدم هنا صيغة قولبة Go على الرغم من أنّ لاحقة الملف هي "YAML"، لتبقى قابلة للتخصيص عبر المتغيرات التي يمكن تمريرها عند تنفيذ الأمر. نتحقق من ذلك بإظهار محتوى الملف "service.yaml" بتنفيذ الأمر التالي:
</p>

<pre class="ipsCode prettyprint lang-sql prettyprinted" id="ips_uid_1347_98" style="">
<span class="pln">$ cat example</span><span class="pun">-</span><span class="pln">chart</span><span class="pun">/</span><span class="pln">templates</span><span class="pun">/</span><span class="pln">service</span><span class="pun">.</span><span class="pln">yaml</span></pre>

<p>
	نلاحظ وجود أوامر قولية تولّد قيم محاطة بأقواس مضاعفة كما في الخرج التالي:
</p>

<pre class="ipsCode prettyprint lang-sql prettyprinted" id="ips_uid_1347_100" style="">
<span class="pln">apiVersion</span><span class="pun">:</span><span class="pln"> v1
kind</span><span class="pun">:</span><span class="pln"> </span><span class="typ">Service</span><span class="pln">
metadata</span><span class="pun">:</span><span class="pln">
  name</span><span class="pun">:</span><span class="pln"> </span><span class="pun">{{</span><span class="pln"> include </span><span class="str">"mychart.fullname"</span><span class="pln"> </span><span class="pun">.</span><span class="pln"> </span><span class="pun">}}</span><span class="pln">
  labels</span><span class="pun">:</span><span class="pln">
    </span><span class="pun">{{-</span><span class="pln"> include </span><span class="str">"mychart.labels"</span><span class="pln"> </span><span class="pun">.</span><span class="pln"> </span><span class="pun">|</span><span class="pln"> nindent </span><span class="lit">4</span><span class="pln"> </span><span class="pun">}}</span><span class="pln">
spec</span><span class="pun">:</span><span class="pln">
  type</span><span class="pun">:</span><span class="pln"> </span><span class="pun">{{</span><span class="pln"> </span><span class="pun">.</span><span class="typ">Values</span><span class="pun">.</span><span class="pln">service</span><span class="pun">.</span><span class="pln">type </span><span class="pun">}}</span><span class="pln">
  ports</span><span class="pun">:</span><span class="pln">
    </span><span class="pun">-</span><span class="pln"> port</span><span class="pun">:</span><span class="pln"> </span><span class="pun">{{</span><span class="pln"> </span><span class="pun">.</span><span class="typ">Values</span><span class="pun">.</span><span class="pln">service</span><span class="pun">.</span><span class="pln">port </span><span class="pun">}}</span><span class="pln">
      targetPort</span><span class="pun">:</span><span class="pln"> http
      protocol</span><span class="pun">:</span><span class="pln"> TCP
      name</span><span class="pun">:</span><span class="pln"> http
  selector</span><span class="pun">:</span><span class="pln">
    </span><span class="pun">{{-</span><span class="pln"> include </span><span class="str">"mychart.selectorLabels"</span><span class="pln"> </span><span class="pun">.</span><span class="pln"> </span><span class="pun">|</span><span class="pln"> nindent </span><span class="lit">4</span><span class="pln"> </span><span class="pun">}}</span></pre>

<p>
	تُعرض المتغيرات المرجعية للمستخدم وتُعرّف ضمن الملف "values.yaml"؛ وتُخزن نصوص "NOTES" التي يظهرها مدير الحزم Helm ضمن الملف "NOTES.txt" ويجري قولبتها؛ كما تُعرّف بيانات التعريف للمخطط، مثل الاسم و النسخة ونسخة البرمجيات المنشورة ضمن الملف "Chart.yaml"، الذي يتضمن المحتوى التالي:
</p>

<pre class="ipsCode prettyprint lang-sql prettyprinted" id="ips_uid_1347_106" style="">
<span class="pln"> apiVersion</span><span class="pun">:</span><span class="pln"> v2 name</span><span class="pun">:</span><span class="pln"> mychart description</span><span class="pun">:</span><span class="pln"> A </span><span class="typ">Helm</span><span class="pln"> chart </span><span class="kwd">for</span><span class="pln"> </span><span class="typ">Kubernetes</span><span class="pln"> </span><span class="pun">…</span><span class="pln"> type</span><span class="pun">:</span><span class="pln"> application </span><span class="pun">…</span><span class="pln"> version</span><span class="pun">:</span><span class="pln"> </span><span class="lit">0.1</span><span class="pun">.</span><span class="lit">0</span><span class="pln"> </span><span class="pun">…</span><span class="pln"> appVersion</span><span class="pun">:</span><span class="pln"> </span><span class="str">"1.16.0"</span><span class="pln">
</span></pre>

<p>
	نتحقق مما سينشره Helm بتمرير <code>dry-run--</code> و <code>debug--</code> للأمر <code>helm install</code> مع الإشارة إلى المجلّد الذي يحتوي المخطط:
</p>

<pre class="ipsCode prettyprint lang-sql prettyprinted" id="ips_uid_1347_109" style="">
<span class="pln">$ helm install example</span><span class="pun">-</span><span class="pln">chart </span><span class="pun">--</span><span class="pln">dry</span><span class="pun">-</span><span class="pln">run </span><span class="pun">--</span><span class="pln">debug </span><span class="pun">./</span><span class="pln">example</span><span class="pun">-</span><span class="pln">chart
</span></pre>

<p>
	يظهر خرج طويل يتضمن جميع تعريفات الموارد التي تطبق على العنقود أثناء العمل على المخطط، كما يمكن استخدام <code>upgrade helm</code> لدفع النسخة الجديدة الى Kubernetes.
</p>

<pre class="ipsCode prettyprint lang-sql prettyprinted" id="ips_uid_1347_114" style="">
<span class="pln">$ helm </span><span class="kwd">package</span><span class="pln"> </span><span class="pun">./</span><span class="pln">example</span><span class="pun">-</span><span class="pln">chart
</span></pre>

<p>
	يظهر خرجٌ مشابهٌ لما يلي:
</p>

<pre class="ipsCode prettyprint lang-sql prettyprinted" id="ips_uid_1347_125" style="">
<span class="typ">Successfully</span><span class="pln"> packaged chart </span><span class="kwd">and</span><span class="pln"> saved it to</span><span class="pun">:</span><span class="pln"> </span><span class="pun">…/</span><span class="pln">example</span><span class="pun">-</span><span class="pln">chart</span><span class="pun">-</span><span class="lit">0.1</span><span class="pun">.</span><span class="lit">0.tgz</span><span class="pln">
</span></pre>

<p>
	نستطيع تثبيت المخطط المحزّم كما نثبّت أي مخطط من المخازن المضافة إلى مدير الحزم Helm:
</p>

<pre class="ipsCode prettyprint lang-sql prettyprinted" id="ips_uid_1347_127" style="">
<span class="pln">$ helm install example</span><span class="pun">-</span><span class="pln">chart example</span><span class="pun">-</span><span class="pln">chart</span><span class="pun">-</span><span class="lit">0.1</span><span class="pun">.</span><span class="lit">0.tgz</span></pre>

<h2>
	الخاتمة
</h2>

<p>
	قدم هذا المقال طريقة استخدام مدير الحزم Helm لتثبيت وترقية البرمجيات المنشورة إلى عنقود Kubernetes، كما أضفنا مخازن المخططات واستخدمنا موقع ArtifactHub للمساعدة في إيجادها، وأنشأنا مخططا مخصصًا جديدًا وتحكمنا بمراجعات الإصدار وبيّنا طريقة التراجع عن الإصدار إذا اقتضى الأمر.
</p>

<p>
	ترجمة وبتصرف للمقال <a href="https://www.digitalocean.com/community/tutorials/how-to-install-software-on-kubernetes-clusters-with-the-helm-3-package-manager" rel="external nofollow">How To Install Software on Kubernetes Clusters with the Helm 3 Package Manager</a> لمؤلفيه Savic و Brian Boucheron.
</p>

<h2>
	اقرأ أيضًا
</h2>

<ul>
<li>
		<a href="https://academy.hsoub.com/devops/cloud-computing/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-helm-%D9%85%D8%AF%D9%8A%D8%B1-%D8%AD%D8%B2%D9%85-kubernetes-r470/" rel="">مدخل إلى Helm: مدير حزم Kubernetes</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/cloud-computing/docker/%D9%85%D8%A7-%D8%A7%D9%84%D9%81%D8%B1%D9%82-%D8%A8%D9%8A%D9%86-%D8%AF%D9%88%D9%83%D8%B1-docker-%D9%88%D9%83%D9%88%D8%A8%D9%8A%D8%B1%D9%86%D9%8A%D8%AA%D9%8A%D8%B3-kubernetes%D8%9F-r612/" rel="">ما الفرق بين دوكر Docker وكوبيرنيتيس Kubernetes؟</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/cloud-computing/%D8%AA%D8%B9%D9%84%D9%85-%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A7%D8%AA-kubernetes-r468/" rel="">تعلم أساسيات Kubernetes</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/cloud-computing/%D9%86%D8%B8%D8%A7%D9%85-%D9%83%D9%88%D8%A8%D9%8A%D8%B1%D9%86%D8%AA%D8%B3-kubernetes-%D9%88%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%B9%D9%85%D9%84%D9%87-r598/" rel="">نظام كوبيرنتس Kubernetes وكيفية عمله</a>
	</li>
</ul>
<p>
	 
</p>

<p>
	 
</p>

<p>
	 
</p>

<p>
	 
</p>
]]></description><guid isPermaLink="false">653</guid><pubDate>Fri, 07 Oct 2022 11:48:40 +0000</pubDate></item><item><title>&#x645;&#x641;&#x647;&#x648;&#x645; &#x627;&#x644;&#x633;&#x62D;&#x627;&#x628;&#x629; Cloud</title><link>https://academy.hsoub.com/devops/cloud-computing/%D9%85%D9%81%D9%87%D9%88%D9%85-%D8%A7%D9%84%D8%B3%D8%AD%D8%A7%D8%A8%D8%A9-cloud-r624/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2022_05/6293c73edba9c_----Cloud-.png.b322c74ca786782c0fdb697e0169fc31.png" /></p>

<p>
	يشير الناس عادةً لأي مجموعةٍ من مفاهيم الحوسبة المترابطة بمصطلح السحابة cloud، ولكن في الواقع السحابة هي مجموعةٌ من الأقراص والمعالجات والذواكر وغيرها من موارد عمليات المعالجة computing resources -سواءٌ كانت فيزيائية أو افتراضية- المستضافة عن بُعد remotely hosted والمُستخدمة في طرف العميل، سواء أكان هذا العميل صفحة ويب أو تطبيق للهاتف أو تطبيق سطح مكتب تقليدي، بهدف استثمار المساحات التخزينية وإمكانات الحوسبة العالية؛ ويُقصد بمصطلح الاستضافة عن بُعد remotely hosting طريقة توصيل التطبيقات وقواعد البيانات والملفات للمستخدمين من الخوادم البعيدة الموجودة خارج مراكز البيانات، إذ يمكن للمستخدم الوصول إلى التطبيق وبياناته من خلال تسجيل الدخول بأمان إلى الخادم البعيد عبر السحابة وذلك خلال متصفح الإنترنت عادةً)،
</p>

<p>
	وليس من السهل التفريق تمامًا بين مفهوم الحوسبة السحابية والحوسبة التقليدية القائمة على نموذج خادم/عميل؛ ولكن تتميز الحوسبة السحابية عمومًا بالقدرة على التوسُّع، أي زيادة الموارد تلقائيًا حسب الحاجة أثناء التشغيل؛ كما تتميز بآلية التصميم أيضًا، إذ تكون مصادر الحوسبة في السحابة أكثر مرونةً ومتعددة الأغراض وقابلةً للاستخدام لأي وظيفة مطلوبة على نحوٍ أكبر موارنةً بحوسبة الخوادم التقليدية.
</p>

<h2>
	بعض الأمثلة على مفهوم السحابة
</h2>

<p>
	لا يخلو موقع إلكتروني في أيامنا من مكون سحابي سواءٌ كان ظاهرًا لنا عند زيارته أم لا؛ أمّا بالنسبة للمستخدم العادي، فلا تمثّل السحابة سوى واجهة عرض الخدمة التي يتعامل معها، سواءٌ كانت منصة تواصل اجتماعي، أو متجرًا إلكترونيًا، أو إحدى خدمات بث الموسيقى، أو موقع حجز تذاكر طيران، أو غيرها من الخدمات المختلفة.
</p>

<p>
	يجب ألا ننسى أن واجهة المستخدم في موقع الويب ما هي إلا جزءٌ بسيطٌ من مجموعةٍ كبيرةٍ من العمليات الجارية في كواليس أيّ تطبيق ويب، إذ تعمل مكوناتٌ عديدة من قواعد بيانات وأدوات تسجيل الأحداث وصولًا إلى آليات التنقيب عن البيانات وأدوات الذكاء الاصطناعي وعدد من البرمجيات الموزعة الخاصة بتنفيذ المتطلبات أو الآلاف منها معًا لتشغّل خدمة ويب وتمكنَّك من استخدام أي أداة على الانترنت. وقد تتواجد المكونات المذكورة أعلاه على أي حاسوب في أي مكان، ولكن تتواجد غالبًا على السحابة.
</p>

<h2>
	كيفية عمل السحابة
</h2>

<p>
	صُممت مراكز البيانات لكي تحوي العديد من خوادم الأغراض العامة مع ما يلزم من إمكانات الحوسبة والتخزين، لمشاركة هذه الموارد بين التطبيقات المتعددة المُستضافة في هذه المراكز لتوفير البيانات الخاصة بها. وتُجمَّع في كثير من الحالات كافّة التطبيقات والمكتبات اللازمة لتشغيلها مع نظام التشغيل على أجهزة افتراضية virtual machines تعمل ضمن الجهاز الفيزيائي الفعلي بغض النظر عن نوع نظام تشغيله، وتدعى هذه التقنية باسم <a href="https://academy.hsoub.com/devops/cloud-computing/%D8%A7%D9%84%D8%AD%D9%88%D8%B3%D8%A8%D8%A9-%D8%A7%D9%84%D8%A7%D9%81%D8%AA%D8%B1%D8%A7%D8%B6%D9%8A%D8%A9-virtualization-%D9%88%D8%A3%D9%88%D8%AC%D9%87-%D8%A7%D8%AE%D8%AA%D9%84%D8%A7%D9%81%D9%87%D8%A7-%D8%B9%D9%86-%D8%A7%D9%84%D8%AD%D8%A7%D9%88%D9%8A%D8%A7%D8%AA-containers-r599/" rel="">التقنية الافتراضية virtualization</a>؛ وهي تجعل التطبيقات أكثر قابليةً للتنقل والعمل في بيئات مختلفة، شرط أن تكون قادرةً على تشغيل جهاز افتراضي ضمنها.
</p>

<p>
	من هنا أتى مفهوم الحوسبة المرنة elastic computing أو السحابة المرنة elastic cloud؛ فعندما يُصمّم تطبيق ليتوسع أو يتقلص حسب حجم الطلبات عليه فمن الممكن استخدام عدد أكبر أو أقل من الأجهزة الافتراضية بمرونة حسب الحالة؛ كما تعمل الأجهزة الافتراضية بمرونة أيضًا من ناحية التخزين، فمن الممكن استخدام محركات الأقراص الثابتة المتصلة بالعديد من الأجهزة الفيزيائية المختلفة والتعامل معها كما لو كانت موردًا واحدًا، مما يقلل من هدر الموارد ويسهّل عملية تطوير التطبيقات التي تتطلب كميات بيانات كبيرة جدًا.
</p>

<p>
	قد تكون مراكز البيانات التي تستضيف موارد الحوسبة السحابية عامّةً أو خاصّةً أو هجينة <a href="https://academy.hsoub.com/devops/servers/%D9%83%D9%84-%D9%85%D8%A7-%D8%AA%D9%88%D8%AF-%D9%85%D8%B9%D8%B1%D9%81%D8%AA%D9%87-%D8%B9%D9%86-%D8%A7%D9%84%D8%B3%D8%AD%D8%A7%D8%A8%D8%A9-%D8%A7%D9%84%D9%87%D8%AC%D9%8A%D9%86%D8%A9-hybrid-cloud-r358/" rel="">hybrid cloud</a>؛ فمن الممكن استئجار موارد الحوسبة السحابية العامة من قبل مجموعة متنوعة من الشركات؛ وقد تقرر المؤسسة إنشاء سحابة خاصة مستضافة في مركز البيانات الخاص بها أو في جزء محجوز خصيصًا لها من مركز بيانات آخر من أجل الحصول على مستويات أعلى من الأمان والمرونة، أو حتى بهدف توفير التكاليف؛ أمّا السحب الهجينة فتتميز بقدرتها على الاستفادة من موارد السحب العامة والخاصة وذلك وفقًا لمتغيرات الطلب والأولوية.
</p>

<h2>
	مفهوم السحابة مفتوحة المصدر
</h2>

<p>
	إنّ أحد أهم التطورات التي حدثت مؤخرًا على أدوات وتقنيات التعامل مع السحابة هو الكم الكبير منها الذي غدا <a href="https://academy.hsoub.com/programming/general/%D9%85%D8%A7-%D8%A7%D9%84%D9%85%D9%82%D8%B5%D9%88%D8%AF-%D8%A8%D9%85%D8%B5%D8%B7%D9%84%D8%AD-%D9%85%D9%81%D8%AA%D9%88%D8%AD-%D8%A7%D9%84%D9%85%D8%B5%D8%AF%D8%B1-open-source%D8%9F-r885/" rel="">مفتوح المصدر</a>، وقد أصبح ترخيص البرمجيات مفتوحة المصدر معيارًا لكيفية تطوير التقنيات الحديثة للتعامل مع السحابة، وفيما يلي بعض الأمثلة:
</p>

<ul>
<li>
		<a href="https://academy.hsoub.com/devops/cloud-computing/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%A3%D9%88%D8%A8%D9%86-%D8%B3%D8%AA%D8%A7%D9%83-openstack-r601/" rel="">OpenStack</a> وهو مشروع مفتوح المصدر متخصص بإنشاء وإدارة البنية الأساسية للسحابة، بما يتضمن وسائط التخزين، وإمكانات الموارد الحاسوبية وإدارة الشبكات، كما يتضمّن العديد من المشاريع للمساعدة في التعامل مع كل ما يتعلّق بالسحابة بدءًا من إدارة حسابات المستخدمين وحتى استثمار قاعدة البيانات (المرحلة اللاحقة لتطويرها).
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/linux/%D8%AF%D9%84%D9%8A%D9%84-%D9%84%D9%81%D9%87%D9%85-%D8%AD%D8%A7%D9%88%D9%8A%D8%A7%D8%AA-%D9%84%D9%8A%D9%86%D9%83%D8%B3-%D9%88%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%A7%D9%84%D8%AA%D8%B9%D8%A7%D9%85%D9%84-%D9%85%D8%B9%D9%87%D8%A7-r594/" rel="">حاويات Linux</a> والتي ظهرت أصلًا بمثابة طريقة لتطوير تطبيقات السحابة، وتعتمد على الإجرائيات الخاصّة بالنواة Linux kernel مثل بديلٍ أسرع من الأجهزة الافتراضية التقليدية، كما أنّها تساعد المطورين على بناء الحاويات باستخدام مشاريع، مثل <a href="https://academy.hsoub.com/devops/cloud-computing/docker/%D8%AA%D8%B9%D8%B1%D9%81-%D8%B9%D9%84%D9%89-docker-r3/" rel="">Docker</a> و <a href="https://academy.hsoub.com/devops/cloud-computing/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-kubernetes-r467/" rel="">Kubernetes</a> لتحقيق التناغم بين التطبيقات التي أُنشأت على عدّة حاويات.
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/general/%D9%85%D9%82%D8%AF%D9%85%D8%A9-%D8%A5%D9%84%D9%89-%D9%85%D9%81%D9%87%D9%88%D9%85-%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-%D8%A7%D9%84%D8%B6%D8%AE%D9%85%D8%A9-big-data-r1579/" rel="">البيانات الضخمة</a> و <a href="https://academy.hsoub.com/questions/4089-%D9%85%D8%A7-%D8%A7%D9%84%D8%B0%D9%8A-%D9%8A%D9%82%D8%B5%D8%AF-%D8%A8%D9%87-%D9%85%D8%B5%D8%B7%D9%84%D8%AD-%D8%A5%D9%86%D8%AA%D8%B1%D9%86%D8%AA-%D8%A7%D9%84%D8%A3%D8%B4%D9%8A%D8%A7%D8%A1%D8%9F/?do=findComment&amp;comment=9099" rel="">إنترنت الأشياء Internet of Things</a>، وهما من أهم مستخدمي موارد الحوسبة السحابية، حيث تُطوَّر في كل منهما العديد من الأدوات لدعم التطبيقات لتكوت مفتوحة المصدر تمامًا.
	</li>
	<li>
		إضافةً للعديد من الأدوات الأخرى ابتداءً من <a href="https://academy.hsoub.com/devops/servers/" rel="">حزم خوادم الويب Linux / Apache / MySQL / PHP</a> وصولًا إلى تطبيقات التخزين السحابي ومحررات النصوص التشاركية.
	</li>
</ul>
<p>
	ترجمة -وبتصرف- للمقال <a href="https://opensource.com/resources/cloud" rel="external nofollow">what is the cloud?‎</a> من موقع opensource.com.
</p>

<h2>
	اقرأ أيضًا
</h2>

<ul>
<li>
		<a href="https://academy.hsoub.com/devops/cloud-computing/%D8%A7%D9%84%D8%A7%D9%86%D8%AA%D9%82%D8%A7%D9%84-%D8%A5%D9%84%D9%89-%D8%A7%D9%84%D8%AD%D9%88%D8%B3%D8%A8%D8%A9-%D8%A7%D9%84%D8%B3%D8%AD%D8%A7%D8%A8%D9%8A%D9%91%D8%A9-r458/" rel="">الانتقال إلى الحوسبة السحابيّة</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/cloud-computing/%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%AD%D9%88%D8%B3%D8%A8%D8%A9-%D8%A7%D9%84%D8%B3%D8%AD%D8%A7%D8%A8%D9%8A%D9%91%D8%A9-%D8%A7%D9%84%D9%85%D8%AA%D8%B7%D9%84%D8%A8%D8%A7%D8%AA-%D8%A7%D9%84%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D9%91%D8%A9%D8%8C-%D9%88%D9%83%D9%8A%D9%81-%D8%AA%D8%B5%D8%A8%D8%AD-%D9%85%D9%87%D9%86%D8%AF%D8%B3-%D8%AD%D9%88%D8%B3%D8%A8%D8%A9-%D8%B3%D8%AD%D8%A7%D8%A8%D9%8A%D9%91%D8%A9-r457/" rel="">تعلم الحوسبة السحابيّة: المتطلبات الأساسيّة، وكيف تصبح مهندس حوسبة سحابيّة</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">624</guid><pubDate>Sun, 29 May 2022 19:28:48 +0000</pubDate></item><item><title>&#x645;&#x62F;&#x62E;&#x644; &#x625;&#x644;&#x649; &#x623;&#x648;&#x628;&#x646; &#x633;&#x62A;&#x627;&#x643; OpenStack</title><link>https://academy.hsoub.com/devops/cloud-computing/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%A3%D9%88%D8%A8%D9%86-%D8%B3%D8%AA%D8%A7%D9%83-openstack-r601/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2022_03/6241a0631b508_----OpenStack.png.d59fd7df1d51eef2ba87d0b0a70b1515.png" /></p>

<p>
	هو مجموعة من الأدوات البرمجية لبناء وإدارة منصات الحوسبة السحابية cloud computing للسحب العامة والخاصة، ويعتقد الكثيرون أنه مستقبل <a href="https://academy.hsoub.com/devops/cloud-computing/%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%AD%D9%88%D8%B3%D8%A8%D8%A9-%D8%A7%D9%84%D8%B3%D8%AD%D8%A7%D8%A8%D9%8A%D9%91%D8%A9-%D8%A7%D9%84%D9%85%D8%AA%D8%B7%D9%84%D8%A8%D8%A7%D8%AA-%D8%A7%D9%84%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D9%91%D8%A9%D8%8C-%D9%88%D9%83%D9%8A%D9%81-%D8%AA%D8%B5%D8%A8%D8%AD-%D9%85%D9%87%D9%86%D8%AF%D8%B3-%D8%AD%D9%88%D8%B3%D8%A8%D8%A9-%D8%B3%D8%AD%D8%A7%D8%A8%D9%8A%D9%91%D8%A9-r457/" rel="">الحوسبة السحابية</a>، لأنه مدعوم من بعض أكبر شركات الاستضافة وتطوير البرمجيات، بالإضافة إلى آلاف أفراد المجتمع، وتديره <a href="https://openinfra.dev/about/" rel="external nofollow">مؤسسة OpenStack</a>، وهي مؤسسة غير ربحية تشرف على التنمية وبناء مجتمع المشروع.
</p>

<h2>
	مقدمة إلى OpenStack
</h2>

<p>
	يتيح OpenStack للمستخدمين إمكانية نشر أجهزة افتراضية ونُسخ أخرى تتعامل مع مهام مختلفة لإدارة بيئة السحابة عند الطلب، كما يُسهّل التوسع الأفقي، مما يعني قدرة المهام التي تستفيد من التشغيل المتزامن على خدمة عددًا أكبر أو أقل من المستخدمين عند الطلب بسهولة بتشغيل المزيد من النُسخ، فمثلًا قد يستطيع تطبيق الهاتف الذي يحتاج إلى الاتصال <a href="https://academy.hsoub.com/devops/servers/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%AE%D8%A7%D8%AF%D9%85-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-r574/" rel="">بخادم</a> عن بعد تقسيم عملية الاتصال مع كل مستخدم عبر العديد من النُسخ المختلفة، وتتواصل هذه النسخ مع بعضها، وتتوسع بسرعة وسهولة مع ازدياد عدد المستخدمين.
</p>

<p>
	OpenStack هو برنامج مفتوح المصدر، مما يعني وصول أي شخص إلى الشيفرة المصدرية، وإجراء أي تغييرات أو تعديلات يحتاج إليها ومشاركتها مع المجتمع بحرّيّة، وفي المقابل يستفيد من آلاف المطورين في جميع أنحاء العالم، والذين يعملون جنبًا إلى جنب لتطويره ليصبح أفضل وأكثر قوةً وأمانًا.
</p>

<h2>
	كيف يستخدم OpenStack في بيئة السحابة؟
</h2>

<p>
	تدور فكرة السحابة حول توفير الحوسبة للمستخدمين النهائيين عند بُعد، بحيث يعمل البرنامج الفعلي مثل خدمة على خوادم موثوقة وقابلة للتوسع، بدلاً من تثبيت البرنامج وتشغيله على حاسوب كل مستخدم نهائي، وتشير الحوسبة السحابية إلى أشياء مختلفة، ولكنها تتحدث عادةً عن تشغيل عناصر مختلفة "مثل خدمة"، وقد تشمل هذه العناصر البرامج أو المنصات أو البنية التحتية، ويعدّ OpenStack بنيةً تحتيةً كخدمة Infrastructure as a service، والتي تختصر إلى IaaS، أي أنه يسهّل على المستخدمين إضافة نسخة جديدة بسرعة، مع إمكانية تشغيل مكونات السحابة الأخرى، وتشغل البنية التحتية منصةً platform يمكن للمطور من خلالها إنشاء تطبيقات برمجية تُقدم إلى المستخدمين النهائيين.
</p>

<h2>
	مكونات OpenStack
</h2>

<p>
	يمكن لأي شخص إضافة مكونات إضافية إلى OpenStack لتساعده على تلبية احتياجاته، لأنه <a href="https://academy.hsoub.com/programming/general/%D9%85%D8%A7-%D8%A7%D9%84%D9%85%D9%82%D8%B5%D9%88%D8%AF-%D8%A8%D9%85%D8%B5%D8%B7%D9%84%D8%AD-%D9%85%D9%81%D8%AA%D9%88%D8%AD-%D8%A7%D9%84%D9%85%D8%B5%D8%AF%D8%B1-open-source%D8%9F-r885/" rel="">مفتوح المصدر</a>، لكن مجتمعه حدد تسعة مكونات رئيسية لتكون جزءًا من نواته، وتوزّع مثل جزء من أي نظام OpenStack، ويضمن مجتمعه صيانتها رسميًا، وهذه المكونات التسعة هي:
</p>

<ul>
<li>
		Nova: هو محرك الحوسبة الأساسي لـ OpenStack، ويستخدم لنشر وإدارة أعداد كبيرة من الأجهزة الافتراضية والنُسخ الأخرى للتعامل مع مهام الحوسبة.
	</li>
	<li>
		Swift: هو نظام تخزين الكائنات والملفات، بدلًا من الفكرة التقليدية للإشارة إلى الملفات من خلال موقعها على محرك الأقراص، ويمكن للمطورين الرجوع إلى معرف فريد يشير إلى الملف أو جزء من المعلومات، أما مكان تخزين هذه المعلومات فيحدده OpenStack، مما يجعل التوسع أمرًا سهلًا، إذ لا يقلق المطورون بشأن سعة النظام الذي يعمل عليه البرنامج، ويصبح على النظام -لا على المطور- إيجاد أفضل السبل للتأكد من <a href="https://academy.hsoub.com/apps/general/%D8%A7%D9%84%D9%86%D8%B3%D8%AE-%D8%A7%D9%84%D8%A7%D8%AD%D8%AA%D9%8A%D8%A7%D8%B7%D9%8A-%D9%88%D8%AD%D9%81%D8%B8-%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-%D9%81%D9%8A-%D8%A7%D9%84%D8%B9%D8%A7%D9%84%D9%85-%D8%A7%D9%84%D8%B1%D9%82%D9%85%D9%8A-r375/" rel="">النسخ الاحتياطي</a> للبيانات في حالة فشل اتصال الجهاز أو الشبكة.
	</li>
	<li>
		Cinder: هو أحد مكونات التخزين الكتلي، وهو أكثر تشابهًا مع المفهوم التقليدي المتمثل في قدرة الحاسوب على الوصول إلى مواقع محددة على محرك الأقراص، وهذه الطريقة التقليدية للوصول إلى الملفات مهمة في السيناريوهات التي تكون فيها سرعة الوصول إلى البيانات هي الأمر الأكثر أهميةً.
	</li>
	<li>
		Neutron: يوفر إمكانية الربط الشبكي لـ OpenStack، ويساعد على ضمان إمكانية اتصال مكونات نشر OpenStack ببعضها بسرعة وكفاءة.
	</li>
	<li>
		Horizon: لوحة تحكم OpenStack، وهي الواجهة الرسومية الوحيدة له، لذلك قد يكون هذا هو المكون الأول الذي يراه المستخدمون الذين يرغبون في تجربته، ويمكن للمطورين الوصول إلى جميع مكونات OpenStack من خلال <a href="https://academy.hsoub.com/programming/general/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%A7%D9%84%D9%88%D8%A7%D8%AC%D9%87%D8%A7%D8%AA-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D9%8A%D8%A9-api-r1314/" rel="">واجهة برمجة التطبيقات <abbr title="Application Programming Interface | واجهة برمجية">API</abbr></a>، لكن لوحة القيادة Horizon توفر لمسؤولي النظام القدرة على الاطلاع على ما يجري في السحابة، وإدارتها حسب الحاجة.
	</li>
	<li>
		Keystone: هو المسؤول عن توفير خدمات الهوية في OpenStack، وهو في الأساس قائمة مركزية لجميع مستخدمي سحابة OpenStack، مربوطة بجميع خدمات السحابة التي يمكنهم استخدامها، ويوفر Keystone وسائل متعددةً للوصول، مما يعني أنه يمكن للمطورين تعيين طرق وصول المستخدم الحالية بدل Keystone بسهولة.
	</li>
	<li>
		Glance: يوفر خدمات الصور images لـ OpenStack، وهي نُسخ (أو نسخ الافتراضية) من الأقراص الثابتة، و يسمح باستخدام هذه الصور مثل قوالب عند نشر نُسخ آلة افتراضية جديدة.
	</li>
	<li>
		Ceilometer: يوفر خدمات القياس عن بُعد، والتي تسمح للسحابة بتقديم خدمات الفوترة لمستخدمي السحابة، كما يحتفظ بعدد يمكن التحقق منه لاستخدام كل مستخدم للمكونات المختلفة لسحابة OpenStack.
	</li>
	<li>
		Heat: هو مكون التنظيم في OpenStack، ويسمح للمطورين بتخزين متطلبات تطبيق السحابة في ملف يحدد الموارد اللازمة للتطبيق، مما يساعد على إدارة البنية التحتية اللازمة لتشغيل خدمة السحابة.
	</li>
</ul>
<h2>
	من يمكنه استخدام OpenStack ؟
</h2>

<p>
	قد تكون أحد مستخدمي OpenStack حاليًا دون أن تعرف ذلك، ولا زال عالم التطبيقات التي تعمل على OpenStack في توسع مستمر، مع بدء الكثير من الشركات في اعتماده جزءًا من مجموعة أدوات سحابتها.
</p>

<h2>
	كيف أبدأ مع OpenStack؟
</h2>

<p>
	إذا رغبت في تجربة OpenStack فقط، فأحد موارد البداية دون الالتزام بأي موارد مادية هو TryStack، الذي يتيح لك اختبار تطبيقاتك في بيئة الاختبار sandbox لفهم كيفية عمل OpenStack فهمًا أفضل، وما إذا كان هو الحل المناسب لك.
</p>

<p>
	يبحث OpenStack دائمًا عن مساهمين جدد، لذا ضع في حسبانك <a href="https://openinfra.dev/join/" rel="external nofollow">الانضمام</a> إلى OpenStack Foundation إذا كانت لديك خبرة تقنية واهتمام في هذا المجال.
</p>

<p>
	ترجمة -وبتصرف- للمقال <a href="https://opensource.com/resources/what-is-openstack" rel="external nofollow">?What is OpenStack</a> من موقع opensource.com.
</p>

<h2>
	اقرأ أيضًا
</h2>

<ul>
<li>
		<a href="https://academy.hsoub.com/programming/general/%D8%B9%D9%84%D9%88%D9%85-%D8%A7%D9%84%D8%AD%D8%A7%D8%B3%D9%88%D8%A8/" rel="">المدخل الشامل لتعلم علوم الحاسوب</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/cloud-computing/%D8%A7%D9%84%D8%A7%D9%86%D8%AA%D9%82%D8%A7%D9%84-%D8%A5%D9%84%D9%89-%D8%A7%D9%84%D8%AD%D9%88%D8%B3%D8%A8%D8%A9-%D8%A7%D9%84%D8%B3%D8%AD%D8%A7%D8%A8%D9%8A%D9%91%D8%A9-r458/" rel="">الانتقال إلى الحوسبة السحابيّة</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/cloud-computing/%D8%AA%D8%B9%D9%84%D9%85-%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A7%D8%AA-kubernetes-r468/" rel="">تعلم أساسيات Kubernetes</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">601</guid><pubDate>Mon, 28 Mar 2022 12:05:14 +0000</pubDate></item><item><title>&#x627;&#x644;&#x62D;&#x648;&#x633;&#x628;&#x629; &#x627;&#x644;&#x627;&#x641;&#x62A;&#x631;&#x627;&#x636;&#x64A;&#x629; virtualization &#x648;&#x623;&#x648;&#x62C;&#x647; &#x627;&#x62E;&#x62A;&#x644;&#x627;&#x641;&#x647;&#x627; &#x639;&#x646; &#x627;&#x644;&#x62D;&#x627;&#x648;&#x64A;&#x627;&#x62A; containers</title><link>https://academy.hsoub.com/devops/cloud-computing/%D8%A7%D9%84%D8%AD%D9%88%D8%B3%D8%A8%D8%A9-%D8%A7%D9%84%D8%A7%D9%81%D8%AA%D8%B1%D8%A7%D8%B6%D9%8A%D8%A9-virtualization-%D9%88%D8%A3%D9%88%D8%AC%D9%87-%D8%A7%D8%AE%D8%AA%D9%84%D8%A7%D9%81%D9%87%D8%A7-%D8%B9%D9%86-%D8%A7%D9%84%D8%AD%D8%A7%D9%88%D9%8A%D8%A7%D8%AA-containers-r599/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2022_03/6239a58c27c8c_----virtualization-.png.4a86a1396e5fb2a5de1c1b9dbe891959.png" /></p>

<p>
	الحوسبة الافتراضية هي تشغيل نسخة نظام حاسوب افتراضية في طبقة مستخرجة من العتاد hardware الفعلي، ويشير المصطلح غالبًا إلى تشغيل عدة أنظمة تشغيل على الحاسوب في وقت واحد، حيث يبدو للتطبيقات التي تعمل على الجهاز الافتراضي virtualized machine أنها على جهاز مخصص لها، ويكون <a href="https://academy.hsoub.com/files/24-%D8%A3%D9%86%D8%B8%D9%85%D8%A9-%D8%A7%D9%84%D8%AA%D8%B4%D8%BA%D9%8A%D9%84-%D9%84%D9%84%D9%85%D8%A8%D8%B1%D9%85%D8%AC%D9%8A%D9%86/" rel="">نظام التشغيل</a> والمكتبات والبرامج الأخرى فريدةً لنظام الضيف guest الافتراضي، وغير متعلقة بنظام التشغيل المضيف.
</p>

<p>
	تُستخدم الحوسبة الافتراضية لأسباب عدة، أكثرها شيوعًا بالنسبة لمستخدمي سطح المكتب هو تشغيل التطبيقات المخصصة لنظام تشغيل آخر غير النظام المثبت على حواسيبهم، دون الحاجة إلى تبديل أجهزة الحاسوب أو إعادة تشغيل نظام مختلف، أما بالنسبة لمسؤولي الخوادم، فهي توفر لهم القدرة على تشغيل أنظمة تشغيل مختلفة أيضًا، بالإضافة إلى طريقة لتقسيم نظام كبير إلى أجزاء أصغر، مما يسمح باستخدام أكثر كفاءةً للخادم من قبل عدد من المستخدمين المختلفين أو تطبيقات ذات متطلبات مختلفة، كما تسمح بالعزل، وحماية البرامج التي تعمل داخل الجهاز الافتراضي من العمليات التي تحدث في جهاز افتراضي آخر على نفس المضيف.
</p>

<h2>
	المراقب hypervisor
</h2>

<p>
	يُستخدم المراقِب Hypervisor لإنشاء وتشغيل الأجهزة الافتراضية، وهو صنفان، يسمى الأول بالنمط الأول type one أو الخادم الحقيقي bare metal، حيث تشغّل آلات الضيف الافتراضية مباشرةً على عتاد النظام، وتعمل مثل نظام تشغيل، ويدعى الصنف الثاني بالنمط الثاني type two أو المراقب المستضاف Hosted، وهو يشبه التطبيقات التقليدية التي يمكن تشغيلها وإيقافها مثل أي برنامج عادي، وهذا التقسيم غير شائع في الأنظمة الحديثة، خاصةً مع أنظمة مثل <a href="https://academy.hsoub.com/certificates/redhat/rhcsa/%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D9%91%D8%A7%D8%AA-%D8%A7%D9%84%D8%AD%D9%88%D8%B3%D8%A8%D8%A9-%D8%A7%D9%84%D8%A7%D9%81%D8%AA%D8%B1%D8%A7%D8%B6%D9%8A%D9%91%D8%A9-virtualization-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-kvm-%D8%B9%D9%84%D9%89-red-hat-enterprise-linux-r54/" rel="">KVM</a>، اختصار الأجهزة الافتراضيّة المعتمدة على نواة لينكس Kernel-based Virtual Machine، وهو جزء من نواة نظام لينكس Linux يمكنه تشغيل الأجهزة الافتراضية مباشرةً على العتاد الفعلي.
</p>

<h2>
	الجهاز الافتراضي virtual machine
</h2>

<p>
	الجهاز الافتراضي هو المحاكي المكافئ لنظام الحاسوب الذي يعمل على نظام آخر، ويمكنه الوصول إلى أي عدد من الموارد، مثل القدرة على المعالجة computing power، وكذلك الوصول المحدود إلى <a href="https://academy.hsoub.com/certificates/comptia/%D9%88%D8%AD%D8%AF%D8%A9-%D8%A7%D9%84%D9%85%D8%B9%D8%A7%D9%84%D8%AC%D8%A9-%D8%A7%D9%84%D9%85%D8%B1%D9%83%D8%B2%D9%8A%D8%A9-r58/" rel="">وحدة المعالجة المركزية</a> والذاكرة في الجهاز المضيف، كما يمكنه استخدام واحد أو أكثر من أجهزة أقراص التخزين المادية أو الافتراضية، والوصول إلى واجهة شبكة افتراضية أو حقيقية، بالإضافة إلى أي أجهزة، مثل بطاقات الفيديو أو أجهزة USB، أو أي عتاد آخر مشترك مع الجهاز الافتراضي، ويشار إلى تخزين الجهاز الافتراضي على قرص افتراضي باسم صورة قرص disk image، وقد تحتوي على ملفات تشغيل الجهاز الافتراضي، أو على أي متطلبات محددة للتخزين.
</p>

<h2>
	الحاوية container
</h2>

<p>
	تحتوي <a href="https://academy.hsoub.com/devops/servers/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%AD%D8%A7%D9%88%D9%8A%D8%A7%D8%AA-%D9%84%D9%8A%D9%86%D9%83%D8%B3-lxc-r219/" rel="">الحاويات في نظام لينوكس</a> التطبيقات وتعزلها عن النظام المضيف الذي تعمل عليه، كما تسمح للمطور بتجميع التطبيق مع كل الأجزاء التي يحتاجها، مثل المكتبات والاعتماديات الأخرى، وإرسالها كلها مثل حزمة واحدة، وقد صمِّمت لتسهيل تقديم تجربة متسقة، حيث ينقل المطورون ومسؤولو النظام التعليمات البرمجية من بيئات التطوير إلى بيئة الإنتاج بسرعة مع القدرة على تكرارها.
</p>

<p>
	لن يحدِث وضع التطبيقات في حاويات تغيرًا كبيرًا في مؤسستك على الأرجح، إلا إذا غيرت طريقة نشر تلك الحاويات وإدارتها، لذلك يستخدَم <a href="https://academy.hsoub.com/devops/cloud-computing/%D9%86%D8%B8%D8%A7%D9%85-%D9%83%D9%88%D8%A8%D9%8A%D8%B1%D9%86%D8%AA%D8%B3-kubernetes-%D9%88%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%B9%D9%85%D9%84%D9%87-r598/" rel="">نظام Kubernetes</a> لتنظيم الحاويات وإدارتها في <a href="https://academy.hsoub.com/devops/linux/%D9%85%D8%A7-%D9%87%D9%88-%D9%86%D8%B8%D8%A7%D9%85-%D8%A7%D9%84%D8%AA%D8%B4%D8%BA%D9%8A%D9%84-%D9%84%D9%8A%D9%86%D9%83%D8%B3%D8%9F-r451/" rel="">نظام لينكس</a>، وهو نظام مفتوح المصدر لإدارة مجموعات من <a href="https://academy.hsoub.com/devops/cloud-computing/%D8%A3%D8%A8%D8%B1%D8%B2-%D8%A7%D9%84%D9%85%D9%81%D8%A7%D9%87%D9%8A%D9%85-%D8%A7%D9%84%D8%AA%D9%8A-%D9%8A%D8%AC%D8%A8-%D8%B9%D9%84%D9%8A%D9%83-%D8%A7%D9%84%D8%A5%D9%84%D9%85%D8%A7%D9%85-%D8%A8%D9%87%D8%A7-%D8%B9%D9%86-%D8%A7%D9%84%D8%AD%D8%A7%D9%88%D9%8A%D8%A7%D8%AA-r561/" rel="">الحاويات</a>، ويوفر أدوات لنشر التطبيقات وتوسيعها عند الحاجة، وإدارة تغيرات التطبيقات الموجودة في الحاويات، والمساعدة في تحسين استخدام العتاد الكائن وراءها، وقد صمم ليكون قابلًا للتوسع، بالإضافة إلى ميزة التسامح مع الأخطاء fault-tolerant، من خلال السماح لمكونات التطبيق بإعادة التشغيل والتنقل عبر الأنظمة حسب الحاجة.
</p>

<p>
	تضيف أدوات أتمتة تكنولوجيا المعلومات مثل Ansible، ومنصات مشاريع الخدمات مثل OpenShift، إمكانيات إضافيةً لتسهيل إدارة الحاويات.
</p>

<p>
	العديد من التقنيات التي تدعم الحاويات هي تقنيات مفتوحة المصدر، مما يعني وجود مجتمع واسع من المساهمين، مما يساعد على التطور السريع لنظام واسع من المشاريع ذات الصلة التي تلبي احتياجات المنظمات المختلفة، الكبيرة والصغيرة.
</p>

<h2>
	الموازنة بين الجهاز الافتراضي والحاوية
</h2>

<p>
	تتشابه الحاويات والأجهزة الافتراضية من حيث المفهوم، فكلاهما يستخدم لإنشاء بيئات افتراضية معزولة لاختبار البرامج وتطويرها، لكنهما يعملان بطريقة مختلفة، فالحاويات ليست أجهزةً مستقلةً تمامًا، وإنما هي مجرد عملية معزولة تشترك في نفس نواة لينكس kernel مثل نظام التشغيل المضيف، وكذلك الملفات والمكتبات اللازمة لتنفيذ البرنامج المشغَّل ضمن الحاوية، في واجهة شبكة غالبًا، مما يظهر الحاوية مثل جهاز افتراضي، إلا أنها تتصرف عكسه، فلا تنشئ نظام تشغيل افتراضي كامل، ولا تحتاج إلى نسخ نظام التشغيل كليًا، وإنما تنسخ المكونات التي تحتاجها للعمل فقط، مما أدى إلى تحسن كبير في الأداء، وتقليل حجم التطبيق، وتسريع العمل، لأن العملية تعمل على مضيفها مع طبقة حماية إضافية حولها.
</p>

<p>
	وتصمم الحاويات عادةً لتشغيل برنامج واحد، بدلًا من محاكاة خادم كامل متعدد الأغراض، وعلى عكس الأجهزة الافتراضية فهي لا تحتاج إلى تضمين نظام تشغيل ضيف في كل حالة.
</p>

<h2>
	لم كل هذا الاهتمام بالحاويات؟
</h2>

<p>
	كان مشروع <a href="https://academy.hsoub.com/devops/cloud-computing/docker/%D8%AA%D8%B9%D8%B1%D9%81-%D8%B9%D9%84%D9%89-docker-r3/" rel="">Docker</a> مفتوح المصدر أحد أكبر أسباب الاهتمام بتكنولوجيا الحاويات مؤخرًا، وهو أداة <a href="https://academy.hsoub.com/devops/servers/%D9%85%D8%A7-%D9%87%D9%88-%D8%B3%D8%B7%D8%B1-%D8%A7%D9%84%D8%A3%D9%88%D8%A7%D9%85%D8%B1-%D8%9F-r353/" rel="">سطر أوامر command line</a> سهّلت على كل من المطورين ومسؤولي النظام إنشاء الحاويات والتعامل معها، على غرار الطريقة التي سهّل بها Vagrant على المطورين استكشاف الأجهزة الافتراضية.
</p>

<p>
	Docker هو أداة سطر أوامر لتعريف محتويات حاوية لينكس في تعليمات برمجية، والتي يمكن بعد ذلك إصدارها وإعادة إنتاجها ومشاركتها وتعديلها بسهولة، كما لو أنها شيفرة مصدرية لبرنامج.
</p>

<p>
	اهتمت الحاويات أيضًا ببنية الخدمات المصغرة microservice، وهو نمط تصميم لتطوير التطبيقات، تُقسم فيه التطبيقات المعقدة إلى أجزاء أصغر قابلة للتركيب وتعمل معًا، ويطوَّر كل مكون على حدة، ثم تجمع المكونات لتكوين التطبيق، ويمكن أن تعمل كل خدمة داخل الحاوية، كما يمكن توسيعها باستقلالية عن بقية التطبيق حسب الحاجة.
</p>

<h2>
	المحافظة على أمان الحاويات
</h2>

<p>
	تضيف الحاوية الأمان عن طريق عزل التطبيقات عن التطبيقات الأخرى الموجودة على نظام تشغيل مضيف، ولكن مجرد وضع أحد التطبيقات في حاوية لا يكفي لإبقائه آمنًا.
</p>

<p>
	يشرح Dan Walsh خبير أمن الحواسيب، والمعروف بعمله على SELinux، بعض الطرق التي يعمل عليها المطورون ليتأكدوا من ضمان Docker وأدوات الحاويات الأخرى لميزات <a href="https://academy.hsoub.com/files/20-%D8%AF%D9%84%D9%8A%D9%84-%D8%A7%D9%84%D8%A3%D9%85%D8%A7%D9%86-%D8%A7%D9%84%D8%B1%D9%82%D9%85%D9%8A/" rel="">الأمان</a>، بالإضافة إلى ميزات الأمان الموجودة في Docker، مثل حماية ملفات النظام، وفضاءات الأسماء Namespace التي توفر بعض الأمان.
</p>

<p>
	ترجمة -وبتصرف- للمقالين <a href="https://opensource.com/resources/what-are-linux-containers" rel="external nofollow">What are Linux containers?</a> و<a href="https://opensource.com/resources/virtualization" rel="external nofollow">What is virtualization?</a> من موقع opensource.com.
</p>

<h2>
	اقرأ أيضًا
</h2>

<ul>
<li>
		<a href="https://academy.hsoub.com/devops/cloud-computing/docker/%D9%85%D8%A7-%D8%B9%D9%84%D9%8A%D9%83-%D9%85%D8%B9%D8%B1%D9%81%D8%AA%D9%87-%D8%B9%D9%86-%D8%A7%D9%84%D9%81%D8%B1%D9%82-%D8%A8%D9%8A%D9%86-%D8%AF%D9%88%D9%83%D8%B1-%D9%88%D8%A7%D9%84%D8%A3%D8%AC%D9%87%D8%B2%D8%A9-%D8%A7%D9%84%D8%A7%D9%81%D8%AA%D8%B1%D8%A7%D8%B6%D9%8A%D8%A9-r456/" rel="">الفرق بين Docker والأجهزة الافتراضية</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/cloud-computing/%D8%A3%D8%A8%D8%B1%D8%B2-%D8%A7%D9%84%D9%85%D9%81%D8%A7%D9%87%D9%8A%D9%85-%D8%A7%D9%84%D8%AA%D9%8A-%D9%8A%D8%AC%D8%A8-%D8%B9%D9%84%D9%8A%D9%83-%D8%A7%D9%84%D8%A5%D9%84%D9%85%D8%A7%D9%85-%D8%A8%D9%87%D8%A7-%D8%B9%D9%86-%D8%A7%D9%84%D8%AD%D8%A7%D9%88%D9%8A%D8%A7%D8%AA-r561/" rel="">أبرز المفاهيم التي ينبغي معرفتها عن الحاويات</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/cloud-computing/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-kubernetes-r467/" rel="">مدخل إلى Kubernetes</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">599</guid><pubDate>Mon, 21 Mar 2022 17:00:00 +0000</pubDate></item><item><title>&#x646;&#x638;&#x627;&#x645; &#x643;&#x648;&#x628;&#x64A;&#x631;&#x646;&#x62A;&#x633; Kubernetes &#x648;&#x643;&#x64A;&#x641;&#x64A;&#x629; &#x639;&#x645;&#x644;&#x647;</title><link>https://academy.hsoub.com/devops/cloud-computing/%D9%86%D8%B8%D8%A7%D9%85-%D9%83%D9%88%D8%A8%D9%8A%D8%B1%D9%86%D8%AA%D8%B3-kubernetes-%D9%88%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%B9%D9%85%D9%84%D9%87-r598/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2022_03/6239a844f2d9f_--Kubernetes.png.9aa2fc34523dcfc982973d50e5d9af54.png" /></p>

<p>
	كانت <a href="https://academy.hsoub.com/programming/workflow/%D8%A7%D9%84%D8%A3%D8%AF%D9%88%D8%A7%D8%AA-%D8%A7%D9%84%D9%85%D8%B3%D8%AA%D8%AE%D8%AF%D9%85%D8%A9-%D9%81%D9%8A-%D8%A8%D9%86%D8%A7%D8%A1-%D9%85%D9%88%D8%A7%D9%82%D8%B9-%D9%88%D9%8A%D8%A8-r1436/" rel="">مواقع الويب</a> مجرد ملفات نصيةً موضوعةً في مجلد، وتُشارَك مع العالم، وتنزَّل وتُعرَض في متصفح الويب، وكان هذا كل ما يجري خلال المعاملة transaction، ولكن الأمور أصبحت أكثر تعقيدًا، وصارت المواقع الإلكترونية تُشغل نماذج من التعليمات البرمجية، مما مكّن المبرمجين من إعداد ما يسمى "بتطبيقات الويب Web Applications"، مثل عربات التسوق، وبوابات تسجيل الدخول، وعملاء البريد الإلكتروني على الإنترنت، ومحررات الصور وغيرها.
</p>

<p>
	ما إن بدأ تشغيل الويب للتطبيقات، حتى أدرك مهندسو النظم ومصمموها أن الشبكة كانت في الأساس حاسوبًا عملاقًا Supercomputer، وأنه يجب إدارة الموارد على عُقد هذا الحاسوب، تمامًا مثلما تُدار على حاسوب محمول عند تشغيل العديد من التطبيقات في وقت واحد.
</p>

<p>
	كان بإمكاننا نسبيًا توقع الوقت المستغرق للحوسبة في أيام الحواسيب المركزية mainframe، إذ حجزنا موعدًا لاستخدام الحاسوب حرفيًا، ووضعنا مبدأً لإدارة الموارد اعتمد على قاعدة "من يأتي أولاً يُخدم أولاً"، لكن هذا قطعًا لا يصلح عند التعامل مع مليارات المستخدمين، فقد يحتاج أي عدد منهم إلى كل قدرة المعالجة للحاسوب في أي لحظة، ثم اعتقدنا في وقت لاحق أن الحل هو التوسع، أي المزيد من الخوادم التي تُشغل المزيد من نسخ التطبيقات، مما يعني إمكانية استخدام هذه التطبيقات من قبل مزيد من الأشخاص في أي وقت، ولكن قد يكون تشغيل 100 خادم مكلفًا عندما تزيد حركة المرور traffic، لذا فالمشكلة ليست في كيفية إدارة موارد الخادم الذي يشغِّل تطبيقًا ما فقط، بل في كيفية إدارة هذه الموارد ديناميكيًا أيضًا، أي اعتمادًا على عدد الأشخاص الذين يطلبون الوصول للتطبيق.
</p>

<h2>
	ما هو Kubernetes؟
</h2>

<p>
	Kubernetes (والذي يُشار إليه بالاختصار K8s) هو حل مفتوح المصدر لأتمتة النشر والتوسع الديناميكي للتطبيقات المغلفة في حاويات عبر الإنترنت، ويستخدم Kubernetes ما يسمى بالحاويات containers، وهي <a href="https://academy.hsoub.com/devops/linux/%D9%85%D8%A7-%D9%87%D9%88-%D9%86%D8%B8%D8%A7%D9%85-%D8%A7%D9%84%D8%AA%D8%B4%D8%BA%D9%8A%D9%84-%D9%84%D9%8A%D9%86%D9%83%D8%B3%D8%9F-r451/" rel="">نظام في لينكس Linux</a> يجمع التطبيقات في وحدات منطقية لتُدار بطريقة مركزية وآمنة، وهي مصممة لتكون سريعة الزوال، أي يمكن أن تتعطل الحاوية أو تتوقف دون فقد بيانات المستخدم، لأن البيانات تُحفظ خارج الحاوية، وتعدّ التطبيقات المعبأة في حاويات تطبيقات قابلةً للتخلص منها، ويمكن لمجموعة من الخوادم إطلاق نُسخ جديدة من التطبيق عندما يحتاج إليها الكثير من المستخدمين، أو تشغيل نُسخ أقل عندما يحتاج إليها بضع مئات من المستخدمين فقط، ويستطيع مسؤول النظام تنفيذ ذلك يدويًا أو من خلال كتابة سلسلة من السكربتات لمراقبة حركة المرور والاستجابة، لكن Kubernetes يجعل ذلك آليًا.
</p>

<p>
	يمكن تثبيت Kubernetes للاختبار أو للإنتاج، فإذا كان الهدف تعلمه أو تجربة إنشاء تطبيق قائم على السحابة فقط، فيمكن تشغيل Kubernetes أو OpenShift أو OKD محليًا على حاسوبك، أما للمشاريع الجادة فيمكن بناء عنقود cluster خاص بك، وللبيئات الإنتاجية الكبيرة يمكن تثبيت <a href="https://www.okd.io/" rel="external nofollow">OKD</a> أو <a href="https://kubernetes.io/" rel="external nofollow">Kubernetes</a>.
</p>

<p>
	صمم Kubernetes لعمليات النشر الكبيرة، لذلك ربما لا تحتاج إلى استخدامه إلا إذا كان لديك الكثير من المستخدمين الذين يزورون تطبيقاتك على الويب مما يؤثر سلبًا على الأداء، لكن يمكنك تشغيله في المنزل (عبر خادم محلي تضبطه عبر <a href="https://academy.hsoub.com/programming/os-embedded-systems/%D8%AA%D8%B9%D8%B1%D9%81-%D8%B9%D9%84%D9%89-%D8%AC%D9%87%D8%A7%D8%B2-%D8%B1%D8%A7%D8%B3%D8%A8%D9%8A%D8%B1%D9%8A-%D8%A8%D8%A7%D9%8A-raspberry-pi-r1356/" rel="">راسبيري باي</a> في المنزل)، ويسهل ذلك كلما ازدادت شهرة Kubernetes.
</p>

<p>
	يسهّل Kubernetes إدارة الحاويات، إلا أنه عبارة عن مجموعة أدوات تصنعها بنفسك غالبًا، ويمكن تنزيله وتشغيله تمامًا مثلما طوِّر، ولكن ذلك يعني أنك ستطور أدواتك الخاصة لدعم عناقيدك فيه، وتوجد بعض الأدوات التي تساعد في ذلك، مثل <a href="https://kubash.org/" rel="external nofollow">Kubash</a> وهي واجهة سطرية تفاعلية لعنقودك للمساعدة في إنشاء صور الحاويات وتوفير المضيفين، و<a href="https://www.konveyor.io/" rel="external nofollow">Konveyor</a> وهي سلسلة أدوات كاملة للمساعدة في ترحيل مجموعتك وتحسينها، و<a href="https://academy.hsoub.com/devops/cloud-computing/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-helm-%D9%85%D8%AF%D9%8A%D8%B1-%D8%AD%D8%B2%D9%85-kubernetes-r470/" rel="">Helm</a> وهو مدير الحزم، وغيرها الكثير.
</p>

<h2>
	ما هي OpenShift و OKD؟
</h2>

<p>
	OpenShift هي منصة لتطبيق Kubernetes مبنية للسحابة، بينما OKD هو المشروع الأولي له، وهو مفتوح المصدر.
</p>

<p>
	تتجه البنية التحتية الحديثة إلى تعدد السحابات Multicloud والسحابة الهجينة hybrid cloud، لذا احتاج مسؤولو النظام والمطورين إلى منصة مستقرة وقابلة للتنبؤ، ويوفر OKD المرونة للمهندسين عند اختيار السحابة التي تعمل عليها بنيتهم التحتية، كما توفر للمسؤولين وصولًا سهلًا إلى إدارة المستخدمين والموارد، وتتيح للمطورين تطوير تطبيقات knative (أي أصيلةً مع "Kubernetes") وجاهزة للنشر على السحابة، كما أنها لوحة تحكم وطبقة تجريد abstraction وسلسلة أدوات في آن واحد.
</p>

<p>
	OpenShift وOKD هي توزيعات Kubernetes، ويمكن للمسؤولين تشغيلها مع الاستمرار في استخدام جميع أوامر Kubernetes الأكثر شيوعًا، مثل kubectl وkubeadm وما إلى ذلك، ويمكن للمسؤولين استخدام جميع أوامر لينكس المألوفة لديهم لإدارة نظام التشغيل المضيف، لأن Kubernetes يعمل ويتفاعل مباشرةً مع نظام لينكس Linux وحاوياته.
</p>

<h2>
	كيف يعمل نظام Kubernetes؟
</h2>

<p>
	تعمل التطبيقات الموجودة على السحابة داخل حاويات، والحاويات ليست أشياءً ماديةً، بل هي مفهوم برمجي يعني تجميع العمليات الجارية على الخادم معًا لتتشارك في موارد معينة، وتشغَّل الحاويات عادةً بواسطة <a href="https://cri-o.io/" rel="external nofollow">CRI-O</a> أو <a href="https://podman.io/" rel="external nofollow">Podman</a> أو <a href="https://linuxcontainers.org/" rel="external nofollow">LXC</a> أو <a href="https://academy.hsoub.com/devops/cloud-computing/docker/%D8%AA%D8%B9%D8%B1%D9%81-%D8%B9%D9%84%D9%89-docker-r3/" rel="">Docker</a>.
</p>

<p>
	يُطلق على وحدة التنظيم الرئيسية في Kubernetes عند تشغيل التطبيقات اسم pod، وهي عبارة عن مجموعة من الحاويات، تُدار معًا على نفس الجهاز أو الجهاز الافتراضي أو العقدة، وهي مصممة لتتواصل مع بعضها البعض بسهولة، ويمكن تنظيم عدد منها في خدمة، وهي مجموعة pod تعمل معًا، وتُنظم بواسطة نظام من العناوين labels، مما يسمح بتخزين البيانات الوصفية حول كائنات مثل pods في Kubernetes.
</p>

<p>
	يمكن تنظيم كل هذه الأجزاء بطريقة متوافقة، ويمكن التنبؤ بها من خلال <a href="https://academy.hsoub.com/programming/general/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%A7%D9%84%D9%88%D8%A7%D8%AC%D9%87%D8%A7%D8%AA-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D9%8A%D8%A9-api-r1314/" rel="">واجهة برمجة التطبيقات <abbr title="Application Programming Interface | واجهة برمجية">API</abbr></a>، أو من خلال OpenShift أو OK أو تعليمات محددة مسبقًا أو باستخدام أوامر طرفية.
</p>

<p>
	ترجمة -وبتصرف- للمقال <a href="https://opensource.com/resources/what-is-kubernetes" rel="external nofollow">?What is Kubernetes</a> من موقع opensource.com.
</p>

<h2>
	اقرأ أيضًا
</h2>

<ul>
<li>
		<a href="https://academy.hsoub.com/devops/cloud-computing/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-kubernetes-r467/" rel="">مدخل إلى Kubernetes</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/cloud-computing/%D8%AA%D8%B9%D9%84%D9%85-%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A7%D8%AA-kubernetes-r468/" rel="">تعلم أساسيات Kubernetes</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/cloud-computing/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-helm-%D9%85%D8%AF%D9%8A%D8%B1-%D8%AD%D8%B2%D9%85-kubernetes-r470/" rel="">مدخل إلى Helm: مدير حزم Kubernetes</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/cloud-computing/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%A5%D8%B9%D8%AF%D8%A7%D8%AF-%D9%85%D9%83%D8%AF%D8%B3-%D8%A7%D9%84%D8%B3%D8%AC%D9%84%D8%A7%D8%AA-efk-%D8%B9%D9%84%D9%89-kubernetes-r469/" rel="">كيفية إعداد مكدس السجلات EFK على Kubernetes</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">598</guid><pubDate>Mon, 14 Mar 2022 15:00:00 +0000</pubDate></item><item><title>&#x623;&#x628;&#x631;&#x632; &#x627;&#x644;&#x645;&#x641;&#x627;&#x647;&#x64A;&#x645; &#x627;&#x644;&#x62A;&#x64A; &#x64A;&#x62C;&#x628; &#x639;&#x644;&#x64A;&#x643; &#x627;&#x644;&#x625;&#x644;&#x645;&#x627;&#x645; &#x628;&#x647;&#x627; &#x639;&#x646; &#x627;&#x644;&#x62D;&#x627;&#x648;&#x64A;&#x627;&#x62A;</title><link>https://academy.hsoub.com/devops/cloud-computing/%D8%A3%D8%A8%D8%B1%D8%B2-%D8%A7%D9%84%D9%85%D9%81%D8%A7%D9%87%D9%8A%D9%85-%D8%A7%D9%84%D8%AA%D9%8A-%D9%8A%D8%AC%D8%A8-%D8%B9%D9%84%D9%8A%D9%83-%D8%A7%D9%84%D8%A5%D9%84%D9%85%D8%A7%D9%85-%D8%A8%D9%87%D8%A7-%D8%B9%D9%86-%D8%A7%D9%84%D8%AD%D8%A7%D9%88%D9%8A%D8%A7%D8%AA-r561/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2021_12/61ae5de399d3b_-------.png.1a27d2deba0c1a13c7084ea855530ceb.png" /></p>

<p>
	أصبحت الحاويات Containers جزءًا من جميع نواحي بيئة تكنولوجيا المعلومات، وغيرتها تغييرًا جذريًا. فما هي المفاهيم التي عليك أن تعرفها عن <a href="https://academy.hsoub.com/devops/cloud-computing/docker/%D8%A7%D9%84%D8%AA%D8%B9%D8%A7%D9%85%D9%84-%D9%85%D8%B9-%D8%AD%D8%A7%D9%88%D9%8A%D8%A7%D8%AA-docker-r310/" rel="">الحاويات</a>؟
</p>

<p>
	غير الاحتواء Containerization بيئة تكنولوجيا المعلومات تغييرًا جذريًا بسبب قيمته الكبيرة والفوائد الجمّة التي أكسبها لهذا القطاع. فتقريبًا لن تجد ابتكارًا حديثًا في مجال الأعمال لا يُعدّ الاحتواء عاملًا مساهمًا فيه، هذا إن لم يكن عنصرًا محوريًا فيه.
</p>

<p>
	في معمارية التطبيقات الحديثة، تمنحك القدرة على تنفيذ التعديلات بسرعة في بيئة الإنتاج الأفضلية على منافسيك. تحقق الحاويات هذه السرعة باستخدام معمارية الخدمات المصغّرة microservices التي تتيح لفريق المطورين أن ينشئوا خاصيات وظيفية functionality ويضيقوا نطاق تأثير أخطائهم ويتداركوها بسرعة أكبر. كما يتيح الاحتواء للتطبيقات أن تبدأ العمل بسرعة أكبر وتوسّع موارد السحابة cloud المتاحة التي تستهلكها تلقائيًا عند اللزوم. فضلًا عن ذلك، يحقق مفهوم <a href="https://academy.hsoub.com/devops/" rel="">العمليات والتطوير</a> DevOps الفائدة القصوى من منافع الاحتواء الذي يتيح المرونة وقابلية النقل والكفاءة اللازمين للطرح الأولي <a href="https://academy.hsoub.com/marketing/core-concepts-of-marketing/%D8%AA%D8%B9%D8%B1%D9%8A%D9%81-%D8%A7%D9%84%D9%85%D9%86%D8%AA%D8%AC-%D9%88%D8%A3%D9%86%D9%88%D8%A7%D8%B9%D9%87-r433/" rel="">للمنتج</a> في السوق.
</p>

<p>
	وعند حديثنا عن السرعة والخفة والمرونة التي يعدنا بها الاحتواء الذي يتبع نهج العمليات والتطوير، لا نغفل العامل الحاسم، ألا وهو عامل الأمن. أدى هذا إلى ظهور مفهوم <a href="https://academy.hsoub.com/devops/general/%D9%85%D8%A7-%D9%87%D9%8A-devsecops%D8%9F-r437/" rel="">DevSecOps</a>، الذي يدمج الأمن ب_ منذ البداية وخلال دورة حياة التطبيق الذي تحتويه الحاويات. يحسّن الاحتواء الأمن بدرجة كبيرة افتراضيًا لأنه يعزل التطبيق عن المضيف وعن التطبيقات الأخرى التي تحتويها الحاويات.
</p>

<h2>
	ماهي الحاويات؟
</h2>

<p>
	إن الحاويات هي حل المشاكل التي أورثتنا إياها المعماريات المتراصّة monolithic، رغم أن لهذه الكتل المتراصة monoliths نقاط قوتها إلا أنها تمنع المؤسسات من التحرك بسرعة وفق نموذج أجايل agile. أما الحاويات تتيح لك تجزئة الكتلة إلى <a href="https://opensource.com/resources/what-are-microservices" rel="external nofollow">خدمات مصغرة</a>.
</p>

<p>
	بصورة أساسية، إن الحاوية هي تطبيق يحزم مكونات خفيفة، مثل اعتماديات dependencies التطبيق والمكاتب وملفات الإعدادات، التي تعمل في بيئة منعزلة مثبتة على أنظمة تشغيل تقليدية أو على بيئات افتراضية لتسهيل تحقيق المرونة وقابلية النقل.
</p>

<p style="text-align: center;">
	<img alt="002container_architecture.png" class="ipsImage ipsImage_thumbnailed" data-fileid="84566" data-unique="2dogw6ecd" src="https://academy.hsoub.com/uploads/monthly_2021_12/002container_architecture.png.2acedb79e67cb70f8bd549e47d16e308.png"></p>

<p style="text-align: center;">
	معمارية الحاوية
</p>

<p>
	باختصار، توفر الحاوية العزلة من خلال استغلال تقنيات النواة مثل مجموعات التحكم cgroups و<a href="https://opensource.com/article/19/10/namespaces-and-containers-linux" rel="external nofollow">فضاءات أسماء النواة</a> kernel namespaces و<a href="https://opensource.com/article/20/11/selinux-containers" rel="external nofollow">SELinux</a>. تتشارك الحاويات مع المضيف بالنواة مما يتيح لها استهلاك موارد أقل من الذي تستهلكه الآلة الافتراضية virtual machine.
</p>

<h2>
	مزايا الحاويات
</h2>

<p>
	توفر معماريتها الخفة التي لا يمكن أن توفرها الآلات الافتراضية. فضلًا عن ذلك، تدعم الحاويات نموذجًا أكثر مرونةً فيما يتعلق بموارد الحوسبة والذاكرة، وتتيح ما يسمى بأنماط تدفق الموارد resource-burst التي تمكن التطبيقات من استهلاك قدر أكبر من الموارد عند اللزوم ضمن الحدود المحددة لها. بعبارة أخرى، توفر الحاويات مرونةً وقابليةً للتوسع لن تحظى بهما عند تشغيل تطبيقك على آلة افتراضية.
</p>

<p>
	تسهِّل الحاويات مشاركة التطبيقات ونشرها على سحابات عامة أو خاصة. والأهم من ذلك، توفر التوافق الذي يساعد فرق العمليات والتطوير في تبسيط عملية نشر التطبيق على عدة منصات.
</p>

<p>
	كما تتيح الحاويات مجموعة مشتركة من اللبنات الأساسية building blocks التي يمكن أن يعاد استخدامها في أي من مراحل التطوير لإنشاء بيئات مطابقة بغرض التطوير والاختبار والتجميع والإنتاج، موسعةً بذلك مفهوم "اكتب مرةً واحدةً، وطبق حيثما شئت".
</p>

<p>
	تبسِّط الحاويات عملية تحقيق المرونة والتوافق والقدرة على نشر التطبيقات بسرعة مقارنةً بالبيئات الافتراضية، وهذا هو جوهر العمليات والتطوير.
</p>

<h2>
	عامل Docker
</h2>

<p>
	أصبح <a href="https://academy.hsoub.com/devops/cloud-computing/docker/#:~:text=%D9%8A%D8%B9%D8%AF%20%D8%AF%D9%88%D9%83%D8%B1%20%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D9%8B%D8%A7%20%D9%8A%D8%A8%D8%B3%D9%91%D8%B7%20%D8%A5%D8%AF%D8%A7%D8%B1%D8%A9,%D8%A7%D8%B9%D8%AA%D9%85%D8%A7%D8%AF%D9%8B%D8%A7%20%D8%B9%D9%84%D9%89%20%D9%86%D8%B8%D8%A7%D9%85%20%D8%AA%D8%B4%D8%BA%D9%8A%D9%84%20%D8%A7%D9%84%D9%85%D8%B6%D9%8A%D9%8" rel="">دوكر Docker</a> مترادفًا مع الحاويات، إذ أنه أحدث ثورةً في عالم الحاويات وعمّمها، رغم أن تقنية الحاويات كانت موجودةً قبل ظهور دوكر. فقد كانت تستخدم مثلًا في تجزئات حجم العمل Workload partitions من AIX وحاويات سولاريس Solaris، <a href="https://academy.hsoub.com/devops/servers/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%AD%D8%A7%D9%88%D9%8A%D8%A7%D8%AA-%D9%84%D9%8A%D9%86%D9%83%D8%B3-lxc-r219/" rel="">وحاويات لينوكس LXC</a> التي أنشئت لتشغيل عدة بيئات تعمل بنظام تشغيل لينوكس على مضيف واحد يعمل بنظام تشغيل لينوكس أيضًا.
</p>

<h2>
	تأثير نظام Kubernetes
</h2>

<p>
	يشتهر نظام <a href="https://academy.hsoub.com/devops/cloud-computing/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-kubernetes-r467/" rel="">كوبيرنيتيس Kubernetes</a> بأنه المحرك الموجّه الرائد. أوجدت شعبية نظام كوبيرنيتيس مصحوبةً بالاعتماد المتزايد على الحاويات السيناريو النموذجي لفرق العمليات والتطوير والأمن لتبني البيئة المتغيرة.
</p>

<p>
	يوفر نظام كوبيرنيتيس نهجًا شاملًا لإدارة الحاويات. يمكنه تشغيل الحاويات عبر عنقود cluster لتفعيل خصائص مثل التوسيع التلقائي للموارد السحابية، الذي يشمل متطلبات التطبيقات التي توجهها الأحداث، بأسلوب مؤتمت وتوزيعي. وإن هذا يضمن التوافر العالي high availability "مجانًا" (إذ لا يبذل المطورون أو مدراء النظام أي جهود إضافية لتحقيقه). تسهِّل أنظمة مثل أوبين شيفت وكوبيرنيتيس اعتماد الحاويات.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="84568" href="https://academy.hsoub.com/uploads/monthly_2021_12/003container-101-image.png.676c4373a2cb8904c2dfcd9a06def7b9.png" rel=""><img alt="003container-101-image.png" class="ipsImage ipsImage_thumbnailed" data-fileid="84568" data-unique="k2ttoegdt" src="https://academy.hsoub.com/uploads/monthly_2021_12/003container-101-image.thumb.png.7f14c8516be0685428617f8084718314.png" style="width: 650px; height: auto;"></a>
</p>

<h2>
	هل ستستبدل الحاويات الآلات الافتراضية؟
</h2>

<p>
	تبشِّر مشاريع مثل <a href="https://kubevirt.io/" rel="external nofollow">كوبي فيرت KubeVirt</a> ومشاريع مشابهة <a href="https://opensource.com/resources/what-open-source" rel="external nofollow">مفتوحة المصدر</a> بأن الحاويات ستحل محل الآلات الافتراضية. إذ أن مشروع كوبي فيرت يبدل سير عمل الآلات الافتراضية إلى سير عمل الاحتواء من خلال تحويل الآلات الافتراضية إلى حاويات، لتكتسب مزايا التطبيقات التي تحتويها الحاويات.
</p>

<p>
	تعمل حاليًا الحاويات والآلات الافتراضية كحلول مكملة لبعضها وليس كتقنيات متنافسة. إذ تعمل الحاويات فوق الآلات الافتراضية لزيادة التوفر، وخاصةً للتطبيقات التي يجب أن تكون مستقرة، وتستفيد من تقنية البيئة الافتراضية التي تسهِّل إدارة بنية العتاد الصلب (مثل التخزين والربط الشبكي) اللازمة لدعم الحاويات.
</p>

<h2>
	ماذا عن الحاويات بنظام تشغيل ويندوز؟
</h2>

<p>
	تبذل شركة مايكروسوفت والمجتمع مفتوح المصدر جهودًا كبيرةً لإنجاح الحاويات بنظام التشغيل ويندوز. سرَّعت مشغلات كوبيرنيتيس اعتماد الحاويات التي تعمل على ويندوز، وتتيح منتجات مثل أوبين شيفت openshift خدمة <a href="https://www.openshift.com/blog/announcing-the-community-windows-machine-config-operator-on-openshift-4.6" rel="external nofollow">Windows worker nodes</a> لتشغيل حاويات <a href="https://academy.hsoub.com/files/24-%D8%A3%D9%86%D8%B8%D9%85%D8%A9-%D8%A7%D9%84%D8%AA%D8%B4%D8%BA%D9%8A%D9%84-%D9%84%D9%84%D9%85%D8%A8%D8%B1%D9%85%D8%AC%D9%8A%D9%86/" rel="">بنظام تشغيل</a> ويندوز.
</p>

<p>
	يوفر الاحتواء المبني على نظام التشغيل ويندوز الكثير من الفرص المغرية، خاصةً للمؤسسات ذات البيئات المختلطة. تعد القدرة على تشغيل أهم تطبيقاتك على عنقود كوبيرنيتيس Kubernetes cluster تقدمًا مهمًا في مسيرة بناء بيئة سحابية هجينة أو متعددة.
</p>

<h2>
	مستقبل الحاويات
</h2>

<p>
	تؤدي الحاويات دورًا هامًا في بيئة تكنولوجيا المعلومات المتغيرة لأن المؤسسات تتجه نحو اتباع نهج في تنفيذ التطبيقات وتقديم الحلول يتصف بالسرعة والخفة لتتفوق على منافسيها.
</p>

<p>
	ستكون الحاويات حلًا طويل الأمد إذ ستظهر في المستقبل القريب العاجل حالات استخدام أخرى لها، مثل <a href="https://academy.hsoub.com/devops/cloud-computing/%D8%B3%D8%A8%D8%B9-%D9%85%D9%86%D8%B5%D8%A7%D8%AA-%D9%85%D9%81%D8%AA%D9%88%D8%AD%D8%A9-%D8%A7%D9%84%D9%85%D8%B5%D8%AF%D8%B1-%D9%84%D9%84%D8%A8%D8%AF%D8%A1-%D9%81%D9%8A-%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%A7%D9%84%D8%AD%D9%88%D8%B3%D8%A8%D8%A9-%D8%AE%D9%81%D9%8A%D8%A9-%D8%A7%D9%84%D8%AE%D9%88%D8%A7%D8%AF%D9%85-serverless-r408/" rel="">الحوسبة الحدّية خفية الخوادم serverless on the edge</a>، وستغير طريقة تفكيرنا في سرعة نقل المعلومات من وإلى الأجهزة الرقمية. والطريقة الوحيدة للصمود في ظل هذه التغييرات هي التكيف معها.
</p>

<p>
	ترجمة -وبتصرف- للمقال <a href="https://opensource.com/article/20/12/containers-101" rel="external nofollow">‎6 container concepts you need to understand</a> لصاحبه Mike Calizo.
</p>

<h2>
	اقرأ أيضًا
</h2>

<ul>
<li>
		<a href="https://academy.hsoub.com/devops/cloud-computing/docker/%d9%86%d8%b8%d8%b1%d8%a9-%d8%b9%d8%a7%d9%85%d9%91%d8%a9-%d8%b9%d9%84%d9%89-%d8%a5%d8%b9%d8%af%d8%a7%d8%af-%d8%a7%d9%84%d8%ad%d8%a7%d9%88%d9%8a%d9%91%d8%a7%d8%aa-containerization-%d8%b9%d9%84%d9%89-docker-r23/" rel="">نظرة عامّة على إعداد الحاويّات containerization على Docker</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/cloud-computing/docker/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D9%85%D8%B4%D8%A7%D8%B1%D9%83%D8%A9-%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-%D8%A8%D9%8A%D9%86-%D8%AD%D8%A7%D9%88%D9%8A%D8%A7%D8%AA-docker-r317/" rel="">كيفية مشاركة البيانات بين حاويات Docker</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/cloud-computing/docker/%D8%AB%D9%84%D8%A7%D8%AB-%D9%86%D8%B5%D8%A7%D8%A6%D8%AD-%D9%84%D8%AA%D8%B3%D9%85%D9%8A%D8%A9-%D8%AD%D8%A7%D9%88%D9%8A%D8%A7%D8%AA-docker-r311/" rel="">ثلاث نصائح لتسمية حاويات Docker</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">561</guid><pubDate>Sun, 05 Dec 2021 17:00:00 +0000</pubDate></item><item><title>&#x645;&#x62F;&#x62E;&#x644; &#x625;&#x644;&#x649; Helm: &#x645;&#x62F;&#x64A;&#x631; &#x62D;&#x632;&#x645; Kubernetes</title><link>https://academy.hsoub.com/devops/cloud-computing/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-helm-%D9%85%D8%AF%D9%8A%D8%B1-%D8%AD%D8%B2%D9%85-kubernetes-r470/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2020_05/5eb55d51d8add_06--An-Introduction-to-Helm-the-Package-Manager-for-Kubernetes.jpg.0ebf1dbfba26728a9f33d5ca1ed802c0.jpg" /></p>

<p>
	يمكن أن يكون نشر التطبيقات في Kubernetes، نظام تنسيق الحاويات القوي والشائع، أمرًا معقدا. قد يتضمن إعداد تطبيق واحد إنشاء التعامل مع موارد Kubernetes المترابطة، مثل كائنات Pod، والخدمات وعمليات النشر والنسخ المتماثلة، يتطلب كل منها كتابة ملف YAML مفصل.
</p>

<p>
	<a href="https://www.helm.sh/" rel="external nofollow">Helm</a> هو مدير حزم يسمح للمطورين والمشغلين بتحزيم التطبيقات والخدمات وإعدادها ونشرها على عناقيد Kubernetes بسهولة أكبر؛ وهو الآن مشروع رسمي من مشاريع منصة Kubernetes الرسمية، ويمثّل جزءًا من مؤسسة الحوسبة السحابية الأصيلة (<a href="https://www.cncf.io/" rel="external nofollow">Cloud Native Computing Foundation</a>)، وهي مؤسسة غير ربحية تدعم المشاريع مفتوحة المصدر التي تشكّل جزءًا من النظام البيئي لمنصة Kubernetes، والمشاريع التي تدور حولها.
</p>

<p>
	سنقدم في هذ المقال نظرة عامة على Helm والتجريدات المختلفة التي يستخدمها لتبسيط نشر التطبيقات في Kubernetes. إذا كنت جديدًا على Kubernetes، فقد يكون من المفيد قراءة مقدمة عن Kubernetes أولاً للتعرف على المفاهيم الأساسية.
</p>

<h3>
	نظرة عامة على Helm
</h3>

<p>
	تحوي غالبية لغات البرمجة وأنظمة التشغيل على مدير حزم خاص بها للمساعدة في تثبيت البرامج وصيانتها. يقدّم Helm مجموعة الميزات الأساسية نفسها التي يقدّمها الكثير من مديري الحزم المشهورين مثل <code>apt</code> في توزيعة دبيان و <code>pip</code> في بيئة تطوير بايثون.
</p>

<p>
	يستطيع Helm:
</p>

<ul>
<li>
		تثبيت البرامج.
	</li>
	<li>
		تثبيت اعتماديّات البرامج تلقائيا.
	</li>
	<li>
		ترقية البرامج.
	</li>
	<li>
		إعداد عمليات نشر البرامج.
	</li>
	<li>
		إحضار حزم البرامج من المستودعات.
	</li>
</ul>
<p>
	يوفر Helm هذه الوظائف من خلال المكونات التالية:
</p>

<ul>
<li>
		أداة سطر الأوامر، <code>helm</code>، التي توفر واجهة مستخدم لجميع وظائف Helm.
	</li>
	<li>
		مكوّن مرافق للخادم، <code>tiller</code>، يعمل على عنقود Kubernetes الخاصة بك، ويستمع إلى الأوامر من <code>helm</code>، ويتعامل مع إعدادات إصدارات البرامج وعمليّات نشرها على عنقود Kubernetes.
	</li>
	<li>
		صيغة تحزيم خاصّة بمدير الحزم Helm، وتسمى <em>charts</em>.
	</li>
	<li>
		<a href="https://github.com/helm/charts" rel="external nofollow">مستودع رسمي لحزم Charts</a>، مع حزم جاهزة لمشاريع برمجية مفتوحة المصدر شائعة.
	</li>
</ul>
<p>
	سنحقق في تنسيق الحزم بمزيد من التفاصيل بعد ذلك. سنفصّل في ما يلي حول صيغة التحزيم Charts.
</p>

<h3>
	صيغة التحزيم Charts
</h3>

<p>
	يُطلَق على حزم Helm اسم Charts، وتتكون من عدد قليل من ملفات الإعداد المكتوبة بلغة YAML وبعض القوالب التي تُصيَّر (Rendered) ضمن ملف التبيان (Manifest file) في Kubernetes. في ما يلي البنية القاعدية لمجلّد حزمة بصيغة Chart:
</p>

<pre class="ipsCode">
package-name/
  charts/
  templates/
  Chart.yaml
  LICENSE
  README.md
  requirements.yaml
  values.yaml
</pre>

<p>
	هذه المجلدات والملفات لها الوظائف التالية:
</p>

<ul>
<li>
		<strong>/charts:</strong> يمكن وضع اعتماديّات الحزم المُدارة يدويًا في هذا المجلد، على الرغم من أنه من الأفضل عادةً استخدام <code>requirements.yaml</code> لربط الاعتماديّات بالحزمة ديناميكيّا.
	</li>
	<li>
		<strong>/templates:</strong> يحتوي هذا المجلد على ملفات القوالب التي تُدمَج مع قيم الإعداد (من ملف <code>values.yaml</code> وسطر الأوامر) وتُصيّر ضمن ملفّات تبيان Kubernetes. تستخدم القوالب <a href="https://golang.org/pkg/text/template" rel="external nofollow">تنسيق القوالب في لغة برمجة Go</a>.
	</li>
	<li>
		<strong>Chart.yaml:</strong> ملف YAML يحتوي على بيانات وصفية حول الحزم، مثل اسم الحزمة وإصدارها، ومعلومات المشرف، وموقع الويب ذي الصلة، والكلمات الرئيسية للبحث.
	</li>
	<li>
		<strong>LICENSE:</strong> ترخيص نص عادي للحزمة.
	</li>
	<li>
		<strong>README.md:</strong> ملف تمهيدي يحتوي على معلومات لمستخدمي الحزمة.
	</li>
	<li>
		<strong>requirements.yaml:</strong> ملف YAML يسرد اعتماديّات الحزمة.
	</li>
	<li>
		<strong>values.yaml:</strong> ملف YAML بقيم الإعدادات الافتراضية للحزمة.
	</li>
</ul>
<p>
	يمكن للأمر <code>helm</code> تثبيت حزمة من مُجلد محلي، أو من مجلّد بالبنية أعلاه مضغوط ضمن ملف <code>tar.gz.</code>. يمكن أيضًا تنزيل هذه الحزم وتثبيتها تلقائيًا من مستودعات حزم Helm.
</p>

<p>
	سنلقي في ما يلي نظرة على مستودعات حزم Helm.
</p>

<h3>
	مستودعات الحزم
</h3>

<p>
	يتمثّل مستودع حزم Helm في موقع ويب بسيط يقدّم ملفّ <code>index.yaml</code> وحزمة Helm مضغوطة في ملف<code>tar.gz.</code> . يحتوي الأمر <code>helm</code> على خيارات متاحة للمساعدة في التحزيم بصيغة Helm وإنشاء ملف <code>index.yaml</code> المطلوب. يمكن تقديم هذه الملفات بواسطة أي خادم ويب أو خدمة تخزين أو مضيف مواقع ثابتة مثل صفحات GitHub.
</p>

<p>
	يأتي Helm مهيأ مسبقًا بمستودع حزم مبدئي، يوصف بأنه مستقر (<strong>stable</strong>). يشير هذا المستودع إلى مجموعة تخزين Google على الرابط <code><a href="https://kubernetes-charts.storage.googleapis.com" ipsnoembed="false" rel="external nofollow">https://kubernetes-charts.storage.googleapis.com</a></code>. يمكن العثور على مصدر المستودع المستقر على مستودع Git <a href="https://github.com/helm/charts/tree/master/stable" rel="external nofollow">التالي</a>.
</p>

<p>
	يمكن إضافة مستودعات بديلة باستخدام الأمر <code>helm repo add</code>. في ما يلي مستودعات بديلة شائعة:
</p>

<ul>
<li>
		<a href="https://github.com/helm/charts/tree/master/incubator" rel="external nofollow">مستودع <strong>incubator</strong> الرسمي</a> الذي يحتوي على حزم غير جاهزة بعد لتكون ضمن المستودع المستقر. يمكن العثور على تعليمات استخدام Incubator في صفحة Github <a href="https://github.com/helm/charts" rel="external nofollow">التالية</a>.
	</li>
	<li>
		<a href="https://bitnami.com/stacks/helm" rel="external nofollow">مستودع Bitnami</a> الذي يوفر حزمًا غير متوفّرة في المستودع الرسمي المستقر.
	</li>
</ul>
<p>
	سواء كنت تثبّت حزمة طوّرتها محليًا، أو حصلت عليها من مستودع، فستحتاج إلى تهيئتها لإعداداتك الخاصة، وهو ما سننظر فيه الفقرة التالية
</p>

<h3>
	إعداد حزم Helm
</h3>

<p>
	عادةً ما تأتي حزم Helm بقيم الإعدادات الافتراضية في ملف <code>values.yaml</code>. قد تكون بعض التطبيقات قابلة للنشر كاملةً باستخدام القيم الافتراضية، ولكن ستحتاج عادةً إلى إعادة تعيين قيم لتلبية احتياجاتك.
</p>

<p>
	يحدّد مطوّر الحزمة القيم التي تمكن إعادة تعيينها. تُستخدم بعض القيم لإعداد وظائف Kubernetes، في حين تُمرَّر أخرى عبر الحاويّة لإعداد التطبيق نفسه.
</p>

<p>
	فيما يلي مقتطف من مثال لملف قيم:
</p>

<pre class="ipsCode">
service:
  type: ClusterIP
  port: 3306
</pre>

<p>
	هذه خيارات لإعداد مورد خدمة Kubernetes. يمكنك استخدام <code>helm inspect values chart-name</code> لتفريغ كل قيم الإعداد المتاحة للحزمة.
</p>

<p>
	يمكن تجاوز هذه القيم عن طريق كتابة ملف YAML خاص بك واستخدامه عند تشغيل الأمر <code>helm install</code>، أو من خلال تعيين الخيارات فرديًّا في سطر الأوامر مع الخيار <code>set--</code>. ما عليك سوى تحديد تلك القيم التي تريد تغييرها من الإعدادات الافتراضية.
</p>

<p>
	تُسمى حزم Helm المنشورة بإعداد معين بالإصدار (<em>release</em>).
</p>

<h3>
	الإصدارات
</h3>

<p>
	أثناء تثبيت الحزمة، يجمع Helm بين القوالب والإعدادات المُخصّصة من طرف المستخدم والقيم الافتراضية في <code>value.yaml</code>. تُحوّل تلك الإعدادات إلى ملف Manifest في Kubernetes تُنشَر بعد ذلك عبر واجهة تطبيقات Kubernetes. ينتج عن ذلك إنشاء إصدار، وهو إعداد ونشر محدّديْن لحزمة معينة.
</p>

<p>
	مفهوم الإصدارات هذا مهم، لأنك قد ترغب في نشر التطبيق نفسه أكثر من مرة على عنقود. على سبيل المثال، قد تحتاج إلى عدة خوادم MySQL بإعدادات مختلفة.
</p>

<p>
	قد ترغب أيضًا في ترقية نظائر مختلفة من الحزمة فرديّا. ربما يكون تطبيق جاهزًا لخادم MySQL مُحدَّث ولكن تطبيقًا آخر ليس كذلك. باستخدام Helm، يمكنك ترقية كل إصدار على حدة.
</p>

<p>
	يمكنك ترقية إصدار لأن الحزمة الخاصة به مُحدّثة، أو لأنك ترغب في تحديث إعدادات الإصدار. في كلتا الحالتين، ستُنشئ كل ترقية <strong>مراجعة</strong> جديدة للإصدار، وسيسمح لك Helm بالعودة بسهولة إلى المراجعات السابقة في حالة وجود مشكلة.
</p>

<h3>
	إنشاء الحزم
</h3>

<p>
	إذا لم تتمكن من العثور على حزمة موجود للبرنامج الذي تنشره، فقد ترغب في إنشاء الحزمة الخاص بك. يمكن لمدير الحزم Helm إنشاء بنية جاهزة لمجلد الحزمة باستخدام الأمر <code>helm create chart-name</code>. سيؤدي هذا إلى إنشاء مجلد يحتوي على الملفات والمجلدات التي ناقشناها في قسم ضيغة التحزيم أعلاه.
</p>

<p>
	من هناك، ستحتاج إلى ملء البيانات الوصفية للحزمة الخاصة بك في <code>Chart.yaml</code> ووضع ملفات تبيان Kubernetes في مجلد <code>templates</code>. ستحتاج بعد ذلك إلى استخلاص متغيرات الإعداد المناسبة من ملفات التبيان إلى ملف القيم <code>values.yaml</code>، ثم تضمينها مرة أخرى في ملفات التبيان باستخدام <a href="https://golang.org/pkg/text/template" rel="external nofollow">نظام القوالب</a>.
</p>

<p>
	يحتوي الأمر <code>helm</code> على العديد من الخيارات المتاحة لمساعدتك في إنشاء حزم Helm واختبارها وتقديمها. لمزيد من المعلومات، يرجى قراءة <a href="https://docs.helm.sh/developing_charts" rel="external nofollow">وثائق Helm الرسمية حول تطوير الحزم.</a>
</p>

<h3>
	خاتمة
</h3>

<p>
	في هذا المقال استعرضنا Helm، مدير حزم Kubernetes. ألقينا نظرة عامة على هندسة Helm، ومكوناته helm و tiller، وفصّلنا صيغة حزم Helm، وألقينا نظرة على مستودعات الحزم. تطرّقنا كذلك إلى كيفية إعداد حزم Helm، وكيف تُدمَج الإعدادات والحزم وتُنشَر كإصدارات على عناقيد Kubernetes. أخيرًا، تطرقنا إلى أساسيات إنشاء حزمة في حالة عدم توفر حزمة مناسب بالفعل.
</p>

<p>
	لمزيد من المعلومات حول Helm ، ألق نظرة على <a href="https://docs.helm.sh/" rel="external nofollow">وثائق Helm الرسمية</a>. تحقق من مستودع <a href="https://github.com/helm/charts" rel="external nofollow">helm/charts</a> على Github للعثور على الحزم الرسمية.
</p>

<p>
	ترجمة - وبتصرّف - للمقال <a href="https://www.digitalocean.com/community/tutorials/an-introduction-to-helm-the-package-manager-for-kubernetes" rel="external nofollow">An Introduction to Helm, the Package Manager for Kubernetes</a> لصاحبه <a href="https://www.digitalocean.com/community/users/bboucheron" rel="external nofollow">Brian Boucheron</a>.
</p>
]]></description><guid isPermaLink="false">470</guid><pubDate>Fri, 08 May 2020 13:26:39 +0000</pubDate></item></channel></rss>
