Установка Kubernetes-оркестратора на TrueNAS Scale с помощью k3s: пошаговое руководство | AdminWiki

Установка Kubernetes-оркестратора на TrueNAS Scale с помощью k3s: пошаговое руководство

15 августа 2026 6 мин. чтения

Введение: зачем запускать Kubernetes на TrueNAS Scale с k3s

TrueNAS Scale объединяет отказоустойчивое хранилище ZFS и встроенную поддержку контейнеризации. Добавьте к этому k3s, легковесный дистрибутив Kubernetes от Rancher, и вы получите полноценный домашний кластер для тестирования рабочих нагрузок без покупки дорогого оборудования. k3s потребляет меньше ресурсов, чем полный Kubernetes, при этом сохраняет совместимость с основными API и инструментами: kubectl, Helm, CSI-драйверами.

В этом руководстве разобрана установка k3s на TrueNAS Scale версии 22.02 и новее, настройка интеграции с ZFS для персистентных томов и деплой первого приложения. Все шаги проверены на практике. Вы получите рабочую основу для запуска контейнеров с постоянным хранилищем и внешним доступом.

Если вы ещё не развернули TrueNAS Scale, начните с базовой настройки TrueNAS. Для понимания работы с приложениями в TrueNAS Scale пригодится руководство по установке приложений.

Требования и подготовка системы

Перед установкой k3s убедитесь, что ваше оборудование соответствует минимальным требованиям. Это сэкономит время и предотвратит сбои на этапе запуска.

Аппаратные требования для TrueNAS Scale и k3s

Минимальная конфигурация для TrueNAS Scale с k3s:

  • 2 ядра CPU
  • 4 ГБ оперативной памяти
  • 20 ГБ свободного места на системном диске

Рекомендуемая конфигурация для комфортной работы:

  • 4 ядра CPU
  • 8 ГБ оперативной памяти и больше
  • SSD для системного пула

k3s в базовой конфигурации потребляет примерно 500 МБ RAM. Для сравнения, полный Kubernetes с kube-apiserver, kube-scheduler и etcd требует от 2 ГБ RAM. Разница существенна для домашнего сервера.

Проверка версии TrueNAS Scale и доступ по SSH

Откройте веб-интерфейс TrueNAS и проверьте версию системы в правом верхнем углу. Для корректной работы k3s нужна версия 22.02 или новее. Если версия устарела, выполните обновление по инструкции обновления TrueNAS.

Включите SSH: System Settings -> Services -> SSH. Установите флажок «Start Automatically» и запустите службу. Подключитесь к серверу:

ssh admin@IP_АДРЕС_TRUENAS

Перед установкой создайте резервную копию конфигурации: System Settings -> General -> Save Config. Это позволит быстро восстановить систему при сбое.

Установка k3s на TrueNAS Scale

Установка k3s на TrueNAS Scale выполняется через официальный скрипт. Он автоматически определяет архитектуру, загружает бинарные файлы и настраивает systemd-службу.

Использование официального скрипта установки

Выполните команду от root:

curl -sfL https://get.k3s.io | sh -s - --disable traefik --write-kubeconfig-mode 644

Разберём флаги:

  • --disable traefik - отключает встроенный ingress-контроллер Traefik. Это экономит ресурсы, если вы планируете использовать другой ingress-контроллер или не нуждаетесь в нём на первом этапе.
  • --write-kubeconfig-mode 644 - устанавливает права 644 на файл kubeconfig, чтобы читать его без sudo.

Проверьте статус службы:

sudo systemctl status k3s

Служба должна быть в состоянии active (running). Если статус failed, перейдите к разделу «Типичные проблемы и их решение».

Настройка kubectl для управления кластером

k3s создаёт kubeconfig в файле /etc/rancher/k3s/k3s.yaml. Скопируйте его на рабочую станцию:

scp admin@IP_АДРЕС_TRUENAS:/etc/rancher/k3s/k3s.yaml ~/.kube/config-truenas

Установите переменную окружения:

export KUBECONFIG=~/.kube/config-truenas

Проверьте подключение к кластеру:

kubectl get nodes

Вывод покажет один узел с именем вашего TrueNAS-сервера в статусе Ready.

Интеграция k3s с хранилищем ZFS

По умолчанию k3s использует local-path provisioner, который создаёт тома на локальном диске. Для ZFS нужен CSI-драйвер, который умеет создавать dataset и управлять ими динамически.

Установка CSI-драйвера для ZFS

Проект democratic-csi поддерживает ZFS и работает с TrueNAS Scale. Установите его через Helm:

helm repo add democratic-csi https://democratic-csi.github.io/charts/
helm repo update
helm install zfs-nfs democratic-csi/democratic-csi --namespace democratic-csi --create-namespace

Альтернатива - zfs-localpv от OpenEBS. Он проще в настройке, но менее гибок при работе с NFS.

Создание StorageClass и проверка PVC

