Kubernetes在断开互联网连接时不可用(Windows) [英] Kubernetes unusable when disconnected from internet (Windows)

查看:22
本文介绍了Kubernetes在断开互联网连接时不可用(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

与其交互 按照@aurleius的回答,我尝试修补我的composecompose-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

机器转到CrashLoopBackOffImagePullBackOff,因此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

您可以看到部署,现在我们可以将Image Pull Policy更改为IfNotPresent。请注意,我们必须在docker命名空间中对这两个部署执行此操作。 编辑它: 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