تثبيت k3s على معدات عارية - دليل خطوة بخطوة مع استخدام Terraform
تثبيت k3s كيبرنيتيس الصغير على مجموعة homelab
هنا نقدم شرحًا خطوة بخطوة لـ تثبيت كластر 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
لزيادة المرونة.
روابط مفيدة
- https://k3s.io/
- قائمة الأوامر الشائعة لـ كيرنترس
- تثبيت كيرنترس باستخدام كوبسبراي
- قائمة الأوامر المفيدة لـ Terraform
- مراجعات توزيعات كيرنترس - ملخص سريع لـ كوباديم، ك3س، ميكروك8س، مينيكوب، تالوس لينكس و RKE2
- مقارنة توزيعات كيرنترس لـ مختبر منزلي بثلاثة عقد
- كيفية تثبيت أوبونتو 24.04 والأدوات المفيدة
- قائمة الأوامر الشائعة لـ دوكير
- قائمة الأوامر المفيدة لـ دوكير كومبوز مع أمثلة