代码之家  ›  专栏  ›  技术社区  ›  achahbar

kubernetes吊舱被困在集装箱建造中

  •  9
  • achahbar  · 技术社区  · 7 年前

    我有一个raspberry pi集群(一个主集群,3个节点)

    我的基本图像是:raspbian stretch lite

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

    一切就绪后,我尝试在集群上运行一个nginx pod(首先是一些副本,但现在只有一个pod),如下所示 kubectl运行我的nginx--image=nginx

    但不知何故,pod被困在“容器创建”状态,当我运行docker映像时,我看不到正在拖动nginx映像。通常,nginx图像并没有那么大,所以必须在现在(15分钟)之前拉出来。 kubectl描述pod给出了pod沙盒未能创建的错误,kubernetes将记录创建它。

    我搜索了关于这个问题的所有信息,并尝试了stackoverflow上的解决方案(重新启动以重新启动集群,搜索了Descripte pods,新的网络插件使用flannel进行了尝试),但我看不到实际的问题是什么。 我在Virtual box中做了完全相同的事情(只是ubuntu而不是ARM),一切都正常。

    首先,我认为这是一个权限问题,因为我以普通用户的身份运行一切,但在vm中,我做了同样的事情,没有任何改变。 然后,我检查了kubectl get pods--所有名称空间,以验证weaver网络和kube dns的pods是否正在运行,以及是否存在任何问题。

    这是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
    

    JournalCtrl-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
    

    问题似乎出在我的网络插件上。在my/etc/systemd/system/kubelet中。服务第10天。库比德。形态。网络插件的标志是否存在?环境=kubelet\u network\u args--cni bin dir=/etc/cni/net。d --网络插件=cni

    2 回复  |  直到 7 年前
        1
  •  9
  •   achahbar    7 年前

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

    我克隆了我的树莓皮图像,因为我想要一个基本配置。img表示何时需要向集群中添加新节点。

    Weave network(我使用的插件)被弄糊涂了,因为在每个节点和主操作系统上都有相同的机器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社区是多么重要和伟大。给未来的人们,他们将面对这个问题。我希望这个解决方案能纠正您的错误,并减少您搜索愚蠢小事的时间。

        2
  •  6
  •   Ross Peoples    7 年前

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

    kubectl describe pod <name> -n <namespace>

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

    推荐文章