首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从互联网断开时无法使用的Kubernetes (Windows)

从互联网断开时无法使用的Kubernetes (Windows)
EN

Stack Overflow用户
提问于 2018-10-11 06:35:32
回答 1查看 691关注 0票数 1

我用Docker for Windows和Kubernetes。如果我断开了与互联网的连接,重新启动了我的计算机,或者重新启动了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 is starting...与它进行交互,但库伯奈特的状态仍然会被困在kubectl中。

在@aurleius的回答之后,我尝试修补我的composecompose-api部署,但是每当我通过停靠点右键菜单重置时,这些设置就会丢失。我编写了一个powershell脚本来修补部署,所以我把它放在这里以防万一。

代码语言:javascript
复制
# 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\`" }] } } } }"
EN

回答 1

Stack Overflow用户

发布于 2018-10-11 17:20:20

我已经在Mac和Windows上测试了您的场景,简单的回答是,默认情况下,您需要Internet连接才能正确运行Kubernetes集群。

原因在文档中指定。

需要一个因特网连接。运行Kubernetes服务器所需的映像被下载并实例化为容器,并安装了Program Files\Docker\Docker\Resources\bin\kubectl.exe`命令。

文档没有指定的是,用于在Docker上运行Kubernetes的映像可能会立即检查停靠舱的更新和新映像。

在Windows上,您可以看到,当您关闭internet时,关闭Docker,然后再运行它,您可以看到:

代码语言:javascript
复制
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

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

代码语言:javascript
复制
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服务器所需的映像,并将其实例化为容器。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52753711

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档