تثبيت k3s على معدات عارية - دليل خطوة بخطوة مع استخدام Terraform

تثبيت k3s كيبرنيتيس الصغير على مجموعة homelab

Page content

هنا نقدم شرحًا خطوة بخطوة لـ تثبيت كластر K3s بثلاثة عقد على خوادم عارية (1 ماستر + 2 وركر).

يفترض هذا الدليل أنك تبدأ من تثبيت لينكس بسيط تثبيت لينكس (مثل أوبونتو 22.04 أو ديبيان) على كل خادم، وأنك ترغب في تثبيت منصتك الخاصة وتشغيل الأحمال.

كластر كيرنترس عاري

K3s هو نوع خفيف من كيرنترس, وهو مناسب جدًا لهذا المختبر الصغير.

⚙️ بنية الكластر

اسم العقدة الدور الاسم/IP
master-1 الخادم (المنصة) 192.168.1.100
worker-1 العامل (عقدة العامل) 192.168.1.101
worker-2 العامل (عقدة العامل) 192.168.1.102

✅ المتطلبات الأساسية

🧱 المتطلبات المادية (الحد الأدنى):

  • المعالج: 2 نواة
  • الذاكرة: 2 جيجابايت أو أكثر لكل عقدة
  • القرص: 20 جيجابايت أو أكثر لكل عقدة

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

  • لينكس (أوبونتو 22.04، ديبيان 12، إلخ)
  • تثبيت curl، ssh، و sudo
  • الوصول إلى الجذر أو الوصول عبر sudo

🧼 الشبكة النظيفة:

  • تأكد من أن جميع العقد يمكنها حل وping كل منهما عبر IP أو الاسم.

  • تعطيل التبادل:

    sudo swapoff -a
    sudo sed -i '/ swap / s/^/#/' /etc/fstab
    

🚀 الخطوات التفصيلية للتثبيت


📍 الخطوة 1: تثبيت K3s على منصة التحكم (master-1)

curl -sfL https://get.k3s.io | sh -

بعد التثبيت:

sudo cat /var/lib/rancher/k3s/server/node-token
  • هذا يعطيك رمز التسجيل المطلوب للعقد العاملة.

تأكيد تشغيل الكластر:

sudo kubectl get nodes

يحتوي k3s على kubectl مثبت كـ k3s kubectl أو مرتبط كـ kubectl.


📍 الخطوة 2: تثبيت عقد K3s (worker-1 & worker-2)

كرر على كل عقدة عاملة:

استبدل <MASTER_IP> و <NODE_TOKEN> بالقيم من الخطوة 1.

curl -sfL https://get.k3s.io | K3S_URL=https://192.168.1.100:6443 K3S_TOKEN=<NODE_TOKEN> sh -

أمثلة:

K3S_URL=https://192.168.1.100:6443 \
K3S_TOKEN=K10abcde123456789::server:abcde123456789 \
sh -c "$(curl -sfL https://get.k3s.io)"

📍 الخطوة 3: التحقق من الكластر من master-1

kubectl get nodes

يجب أن ترى:

NAME        STATUS   ROLES    AGE   VERSION
master-1    Ready    control  5m    v1.29.2+k3s1
worker-1    Ready    <none>   2m    v1.29.2+k3s1
worker-2    Ready    <none>   2m    v1.29.2+k3s1

🔐 (اختياري) تمكين النسخ الاحتياطي (HA)

للحصول على نسخ احتياطية مشابهة للإنتاج (اختياري في المختبرات المنزلية):

  • استخدم قاعدة بيانات خارجية (مثل MySQL/PostgreSQL/etcd).
  • قم بتشغيل عدة عقد خادم مع العلم --server وقاعدة بيانات مشتركة.
  • راجع: مستندات K3s HA

🧪 اختبار نشر

kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port=80 --type=LoadBalancer
kubectl get svc

تحقق من الوصول عبر curl http://<worker-ip>:<port> أو قم بتثبيت MetalLB لدعم LoadBalancer الخارجية.


🧰 ملاحظات مفيدة

  • ملف kubeconfig: /etc/rancher/k3s/k3s.yaml

    • نسخه إلى جهازك المحلي و export KUBECONFIG=... لإدارة عن بعد.
  • خدمات systemd:

    • sudo systemctl status k3s
    • sudo systemctl status k3s-agent (على العمال)

