Устранение неполадок конфигурации нагрузки 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
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"

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