- يعمل Docker Compose على تبسيط البيئات المحلية والاختبار؛ بينما ينظم Kubernetes أحمال العمل على نطاق واسع باستخدام التوسع التلقائي والتحديثات المتجددة والشفاء الذاتي.
- يعمل Compose على مضيف واحد ومع Docker؛ ويدعم K8s أوقات تشغيل متعددة ومجموعات متعددة العقد ونشر سحابي.
- يعمل Kompose على تسريع عملية الانتقال من Compose إلى Kubernetes؛ فهو يدعم مقدمي الخدمة والكائنات البديلة والعلامات لضبط الخدمات.
- حالات الاستخدام: Compose لـ dev/CI؛ وKubernetes للإنتاج، وإنترنت الأشياء/الحافة، والبيانات الضخمة/التعلم الآلي، وسيناريوهات السحابة المتعددة/الهجينة.
إذا كنت تعمل مع الحاويات، فسيتبادر إلى ذهنك عاجلاً أم آجلاً السؤال الأهم: Docker Compose أم Kubernetes؟ تُستخدم كلتا الأداتين في دورة حياة التطبيقات المُحاوية ، لكنهما ليستا مصممتين لحل نفس المشكلات أو في نفس السياق. في هذه المقالة، نقارن بينهما بتعمق، مع أمثلة عملية وسيناريوهات واقعية ونصائح للانتقال السلس بينهما.
وبعيدًا عن المظاهر التقنية، يؤثر هذا القرار على العمليات اليومية: أوقات النشر، وقابلية التوسع ، والمرونة، والأمان، والتكاليف . كما يؤثر على حالات استخدام هندسة البيانات النموذجية - خطوط الأنابيب، وقواعد البيانات، والبث، والمعالجة الدفعية، وتنسيقات البيانات، والحوكمة - حيث يُحدث التنسيق فرقًا كبيرًا في الإنتاجية.
ما هو Docker وDocker Compose (وما هي وظيفتهما الحقيقية)؟
عندما نتحدث عن Docker، فإننا نتحدث في الواقع عن نظام بيئي: Docker Engine وDocker Hub وDockerfile وDocker Compose ... يقوم المحرك بإنشاء وتشغيل الحاويات من الصور؛ ويسهل Hub مشاركتها؛ ويسمح لك Compose بتحديد عدة أجزاء من المكدس في ملف YAML لتشغيلها بأمر واحد.
تم تصميم Compose لتوفير عناء كتابة عدد لا نهائي من البرامج النصية والأوامر المنفصلة. باستخدام ملف docker-compose.yml واحد، يمكنك وصف الخدمات والشبكات ووحدات التخزين ، وتشغيل كل شيء بأمر واحد "docker compose up" (أو "docker-compose up" في الإصدار الأول). مثالي للتطوير المحلي، والاختبار المتكامل، والعروض التوضيحية، وبيئات التكامل المستمر.
قد يكون المثال النموذجي لـ Compose هو هذا المثال، مع واجهة برمجة تطبيقات وقاعدة بيانات Postgres. لاحظ كيف يتم تعريف التبعيات والمتغيرات والمنافذ في كتلة قابلة للقراءة:
version: '3.8'
services:
db:
image: postgres:latest
restart: always
environment:
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
- POSTGRES_DB=postgres
ports:
- '5432:5432'
volumes:
- db:/var/lib/postgresql/data
networks:
- mynet
my-api:
container_name: my-api
build:
context: ./
image: my-api
depends_on:
- db
ports:
- '8080:8080'
environment:
DB_HOST: db
DB_PORT: 5432
DB_USER: postgres
DB_PASSWORD: postgres
DB_NAME: postgres
networks:
- mynet
networks:
mynet:
driver: bridge
volumes:
db:
driver: local
لتوسيع نطاق الخدمة يدويًا في Compose، يمكنك استخدام خيار التوسيع الخاص بالخدمة. في Compose V2، من الشائع القيام بذلك باستخدام الأمر `up --scale` (في الإصدار V1 كان هناك الأمر `docker-compose scale`).
docker compose up -d --scale my-api=3
احذر من القيود: تم تصميم Compose لمضيف واحد ، فهو لا يقوم بموازنة الحمل بين العقد أو التوسع التلقائي، وعادة ما تكون التحديثات عبارة عن عمليات إعادة إنشاء يدوية للحاويات باستخدام "build" و "up -d".
ما هو Kubernetes وماذا يقدم عبر Compose؟
Kubernetes (K8s) عبارة عن منصة لتنسيق الحاويات الموزعة. وهي تدير عمليات النشر على نطاق واسع عبر مجموعات متعددة العقد ، مع مفاهيم مثل Pods و Deployments و Services لتشغيل أحمال العمل الإنتاجية.
في Kubernetes، لا تُدار الحاويات بشكل فردي، بل تُدار وحدات Pod (التي قد تحتوي على حاوية واحدة أو أكثر). يقوم مستوى التحكم بجدولة مكان تشغيل كل وحدة Pod ، وعرض الخدمات، وتوزيع حركة البيانات، والتوسع الأفقي، ومراقبة حالة أحمال العمل.
قد يبدو النشر الأساسي على النحو التالي، مع 3 نسخ متماثلة من خدمة الويب. حدد القوالب والتسميات والمنافذ المكشوفة :
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-deployment
spec:
replicas: 3
selector:
matchLabels:
app: web
template:
metadata:
labels:
app: web
spec:
containers:
- name: web
image: my-web-image
ports:
- containerPort: 8000
لتحقيق توازن الأحمال، تُعد خدمة موازنة الأحمال شائعة في الحوسبة السحابية. يقوم المُحدِّد بمطابقة تصنيفات وحدة التشغيل لتوجيه حركة البيانات.
apiVersion: v1
kind: Service
metadata:
name: web-service
spec:
selector:
app: web
ports:
- protocol: TCP
port: 80
targetPort: 8000
type: LoadBalancer
في بيئة الإنتاج، يتألق نظام Kubernetes بقدرات مثل الأتمتة عالية الأداء (HPA)، والتحديثات المتدرجة، والاسترداد الذاتي. وتقوم الأتمتة عالية الأداء بتعديل النسخ المتماثلة بناءً على المقاييس (مثل استخدام وحدة المعالجة المركزية).
apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
name: web-hpa
spec:
minReplicas: 1
maxReplicas: 10
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: web-deployment
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 50
تتم مراقبة سلامة الحاويات باستخدام المجسات؛ وفي حال تعطلها، يقوم نظام Kubernetes بإعادة تشغيل الحاوية. هذا هو أساس "الإصلاح الذاتي".
apiVersion: v1
kind: Pod
metadata:
name: web-pod
spec:
containers:
- name: web
image: my-web-image
ports:
- containerPort: 8000
livenessProbe:
httpGet:
path: /healthcheck
port: 8000
initialDelaySeconds: 15
periodSeconds: 15

