我有一个树莓派集群(一个主节点,3个从节点)
我的基础镜像是:raspbian stretch lite
我已经建立了一个基本的 Kubernetes 集群,其中一个主节点可以看到所有节点(kubectl get nodes),并且它们都在运行。我使用了一个 weave 网络插件进行网络通信。
当一切都准备就绪时,我尝试在我的集群上运行一个 nginx pod(首先使用一些副本,但现在只有 1 个 pod),如下所示:
kubectl run my-nginx --image=nginx
但是,某种原因导致该 pod 在状态“Container creating”中卡住了,当我运行 docker images 时,我看不到正在拉取 nginx 镜像。通常,nginx 镜像并不是那么大,所以应该已经被拉取了(15 分钟)。kubectl describe pods 给出错误,即 pod 沙盒创建失败,Kubernetes 将重新创建它。
我搜索了与此问题有关的所有内容,并尝试了 stackoverflow 上的解决方案(重启集群以重新启动、搜索 describe pods、新网络插件和 flannel),但我看不到实际问题在哪里。我在 VirtualBox 中做了完全相同的事情(只是 Ubuntu 不是 ARM),一切都正常。
起初我认为这是权限问题,因为我以普通用户身份运行所有内容,但在虚拟机中,我也做了同样的事情,但没有改变。然后我检查了 kubectl get pods --all-namespaces,以验证 weaver 网络和 kube-dns 的 pod 是否正在运行,也没有发现任何问题。
这是树莓派的防火墙问题吗?weave 网络插件与 arm 设备不兼容(即使 Kubernetes 网站上说它是)?我猜测存在一个 API 网络问题,这就是为什么我无法在节点上运行我的 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 logs 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