• Русский
  • Устранение неполадок конфигурации нагрузки CSI

    В этом руководстве приведены подробные шаги по диагностике и решению распространённых проблем с драйвером Connectors CSI при монтировании конфигураций OCI registry в нагрузках.

    Обзор распространённых проблем

    ПроблемаВозможные причиныВлияние
    Ошибки монтирования томаНекорректная конфигурация CSI, драйвер недоступенНагрузка не запускается
    Конфигурация Docker не найденаНеправильный путь монтирования, отсутствуют томаОшибки при pull/push образов
    Ошибки аутентификацииПроблемы с токеном, ошибки конфигурацииДоступ к registry запрещён

    Проверка конфигурации тома CSI

    Проверьте конфигурацию тома CSI в YAML вашей нагрузки:

    volumes:
    - name: docker-config
      csi:
        readOnly: true
        driver: connectors-csi
        volumeAttributes:
          connector.name: "<connector-name>"
          configuration.names: "docker-config"

    Распространённые параметры конфигурации:

    Название конфигурацииОписаниеСценарий использования
    docker-configСтандартная конфигурация аутентификации OCI клиента, например buildkit, buildahОбщие операции с контейнерами
    buildkitdКонфигурация демона BuildKitДля операций на базе BuildKit

    Распространённые проблемы конфигурации:

    ПроблемаСимптомРешение
    Неправильное имя драйвераОшибка MountVolume.SetUp failedУстановите driver ровно в connectors-csi
    Коннектор не найденОшибка could not get connectorУбедитесь, что коннектор существует в том же namespace
    Неправильное имя конфигурацииКонфигурация не создаётсяУстановите правильное значение configuration.names
    Несовпадение namespaceОшибка монтирования томаУбедитесь, что коннектор находится в том же namespace, что и pod

    Как проверить:

    # Проверить, существует ли коннектор
    kubectl get connector <connector-name> -n <namespace>
    
    # Проверить, что коннектор в состоянии Ready
    kubectl get connector <connector-name> -n <namespace> -o jsonpath='{.status.conditions[?(@.type=="Ready")].status}'
    
    # Проверить доступность CSI драйвера
    kubectl get pods -n connectors-system -l app.kubernetes.io/name=connectors-csi

    Проверка монтирования тома

    Проверьте правильность конфигурации монтирования тома:

    volumeMounts:
    - name: docker-config
      mountPath: "/root/.docker"  # Для docker-config

    Распространённые пути монтирования для разных конфигураций:

    КонфигурацияРекомендуемый путь монтированияОписание
    docker-config/root/.docker или $HOME/.dockerКаталог конфигурации аутентификации OCI клиента, например buildkit, buildah
    buildkitd/etc/buildkitКаталог конфигурации демона BuildKit

    Анализ событий Pod

    Проверьте события Pod на наличие ошибок, связанных с монтированием:

    kubectl describe pod <pod-name> -n <namespace>

    Распространённые сообщения об ошибках и решения:

    Сообщение об ошибкеПричинаРешение
    MountVolume.SetUp failedПроблемы с CSI драйвером или конфигурациейПроверьте состояние драйвера и конфигурацию тома
    waiting for ephemeral inline CSI driverДрайвер CSI не готов или не найденУбедитесь, что поды CSI драйвера запущены
    connector not foundКоннектор не существует или неправильный namespaceСоздайте коннектор или исправьте namespace
    failed to generate configurationОшибки рендеринга шаблонаПроверьте состояние коннектора и ConnectorClass

    Пример ошибки и её решение:

      Warning  FailedMount  3m (x5 over 5m)  kubelet  MountVolume.SetUp failed for volume "docker-config" : 
      rpc error: code = NotFound desc = connector "oci-registry" not found

    Решение: Создайте коннектор или исправьте имя коннектора в атрибутах тома.

    Поиск сгенерированных файлов конфигурации OCI

    Найдите файлы конфигурации:

    # Для docker-config
    kubectl exec <pod-name> -n <namespace> -- cat /root/.docker/config.json
    
    # Для buildkitd
    kubectl exec <pod-name> -n <namespace> -- cat /etc/buildkit/buildkitd.toml

    Если файлы конфигурации не найдены, проверьте:

    1. Успешность монтирования тома
    2. Состояние драйвера CSI
    3. Наличие прав у ServiceAccount
    4. Состояние Ready коннектора
    5. Совпадение пути монтирования с ожидаемым путём пользователя контейнера

    Анализ содержимого конфигурации OCI клиента

    docker-config

    Проверьте сгенерированный файл config.json:

    kubectl exec <pod-name> -n <namespace> -- cat /root/.docker/config.json

    Ожидаемые элементы конфигурации:

    {
      "auths": {
        "c-<connector-name>.<namespace>.svc.cluster.local": {
          "auth": "<base64-encoded-token>"
        }
      }
    }

    Конфигурация buildkitd

    Проверьте сгенерированный файл buildkitd.toml:

    kubectl exec <pod-name> -n <namespace> -- cat /etc/buildkit/buildkitd.toml

    Ожидаемые элементы конфигурации:

    insecure-entitlements = [ "network.host", "security.insecure" ]
    [registry."c-<connector-name>.<namespace>.svc.cluster.local"]
      http = true

    Расширенное устранение неполадок

    Логи CSI драйвера

    Проверьте логи CSI драйвера для получения подробной информации об ошибках:

    kubectl logs -n connectors-system -l app.kubernetes.io/name=connectors-csi -c csi-driver

    Логи прокси-сервиса

    Проверьте логи прокси-сервиса на предмет проблем с аутентификацией или доступом:

    kubectl logs -n connectors-system -l app.kubernetes.io/name=connectors-proxy

    Тестирование с диагностическим Pod

    Создайте диагностический pod для проверки функциональности OCI:

    apiVersion: v1
    kind: Pod
    metadata:
      name: oci-debug-pod
      namespace: <namespace>
    spec:
      containers:
      - name: debug
        image: docker:20.10
        command: ["sleep", "3600"]
        volumeMounts:
        - name: docker-config
          mountPath: "/root/.docker"
      volumes:
      - name: docker-config
        csi:
          driver: connectors-csi
          readOnly: true
          volumeAttributes:
            connector.name: "<connector-name>"
            configuration.names: "docker-config"

    Дополнительные ресурсы