Kubernetes непригоден для использования при отключении от Интернета (Windows) - PullRequest
0 голосов
/ 11 октября 2018

Я использую Docker для Windows с Kubernetes.Если я отключен от Интернета и перезагружаю компьютер или перезагружаю Kubernetes, он застревает в постоянном режиме kubernetes is starting....Я могу запустить kubectl proxy, но ничего не помогает.

Например, kubectl get pod дает мне Unable to connect to the server: EOF

Редактировать: Решение

  • Снимите флажок Automatically check for updates в Общих настройках Kubernetes, чтобы он мне исправился.
  • (необязательно) Измените развертывание на использование imagePullPolicy: IfNotPresent.Я сделал это для моего kubernetes-dashboard развертывания.

enter image description here

Как ни странно, статус kubernetes все равно застрял бы в Kubernetes is starting..., хотя ясмог взаимодействовать с ним через kubectl

. После ответа @ aurleius я попытался установить патчи для своих развертываний compose и compose-api, но эти настройки терялись при каждом сбросе через контекстное меню правой кнопки мыши.Я написал скрипт powershell для исправления развертывания, поэтому на всякий случай помещаю его сюда.

# Patch compose
kubectl patch deployment compose -n docker -p "{ \`"spec\`": { \`"template\`": { \`"spec\`": { \`"containers\`": [{ \`"name\`": \`"compose\`", \`"imagePullPolicy\`": \`"IfNotPresent\`" }] } } } }"

# Patch compose-api
kubectl patch deployment compose-api -n docker -p "{ \`"spec\`": { \`"template\`": { \`"spec\`": { \`"containers\`": [{ \`"name\`": \`"compose\`", \`"imagePullPolicy\`": \`"IfNotPresent\`" }] } } } }"

1 Ответ

0 голосов
/ 11 октября 2018

Я протестировал ваш сценарий на 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, загружаются и создаются в виде контейнеров

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...