我有一个覆盆子pi集群(一个主节点,3个节点)
我的基本形象是:raspbian stretch lite
我已经设置了一个基本的kubernetes设置,其中一个主人可以看到他的所有节点(kubectl获取节点)并且他们都在运行。 我使用编织网络插件进行网络通信
当所有设置完成后,我尝试在我的群集上运行nginx pod(首先使用一些副本,但现在只有1个pod),如下所示 kubectl运行my-nginx --image = nginx
但不知何故,pod陷入了状态" Container creation" ,当我运行docker图像时,我无法看到nginx图像被拉动。并且通常nginx图像不是那么大,所以它现在必须被拉(15分钟)。 kubectl描述pods给出了pod沙箱无法创建的错误,而kubernetes将重新创建它。
我搜索了有关此问题的所有内容并尝试了stackoverflow上的解决方案(重新启动以重新启动群集,搜索描述pod,新网络插件尝试使用法兰绒)但我无法看到实际问题是什么。 我在虚拟框中完成了同样的事情(只是ubuntu而不是ARM),一切正常。
首先我认为这是一个权限问题,因为我以普通用户身份运行所有内容,但在vm中我做了同样的事情并且没有任何改变。 然后我检查kubectl获取pods --all-namespaces来验证weaver网络和kube-dns的pod正在运行,并且那里也没有任何错误。
这是Raspberry pi中的防火墙问题吗? 编织网络插件是不兼容的(甚至kubernetes网站说它是)与arm设备? 我猜测有一个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中。网络插件的标志是否存在? environment = kubelet_network_args --cni-bin-dir = / etc / cni / net.d --network-插件= CNI
答案 0 :(得分:4)
谢谢大家回答我的问题。 我现在解决了我的问题。对于今后提出问题的任何人来说,解决方案如下:
我克隆了我的覆盆子pi图像,因为我需要一个basicConfig.img,当我需要在我的集群中添加一个新节点时才会出现。
编织网络(我使用的插件)感到困惑,因为在每个节点和主服务器上,操作系统具有相同的机器ID。当我删除机器ID并创建一个新的(并重新启动节点)时,我的错误得到修复。 执行此操作的命令是
sudo rm /etc/machine-id
sudo rm /var/lib/dbus/machine-id
sudo dbus-uuidgen --ensure=/etc/machine-id
我的耐心再次受到考验。因为我的kubernetes设置正常,我的覆盆子pi os是正常的。我是在kubernetes社区的某个人的帮助下创立的。这再次向我们展示了我们的IT社区是多么重要和伟大。对未来的人们来说这个问题。我希望这个解决方案可以解决你的错误,并减少你在一个愚蠢的小事后搜索的时间。
答案 1 :(得分:1)
您可以通过找到尝试拉取图片的节点来查看其网络是否相关:
kubectl describe pod <name> -n <namespace>
SSH到节点,并在其上运行docker pull nginx
。如果手动拉动图像时出现问题,则可能与网络有关。