Подготовка инфраструктуры k3s

Перед началом подготовки контейнерной инфраструктуры, необходимо провести подготовку хост-системы

Установка системы оркестрации контейнеров k3s

Загрузка и установка дистрибутива

Загрузка и установка системы оркестрации k3s выполняется одним из указанных способов:

  • онлайн-загрузка из сети Интернет

    Для загрузки дистрибутива и автоматической установки системы оркестрации k3s необходимо выполнить команду:

    sudo curl -sfL https://get.k3s.io | sh -
  • офлайн-загрузка

    Загрузка установочного архива производится из официального репозитория (файлового хранилища) компании IVA Technologies, либо выполняется иным способом.

    Для развертывания инфраструктуры k3s и менеджера управления пакетами Helm необходим установочный архив k3s_offline.tar.gz.

    Порядок выполняемых действий:

    1. загрузить архив k3s_offline.tar.gz из официального репозитория (файлового хранилища) компании IVA Technologies и скопировать его на серверы, на которых будет производиться развертывание системы оркестрации k3s

      Необходимо обеспечить не менее 600 МБ свободного места на жестком диске, куда будет производиться распаковка установочного архива k3s_offline.tar.gz
    2. создать директорию для распаковки архива и распаковать его, выполнив команду:

      mkdir -p ./k3s-helm && tar -xfz k3s_offline.tar.gz -C ./k3s-helm
    3. перейти в директорию k3s-helm, в которую распакован архив и запустить скрипт установки с помощью команды:

      cd ./k3s-helm && ./install-k3s-airgap.sh

      В результате выполнения скрипта также автоматически устанавливается менеджер пакетов Helm

Настройка пользовательского окружения

Для настройки пользовательского окружения необходимо скопировать конфигурацию k3s в домашний каталог пользователя root.

Порядок выполняемых действий:

  1. войти с правами пользователя root, выполнив команду:

    sudo su -
  2. выполнить копирование конфигурации k3s:

    cd /root
    mkdir ~/.kube
    cp /etc/rancher/k3s/k3s.yaml ~/.kube/config
    chown $(id -u):$(id -g) ~/.kube/config
    export KUBECONFIG=~/.kube/config
    
    tee -a ~/.bashrc > /dev/null <<EOF
    export KUBECONFIG=~/.kube/config
    EOF

    Появление сообщения mkdir: невозможно создать каталог «/root/.kube»: Файл существует не является ошибкой.
    Данный каталог уже был создан ранее, предупреждение можно проигнорировать и продолжить процесс копирования конфигурации k3s

  3. выйти из режима пользователя root, выполнив команду:

    exit

    При необходимости, конфигурацию k3s можно скопировать в собственную домашнюю директорию, выполнив следующие действия:

    sudo mkdir ~/.kube
    sudo cp /etc/rancher/k3s/k3s.yaml ~/.kube/config
    sudo chown $(id -u):$(id -g) ~/.kube/config
    export KUBECONFIG=~/.kube/config
    
    tee -a ~/.bashrc > /dev/null <<EOF
    export KUBECONFIG=~/.kube/config
    EOF

    Для проверки использовать команду:

    kubectl get nodes
    Пример вывода:
    NAME       STATUS   ROLES                  AGE   VERSION
    isolated   Ready    control-plane,master   16m   v1.32.6+k3s1

Проверка установки

После выполнения установки системы оркестрации и настройки пользовательского окружения, необходимо выполнить проверку состояния сервиса k3s.

