انتقل إلى المحتوى الرئيسي
العودة إلى الفئة

تثبيت Kubernetes مع K3s: تنسيق الحاويات الخفيف

إعداد كلاستر Kubernetes أحادي ومتعدد العقد مع K3s، استخدام kubectl، إنشاء deployments وservices، إدارة التطبيقات مع Helm. دليل Kubernetes لبيئات VPS.

وقت القراءة: 20 dk الحاويات والتنسيق
k3skubernetesحاويةتنسيقكلاسترkubectlhelmvps
الكاتب
REXE Teknoloji Network & Security Team
المحرر
REXE Teknoloji Technical Editorial
أول نشر
آخر تحديث

تثبيت Kubernetes مع K3s: تنسيق الحاويات الخفيف

Kubernetes هو المعيار الصناعي لتنسيق الحاويات. لكن تثبيت Kubernetes الكامل قد يكون مكثفاً في استهلاك الموارد ومعقداً. K3s هو توزيعة Kubernetes خفيفة من Rancher — تقدم جميع ميزات Kubernetes في ملف ثنائي واحد وتعمل بشكل ممتاز في البيئات محدودة الموارد مثل VPS.

لماذا تختار K3s؟

الميزةKubernetes الكاملK3s
حجم الملف الثنائي~500MB+~100MB
الحد الأدنى من RAM2GB+512MB
وقت التثبيت30-60 دقيقة5 دقائق
التبعياتكثيرةضئيلة
توافق Kubernetesكاملكامل
الاستخدام في الإنتاجنعمنعم

K3s متوافق تماماً مع Kubernetes API. kubectl و Helm وأدوات Kubernetes الأخرى تعمل بسلاسة مع K3s. مثالي للبيئات الإنتاجية الصغيرة والمتوسطة.

متطلبات النظام

hljs bash
# الحد الأدنى من المتطلبات
# CPU: نواة واحدة
# RAM: 512MB (موصى به: 1GB+)
# Disk: 5GB
# OS: Ubuntu 20.04+, Debian 11+, CentOS 8+

# تحديث النظام
apt update && apt upgrade -y

# تثبيت الأدوات المطلوبة
apt install -y curl wget

تثبيت K3s على عقدة واحدة (Server)

hljs bash
# تثبيت K3s (وضع الخادم)
curl -sfL https://get.k3s.io | sh -

# التحقق من حالة الخدمة بعد التثبيت
systemctl status k3s

# التحقق من حالة الكلاستر
kubectl get nodes

# عرض جميع الـ pods
kubectl get pods -A

إعداد Kubeconfig

hljs bash
# نسخ kubeconfig لـ kubectl
mkdir -p ~/.kube
cp /etc/rancher/k3s/k3s.yaml ~/.kube/config
chmod 600 ~/.kube/config

# تعيين متغير البيئة KUBECONFIG
export KUBECONFIG=~/.kube/config
echo 'export KUBECONFIG=~/.kube/config' >> ~/.bashrc

# عرض معلومات الكلاستر
kubectl cluster-info

إعداد كلاستر متعدد العقد

العقدة الرئيسية (Server)

hljs bash
# تثبيت العقدة الرئيسية وحفظ التوكن
curl -sfL https://get.k3s.io | sh -

# الحصول على توكن العقدة (مطلوب للعقد العاملة)
cat /var/lib/rancher/k3s/server/node-token

العقدة العاملة (Agent)

hljs bash
# ربط العقدة العاملة بالعقدة الرئيسية
curl -sfL https://get.k3s.io | K3S_URL=https://MASTER_IP:6443 K3S_TOKEN=NODE_TOKEN sh -

# التحقق على العقدة الرئيسية من انضمام العقدة العاملة
kubectl get nodes

أوامر kubectl الأساسية

hljs bash
# عرض العقد
kubectl get nodes
kubectl get nodes -o wide

# عرض الـ pods
kubectl get pods
kubectl get pods -n kube-system
kubectl get pods -A

# عرض الـ deployments
kubectl get deployments

# عرض الـ services
kubectl get services

# عرض تفاصيل المورد
kubectl describe pod POD_NAME
kubectl describe node NODE_NAME

# عرض سجلات الـ pod
kubectl logs POD_NAME
kubectl logs -f POD_NAME

# تنفيذ أمر داخل الـ pod
kubectl exec -it POD_NAME -- /bin/bash

إنشاء أول Deployment

NGINX Deployment

hljs yaml
# nginx-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.25
        ports:
        - containerPort: 80
        resources:
          requests:
            memory: "64Mi"
            cpu: "250m"
          limits:
            memory: "128Mi"
            cpu: "500m"
