【问题标题】:kubernetes pods stuck at containercreatingkubernetes pods 卡在 containercreating
【发布时间】:2018-08-13 06:33:18
【问题描述】:

我有一个树莓派集群(一个主节点,3 个节点)

我的基本形象是:raspbian stretch lite

我已经设置了一个基本的 kubernetes 设置,其中 master 可以看到他的所有节点(kubectl get nodes)并且它们都在运行。 我使用 weave 网络插件进行网络通信

当一切都设置好后,我尝试在我的集群上运行一个 nginx pod(首先有一些副本,但现在只有 1 个 pod),如下所示 kubectl 运行 my-nginx --image=nginx

但不知何故,pod 卡在“容器创建”状态,当我运行 docker 图像时,我看不到 nginx 图像被拉取。通常一个 nginx 镜像不是那么大,所以它现在必须被拉出来(15 分钟)。 kubectl describe pods 给出 pod 沙箱创建失败的错误,kubernetes 将重新创建它。

我搜索了有关此问题的所有内容并尝试了 stackoverflow 上的解决方案(重新启动以重新启动集群,搜索描述 pods,新的网络插件尝试使用 flannel)但我看不出实际问题是什么。 我在 Virtual box 中做了同样的事情(只是 ubuntu 而不是 ARM )并且一切正常。

首先我认为这是一个权限问题,因为我以普通用户身份运行所有内容,但在 vm 中我做了同样的事情并且没有任何改变。 然后我检查了 kubectl get pods --all-namespaces 以验证 weaver 网络和 kube-dns 的 pod 是否正在运行,并且那里也没有任何问题。

这是 Raspberry pi 中的防火墙问题吗? weave 网络插件是否与 arm 设备不兼容(甚至 kubernetes 网站都说是)? 我猜有一个 api 网络问题,这就是为什么我不能让我的 pod 在节点上运行

[编辑] 日志文件

kubectl 描述 podName

>     
>     Name:           my-nginx-9d5677d94-g44l6 Namespace:      default Node: kubenode1/10.1.88.22 Start Time:     Tue, 06 Mar 2018 08:24:13
> +0000 Labels:         pod-template-hash=581233850
>                     run=my-nginx Annotations:    <none> Status:         Pending IP: Controlled By:  ReplicaSet/my-nginx-9d5677d94 Containers: 
> my-nginx:
>         Container ID:
>         Image:          nginx
>         Image ID:
>         Port:           80/TCP
>         State:          Waiting
>           Reason:       ContainerCreating
>         Ready:          False
>         Restart Count:  0
>         Environment:    <none>
>         Mounts:
>           /var/run/secrets/kubernetes.io/serviceaccount from default-token-phdv5 (ro) Conditions:   Type           Status  
> Initialized    True   Ready          False   PodScheduled   True
> Volumes:   default-token-phdv5:
>         Type:        Secret (a volume populated by a Secret)
>         SecretName:  default-token-phdv5
>         Optional:    false QoS Class:       BestEffort Node-Selectors:  <none> Tolerations:     node.kubernetes.io/not-ready:NoExecute for
> 300s
>                      node.kubernetes.io/unreachable:NoExecute for 300s Events:   Type     Reason                  Age   From               
> Message   ----     ------                  ----  ----               
>     -------   Normal   Scheduled               5m    default-scheduler   Successfully assigned my-nginx-9d5677d94-g44l6 to kubenode1   Normal  
> SuccessfulMountVolume   5m    kubelet, kubenode1  MountVolume.SetUp
> succeeded for volume "default-token-phdv5"   Warning 
> FailedCreatePodSandBox  1m    kubelet, kubenode1  Failed create pod
> sandbox.   Normal   SandboxChanged          1m    kubelet, kubenode1 
> Pod sandbox changed, it will be killed and re-created.

kubectl 记录 podName