Порядок выполняемых действий:

  1. проверить состояние сервиса k3s с помощью команды:

    sudo systemctl status k3s
  2. вывести список всех узлов кластера с помощью команды:

    sudo kubectl get nodes
    Пример вывода:
    NAME       STATUS   ROLES                  AGE     VERSION
    isolated   Ready    control-plane,master   8m59s   v1.32.6+k3s1
  3. вывести список системных компонентов k3s с помощью команды:

    sudo kubectl get pods -n kube-system
    Пример вывода:
    NAME                                      READY   STATUS      RESTARTS      AGE
    coredns-5688667fd4-vtgcv                  1/1     Running     2 (33m ago)   6d23h
    helm-install-traefik-crd-kq7r4            0/1     Completed   0             6d23h
    helm-install-traefik-dn6p4                0/1     Completed   2             6d23h
    local-path-provisioner-774c6665dc-t9b4w   1/1     Running     2 (33m ago)   6d23h
    metrics-server-6f4c6675d5-8rr5l           1/1     Running     2 (33m ago)   6d23h
    svclb-traefik-84389891-l4pnf              2/2     Running     2 (33m ago)   6d6h
    traefik-c98fdf6fb-rjthc                   1/1     Running     1 (33m ago)   6d6h

    Статусы инсталляционных подов пространства (namespace) kube-system (в примере: helm-install-traefik-crd-kq7r4 и helm-install-traefik-dn6p4) должны быть в состоянии Completed.

    Статусы остальных подов должны быть в состоянии Running.

Настройка containerd

Порядок выполняемых действий:

  1. открыть настройки сервиса containerd, выполнив команду:

    sudo nano /etc/systemd/system/k3s.service
  2. задать значение LimitNOFILE:

    [Service]
    LimitNOFILE=65536
    Настройка containerd
  3. перезапустить сервис k3s, чтобы новая конфигурация вступила в силу, выполнив команды:

    sudo systemctl daemon-reload
    sudo systemctl restart k3s

Установка менеджера пакетов Helm

Helm — менеджер пакетов для Kubernetes, предназначенный для упрощения развертывания, управления, обновления и обслуживания приложений, состоящих из множества Kubernetes-объектов.

Если менеджер пакетов Helm уже развернут в текущей инфраструктуре, то данный шаг необходимо пропустить

Для установки Helm необходимо выполнить команду:

sudo curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash

Для проверки версии необходимо выполнить команду:

helm version
Процесс удаления k3s описан в дополнительной информации

Возможные ошибки и их устранение

Статусы подов пространства (namespace) kube-system находятся в состоянии ErrImagePull или ImagePullBackOff

Порядок выполняемых действий:

  • определить, какие поды имеют статус с ошибкой и определить их идентификационный номер — id, выполнив команду:

    sudo kubectl get pods -n kube-system
  • проверить диагностические сообщения для каждого пода, имеющего статус с ошибкой, выполнив команду:

    sudo kubectl describe pod helm-install-traefik-<ID_POD> -n kube-system

    где <ID_POD> — идентификатор пода, например dn6p4 для пода helm-install-traefik-dn6p4 или kq7r4 для пода helm-install-traefik-crd-kq7r4

    Пример вывода ошибки:
     Warning  Failed 6d23h (x5 over 6d23h)   kubelet Failed to pull image "rancher/klipper-helm:v0.9.8-build20250709": failed to pull and unpack image "docker.io/rancher/klipper-helm:v0.9.8-build20250709": failed to resolve reference "docker.io/rancher/klipper-helm:v0.9.8-build20250709": failed to do request: Head "https://registry-1.docker.io/v2/rancher/klipper-helm/manifests/v0.9.8-build20250709": dial tcp: lookup registry-1.docker.io: Try again
  • проверить доступность указанной версии контейнера в локальном окружении Kubernetes с помощью команды:

    sudo crictl images

    Если контейнер необходимой версии отсутствует:

    • при онлайн-установке: проверить сетевую доступность официального Git-репозитория k3s

    • при офлайн-установке: скопировать архив контейнера, загруженный из сети Интернет и загрузить в окружение Kubernetes с помощью команды:

      ctr --address /run/k3s/containerd/containerd.sock -n=k8s.io images import <ARCHIVE_HELM>

      где <ARCHIVE_HELM> — название архива с контейнером, например, klipper-helm.tar

  • через 2—​3 минуты проверить статус подов, выполнив команду:

    sudo kubectl get pods -n kube-system