Kubernetes على خادم Linux تتمثل ممارسة تشغيل منصة تنسيق حاويات Kubernetes على مضيفات Linux في نشر وتوسيع نطاق و manage التطبيقات المعبأة في حاويات.
يستخدم Kubernetes لوحة تحكم وعُقد عاملة، ويدعم بيئات تشغيل الحاويات مثل containerd، ويُؤتمت عمليات الجدولة والشبكات والتخزين والتحديثات والإصلاح الذاتي عبر خادم واحد أو عدة خوادم. قد يبدو البدء باستخدام Kubernetes على خادم Linux معقدًا، ولكن مع التوجيه الصحيح، يصبح الأمر بسيطًا ومُجزيًا.
يشرح هذا الدليل بنية Kubernetes، والمتطلبات الأساسية، وتثبيت kubeadm النظيف على الأنظمة القائمة على Ubuntu/Debian، وتأمين الإنتاج، ونصائح عملية من تجربة الاستضافة العملية - حتى تتمكن من تشغيل مجموعات موثوقة على الأجهزة المادية أو الأجهزة الافتراضية بثقة.
ما هو Kubernetes وكيف يعمل على نظام Linux؟?
Kubernetes (K8s) هو نظام مفتوح المصدر يعمل على أتمتة عمليات النشر والتوسع و manageإدارة التطبيقات المعبأة في حاويات. على نظام لينكس، يعمل Kubernetes كخدمات نظام تقوم بتنسيق أحمال العمل عبر مجموعة من العقد.