Error from server (BadRequest): container "my-nginx" in pod "my-nginx-9d5677d94-g44l6" is waiting to start: ContainerCreating

journalctl -u kubelet 给出这个错误

Mar 12 13:42:45 kubeMaster kubelet[16379]: W0312 13:42:45.824314   16379 cni.go:171] Unable to update cni config: No networks found in /etc/cni/net.d
Mar 12 13:42:45 kubeMaster kubelet[16379]: E0312 13:42:45.824816   16379 kubelet.go:2104] Container runtime network not ready: NetworkReady=false reason:NetworkPluginNotReady message:docker: network plugin is not ready: cni config uninitialized

问题似乎出在我的网络插件上。在我的 /etc/systemd/system/kubelet.service.d/10.kubeadm.conf 中。网络插件的标志存在吗?环境= kubelet_network_args --cni-bin-dir=/etc/cni/net.d --network-plugin=cni

【问题讨论】:

  • 你能添加你看到的实际错误日志吗?
  • 感谢您的回复。我用日志文件编辑了我的问题

标签: raspberry-pi kubernetes containers sandbox raspbian


【解决方案1】:

感谢大家回答我的问题。 我现在解决了我的问题。对于将来遇到我的问题的任何人,解决方案如下。

我克隆了我的树莓派图像,因为我需要一个 basicConfig.img,以便在我需要向我的集群添加一个新节点时使用。

Weave 网络(我使用的插件)感到困惑,因为在每个节点和主控上,操作系统都有相同的机器 ID。当我删除机器 ID 并创建一个新的(并重新启动节点)时,我的错误得到了修复。 执行此操作的命令是

sudo rm /etc/machine-id
sudo rm /var/lib/dbus/machine-id
sudo dbus-uuidgen --ensure=/etc/machine-id

我的耐心再次受到考验。因为我的 kubernetes 设置是正常的,而我的树莓派操作系统是正常的。我在 kubernetes 社区的某个人的帮助下创建了这个。这再次向我们展示了我们的 IT 社区是多么重要和伟大。对于未来会提出这个问题的人。我希望这个解决方案能解决您的错误,并减少您搜索一个愚蠢的小东西的时间。

【讨论】:

  • 几天来我一直在寻找这个问题的答案,这对我有用。我正在使用 debootstrap 生成自定义 Raspbian 映像,它们都以相同的机器 ID 结束。感谢您发布此答案!
  • 没问题,我感觉到你的挣扎:D
  • @SAndrew 你对同样的问题是什么意思?你遇到了什么问题?
  • @achahbar 容器卡在 ContainerCreating。尝试了您的命令,但没有运气
  • @SAndrew 我不是 Kubernetes 方面的专家,这是我在 Kubernetes 中的第一次设置。如果我是你看看我的老问题(这不是我第一次问这种问题),有很多人给了我可能的解决方案。之后(可能你已经这样做了)检查网络插件并调试,尝试另一个插件。在虚拟盒子中尝试 raspberry pi 是 arm 设备,不适用于 kubernetes。很抱歉不能再帮你了
【解决方案2】:

你可以通过查找尝试拉取图像的节点来查看它是否与网络相关:

kubectl describe pod &lt;name&gt; -n &lt;namespace&gt;

SSH 到节点,并在其上运行docker pull nginx。如果手动拉取图像时遇到问题,则可能与网络有关。

【讨论】:

  • 我试过你的解决方案,但是节点可以手动拉取图像。当我尝试 kubectl describe pod(使用 pod 的名称)时,我无法创建沙箱,kubelet 正在尝试重新创建沙箱
  • 我编辑了我的问题,您可以看到它尝试创建 pod 沙箱,但未能创建
猜你喜欢
  • 2018-09-14
  • 1970-01-01
  • 2017-12-13
  • 2018-03-04
  • 2019-03-03
  • 1970-01-01
  • 2020-01-29
  • 2020-05-19
  • 2020-04-20
相关资源
最近更新 更多