Установка k3s на baremetal - пошаговое руководство и с использованием Terraform
Установка little k3s Kubernetes в кластере homelab
Вот пошаговое руководство по установке кластера K3s из 3 узлов на серверах с “голым” железом (1 мастер + 2 рабочих узла).
Это руководство предполагает, что вы начинаете с минимальной установки Linux (например, Ubuntu 22.04 или Debian) на каждом сервере и хотите самостоятельно разместить контрольную плоскость и рабочие нагрузки.
K3s - это легковесная версия Kubernetes, которая хорошо подходит для небольшой домашней лаборатории.
⚙️ Топология кластера
Имя узла | Роль | Имя хоста/IP |
---|---|---|
master-1 |
Сервер (Контрольная плоскость) | 192.168.1.100 |
worker-1 |
Агент (Рабочий узел) | 192.168.1.101 |
worker-2 |
Агент (Рабочий узел) | 192.168.1.102 |
✅ Предварительные требования
🧱 Аппаратные требования (минимум):
- CPU: 2 ядра
- ОЗУ: 2ГБ+ на узел
- Диск: 20ГБ+ на узел
🛠 Требования к ОС:
- Linux (Ubuntu 22.04, Debian 12 и т.д.)
- Установлены
curl
,ssh
иsudo
- Доступ root или sudo
🧼 Чистая сеть:
-
Убедитесь, что все узлы могут разрешать и пинговать друг друга по IP или имени хоста.
-
Отключите swap:
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 (необязательно в домашних лабораториях):
- Используйте внешнюю базу данных (например, MySQL/PostgreSQL/etcd).
- Запустите несколько серверных узлов с флагом
--server
и общей базой данных. - См.: K3s HA Doc
🧪 Тестирование развертывания
kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port=80 --type=LoadBalancer
kubectl get svc
Проверьте доступ через curl http://<worker-ip>:<port>
или настройте MetalLB для внешних IP LoadBalancer.
🧰 Полезные заметки
-
Kubeconfig:
/etc/rancher/k3s/k3s.yaml
- Скопируйте на ваш локальный компьютер и
export KUBECONFIG=...
для удаленного управления.
- Скопируйте на ваш локальный компьютер и
-
Сервисы systemd:
sudo systemctl status k3s
sudo systemctl status k3s-agent
(на рабочих узлах)
💡 Дополнительно (необязательно)
-
K9s: Терминальный интерфейс для управления Kubernetes:
brew install k9s
илиsudo snap install k9s
-
Dashboard: Включите с манифестами:
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 из 3 узлов на “голом” железе с помощью Terraform
Вот Terraform шаблон, который помогает развернуть кластер K3s из 3 узлов на “голом” железе, предполагая, что вы управляете уже развернутыми серверами Linux (например, в вашей локальной сети/домашней лаборатории) через SSH и Ansible. Terraform вызовет плейбуки Ansible для установки K3s.
🧱 Предположения
-
У вас уже есть:
- 3 сервера с фиксированными IP-адресами, доступными через SSH.
- Доступ SSH (на основе ключей).
- Установлены Terraform и Ansible локально.
-
Целевая ОС: 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: Установить k3s master
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: Присоединить worker к кластеру
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.
- Добавьте имена хостов и функции HA.
- Замените на роль Ansible как
xanmanning.k3s
для большей гибкости.
Полезные ссылки
- https://k3s.io/
- Шпаргалка по Kubernetes
- Установка Kubernetes с Kubespray
- Шпаргалка по Terraform - полезные команды и примеры
- Обзор дистрибутивов Kubernetes - краткий обзор kubeadm, k3s, MicroK8s, Minikube, Talos Linux и RKE2
- Сравнение дистрибутивов Kubernetes для домашней лаборатории из 3 узлов
- Как установить Ubuntu 24.04 & полезные инструменты
- Шпаргалка по Docker
- Шпаргалка по Docker Compose - наиболее полезные команды с примерами