Создайте StorageClass для ZFS. Пример манифеста:

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: zfs-nfs
provisioner: org.democratic-csi.nfs
parameters:
  server: IP_АДРЕС_TRUENAS
  share: /mnt/ваш_пул/ваш_dataset
  mountPermissions: "0777"
reclaimPolicy: Delete
volumeBindingMode: Immediate

Примените манифест:

kubectl apply -f storageclass.yaml

Создайте тестовый PVC:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: test-pvc
spec:
  storageClassName: zfs-nfs
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi

Проверьте статус PVC:

kubectl get pvc

Статус должен быть Bound. Это значит, что CSI-драйвер создал dataset в ZFS и привязал его к PVC.

Деплой первого приложения в кластер

Для проверки кластера разверните Nginx с персистентным хранилищем. Это базовый пример, который подтверждает работоспособность всех компонентов.

Создание Deployment и Service

Создайте файл nginx.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.25
        ports:
        - containerPort: 80
        volumeMounts:
        - name: data
          mountPath: /usr/share/nginx/html
      volumes:
      - name: data
        persistentVolumeClaim:
          claimName: test-pvc
---
apiVersion: v1
kind: Service
metadata:
  name: nginx
spec:
  type: NodePort
  selector:
    app: nginx
  ports:
  - port: 80
    targetPort: 80
    nodePort: 30080

Примените манифест:

kubectl apply -f nginx.yaml

Ключевые поля: replicas задаёт количество экземпляров, volumeMounts подключает PVC к контейнеру, nodePort открывает доступ на порту 30080.

Проверка работы приложения и доступ извне

Проверьте статус подов:

kubectl get pods

Под nginx должен быть в статусе Running. Проверьте сервис:

kubectl get svc

Откройте браузер и перейдите по адресу http://IP_АДРЕС_TRUENAS:30080. Вы увидите стандартную страницу Nginx. Это подтверждает, что приложение работает и доступно извне.

Типичные проблемы и их решение

При установке и эксплуатации k3s на TrueNAS Scale возникают типовые ошибки. Ниже - причины и способы их устранения.

Ошибка: k3s не может запуститься

Проверьте логи службы:

journalctl -u k3s -n 50

Частая причина - занятый порт 6443. k3s использует его для API-сервера. Если порт занят другим процессом, измените его через флаг:

curl -sfL https://get.k3s.io | sh -s - --https-listen-port 6444

Другая причина - недостаточно памяти. Убедитесь, что на сервере свободно минимум 2 ГБ RAM перед запуском k3s.

Проблемы с созданием PVC на ZFS

Если PVC остаётся в статусе Pending, проверьте dataset ZFS. Он должен существовать и быть доступен для записи. Проверьте права доступа:

ls -la /mnt/ваш_пул/ваш_dataset

Посмотрите логи CSI-драйвера:

kubectl logs -n democratic-csi -l app=democratic-csi

Ошибка «dataset not found» указывает на неверное имя dataset в StorageClass. Убедитесь, что путь указан точно, включая регистр символов.

Безопасность и рекомендации по эксплуатации

Базовая установка k3s не предназначена для продакшена. Настройте минимальный уровень безопасности перед запуском рабочих нагрузок.

Настройка RBAC и сетевых политик

Создайте отдельные ServiceAccount для приложений и ограничьте их права. Пример RoleBinding для чтения:

apiVersion: v1
kind: ServiceAccount
metadata:
  name: app-sa
  namespace: default
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: default
  name: pod-reader
rules:
- apiGroups: [""]
  resources: ["pods"]
  verbs: ["get", "list"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: read-pods
  namespace: default
subjects:
- kind: ServiceAccount
  name: app-sa
  namespace: default
roleRef:
  kind: Role
  name: pod-reader
  apiGroup: rbac.authorization.k8s.io

Включите NetworkPolicy для изоляции подов. k3s по умолчанию использует Flannel, который поддерживает NetworkPolicy.

Обновление k3s и TrueNAS Scale

k3s обновляется через тот же скрипт установки:

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

Перед обновлением создайте резервную копию данных и конфигурации. TrueNAS Scale обновляется через веб-интерфейс: System Settings -> Update. Подробная процедура описана в руководстве по обновлению TrueNAS.

Заключение: дальнейшие шаги

Вы развернули k3s на TrueNAS Scale, настроили интеграцию с ZFS и запустили первое приложение. Это рабочая основа для домашнего Kubernetes-кластера.

Дальнейшие шаги:

  • Установите Helm для управления чартами
  • Настройте мониторинг через Prometheus и Grafana
  • Добавьте дополнительные узлы для масштабирования
  • Настройте ingress-контроллер для маршрутизации HTTP-трафика

Для продакшена и серьёзных нагрузок рассмотрите облачные решения. Timeweb Cloud предоставляет управляемый Kubernetes с автоматическим масштабированием и резервным копированием.

Экспериментируйте с кластером, тестируйте конфигурации и делитесь опытом. Практика - самый быстрый способ освоить Kubernetes.

Поделиться:
Сохранить гайд? В закладки браузера