Устранение проблем при установке или обновлении системы

В данном разделе приведены возможные проблемы при установке или обновлении системы и способы их решения.

Установка Kubernetes с помощью Kubespray: несовместимые версии пакетов

Проявление: во время работы скрипта установки Kubernetes с помощью Kubespray возникают ошибки несовместимости системных пакетов и тех, что поставляются вместе с установщиком, например:

cannot install both python3-3.8.19-4.el7.x86_64 from deps-offline and python3-3.8.20-4.el7.x86_64 from @System

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

Решение:

  1. На каждом из узлов кластера удалите конфликтующие пакеты, выполнив следующую команду для каждого из них:

    sudo dnf remove <package_name>

    Здесь:

    • <package_name> — имя пакета, установленного в системе (@System). В примере выше — python3-3.8.20-4.el7.x86_64.

    В зависимости от операционной системы на узле кластера может использоваться другой пакетный менеджер вместо dnf, например, rpm.
  2. Повторно запустите скрипт установки Kubernetes на машине, с которой запускали его ранее.

Longhorn: ошибка конфигурации

Проявление: при установке или обновлении системы возникает ошибка Unable to attach or mount volumes: unmounted volumes=[data], unattached volumes=[kube-api-access scripts data config tz]: timed out waiting for the condition. Установлен провайдер хранилища Longhorn.

Причина: некорректные настройки Longhorn или на узлах кластера не запущена служба iscsid.

Решение:

  1. Проверьте настройки Longhorn. Для этого выполните следующие действия:

    1. Осуществите проброс портов. Для этого выполните на хосте с сетевым доступом к master-узлу кластера следующую команду:

      kubectl -n longhorn-system port-forward service/longhorn-frontend <local_port>:80

      Здесь:

      • <local_port> — порт на хосте, по которому будет осуществляться доступ к Longhorn.

    2. В браузере откройте URL localhost:<local_port>, где <local_port> — порт с предыдущего шага. Отобразится панель управления Longhorn.

    3. Чтобы просмотреть и отредактировать конфигурацию узлов (реплик) Longhorn, перейдите в раздел Node.

    4. Если количество узлов Longhorn больше, чем количество worker-узлов кластера, удалите лишние узлы. Для этого нажмите на кнопку Remove Node в выпадающем меню в столбце Operation для каждого из лишних узлов.

    5. Для каждого узла Longhorn проверьте, не превышает ли объем выделенного ему пространства размер диска узла кластера:

      1. В выпадающем меню в столбце Operation нажмите на кнопку Edit node and disks.

      2. Если в поле Storage Reserved выделено больше пространства, чем размер диска узла кластера, уменьшите размер пространства и нажмите на кнопку Save.

        Рекомендуется выделять под Longhorn 30% диска узла кластера.
  2. Если исправление конфигурации Longhorn не решило проблему, проверьте, запущена ли служба iscsid на всех узлах кластера:

    1. На каждом узле кластера выполните команду:

      systemctl status iscsid
    2. Если статус службы отличается от active (running), запустите ее:

      systemctl start iscsid

Установка helm-чартов: ошибка cannot assign requested address

Проявление: установка helm-чартов завершается с ошибкой, содержащей сообщение cannot assign requested address, например:

Error: create: failed to create: Internal error occurred: Get "https://[::1]:6443/api/v1/namespaces/local-path-provisioner": dial tcp [::1]:6443: connect: cannot assign requested address

Причина: при развертывании кластера Kubernetes на одном или нескольких узлах не было отключено использование IPv6 или в кэше Kubernetes сохранились некорректные настройки.

Решение: убедитесь, что использование IPv6 отключено на всех узлах кластера, перезапустите узлы кластера и установщик системы. Для этого:

  1. На каждом узле кластера выполните следующие действия:

    1. Откройте файл /etc/sysctl.d/99-disable-ipv6.conf.

    2. Проверьте, добавлены ли в файл следующие строки:

      net.ipv6.conf.all.disable_ipv6 = 1
      net.ipv6.conf.default.disable_ipv6 = 1
      net.ipv6.conf.lo.disable_ipv6 = 1
    3. Если строки отсутствуют:

      1. Добавьте строки в файл и сохраните его.

      2. Примените изменения с помощью следующей команды:

        sudo sysctl --system
    4. Перезагрузите узел кластера.

  2. Перезапустите установщик системы.

MetalLB: ошибка запуска в окружении Альт Сервер

Проявление: отсутствует доступ к веб-интерфейсу системы. На узлах кластера установлена ОС Альт Сервер или Альт СП Сервер. Под metallb-controller в пространстве имен metallb-system не запущен.

Причина: ошибка конфигурации MetalLB.

Решение: внесите правку в конфигурацию MetalLB, выполнив следующую команду на master-узле кластера:

ubectl apply -f - <<EOF
apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
  name: evo-pool
  namespace: metallb-system
spec:
  addresses:
  - <system_ip>/32
  autoAssign: true
  avoidBuggyIPs: false
---
apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:
  name: evo-nlb
  namespace: metallb-system
EOF

Здесь:

Установка в неинтерактивном режиме: ошибка создания стрима NATS

Проявление: установка основного экземпляра системы в неинтерактивном режиме завершается с ошибкой создания стрима NATS:

