如何排查/修复与正在运行的 Kubernetes pod 交互的问题(超时错误)



我有两个EC2实例,一个运行Kubernetes Master节点,另一个运行Worker 节点。 我可以从拉取 docker 映像的部署文件成功创建一个 pod,它以"正在运行"的状态开头。 但是,当我尝试与之交互时,出现超时错误。

例如:kubectl logs <pod-name> -v6

输出:

Config loaded from file /home/ec2-user/.kube/config GET https://<master-node-ip>:6443/api/v1/namespaces/default/pods/<pod-name> 200 OK in 11 milliseconds GET https://<master-node-ip>:6443/api/v1/namespaces/default/pods/<pod-name>/log 500 Internal Server Error in 30002 milliseconds Server response object: [{"status": "Failure", "message": "Get https://<worker-node-ip>:10250/containerLogs/default/<pod-name>/<container-name>: dial tcp <worker-node-ip>:10250: i/o timeout", "code": 500 }]

我可以通过运行 kubectl describe pod <pod-name> 来获取有关 pod 的信息,并将状态确认为正在运行。 关于如何准确确定导致此错误的原因和/或如何修复它的任何想法?

可能,你没有在你的 Kubernetes 集群中安装任何网络插件。它不包含在 kubeadm 安装中,但它需要在不同节点上调度的 Pod 之间进行通信。最受欢迎的是印花布和法兰绒。由于您已经有一个集群,因此您可能希望选择使用与集群初始化期间kubeadm init --pod-network-cidr=xx.xx.xx.xx/xx相同的子网的网络加载项。

  • 192.168.0.0/16 是 Calico 网络插件的默认值
  • 10.244.0.0/16 是法兰绒网络插件的默认值

可以通过下载相应的 YAML 文件并将默认子网替换为所需的子网来更改它。然后只需用kubectl apply -f filename.yaml涂抹即可

最新更新