kubernetes pods 停留在容器创建
kubernetes pods stuck at containercreating
我有一个 raspberry pi 集群(一个主节点,3 个节点)
我的基本图像是:raspbian stretch lite
我已经设置了一个基本的 kubernetes 设置,其中主节点可以看到他的所有节点 (kubectl get nodes),并且它们都是 运行ning。
我使用 weave 网络插件进行网络通信
当一切都设置好后,我尝试在我的集群上 运行 一个 nginx pod(首先是一些副本,但现在只有 1 个 pod),如下所示
kubectl 运行 my-nginx --image=nginx
但是不知何故 pod 卡在状态 "Container creating" ,当我 运行 docker 图像时我看不到正在拉取的 nginx 图像。通常 nginx 镜像不是那么大,所以它必须在现在(15 分钟)之前被拉取。
kubectl describe pods 给出了 pod 沙箱创建失败的错误,kubernetes 将重新创建它。
我搜索了有关此问题的所有内容并尝试了 Whosebug 上的解决方案(重启以重新启动集群,搜索描述 pods,新网络插件用 flannel 尝试)但我看不到实际问题是什么.
我在 Virtual box 中做了完全相同的事情(只是 ubuntu 而不是 ARM )并且一切正常。
首先,我认为这是一个权限问题,因为我 运行 一切都是普通用户,但在 vm 中我做了同样的事情,没有任何改变。
然后我检查了 kubectl get pods --all-namespaces 以验证 weaver 网络和 kube-dns 的 pods 是 运行ning 并且那里也没有错。
这是 Raspberry pi 中的防火墙问题吗?
weave 网络插件是否与 arm 设备不兼容(甚至 kubernetes 网站也说是)?
我猜有一个 api 网络问题,这就是为什么我无法在节点 运行nning 上获取我的 pod
[编辑]
日志文件
kubectl describe 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
您可以通过找到尝试拉取图像的节点来查看它是否与网络相关:
kubectl describe pod <name> -n <namespace>
SSH 到节点,运行 docker pull nginx
就可以了。如果它在手动拉取图像时遇到问题,则可能与网络有关。
谢谢大家回答我的问题。
我现在解决了我的问题。对于以后遇到我的问题的任何人,解决方案如下。
我克隆了我的 raspberry pi 图像,因为我想要一个 basicConfig.img 当我需要向我的集群添加一个新节点时,当一个节点出现故障时。
Weave 网络(我使用的插件)感到困惑,因为在每个节点和主节点上 os 具有相同的 machine-id。当我删除机器 ID 并创建一个新机器 ID(并重新启动节点)时,我的错误得到了修复。
执行此操作的命令是
sudo rm /etc/machine-id
sudo rm /var/lib/dbus/machine-id
sudo dbus-uuidgen --ensure=/etc/machine-id
再一次考验我的耐心。因为我的kubernetes设置正常,我的raspberry pi os也正常。我在 kubernetes 社区的某个人的帮助下创立了这个。这再次向我们展示了我们的 IT 社区是多么重要和伟大。对于未来会遇到这个问题的人。我希望这个解决方案能够解决您的错误,并减少您搜索愚蠢的小东西的时间。
我有一个 raspberry pi 集群(一个主节点,3 个节点)
我的基本图像是:raspbian stretch lite
我已经设置了一个基本的 kubernetes 设置,其中主节点可以看到他的所有节点 (kubectl get nodes),并且它们都是 运行ning。 我使用 weave 网络插件进行网络通信
当一切都设置好后,我尝试在我的集群上 运行 一个 nginx pod(首先是一些副本,但现在只有 1 个 pod),如下所示 kubectl 运行 my-nginx --image=nginx
但是不知何故 pod 卡在状态 "Container creating" ,当我 运行 docker 图像时我看不到正在拉取的 nginx 图像。通常 nginx 镜像不是那么大,所以它必须在现在(15 分钟)之前被拉取。 kubectl describe pods 给出了 pod 沙箱创建失败的错误,kubernetes 将重新创建它。
我搜索了有关此问题的所有内容并尝试了 Whosebug 上的解决方案(重启以重新启动集群,搜索描述 pods,新网络插件用 flannel 尝试)但我看不到实际问题是什么. 我在 Virtual box 中做了完全相同的事情(只是 ubuntu 而不是 ARM )并且一切正常。
首先,我认为这是一个权限问题,因为我 运行 一切都是普通用户,但在 vm 中我做了同样的事情,没有任何改变。 然后我检查了 kubectl get pods --all-namespaces 以验证 weaver 网络和 kube-dns 的 pods 是 运行ning 并且那里也没有错。
这是 Raspberry pi 中的防火墙问题吗? weave 网络插件是否与 arm 设备不兼容(甚至 kubernetes 网站也说是)? 我猜有一个 api 网络问题,这就是为什么我无法在节点 运行nning 上获取我的 pod
[编辑] 日志文件
kubectl describe 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
您可以通过找到尝试拉取图像的节点来查看它是否与网络相关:
kubectl describe pod <name> -n <namespace>
SSH 到节点,运行 docker pull nginx
就可以了。如果它在手动拉取图像时遇到问题,则可能与网络有关。
谢谢大家回答我的问题。 我现在解决了我的问题。对于以后遇到我的问题的任何人,解决方案如下。
我克隆了我的 raspberry pi 图像,因为我想要一个 basicConfig.img 当我需要向我的集群添加一个新节点时,当一个节点出现故障时。
Weave 网络(我使用的插件)感到困惑,因为在每个节点和主节点上 os 具有相同的 machine-id。当我删除机器 ID 并创建一个新机器 ID(并重新启动节点)时,我的错误得到了修复。 执行此操作的命令是
sudo rm /etc/machine-id
sudo rm /var/lib/dbus/machine-id
sudo dbus-uuidgen --ensure=/etc/machine-id
再一次考验我的耐心。因为我的kubernetes设置正常,我的raspberry pi os也正常。我在 kubernetes 社区的某个人的帮助下创立了这个。这再次向我们展示了我们的 IT 社区是多么重要和伟大。对于未来会遇到这个问题的人。我希望这个解决方案能够解决您的错误,并减少您搜索愚蠢的小东西的时间。