nats: error: could not create Stream: insufficient storage resources available (10047)

Причина: некорректная настройка лимитов объемов данных в NATS:

  • Суммарный объем данных, указанный с помощью переменных в таблице Настройки стримов на стороне центрального кластера, превышает значение переменной INFRA_NATS_STORAGE_SIZE.

  • Суммарный объем данных, указанный с помощью переменных в таблице Настройки стримов на стороне пространства, превышает значение переменной INFRA_NATS_SAT_STORAGE_SIZE.

Решение:

  1. Измените настройки стримов менеджера пространств в конфигурационном файле установщика согласно пункту 3 инструкции по установке основного экземпляра системы в неинтерактивном режиме так, чтобы устранить некорректную конфигурацию.

  2. Перезапустите установку в неинтерактивном режиме.

Обновление системы: повышенное потребление памяти на worker-узлах

Проявление: после обновления системы наблюдается повышенное потребление оперативной памяти (ОЗУ) на одном или нескольких worker-узлах. С подом сервиса evo.space.space-manager наблюдаются следующие проблемы:

  • Под не переходит в состояние Running и циклически перезапускается.

  • В логах пода отображаются сообщения вида:

    Container space-manager failed liveness probe, will be restarted
    Readiness probe failed:
    timeout: health rpc did not complete within 1s
    Readiness probe failed:
    timeout: failed to connect service "<pod_ip>:50051" within 1s
    Liveness probe failed:
    timeout: failed to connect service "<pod_ip>:50051" within 1s

    Здесь:

    • <pod_ip> — IP-адрес пода.

  • В подробной информации о поде, полученной с помощью команды kubectl describe, отображается следующая информация о контейнере space-manager:

    Last State:     Terminated
        Reason:       Error
        Exit Code:    13

Причина: недостаточный объем ОЗУ для сервиса evo.space.space-manager при обработке активных списков с большим количеством записей.

Решение: временно измените лимиты потребления памяти, настройки сборщика мусора и длительность ожидания liveness-проб сервиса evo.space.space-manager. Для этого:

  1. Откройте конфигурацию контроллера Deployment evo.space.space-manager для редактирования, выполнив следующую команду:

    kubectl -n <namespace> edit deployment evo.space.space-manager

    Здесь:

    • <namespace> — название пространства имен, в котором установлена система.

  2. Создайте копию текущей версии конфигурации контроллера, чтобы после решения проблемы восстановить состояние конфигурации и освободить занятые ресурсы.

  3. Измените конфигурацию контроллера:

    1. В секции spec.template.spec.containers.resources увеличьте запрашиваемый объем ОЗУ и его лимит.

      Рекомендуется выделить максимально возможный объем ОЗУ, доступный в вашей инсталляции, чтобы гарантировать успешную обработку данных самых больших активных списков.
      Пример конфигурации для выделения ОЗУ
      resources:
        limits:
          cpu: "1"
          memory: 12Gi
        requests:
          cpu: 20m
          memory: 4Gi
    2. В секции spec.template.spec.containers.livenessProbe увеличьте интервал liveness-пробы. Для этого установите 600 секунд (10 минут) в качестве значения параметра initialDelaySeconds.

      Пример конфигурации liveness-пробы с интервалом 600 секунд
      livenessProbe:
        failureThreshold: 6
        grpc:
          port: 50051
          service: ""
        periodSeconds: 10
        successThreshold: 1
        timeoutSeconds: 5
        initialDelaySeconds: 600
    3. В секции spec.template.spec.env добавьте переменную NODE_OPTIONS следующим образом:

      - name: NODE_OPTIONS
        value: --max-old-space-size=<max_old_space_size>

      Здесь:

      • <max_old_space_size> — размер в МиБ секции устаревшей памяти движка V8, используемого Node.js. При заполнении этой секции V8 будет активировать сборщик мусора для более эффективного освобождения ОЗУ.

        Значение параметра <max_old_space_size> указывается без единиц измерения.

      Рекомендуется устанавливать для <max_old_space_size> значение в 75% от лимита (limits.cpu) ОЗУ, ранее выделенного для контроллера spec.template.spec.containers.resources. Например, при лимите ОЗУ контроллера 12Gi (12288Mi) в качестве <max_old_space_size> рекомендуется указать 9216:

      Пример конфигурации переменной NODE_OPTIONS
      - name: NODE_OPTIONS
        value: --max-old-space-size=9216
  4. Сохраните изменения в конфигурации контроллера.

  5. Проследите за состоянием пода evo.space.space-manager и дождитесь, когда он перейдет в статус Running:

    kubectl -n <namespace> get pod -l app.kubernetes.io/name=space-manager --watch

    Здесь:

    • <namespace> — название пространства имен, в котором установлена система.

  6. Восстановите предыдущую версию конфигурации контроллера, чтобы освободить занятые ресурсы:

    1. Откройте конфигурацию контроллера Deployment evo.space.space-manager для редактирования, выполнив следующую команду:

      kubectl -n <namespace> edit deployment evo.space.space-manager

      Здесь:

      • <namespace> — название пространства имен, в котором установлена система.

    2. Замените конфигурацию контроллера на копию, созданную на шаге 2 текущей инструкции.

    3. Сохраните изменения в конфигурации контроллера.

Была ли полезна эта страница?

Обратная связь