Устранение неполадок конфигурации нагрузки CSI
В этом руководстве приведены подробные шаги по диагностике и решению распространённых проблем с Connectors CSI Driver при монтировании конфигураций OCI registry в нагрузках.
Содержание
Обзор распространённых проблем
Проверка конфигурации тома CSI
Проверьте конфигурацию тома CSI в YAML вашей нагрузки:
volumes:
- name: docker-config
csi:
readOnly: true
driver: connectors-csi
volumeAttributes:
connector.name: "<connector-name>"
configuration.names: "docker-config"
Распространённые параметры конфигурации:
Распространённые проблемы конфигурации:
Как проверить:
# Проверить, существует ли коннектор
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
Распространённые пути монтирования для разных конфигураций:
Анализ событий Pod
Проверьте события Pod на наличие проблем с монтированием:
kubectl describe pod <pod-name> -n <namespace>
Распространённые сообщения об ошибках и решения:
Пример ошибки и её решение:
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
Если файлы конфигурации не найдены, проверьте:
- Успешность монтирования тома
- Состояние CSI драйвера
- Наличие прав у ServiceAccount
- Статус Ready у коннектора
- Совпадение пути монтирования с ожидаемым путём пользователя контейнера
Анализ содержимого конфигурации 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
Устранение неполадок:
-
Проверьте правильность настройки insecure registry:
kubectl exec <pod-name> -n <namespace> -- cat /etc/docker/daemon.json
-
Проверьте, использует ли runtime контейнера смонтированную конфигурацию:
kubectl exec <pod-name> -n <namespace> -- docker info | grep -A 5 "Insecure Registries"
-
Для 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"
Дополнительные ресурсы