hljs bash
# تطبيق الـ deployment
kubectl apply -f nginx-deployment.yaml

# التحقق من حالة الـ deployment
kubectl get deployments
kubectl rollout status deployment/nginx-deployment

إنشاء Service

hljs yaml
# nginx-service.yaml
apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  selector:
    app: nginx
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
      nodePort: 30080
  type: NodePort
hljs bash
kubectl apply -f nginx-service.yaml
kubectl get services
# الوصول: http://SERVER_IP:30080

إدارة التطبيقات مع Helm

hljs bash
# تثبيت Helm
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash

# إضافة مستودع Bitnami
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update

# تثبيت WordPress
helm install my-wordpress bitnami/wordpress \
  --set wordpressUsername=admin \
  --set wordpressPassword=StrongPass123! \
  --set service.type=NodePort

# عرض الـ charts المثبتة
helm list

# إزالة الـ chart
helm uninstall my-wordpress

إدارة K3s

hljs bash
# تحديث K3s
curl -sfL https://get.k3s.io | INSTALL_K3S_VERSION=v1.28.0+k3s1 sh -

# إدارة خدمة K3s
systemctl stop k3s
systemctl start k3s
systemctl restart k3s

# عرض سجلات K3s
journalctl -u k3s -f

# إلغاء تثبيت K3s
/usr/local/bin/k3s-uninstall.sh

الخلاصة

يوفر K3s كامل قوة Kubernetes مع الحد الأدنى من استهلاك الموارد. إنه الحل المثالي لتنسيق الحاويات على مستوى الإنتاج في بيئات VPS. مع K3s على خوادم REXE يمكنك توسيع تطبيقاتك بسهولة وضمان التوفر العالي وتطبيق ممارسات DevOps الحديثة.

الأسئلة الشائعة

ما الفرق الرئيسي بين K3s و Kubernetes الكامل؟

K3s توزيعة خفيفة متوافقة تماماً مع Kubernetes API. الفروق: K3s ملف ثنائي واحد (~100MB) بينما يتطلب Kubernetes الكامل مكونات متعددة. K3s يمكنه استخدام SQLite (بدلاً من etcd)، يستهلك ذاكرة أقل (512MB مقابل 2GB+) ويُثبَّت بشكل أسرع بكثير. كلاهما مناسب للاستخدام في الإنتاج.

الـ pods لا تبدأ في K3s، ماذا أفعل؟

تحقق أولاً من الأحداث بـ kubectl describe pod POD_NAME. المشاكل الشائعة: 1) موارد غير كافية (تحقق بـ kubectl describe node)، 2) خطأ في سحب الصورة (اختبر بـ docker pull)، 3) PVC لا يمكن ربطه (تحقق بـ kubectl get pvc)، 4) ConfigMap/Secret مفقود. تحقق أيضاً من سجلات التطبيق بـ kubectl logs POD_NAME.

كيف أصل إلى تطبيقي من الخارج؟

ثلاث طرق: 1) NodePort Service: يفتح منفذاً بين 30000-32767، الوصول عبر IP:PORT مباشرة. 2) LoadBalancer Service: يعمل مع Klipper LB في K3s. 3) Ingress Controller: يوفر وصولاً قائماً على النطاق لتطبيقات متعددة عبر IP واحد (موصى به). Traefik مدمج مع K3s افتراضياً.

كيف أخصص Helm chart؟

اعرض القيم الافتراضية بـ helm show values CHART_NAME. أنشئ ملف values.yaml للتخصيص واستخدمه مع helm install -f values.yaml. بديلاً يمكن تمرير قيم فردية بـ --set key=value. استخدم helm upgrade لتحديث تثبيت موجود.

لا أستطيع إضافة عقدة عاملة إلى كلاستر K3s، لماذا؟

تحقق من: 1) المنفذ 6443 على العقدة الرئيسية قابل للوصول من العقدة العاملة (telnet MASTER_IP 6443)، 2) NODE_TOKEN صحيح (cat /var/lib/rancher/k3s/server/node-token)، 3) المنفذ 6443 مفتوح في جدار الحماية، 4) تحقق من سجلات خدمة k3s-agent على العقدة العاملة (journalctl -u k3s-agent -f).

مقالات ذات صلة

أمان Docker: تصليب بيئة الحاويات

أفضل ممارسات أمان Docker: مستخدم غير root، نظام ملفات للقراءة فقط، ملفات seccomp، فحص الصور، أمان Docker socket، عزل الشبكة وإدارة الأسرار.

17 dk
dockerأمانحاوية
حركة الشبكةالداخل Gbpsالخارج Gbps