يمكنك التفاعل معه عبر kubectl لإرسال الحالة المطلوبة (بيانات YAML)؛ يقوم Kubernetes بمطابقة الحالة الفعلية مع نيتك.
بنية Kubernetes (نظرة عامة مبسطة)
- طائرة مراقبة (عادةً على خادم واحد أو أكثر من خوادم لينكس): خادم kube-apiserver (الباب الأمامي)، إلخ (مخزن القيم الرئيسية)، جدولة المكعبات (وضع الكبسولة)، kube-controller-manager (منطق التوفيق)، اختياري وحدة تحكم السحابةmanager.
- عقد العمال: يركض مكعبة (عامل العقدة)، وكيل kube (شبكات الخدمات)، وبيئة تشغيل الحاويات (عادةً حاويات). إنها تستضيف وحدات Pods الخاصة بك، وهي أصغر الوحدات القابلة للنشر.
- إضافات المجموعةشبكات CNI (Calico، Cilium، Flannel)، DNS/جوهرDNS، خادم المقاييس، وحدة تحكم الدخول (NGINX، Traefik)، برامج تشغيل التخزين (CSI).
أهم عناصر Kubernetes التي ستستخدمها
- جراب: حاوية واحدة أو أكثر تتشارك في الشبكات والتخزين.
- التنفيذيدير وحدات Pods عديمة الحالة مع التحديثات المتتالية وعمليات التراجع.
- الخدمةعنوان IP افتراضي مستقر و DNS الاسم للوصول إلى وحدات Pods (ClusterIP، NodePort، LoadBalancer).
- دخول: توجيه HTTP/HTTPS إلى الخدمات مع إنهاء TLS.
- ConfigMap/Secret: حقن التكوين والبيانات الحساسة.
- الحجم المستمر (PV) / المطالبة (PVC)تخزين متين عبر محركات أقراص CSI.
ملاحظة سريعة: Docker عبارة عن مجموعة أدوات لبناء وتشغيل الحاويات. أما Kubernetes فهو نظام التنسيق. يُفضّل Kubernetes حاليًا استخدام بيئات تشغيل متوافقة مع CRI مثل containerd؛ ومع ذلك، لا يزال بإمكانك بناء الصور باستخدام Docker وتشغيلها على Kubernetes عبر containerd.
المتطلبات الأساسية لتشغيل Kubernetes على خادم Linux
متطلبات النظام (الحد الأدنى والعملي)
- عقدة مستوى التحكم: 2 قCPU4-8 جيجابايت RAM (كحد أدنى)؛ قرص صلب SSD بسعة 40+ جيجابايت؛ أوبونتو 22.04 LTS أو ديبيان 12؛ شبكة مستقرة؛ مزامنة الوقت/بروتوكول NTP.
- عقدة عاملة: 2 قCPU4+ جيجابايت RAM (أكثر لأحمال العمل الإنتاجية)؛ قرص SSD بسعة 40+ جيجابايت.
- ميزات النواة:
br_netfilter,overlay، تم تكوين iptables (nft أو legacy) بشكل صحيح. - تم تعطيل التبديليتطلب Kubernetes إيقاف تشغيل swap (إلا إذا تم تكوينه بشكل خاص).
الشبكات والمنافذ المطلوبة
- مستوى التحكم: 6443/TCP (خادم API) مفتوح للعقد؛ منافذ نظير etcd مفتوحة بين مستويات التحكم.
- عمال: السماح بحركة مرور Pod من عقدة إلى عقدة لكل CNI الخاص بك (غالبًا 4789/UDP لـ VXLAN أو تدفقات BPF لـ Cilium).
- الدخول والتطبيقات: قم بكشف المنافذ 80/443 أو منافذ التطبيق عبر Ingress/Service حسب الحاجة.
- ضمان
sysctlتقوم القيم بتوجيه حركة المرور الموصولة عبر iptables وتمكين إعادة توجيه IP.
الأمان وضبط نظام التشغيل
- أنشئ مستخدمًا بصلاحيات sudo غير الجذرية لإدارة العمليات؛ استخدم SSH مفاتيحتعطيل تسجيل الدخول باستخدام كلمة المرور.
- حافظ على تحديث نظام التشغيل؛ وثبّت إصدارات Kubernetes لتجنب التحديثات المفاجئة.
- استعمل
systemdمجموعات التحكم (cgroups) في containerd للتوافق مع Kubernetes. - الباقة DNS، والمجالات الداخلية، وTLS مبكرًا؛ تمكين مزامنة الوقت (chrony/systemd-timesyncd).
خطوة بخطوة: تثبيت Kubernetes على خادم Linux (kubeadm)
تستهدف الخطوات الموجزة التالية مضيفات أوبونتو/ديبيان التي تستخدم containerd. نفّذها على جميع العُقد ما لم يُذكر خلاف ذلك. استبدل الإصدارات لتتوافق مع إصدار Kubernetes الفرعي المستهدف.
1) تجهيز نظام التشغيل
sudo swapoff -a
sudo sed -i.bak '/ swap / s/^\(.*\)$/#\1/' /etc/fstab
cat <<'EOF' | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
sudo modprobe overlay
sudo modprobe br_netfilter
cat <<'EOF' | sudo tee /etc/sysctl.d/99-kubernetes-cri.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
EOF
sudo sysctl --system2) قم بتثبيت containerd وقم بتكوين مجموعات التحكم الخاصة بنظام systemd
sudo apt-get update
sudo apt-get install -y ca-certificates curl gnupg apt-transport-https
sudo apt-get install -y containerd
# Generate default config and enable systemd cgroups
sudo mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml > /dev/null
sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml
sudo systemctl enable --now containerd3) قم بتثبيت kubeadm و kubelet و kubectl
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.30/deb/Release.key | \
sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.30/deb/ /' | \
sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl4) تهيئة مستوى التحكم (يتم تشغيله فقط على عقدة التحكم الأولى)
# Replace CIDR with your CNI's default (e.g., Calico often 192.168.0.0/16)
sudo kubeadm init --pod-network-cidr=192.168.0.0/16
# Configure kubectl for your user
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config5) تثبيت إضافة CNI (للشبكات)
إختر واحداً: كاليكو (غني بالسياسات)، سيليوم (أداء/إمكانية مراقبة eBPF)، أو فلانيل (بسيط). مثال باستخدام كاليكو:
kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.27.3/manifests/calico.yaml6) ضم عقد العمل
استخدم أمر الانضمام الذي تم طباعته بواسطة كل عامل kubeadm initإذا فقدته، فأنشئ رمزًا جديدًا:
kubeadm token create --print-join-command7) نشر عبء عمل اختباري
kubectl create deployment hello --image=nginx:1.25
kubectl expose deployment hello --port=80 --type=NodePort
kubectl get pods -o wide
kubectl get svc helloيمكنك الوصول إلى NodePort من أي عنوان IP للعقدة والمنفذ المدرج، أو تثبيت وحدة تحكم Ingress وإنشاء Ingress لتوجيه HTTP نظيف.
اعتبارات الإنتاج لـ Kubernetes القائم على Linux
التوافر العالي والترقيات
- قم بتشغيل 3 عقد تحكم من أجل النصاب القانوني؛ احتفظ بـ etcd محليًا وقم بعمل نسخة احتياطية منه بانتظام.
- ترقيات متدرجة: قم بترقية طائرات التحكم أولاً، ثم العمال. استخدم
kubeadm upgradeوتفريغ العقد بسلاسة. - توزيع العقد عبر نطاقات الفشل (مضيفين/رفوف/مناطق توافر مختلفة).
الشبكات، والدخول، وموازنة الأحمال
- اختر شبكة معلومات العملاء (CNI) التي تتوافق مع احتياجاتك: Calico (NetworkPolicy)، Cilium (eBPF، Hubble)، Flannel (simplicity).
- قم بتثبيت وحدة تحكم الدخول (NGINX أو Traefik) لأتمتة HTTP/HTTPS و Let's Encrypt.
- على الأجهزة المادية، قم بمحاكاة موازن التحميل السحابي باستخدام MetalLB؛ وإلا فاستخدم NodePort أو وكلاء عكسيين خارجيين.
التخزين ومتانة البيانات
- استخدم برامج تشغيل CSI للأحجام الديناميكية (Rook-Ceph أو OpenEBS أو NFS أو برنامج تشغيل مورد SAN/NAS الخاص بك).
- افصل تخزين Pod المؤقت عن البيانات الدائمة؛ راقب عمليات الإدخال/الإخراج للقرص و inodes.
- قم بعمل نسخ احتياطية من بيانات etcd والتطبيقات؛ واختبر عمليات الاستعادة بانتظام.
تصلب الأمن
- قم بتمكين RBAC؛ استخدم حسابات الخدمة ذات الامتيازات الأقل والأدوار ذات النطاق المحدد.
- تطبيق ضوابط الدخول: دخول أمن الكبسولة (الأساسي/المقيد)، وتوقيع/التحقق من الصور حيثما أمكن.
- قم بتشفير البيانات السرية المخزنة؛ ضع في اعتبارك مزودي خدمات إدارة المفاتيح (KMS). قيّد الوصول إلى etcd وقم بتأمين النسخ الاحتياطية.
- قم بتطبيق سياسات الشبكة على الرفض الافتراضي والسماح فقط بحركة المرور المطلوبة.
- قم بمسح الصور (Trivy، Clair) وتثبيتها على علامات غير قابلة للتغيير؛ تجنب التشغيل كجذر؛ قم بإسقاط إمكانيات Linux غير الضرورية.
إمكانية الملاحظة والموثوقية
- المقاييس والتنبيهات: بروميثيوس + تنبيهmanager; عرضها باستخدام Grafana.
- تسجيل: Fluent Bit/Vector + Elasticsearch/OpenSearch أو تسجيل البيانات السحابي.
- القياس التلقائي: قم بتمكين خادم المقاييس، واستخدم HPA/VPA؛ وقم بتوسيع نطاق المجموعة تلقائيًا إذا كنت تستخدم منصة ذات عقد مرنة.
- المرونة: اختبارات الحيوية/الاستعداد/بدء التشغيل، وميزانيات تعطيل PodDisruptionBudgets، والتقارب/عدم التقارب، وانتشار الطوبولوجيا.
الأخطاء الشائعة ونصائح لحل المشكلات
- عدم جدولة المجموعات: التحقق من
kubectl get nodesوtaintsتأكد من تثبيت CNI؛ حيث أن تلوث مستوى التحكم يحظر التطبيقات ما لم يتم التسامح معه. - قضايا الشبكة: يؤكد
br_netfilter، وsysctls، وقواعد جدار الحماية، وCNI DaemonSets. تأكد من عناوين IP الخاصة بالوحدات وتوجيهها باستخدامkubectl get pods -o wide. - أخطاء في سحب الصورقم بتعيين imagePullSecrets للسجلات الخاصة؛ ثم قم بالتأكيد. DNS/جوهرDNS الأشغال.
- Kubelet غير جاهز: عدم تطابق في مجموعات التحكم؛ تأكد من أن containerd SystemdCgroup=true وأعد تشغيل الخدمات.
- انتهت صلاحية شهادات المجموعة: استعمال
kubeadm certs check-expirationوقم بالتدوير قبل فترات انقطاع التيار الكهربائي.
متى تستخدم الخدمات المُدارة أو شريك الاستضافة
يوفر نظام Kubernetes ذاتي الإدارة على نظام Linux تحكمًا وكفاءة عاليتين، ولكنه يتطلب التزامًا مستمرًا بإدارة العمليات: التحديثات، والنسخ الاحتياطية، والأمان، ودعم فني فوري عند الحاجة. إذا كان فريقك يفضل التركيز على التطبيقات، ففكر في... manageخيار Kubernetes أو مزود يقدم خوادم Linux جاهزة لـ Kubernetes مع إعدادات مسبقة للشبكات والتخزين والمراقبة.
الأسئلة الأكثر شيوعا:
هل يمكنني تشغيل Kubernetes على خادم Linux واحد؟
نعم. يمكنك تشغيل مجموعة أحادية العقدة لأغراض التطوير عن طريق التهيئة باستخدام kubeadm init ثم إزالة تأثير لوحة التحكم لكي يتم جدولة أحمال العمل محليًا. بالنسبة للإنتاج، أضف عقد عاملة منفصلة وفعّل خاصية التوافر العالي للوحة التحكم وetcd.
هل يُعدّ Docker ضروريًا لتشغيل Kubernetes على نظام Linux؟
لا. يفضل Kubernetes الآن بيئات التشغيل المتوافقة مع CRI مثل containerd or CRI-Oلا يزال بإمكانك إنشاء الصور باستخدام Docker ودفعها إلى سجل؛ وستقوم المجموعة بتشغيلها من خلال containerd.
ما هي المتطلبات الدنيا لمجموعة صغيرة من الحواسيب؟
تتمثل البداية العملية في مستوى تحكم واحد (2 فولت)CPU4-8 جيجابايت RAM) وعاملان (كل منهما 2 vCPU4+ جيجابايت RAMمع استخدام محركات أقراص الحالة الصلبة (SSD) وتعطيل خاصية التبديل (swap)، وواجهة شبكة مركزية (CNI) مثل Calico أو Cilium. ولضمان المرونة، يُنصح بالانتقال إلى ثلاث طبقات تحكم ووحدات تخزين من فئة المؤسسات.
كيف يمكنني إتاحة تطبيقي للإنترنت على جهاز الكمبيوتر مباشرةً؟
قم بتثبيت وحدة تحكم الدخول (NGINX أو Traefik)، وقم بتعيين عنوان IP عام DNS لربط عناوين IP الخاصة بالعقد أو بموازن الأحمال، واستخدام MetalLB لخدمات موازن الأحمال. إنهاء بروتوكول TLS عبر Ingress باستخدام Let's Encrypt وأتمتة تجديد الشهادات.
ما هي أفضل طريقة لتعلم Kubernetes على نظام Linux بأمان؟
ابدأ ببيئة تجريبية: ثلاث آلات افتراضية صغيرة، تثبيت kubeadm، إعداد شبكة Calico، وتطبيق تجريبي. أضف خادم المقاييس، وحدد طلبات/حدود الموارد، وتدرب على عمليات النشر والتراجع وسياسات الشبكة. بعد التأكد من إتقان ذلك، صمم نظام التوافر العالي والنسخ الاحتياطي والمراقبة قبل الانتقال إلى أجهزة الإنتاج أو الحوسبة السحابية.