Kubernetes在断开互联网连接时不可用(Windows) [英] Kubernetes unusable when disconnected from internet (Windows)
问题描述
我正在与Kubernetes一起使用Docker for Windows。如果我断开与互联网的连接并重新启动计算机或Kubernetes,那么它将陷入永久的kubernetes is starting...
模式。我可以运行kubectl proxy
,但任何其他操作都失败。
例如kubectl get pod
给我Unable to connect to the server: EOF
编辑:解决方案
- 取消选中Kubernetes常规设置中的
Automatically check for updates
框为我修复它。 - (可选)将您的部署更改为使用
imagePullPolicy: IfNotPresent
。我这样做是为了kubernetes-dashboard
部署。
奇怪的是,Kubernetes状态仍然停留在Kubernetes is starting...
,即使我能够通过kubectl
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`" }] } } } }"
推荐答案
我已经在Mac和Windows上测试了您的方案,对此的简短回答是,默认情况下,您需要互联网连接才能正确运行Kubernetes集群。
原因在documentation中指定:
需要Internet连接。运行所需的映像 下载Kubernetes服务器并将其实例化为容器,以及 已安装Program FilesDockerDockerResourcesinkubectl.exe`命令。
文档没有指定的是,用于在Docker上运行Kubernetes的映像可能会立即检查扩展坞Pod的更新和新映像。
在Windows上,您可以看到当您关闭互联网时,关闭Docker,然后再次运行它,您可以看到:
PS C:UsersAdministrator> 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:UsersAdministrator> kubectl get pods -n kube-system Unable to
> connect to the server: EOF
机器转到CrashLoopBackOff
或ImagePullBackOff
,因此Kubernetes集群没有运行,因为它无法根据其策略下载新镜像。
我已找到防止此错误的方法:
PS C:UsersAdministrator> 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
PS C:UsersAdministrator> 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服务器所需的镜像,并 实例化为容器
这篇关于Kubernetes在断开互联网连接时不可用(Windows)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!