Kubernetes не может получить изображение с неизвестной ошибкой BLOB-объекта
Я создал образ Docker на основе microsoft/dotnet-framework консольного приложения C#.NET, созданного для контейнеров Windows, а затем убедился, что могу запускать образ в контейнере локально. Я успешно отправил изображение в наш реестр контейнеров Azure. Сейчас я пытаюсь создать развертывание в нашей службе Azure Kubernetes, но получаю ошибку:
Не удалось получить изображение "container-registry/image:tag": ошибка rpc: code = Unknown desc = unknown blob
Я вижу эту ошибку на своем развертывании, модулях и наборах реплик на приборной панели Kubernetes.
У нас уже есть секрет, который работает с приложением Azure-голосования, поэтому я не думаю, что это связано с секретами, но я могу ошибаться.
До сих пор я пытался создать это развертывание, вставив следующий YAML в диалоговое окно Создать панель управления Kubernetes:
apiVersion:
kind: Deployment
metadata:
name: somename
spec:
selector:
matchLabels:
app: somename
tier: backend
replicas: 2
template:
metadata:
labels:
app: somename
tier: backend
spec:
containers:
- name: somename
image: container-registry/image:tag
ports:
- containerPort: 9376
И я также попытался запустить варианты этой команды kubectl:
kubectl run deploymentname --image=container-registry/image:tag
В моем исследовании я попытался прочитать о различных частях k8, чтобы понять, что может пойти не так, но для меня все это довольно ново. Я думаю, что это может быть связано с тем, что это образ Windows Server 2016. Один из членов команды успешно добавил учебный код Azure для голосования в нашу AKS, поэтому мне интересно, есть ли ограничение на одну службу AKS, выполняющую развертывание для контейнеров на базе Windows и Linux. Я вижу бегом az aks list
что у AKS есть agentPoolProfile с "osType": "Linux", но я не знаю, означает ли это просто, что оркестратор находится в Linux или контейнеры в модулях должны быть основаны на Linux. Я обнаружил, что в стеке возникают вопросы об ошибке "неизвестный блоб", и кажется, что ответ на этот вопрос может поддержать мою гипотезу, но я не могу сказать, связан ли этот вопрос с моими вопросами.
Поскольку ошибка связана с невозможностью получить образ, я не думаю, что это связано с настройкой службы для этого развертывания. Добавление сервиса ничего не изменило. Я пытался перестроить свое приложение, подозревая, что изображение было повреждено, но перестройка и перерегистрация не дали результата. Еще одна вещь, о которой я не читал, - это вопрос и ответ о явном несоответствии (которое я пока не до конца понимаю).
Я не пытался создать местный Kubernetes. Я не знаю, обычно ли это делают люди.
Резюме вопросов:
- Что вызывает эту неизвестную ошибку BLOB-объекта? Связано ли это с несоответствием контейнера Windows / контейнера Linux?
- Влияет ли профиль пула агентов на все узлы в кластере или только на "главные" узлы?
Дайте мне знать, если вам нужна дополнительная информация. Благодарю.
1 ответ
1. Что вызывает эту неизвестную ошибку BLOB-объекта? Связано ли это с несоответствием контейнера Windows / контейнера Linux? Это потому, что вы пытаетесь запустить контейнер Docker на базе Windows на хосте Linux. Это не имеет ничего общего с Кубернетес или АКС. В настоящее время AKS находится в режиме предварительного просмотра и поддерживает только среды Linux. Чтобы быть более точным, когда вы предоставляете свой кластер AKS (az aks create
), все ваши миньоны k8s (рабочие узлы) будут Linux-блоками и, следовательно, не смогут запускать контейнеры на основе Windows.
2. Влияет ли профиль пула агентов на все узлы в кластере или только на "главные" узлы? Он влияет на рабочие узлы и используется для их логической группировки, чтобы вы могли лучше управлять распределением рабочей нагрузки. В будущем, когда AKS будет поддерживать как Linux, так и Windows, вы сможете, например, создавать пулы агентов на основе типа ОС и указывать k8s развертывать ваши службы на основе Windows только на хостах (агентах) на основе Windows.
Я не уверен, относится ли это к вам, потому что это может показаться новым развертыванием, но у меня это уже дважды было для существующих в среде GKE. Я использую образ Ubuntu с nodejs, все на основе Linux. Почему-то кажется, что изображение повреждено или что-то в настройке GKE так думает. Я могу решить проблему, нажав еще раз в реестр, а затем направив развертывание на новый образ.
Я могу воспроизвести его, просто вытащив образ докера с другой аутентифицированной машины, например:
docker pull gcr.io/project-name/app-name@sha256:somelongrandomhash
Это дает мне ту же ошибку. Как только я это заметил, я просто переделал изображение, и оно сработало. Поэтому, хотя это может быть вызвано различием в базовом образе ОС, как предлагали другие, проверьте локальное извлечение, чтобы увидеть, хорошо ли это работает.