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

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

    Содержание

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

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

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

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

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

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

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

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

    ПроблемаСимптомРешение
    Неправильное имя драйвераОшибка MountVolume.SetUp failedУстановите driver точно в значение connectors-csi
    Коннектор не найденОшибка could not get connectorУбедитесь, что коннектор существует в том же namespace
    Неверное имя конфигурацииКонфигурация Docker не создаётсяУстановите правильное значение 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Каталог конфигурации клиента Docker
    dockerd/etc/dockerКаталог конфигурации Docker daemon
    buildkitd/etc/buildkitКаталог конфигурации BuildKit daemon

    Анализ событий 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
    
    # Для dockerd
    kubectl exec <pod-name> -n <namespace> -- cat /etc/docker/daemon.json
    
    # Для buildkitd
    kubectl exec <pod-name> -n <namespace> -- cat /etc/buildkit/buildkitd.toml

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

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

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

    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>"
        }
      }
    }

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

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

    kubectl exec <pod-name> -n <namespace> -- cat /etc/docker/daemon.json

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

    {
      "insecure-registries": [
        "c-<connector-name>.<namespace>.svc.cluster.local"
      ]
    }

    Конфигурация 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

    Проблемы с небезопасным registry

    Симптомы:

    • Ошибки server certificate verification failed
    • Ошибки TLS handshake

    Устранение неполадок:

    1. Проверьте правильность настройки insecure registry:

      kubectl exec <pod-name> -n <namespace> -- cat /etc/docker/daemon.json
    2. Проверьте, использует ли runtime контейнера смонтированную конфигурацию:

      kubectl exec <pod-name> -n <namespace> -- docker info | grep -A 5 "Insecure Registries"
    3. Для containerd проверьте правильность настройки proxy адреса:

      kubectl exec -it <node-name> -n <namespace> -- cat /etc/containerd/config.toml | grep -A 10 registry

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

    Логи 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"

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