बेयरमेटल पर k3s इंस्टॉलेशन - चरण-दर-चरण मार्गदर्शन और टेर्राफॉर्म के साथ

होमलैब क्लस्टर पर छोटे k3s कubernetis का इंस्टॉलेशन

Page content

यहाँ एक 3-नोड K3s क्लस्टर की स्थापना का चरण-दर-चरण मार्गदर्शन है, जो बेयर-मेटल सर्वर पर किया जाता है (1 मास्टर + 2 वर्कर्स)।

इस गाइड का मानना है कि आप हर सर्वर पर एक मिनिमल Linux स्थापना से शुरू कर रहे हैं (उदाहरण के लिए, Ubuntu 22.04 या Debian), और आप अपने कंट्रोल प्लेन और वर्कलोड्स को सेल्फ-होस्ट करना चाहते हैं।

कुबर्नेट्स बेयरमेटल क्लस्टर

K3s एक हल्का संस्करण क्यूबर्नेट्स है, जो इस छोटे होमलैब के लिए अच्छी तरह से उपयुक्त है।

⚙️ क्लस्टर टोपोलॉजी

नोड नाम भूमिका होस्टनेम/आईपी
master-1 सर्वर (कंट्रोल प्लेन) 192.168.1.100
worker-1 एजेंट (वर्कर नोड) 192.168.1.101
worker-2 एजेंट (वर्कर नोड) 192.168.1.102

✅ पूर्वापेक्षाएँ

🧱 हार्डवेयर (न्यूनतम):

  • CPU: 2 कोर
  • RAM: 2GB+ प्रति नोड
  • डिस्क: 20GB+ प्रति नोड

🛠 ओएस आवश्यकताएँ:

  • Linux (Ubuntu 22.04, Debian 12, आदि)
  • curl, ssh, और sudo स्थापित
  • रूट या सुदो एक्सेस

🧼 साफ नेटवर्किंग:

  • सुनिश्चित करें कि सभी नोड्स एक दूसरे को आईपी या होस्टनेम द्वारा रिज़ॉल्व और पिंग कर सकते हैं।

  • स्वैप को डिसएबल करें:

    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) सक्षम करें

प्रोडक्शन-जैसी HA के लिए (होम लैब में वैकल्पिक):

  • एक बाहरी DB का उपयोग करें (उदाहरण के लिए, MySQL/PostgreSQL/etcd)।
  • --server फ्लैग और साझा DB के साथ कई सर्वर नोड्स चलाएं।
  • देखें: 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 IPs सेट अप करें।


🧰 उपयोगी नोट्स

  • Kubeconfig: /etc/rancher/k3s/k3s.yaml

    • इसे अपने लोकल मशीन पर कॉपी करें और export KUBECONFIG=... करें ताकि आप दूर से प्रबंधन कर सकें।
  • Systemd Services:

    • sudo systemctl status k3s
    • sudo systemctl status k3s-agent (वर्कर्स पर)

💡 अतिरिक्त (वैकल्पिक)

  • K9s: टर्मिनल UI Kubernetes प्रबंधन के लिए: 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

Terraform के साथ 3-नोड बेयर-मेटल K3s क्लस्टर स्थापित करें

यहाँ एक Terraform टेम्पलेट है जो एक 3-नोड बेयर-मेटल K3s क्लस्टर प्रोविजन करने में मदद करता है, मानकर कि आप पहले से प्रोविजन किए गए Linux सर्वर (उदाहरण के लिए, अपने LAN/होम लैब में) को SSH और Ansible के माध्यम से प्रबंधित कर रहे हैं। Terraform Ansible प्लेबुक्स को चलाएगा ताकि K3s स्थापित की जा सके।


🧱 अनुमान

  • आपके पास पहले से ही हैं:

    • 3 सर्वर फिक्स्ड आईपी के साथ, SSH के माध्यम से एक्सेस योग्य।
    • SSH एक्सेस (की-आधारित)।
    • स्थानीय रूप से Terraform और Ansible स्थापित।
  • टारगेट OS: Ubuntu/Debian (कस्टमाइज़ किया जा सकता है)।

  • आप Terraform local-exec या 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: Install k3s master
      shell: |
        curl -sfL https://get.k3s.io | sh -        
    - name: Get node-token
      shell: cat /var/lib/rancher/k3s/server/node-token
      register: node_token
      delegate_to: localhost

- hosts: workers
  become: yes
  tasks:
    - name: Join worker to cluster
      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 -        

नोट: आपको आईपी या टोकन चर एक्सेस के आधार पर Ansible संस्करणों के अनुसार ट्वीक करने की आवश्यकता हो सकती है। आप मास्टर पर टोकन जनरेट कर सकते हैं और वर्कर स्थापना चलाने से पहले इसे एक फाइल में सेव कर सकते हैं।


🚀 कैसे चलाएं

k3s-cluster/ डायरेक्टरी से:

terraform init
terraform apply

🧰 सुधार (वैकल्पिक)

  • डायनेमिक इन्वेंटरी जनरेशन का उपयोग करें (उदाहरण के लिए, DHCP/dnsmasq से)।
  • Ansible के माध्यम से MetalLB डिप्लॉयमेंट जोड़ें।
  • होस्टनेम और HA फीचर्स जोड़ें।
  • Ansible रोल जैसे xanmanning.k3s के साथ बदलें अधिक लचीलापन के लिए।

उपयोगी लिंक्स