أوجه التشابه والاختلاف الرئيسية (الأساسيات دون لف ودوران)
القاسم المشترك بينهما: أنهما يعملان مع الحاويات ويحددان عمليات النشر عبر YAML. كلا الحلين مفيدان للمطورين والمشغلين ، ويكملان بعضهما البعض بشكل ممتاز في سير عمل التطوير والإنتاج.
يكمن الاختلاف الجوهري في النطاق: Compose يركز على Docker ومضيف واحد ؛ يدعم Kubernetes أوقات تشغيل متعددة ومجموعات متعددة العقد، مع التكامل المباشر في السحابات والخدمات المُدارة.
من أهم الفروقات: يوفر Kubernetes ميزة التوسع التلقائي، والتحديثات المتدرجة، والإصلاح الذاتي ؛ بينما لا يوفرها Compose. يُجرّد Kubernetes العمليات باستخدام Pods؛ بينما يتفاعل Compose مباشرةً مع حاويات Docker.
علاوة على ذلك، يتضمن Kubernetes وظائف Jobs وCronJobs لتنفيذ المهام الفردية أو المجدولة. وهذا يجنبنا استخدام وظائف cron النظامية والعمليات الإضافية المعبأة في حاويات ، مما يجعل المنصة المكان الأمثل لتعريف عمليات الأتمتة.
في بيئات التشغيل المحلية، يتفوق Compose من حيث السرعة والسهولة. أما بالنسبة للتوسع إلى مئات العُقد أو بيئات الحوسبة السحابية المتعددة، فإن Kubernetes هو الخيار الأمثل . صحيح أن Compose يستفيد من Docker Swarm لنشر التطبيقات على عدة مضيفين، إلا أن معدل انتشاره وقدراته لا تضاهي نضج نظام Kubernetes البيئي.
لماذا تحتاج إلى التنسيق (ومتى يناسب كل منها بشكل أفضل)
يوفر لك المنسق الجيد ما يلي: توفير ونشر موحد، وبدء تشغيل مجدول، واتصال بين الخدمات ، وموازنة الأحمال، وأمان إضافي من خلال إدارة إضافية لكل خدمة.
يُغطي Compose الأساسيات بطريقة مُبسطة وواضحة، مما يجعله أداة رائعة للتطوير والاختبار والعروض التوضيحية. ومع ذلك، تظهر قيوده عند الحاجة إلى عُقد متعددة، أو موازنة الأحمال الأصلية والتوسع التلقائي ، أو عمليات النشر التدريجي دون توقف.
من ناحية أخرى، فإن Kubernetes هو "المنصة" عندما يزداد الحمل: متعدد العقد، والتوسع التلقائي، والتوافر العالي، ونظام بيئي ضخم ، مع دعم أصلي على AWS وAzure وGCP وخيارات مُدارة.
حالات الاستخدام في العالم الحقيقي (التطوير والبيانات والمزيد)
يتألق Compose في: بيئات محلية قابلة للتكرار، واختبارات شاملة، والتكامل المستمر/التسليم المستمر، والتدريب . إن تعريف البنية الكاملة في YAML وتشغيلها بأمر واحد يقلل من التعقيدات بشكل كبير.
يُعدّ Kubernetes مثاليًا لتطبيقات الإنتاج، وإنترنت الأشياء والحوسبة الطرفية، والبيانات الضخمة والتعلم الآلي ، وبيئات الحوسبة السحابية المتعددة/الهجينة. فهو يدير أحمال العمل الموزعة حيث تُعدّ سرعة الاستجابة والمرونة وقابلية المراقبة أمورًا بالغة الأهمية.
في هندسة البيانات، يعتبر K8s مثاليًا لخطوط أنابيب البث والدفعات وقواعد البيانات وقوائم الانتظار ومحركات التحليل ، مع التحكم في موارد كل وحدة والتوسع التلقائي عند ذروة الاستخدام.
إذا كان مشروعك صغيرًا ويتسع لخادم واحد، فإن Compose سيفي بالغرض دون أي عناء. ولكن عندما يكبر عدد المستخدمين وتحتاج إلى قدرة عالية على تحمل الأعطال وموازنة الأحمال ، فقد حان الوقت للنظر في Kubernetes.
الشبكات والتوسع والترقيات: مقارنة عملية
يُنشئ Compose شبكة لكل مشروع ويُحلّل أسماء النطاقات لكل خدمة. يُعدّ التواصل مع الحاويات سهلاً وآمناً داخل المشروع ، لكن موازنة الأحمال الخارجية والاستضافة المتعددة ليستا من الميزات الأساسية.
في Kubernetes، توفر الخدمات اكتشاف DNS وموازنة الأحمال داخل المجموعة؛ أما بالنسبة للخارج، فيمكنك استخدام LoadBalancer أو NodePort أو Ingress لتوجيه حركة مرور HTTP/S.
التوسع: يتوسع Compose يدويًا وعلى مضيف واحد فقط. أما Kubernetes فيتوسع أفقيًا باستخدام HPA وبرمجيًا باستخدام المقاييس و/أو الأحداث. ويمكنه أيضًا التوسع إلى المزيد من العُقد إذا سمحت بذلك المجموعة.
التحديثات: في Compose، عادةً ما تتم هذه التحديثات يدويًا. أما K8s فيُجري تحديثات متدرجة مع التحكم في التقدم (kubectl rollout) وإمكانية التراجع في حال حدوث خطأ ما، مما يقلل من التأثير.
خاصية الإصلاح الذاتي: يستطيع Compose إعادة تشغيل الحاويات، لكنه لا يحل مشكلات تعطل المضيف أو وقت التشغيل. يقوم Kubernetes بنقل وحدات Pod إلى عقد سليمة ، بشكل شفاف للمستخدمين.
إنتاجية المطور والخبرة التشغيلية
Compose عبارة عن طبقة رقيقة فوق Docker. من السهل تعلمها، وحلقة التغذية الراجعة فيها فورية ، مما يجعلها مثالية للتكرار.
يُضيف Kubernetes مفاهيم جديدة (مثل Pods وDeployments وServices وIngress وConfigMaps وPVCs وغيرها). يتطلب الأمر بعض التعلم، ولكن في المقابل ستحصل على تحكم دقيق في عمليات النشر والأمان والمراقبة وقابلية التوسع.
من حيث التوافق، يعتمد Compose بشكل أساسي على Docker. يدعم Kubernetes بيئات تشغيل متنوعة ويتكامل مع مزودي الخدمات السحابية ، وهو أمر بالغ الأهمية للشركات التي تتبنى استراتيجيات متعددة السحابات أو هجينة.
الانتقال من Docker Compose إلى Kubernetes دون أي مشاكل
متى يجب الترحيل؟ عندما لا يكون تطبيقك "صغيرًا"، فأنت بحاجة إلى عقد متعددة، وقابلية للمراقبة، وقابلية للتوسع، وتوافر عالٍ ، أو عندما يُطلب منك إجراء عمليات نشر تجريبية (canary) وعمليات نشر زرقاء/خضراء.
التحديات النموذجية: رسم خريطة شبكة الخدمة، وتصميم التخزين باستخدام PV/PVC ، وفصل التكوين إلى ConfigMaps/Secrets، ومراجعة أنماط الصحة والاستعداد لكل حاوية.
كما يجب إعادة النظر في البنية: وحدة Pod كوحدة نشر ، وخدمات لعرض نقاط النهاية، وموارد لكل حاوية (وحدة المعالجة المركزية/الذاكرة) حتى يتمكن المجدول من القيام بعمله.
Kompose: من Compose إلى K8s في بضع خطوات
يقوم Kompose بتحويل ملفات docker-compose.yml إلى بيانات تعريف Kubernetes أو OpenShift. إنها الطريقة الأسهل والأكثر مباشرة لبدء عملية الترحيل دون الحاجة إلى إعادة كتابة جميع ملفات YAML يدويًا.
قبل البدء، ستحتاج إلى مجموعة Kubectl وتكوين kubectl. يُنصح باستخدام عقدتين عاملتين على الأقل (وليس عقد تحكم) إذا كنت تختبر أي شيء يعتمد على الحالة. تحقق من إصدارك باستخدام الأمر `kubectl version`.
التثبيت: الطريقة المُوصى بها هي تنزيل الملف التنفيذي من أحدث إصدار على GitHub. يمكنك أيضًا استخدام ملف مضغوط (tarball)، أو Homebrew على نظام macOS، أو الأمر "go get" (يستخدم هذا الخيار الأخير النسخة الرئيسية التي تتضمن تغييرات قيد التطوير).
التحويل الأساسي: انتقل إلى دليل docker-compose.yml وقم بتشغيل :
kompose convert
kubectl apply -f <archivos-generados>
يقوم Kompose بإنشاء عمليات النشر والخدمات افتراضيًا. عادةً ما يسرد السجل كل ملف تم إنشاؤه ، وبمجرد تطبيقه، سترى عمليات النشر والخدمات "التي تم إنشاؤها" في المجموعة.
الوصول: إذا كنت تستخدم Minikube، يمكنك بسهولة عرض الخدمات أو الاستعلام عنها. في السحابة، تحقق من "LoadBalancer Ingress" للحصول على عنوان IP العام لخدمة LoadBalancer؛ باستخدام NodePort، سيكون لديك منفذ مفتوح على العقد.
التنظيف: عند الانتهاء من الاختبار، قم بإزالة الموارد المُطبقة. حافظ على نظافة مجموعتك لتجنب التعارضات بين التكرارات.
خيارات Kompose المتقدمة (المزودون والكائنات والعلامات)
يدعم Kompose كلاً من Kubernetes وOpenShift. إذا لم تحدد "--provider"، فإنه يستخدم Kubernetes افتراضيًا . أما مع OpenShift، فيمكنه إنشاء ملفات DeploymentConfigs وImageStreams، وحتى ملفات BuildConfigs إذا كنت تستخدم توجيهات البناء.
كما يدعم البرنامج مخرجات متنوعة: JSON باستخدام الخيار "-j"، ووحدات التحكم في النسخ المتماثل، ومجموعات DaemonSets، ومخططات Helm . يتيح لك الخيار "--replicas" تغيير عدد النسخ المتماثلة في وحدات التحكم في النسخ المتماثل؛ أما بالنسبة لـ Helm، فهو يُنشئ بنية المخطط الأساسية.
تؤثر العلامات الخاصة بـ Kompose ضمن عملية الإنشاء على التحويل. على سبيل المثال، يمكنك تحديد نوع الخدمة أو ما إذا كنت تريد عرض نقطة نهاية من خلال Ingress/Route.
| ملصق | قيمنا |
|---|---|
| نوع الخدمة kompose | منفذ العقدة/عنوان المجموعة/موازن التحميل |
| كومبوز.سيرفيس.إكسبوكس | صحيح / اسم المضيف |
التفاصيل التي يجب مراعاتها: يتم تحويل الأسماء التي تحتوي على "_" إلى "-" (لا يسمح K8s بالشرطات السفلية) وإذا كانت الخدمة تستخدم وحدات تخزين، فإن استراتيجية النشر تتغير إلى "إعادة إنشاء" لتجنب التعارضات مع العديد من الكُتّاب.
يدعم Kompose إصدارات وملفات متعددة
يدعم Kompose الإصدارات 1 و2 و3 من Compose (مع دعم محدود للإصدارين 2.1 و3.2 نظرًا لطبيعتهما التجريبية). عند تمرير عدة ملفات docker-compose في آنٍ واحد، يتم دمجها ، وتُستبدل العناصر المشتركة بأحدث ملف، تمامًا كما هو الحال عند التجاوز.
أثناء عملية تحويل Kubernetes، ستظهر لك رسائل مثل "تحذير: إنشاء مفتاح غير مدعوم - جارٍ التجاهل" في حال وجود مفاتيح غير متوافقة. لا تقلق، ستتابع الأداة العمل بما هو مفهوم ، وستترك الباقي للتعديل اليدوي لاحقًا.
ما وراء Kompose: Move2Kube والهجرة اليدوية
إذا كنت بحاجة إلى مزيد من التحكم، فهناك أدوات مثل Move2Kube التي تحلل ملفات Compose الخاصة بك وتُنشئ عناصر Kubernetes أكثر دقة. تُعد هذه الأدوات مفيدة عندما ترغب في تكييف أنماط العمل أو القوالب من منصتك.
تُعدّ عملية الترحيل اليدوي إجراءً صحيحًا تمامًا، ويُنصح بها دائمًا تقريبًا بعد الترحيل الأولي. وتشمل الخطوات النموذجية ما يلي: تحويل الخدمات إلى Deployments/StatefulSets ، والشبكات إلى Services/Ingress، ووحدات التخزين إلى PV/PVC مع فئات التخزين.
مثال بسيط لتحويل خدمة Compose إلى Deployment قد يبدو كالتالي: نقل المنافذ والصورة والتسميات إلى قالب Pod:
# docker-compose.yml
version: '3'
services:
web:
build: .
ports:
- '8000:8000'
depends_on:
- db
# Kubernetes
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-deployment
spec:
replicas: 1
selector:
matchLabels:
app: web
template:
metadata:
labels:
app: web
spec:
containers:
- name: web
image: my-web-image
ports:
- containerPort: 8000
بالنسبة للحالة (قواعد البيانات، قوائم الانتظار)، ضع في اعتبارك استخدام StatefulSets وPersistentVolumes. ليس من الضروري وضع كل ما كان "مُدمجًا" في Compose في نفس Pod ؛ افصل المسؤوليات واستخدم الخدمات للتواصل بين المكونات.
سيناريوهات البيانات: البث والدفعات والحوكمة
في خطوط نقل البيانات المعقدة، يتناسب K8s تمامًا: وظائف لمعالجة الدفعات، ووظائف Cron للنوافذ الزمنية ، وعمليات نشر لواجهات برمجة التطبيقات، ومشغلين لأنظمة مثل Kafka أو Spark أو Flink.
بالنسبة للبث المباشر وقواعد البيانات، تُسهّل أدوات التشغيل والمخططات المجتمعية عملية الإطلاق. وتضمن شبكة Service Mesh والتحكم في الموارد زمن استجابة أكثر قابلية للتنبؤ ومستويات خدمة أكثر استقرارًا مقارنةً بحل المضيف الواحد.
في مجال إدارة البيانات وأمنها، يوفر Kubernetes مساحات أسماء وسياسات وتحكم RBAC لتدقيق البيئات وفصلها. وهذا يمثل ميزة عملية مقارنةً بالنهج المحلي لـ Compose.
أفضل الممارسات والحيل التشغيلية الصغيرة
في Compose: حافظ على ملف YAML صغيرًا ووحداتيًا ؛ استخدم متغيرات البيئة وملفات .env؛ وثّق المنافذ والتبعيات؛ واعكس في CI ما تقوم بتشغيله محليًا.
في Kubernetes: حدد طلبات/حدود وحدة المعالجة المركزية والذاكرة ، واستخدم فحوصات الجاهزية/الحيوية، وافصل التكوين إلى ConfigMaps/Secrets، وقم بتطبيق استراتيجيات النشر المناسبة لكل خدمة.
لتحديثات Kubeck: استخدم الأمرَين `kubectl set image` و`kubectl rollout status` لمراقبة التقدم والتراجع في حال حدوث أي خطأ. سيمنع هذا توقف الإنتاج.
إذا كنت بحاجة إلى مهام محددة في Compose، يمكنك محاكاتها، ولكن في Kubernetes يكون الأمر أنظف مع CronJobs/Jobs ؛ فأنت لا تملأ الحاويات بعمليات إضافية أو تستضيف crons.
الأسئلة الشائعة السريعة لتجنب الارتباك
هل يحل Compose محل Kubernetes؟ لا. يعمل Compose على تبسيط مجموعات الحاويات المتعددة على مضيف واحد؛ بينما يقوم Kubernetes بالتنسيق على نطاق المجموعة مع توفر عالٍ.
هل لا يزال Compose مستخدماً؟ نعم، وبكثرة. إنه أداة التطوير والاختبار المثالية لإعداد بيئات كاملة ببضع أوامر فقط.
هل Kubernetes "أفضل" من Docker؟ إنهما شيئان مختلفان: Docker هي منصة الحاويات ؛ أما Kubernetes فتقوم بتنسيقها في مجموعة وتضيف عمليات متقدمة.
هل يُمكنني نقل ملف Compose الخاص بي إلى Kubernetes دون إعادة كتابته يدويًا؟ نعم، باستخدام تكامل Kompose أو Docker Desktop. يُتيح لك ذلك خطوة أولى سريعة يُمكنك من خلالها تحسينه لاحقًا.
التفاصيل الدقيقة: البرمجة، وOpenShift، والتحويلات البديلة
لا يقتصر K8s على النشر المستمر فقط: تغطي الوظائف و CronJobs المهام لمرة واحدة أو المهام المخطط لها دون الحاجة إلى إدارة crons النظام.
في OpenShift، يستطيع Kompose إنشاء ملفات DeploymentConfigs و ImageStreams، وحتى ملفات BuildConfigs إذا كان لدى Compose عملية بناء مرتبطة بمستودع Git. تُستخدم العلامتان "--build-repo" و "--build-branch" لتعديل المصدر.
إذا كنت ترغب في مخرجات مختلفة، يتيح لك Kompose استخدام DaemonSets أو ReplicationControllers أو Helm Charts بدلاً من عمليات النشر والخدمات الافتراضية. كما يمكنه إنشاء ملفات JSON، وليس YAML فقط.
التوافق والتحذيرات والمشكلات البسيطة
يدعم برنامج Kompose الإصدارات Compose V1/V2/V3 (مع بعض القيود في الإصدارين 2.1 و3.2). يتم تجاهل المفاتيح غير المدعومة مع ظهور تحذير ، مما يتيح إمكانية إجراء تعديلات يدوية.
إذا كانت خدمتك تحتوي على وحدات تخزين، فإن Kompose يغير الاستراتيجية إلى "إعادة الإنشاء" لتجنب التزامن على نفس وحدة التخزين . وهذا أمر طبيعي بالنسبة للخدمات التي تحتفظ بحالة.
يتم تحويل الشرطات السفلية في الأسماء إلى شرطات. هذا قيدٌ تفرضه Kubernetes على أسماء الكائنات ، لذا تأكد من تسميتها بشكل صحيح في Compose لتجنب أي مفاجآت أثناء التحويل.
للوصول من الخارج، حدد نوع الخدمة: ClusterIP (داخلي)، أو NodePort (منفذ على العُقد)، أو LoadBalancer (عنوان IP عام في السحابة). مع Ingress، ستحصل على مسارات HTTP/S سلسة وTLS مركزي.
إذا أجريت الاختبار في Minikube، فستُعيد أوامر مثل "minikube service <svc> –url" عنوان URL سريعًا . أما في Cloud، فانظر إلى حقل "LoadBalancer Ingress" عند وصف الخدمة.
من النقاط المثيرة للاهتمام: ستجد في أوساط مجتمع Kubernetes إشارات إلى رواتب شاغرة في هذا المجال، ونسب استخدام تقارب 88% في بيئات الإنتاج. وهذا ليس بالأمر الغريب، بل هو المعيار السائد.
ولإكمال الصورة، فإنّ Kubernetes يتجاوز بروتوكول HTTP: فشبكة الخدمات، والمشغلون، وتعريفات الموارد المخصصة (CRDs) توسّع نطاق Kubernetes. إذا كنت قادمًا من Compose، فمن الطبيعي أن تشعر بالارتباك في البداية، ولكن هذه الإمكانيات الإضافية تُترجم إلى عمليات أكثر قوة وكفاءة.
إعادة ضبط السياسات: معادلات مفيدة
يُتيح Compose خيار "إعادة التشغيل: دائمًا/عند الفشل/لا". في Kubernetes، وبحسب الحالة، سيكون لديك وحدات Pods أو وحدات تحكم فردية (Deployments أو RC) مع سياسات إعادة تشغيل مناسبة.
| إعادة تشغيل docker-compose | كائن في K8s | سياسة إعادة التشغيل |
|---|---|---|
| "" / دائماً | وحدة التحكم (النشر/التحكم عن بعد) | دائما |
| عند الفشل | جراب | OnFailure |
| لا | جراب | أبدا |
إذا كان لديك في Compose حاويات "حساب" أو مهام مؤقتة (مثل "pi" سريع)، فما عليك سوى تنفيذها في K8s كـ Job أو CronJob مع السياسة المناسبة وستكون جاهزًا تمامًا.
اختر Compose لعمليات نشر محلية سريعة، وKubernetes عندما تتطلب بيئتك مزيدًا من القوة: دعم متعدد العقد، وتوسيع نطاق تلقائي، وعمليات نشر سلسة، ومرونة حقيقية . مع Compose وMove2Kube وقليل من العناية، ستكون عملية الانتقال سلسة.
في النهاية، يعتمد الاختيار على الحجم والتعقيد: Compose مناسب تمامًا للتطوير والاختبار ومجموعات المضيف الواحد ؛ Kubernetes هو الخيار الأمثل لعمليات النشر متعددة السحابات للمؤسسات والفرق التي تحتاج إلى أتمتة متقدمة وتوافر عالٍ ونظام بيئي مع آلاف عمليات التكامل.
