我用Docker for Windows和Kubernetes。如果我断开了与互联网的连接,重新启动了我的计算机,或者重新启动了Kubernetes,那么它就会陷入永久的kubernetes is starting...模式。我可以运行kubectl proxy,但是其他的都失败了。
kubectl get pod给了我Unable to connect to the server: EOF
编辑:解决方案
Automatically check for updates框,为我修复它。imagePullPolicy: IfNotPresent。我这样做是为了我的kubernetes-dashboard部署。

奇怪的是,尽管我能够通过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\`" }] } } } }"发布于 2018-10-11 17:20:20
我已经在Mac和Windows上测试了您的场景,简单的回答是,默认情况下,您需要Internet连接才能正确运行Kubernetes集群。
原因在文档中指定。
需要一个因特网连接。运行Kubernetes服务器所需的映像被下载并实例化为容器,并安装了Program Files\Docker\Docker\Resources\bin\kubectl.exe`命令。
文档没有指定的是,用于在Docker上运行Kubernetes的映像可能会立即检查停靠舱的更新和新映像。
在Windows上,您可以看到,当您关闭internet时,关闭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集群无法运行,因为它不能根据其策略下载新的图像。我发现了如何防止此错误:
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则会在循环中结束。希望这能有所帮助。
更新:我看到的有几种场景。有趣的是,update复选框对这些事件没有影响: 1)编辑部署,脱机重新启动(膝上型计算机重新启动)不会覆盖imagePullPolicy 2)编辑部署,联机膝上型计算机重新启动不会覆盖imagePullPolicy 3)如果通过重新启动您理解了Docker菜单中的集群重新启动选项,那么是的,它覆盖了所有部署文件。我寻找那些yaml文件,但在Windows文件系统中找不到它们,我也不确定这是否有效,因为它会改变这些文件的校验和,Docker无法接受。另一种选择是,这可能是不可能的,因为Windows上的停靠程序:
下载运行Kubernetes服务器所需的映像,并将其实例化为容器。
https://stackoverflow.com/questions/52753711
复制相似问题