💡 إضافات (اختيارية)

  • K9s: واجهة مستخدم لمنشئ كيرنترس في الطرفية: brew install k9s أو sudo snap install k9s

  • اللوحة: قم بتفعيلها باستخدام المانيفستات:

    kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml
    
  • MetalLB: أضف دعم التوازن في الشبكة للكластر العاري:

    kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.13.10/config/manifests/metallb-native.yaml
    

📦 التنظيف

لإزالة k3s:

# على الماستر:
/usr/local/bin/k3s-uninstall.sh

# على العامل:
/usr/local/bin/k3s-agent-uninstall.sh

تثبيت كластر K3s بثلاثة عقد عارية باستخدام Terraform

هنا Terraform النموذج الذي يساعد في إعداد كластر K3s بثلاثة عقد عارية افتراضًا أنك تدير خوادم لينكس مُعدة مسبقًا (مثل في الشبكة المحلية أو المختبر المنزلي) عبر SSH و Ansible. سيقوم Terraform بتشغيل playbooks لـ Ansible لتثبيت K3s.


🧱 الافتراضات

  • لديك بالفعل:

    • 3 خوادم بعناوين IP ثابتة، قابلة للوصول عبر SSH.
    • الوصول عبر SSH (مفتاحي).
    • Terraform و Ansible مثبتين محليًا.
  • نظام التشغيل المستهدف: أوبونتو/ديبيان (يمكن تعديله).

  • أنت تستخدم Terraform local-exec أو plugin مُقدم Ansible (سنتستخدم local-exec هنا لسهولة الاستخدام).


📁 هيكل المجلد

k3s-cluster/
├── main.tf
├── inventory.ini
├── ansible/
│   └── install_k3s.yml
└── variables.tf

📄 variables.tf

variable "master_ip" {
  default = "192.168.1.100"
}

variable "worker_ips" {
  default = ["192.168.1.101", "192.168.1.102"]
}

variable "ssh_user" {
  default = "your_user"
}

variable "ssh_private_key" {
  default = "~/.ssh/id_rsa"
}

📄 main.tf

provider "null" {}

resource "null_resource" "install_k3s" {
  provisioner "local-exec" {
    command = "ANSIBLE_HOST_KEY_CHECKING=False ansible-playbook -i inventory.ini ansible/install_k3s.yml --private-key ${var.ssh_private_key} -u ${var.ssh_user}"
  }

  triggers = {
    always_run = "${timestamp()}"
  }
}

📄 inventory.ini

[masters]
192.168.1.100

[workers]
192.168.1.101
192.168.1.102

[all:vars]
ansible_python_interpreter=/usr/bin/python3

📄 ansible/install_k3s.yml

---
- hosts: masters
  become: yes
  tasks:
    - name: تثبيت ك3س ماستر
      shell: |
        curl -sfL https://get.k3s.io | sh -        
    - name: الحصول على node-token
      shell: cat /var/lib/rancher/k3s/server/node-token
      register: node_token
      delegate_to: localhost

- hosts: workers
  become: yes
  tasks:
    - name: توصيل العامل إلى الكластر
      shell: |
        curl -sfL https://get.k3s.io | K3S_URL=https://{{ hostvars['192.168.1.100']['ansible_host'] }}:6443 K3S_TOKEN={{ hostvars['192.168.1.100']['node_token']['stdout'] }} sh -        

ملاحظة: قد تحتاج إلى تعديل الوصول إلى متغيرات IP أو التوكن بناءً على إصدارات Ansible. يمكنك أيضًا إنشاء توكن على الماستر وحفظه في ملف قبل تشغيل تثبيت العامل.


🚀 كيفية التشغيل

من الدليل k3s-cluster/:

terraform init
terraform apply

🧰 تحسينات (اختيارية)

  • استخدام إنشاء مخزن مخزني ديناميكي (مثل من DHCP/dnsmasq).
  • إضافة تثبيت MetalLB عبر Ansible.
  • إضافة أسماء خوادم ووظائف النسخ الاحتياطي.
  • استبدالها بدور Ansible مثل xanmanning.k3s لزيادة المرونة.

روابط مفيدة