Я протестировал ваш сценарий на Mac и Windows, и краткий ответ на него таков: по умолчанию вам требуется подключение к Интернету для корректной работы кластера Kubernetes.
Причина указана в документации :
Требуется подключение к Интернету.Образы, необходимые для запуска сервера Kubernetes, загружаются и создаются в виде контейнеров, и устанавливается команда Program Files \ Docker \ Docker \ Resources \ bin \ kubectl.exe`.
Что не указано в документациив том, что образы, которые используются для запуска Kubernetes в Docker, возможно, мгновенно проверяют наличие обновлений и новых образов для модулей докера.
В Windows вы можете видеть, что когда вы выключаете Интернет, закрываете Docker и затем запускаете его.снова вы можете видеть, что:
PS C:\Users\Administrator> kubectl get pods --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
docker compose-7447646cf5-hzdbl 0/1 CrashLoopBackOff 0 21m
docker compose-api-6fbc44c575-b5b47 0/1 CrashLoopBackOff 1 21m
kube-system etcd-docker-for-desktop 1/1 Running 1 20m
kube-system kube-apiserver-docker-for-desktop 1/1 Running 1 20m
kube-system kube-controller-manager-docker-for-desktop 1/1 Running 1 20m
kube-system kube-dns-86f4d74b45-chzdc 3/3 Running 3 21m
kube-system kube-proxy-xsksv 1/1 Running 1 21m
kube-system kube-scheduler-docker-for-desktop 1/1 Running 1 20m
> PS C:\Users\Administrator> kubectl get pods -n kube-system Unable to
> connect to the server: EOF
Машины переходят на CrashLoopBackOff
или ImagePullBackOff
, поэтому Kubernetes Cluster не работает, потому что он не может загружать новые образы в соответствии со своими политиками.Я нашел, как предотвратить эту ошибку:
PS C:\Users\Administrator> kubectl get deployments --all-namespaces NAMESPACE NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE docker compose 1 1 1 1 33m docker compose-api 1 1 1 1 33m kube-system kube-dns 1 1 1 1 33m
Вы можете увидеть развертывания, и теперь мы можем изменить Политика извлечения образа на IfNotPresent.Обратите внимание, что мы должны сделать это с обоими развертываниями в пространстве имен Docker.Отредактируйте его: PS C:\Users\Administrator> kubectl edit deployment compose -n docker
spec:
containers:
- args:
- --kubeconfig
- ""
- --reconciliation-interval
- 30s
image: docker/kube-compose-controller:v0.3.9
imagePullPolicy: Alwaysspec:
containers:
- args:
- --kubeconfig
- ""
- --reconciliation-interval
- 30s
image: docker/kube-compose-controller:v0.3.9
imagePullPolicy: IfNotPresent
Разница между Mac и Windows заключается в том, что Mac показывает ошибку через некоторое время, пока Windows завершает цикл.Надеюсь это поможет.
Обновление: Из того, что я видел, есть несколько сценариев.Интересно, что флажок обновления не оказал влияния на эти события: 1) редактирование развертываний и автономный перезапуск (перезапуск ноутбука) не перезаписывают imagePullPolicy 2) редактирование развертываний и онлайн-перезапуск ноутбука не перезаписывают imagePullPolicy 3), если при перезапуске вы понимали перезапуск кластерав меню Docker, тогда да, он перезаписывает все файлы развертывания.Я искал эти файлы yaml, но их нигде нет в файловой системе Windows, также я не уверен, сработает ли это, так как это изменит контрольную сумму этих файлов, а Docker не сможет ее получить.Другой вариант заключается в том, что это может быть просто невозможно, так как докер в Windows:
Изображения, необходимые для запуска сервера Kubernetes, загружаются и создаются в виде контейнеров