开发者社区> CTO技术共享> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

Kubernetes 日常故障解决

简介: Kubernetes 日常故障解决
+关注继续查看

Kubernetes 日常故障解决

image

问题 1:K8S 集群服务访问失败?


image


image


原因分析:证书不能被识别,其原因为:自定义证书,过期等。

解决方法:更新证书即可。

问题 2:K8S 集群服务访问失败?

curl: (7) Failed connect to 10.103.22.158:3000; Connection refused

原因分析:端口映射错误,服务正常工作,但不能提供服务。

解决方法:删除 svc,重新映射端口即可。

kubectl delete svc nginx-deployment

问题 3:K8S 集群服务暴露失败?

Error from server (AlreadyExists): services "nginx-deployment" already exists

原因分析:该容器已暴露服务了。

解决方法:删除 svc,重新映射端口即可。

问题 4:外网无法访问 K8S 集群提供的服务?

原因分析:K8S 集群的 type 为 ClusterIP,未将服务暴露至外网。


解决方法:修改 K8S 集群的 type 为 NodePort 即可,于是可通过所有 K8S 集群节点访问服务。

kubectl edit svc nginx-deployment

问题 5:pod 状态为 ErrImagePull?

readiness-httpget-pod   0/1     ErrImagePull   0          10s


image


原因分析:image 无法拉取;


image


image


解决方法:更换镜像即可。

问题 6:创建 init C 容器后,其状态不正常?

NAME READY STATUS RESTARTS AGEmyapp-pod 0/1 Init:0/2 0 20s

原因分析:查看日志发现,pod 一直出于初始化中;然后查看 pod 详细信息,定位 pod


创建失败的原因为:初始化容器未执行完毕。

Error from server (BadRequest): container "myapp-container" in pod "myapp-pod" is waiting to start: PodInitializing


image


image


image


waiting for myservice
Server: 10.96.0.10Address: 10.96.0.10:53
** server can't find myservice.default.svc.cluster.local: NXDOMAIN
*** Can't find myservice.svc.cluster.local: No answer*** Can't find myservice.cluster.local: No answer*** Can't find myservice.default.svc.cluster.local: No answer*** Can't find myservice.svc.cluster.local: No answer*** Can't find myservice.cluster.local: No answer

解决方法:创建相关 service,将 SVC 的 name 写入 K8S 集群的 coreDNS 服务器中,于是


coreDNS 就能对 POD 的 initC 容器执行过程中的域名解析了。

kubectl apply -f myservice.yaml


image


image


image


NAME READY STATUS RESTARTS AGE
myapp-pod 0/1 Init:1/2 0 27mmyapp-pod 0/1 PodInitializing 0 28mmyapp-pod 1/1 Running 0 28m


image


问题 7:探测存活 pod 状态为 CrashLoopBackOff?

原因分析:镜像问题,导致容器重启失败。


解决方法:更换镜像即可。


image


image


问题 8:POD 创建失败?

readiness-httpget-pod 0/1 Pending 0 0sreadiness-httpget-pod 0/1 Pending 0 0sreadiness-httpget-pod 0/1 ContainerCreating 0 0sreadiness-httpget-pod 0/1 Error 0 2sreadiness-httpget-pod 0/1 Error 1 3sreadiness-httpget-pod 0/1 CrashLoopBackOff 1 4sreadiness-httpget-pod 0/1 Error 2 15sreadiness-httpget-pod 0/1 CrashLoopBackOff 2 26sreadiness-httpget-pod 0/1 Error 3 37sreadiness-httpget-pod 0/1 CrashLoopBackOff 3 52sreadiness-httpget-pod 0/1 Error 4 82s

原因分析:镜像问题导致容器无法启动。


image


解决方法:更换镜像。


image


image


问题 9:POD 的 ready 状态未进入?

readiness-httpget-pod   0/1     Running   0          116s


原因分析:POD 的执行命令失败,无法获取资源。


image


解决方法:进入容器内部,创建 yaml 定义的资源


image


image


问题 10:pod 创建失败?


image


原因分析:yml 文件内容出错—-使用中文字符;

解决方法:修改 myregistrykey 内容即可。


image


11、kube-flannel-ds-amd64-ndsf7 插件 pod 的 status 为 Init:0/1?


image


排查思路:kubectl -n kube-system describe pod kube-flannel-ds-amd64-ndsf7 #查询 pod 描述信息;


image


原因分析:k8s-slave1 节点拉取镜像失败。


解决方法:登录 k8s-slave1,重启 docker 服务,手动拉取镜像。


image


k8s-master 节点,重新安装插件即可。

kubectl create -f kube-flannel.yml;kubectl get nodes


image


12、K8S 创建服务 status 为 ErrImagePull?


image


排查思路:

kubectl describe pod test-nginx


image


原因分析:拉取镜像名称问题。

解决方法:删除错误 pod;重新拉取镜像;

kubectl delete pod test-nginx;kubectl run test-nginx --image=10.0.0.81:5000/nginx:alpine

13、不能进入指定容器内部?


image


原因分析:yml 文件 comtainers 字段重复,导致该 pod 没有该容器。

解决方法:去掉 yml 文件中多余的 containers 字段,重新生成 pod。


image


image


14、创建 PV 失败?


image


原因分析:pv 的 name 字段重复。

解决方法:修改 pv 的 name 字段即可。


image


15、pod 无法挂载 PVC?


image


image


原因分析:pod 无法挂载 PVC。


image


image


accessModes 与可使用的 PV 不一致,导致无法挂载 PVC,由于只能挂载大于 1G 且 accessModes 为 RWO 的 PV,故只能成功创建 1 个 pod,第 2 个 pod 一致 pending,按序创建时则第 3 个 pod 一直未被创建;


解决方法:修改 yml 文件中 accessModes 或 PV 的 accessModes 即可。


image


16、问题:pod 使用 PV 后,无法访问其内容?


image


原因分析:nfs 卷中没有文件或权限不对。


image


image


解决方法:在 nfs 卷中创建文件并授予权限。


image


image


17、查看节点状态失败?

Error from server (NotFound): the server could not find the requested resource (get services http:heapster:)

原因分析:没有 heapster 服务。

解决方法:安装 promethus 监控组件即可。


image


image


18、pod 一直处于 pending’状态?


image


原因分析:由于已使用同样镜像发布了 pod,导致无节点可调度。


image


解决方法:删除所有 pod 后部署 pod 即可。


image


19、helm 安装组件失败?

[root@k8s-master01 hello-world]# helm install
Error: This command needs 1 argument: chart nam
[root@k8s-master01 hello-world]# helm install ./Error: no Chart.yaml exists in directory "/root/hello-world"

原因分析:文件名格式不对。


解决方法:mv chart.yaml Chart.yaml


image



版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Kubernetes 故障排查 eBPF
Kubernetes 故障排查 eBPF
44 0
Kubernetes故障排查eBPF
eBPF 是 extended BPF的缩写,具有更强大的功能。老的 BPF 现在叫 cBPF (classic BPF)。 首先是字节码的指令集更加丰富了,并且现在有了 64 位的寄存器(相较于上古时期的 32 位的CPU),有了 JIT mapping 技术和 LLVM 的后端。JIT 指的的是 Just In Time,实时编译。 一般的 ePBF 的工作流是编写一个 C 的子集(比如没有循环),通过 LLVM 编译到字节码,然后生成 ELF 文件,然后 JIT 编译进内核。 eBPF 一个最重要的功能是可以做到动态跟踪(dynamic tracing),可以不修改程序直接监控一个
39 0
Kubernetes-存储(一)
对于这个问题其实很简单,容器中持久化的文件生命周期是短暂的,如果容器中程序崩溃宕机,kubelet 就会重新启动,容器中的文件将会丢失,所以对于有状态的应用容器中持久化存储是至关重要的一个环节;另外很多时候一个 Pod 中可能包含多个 Docker 镜像,在 Pod 内数据也需要相互共享,Kubernetes 中 Pod 也可以增加副本数量,遇到故障时 Pod 可以转移到其它节点,为了浮动节点都能够访问统一的持久化存储以及容器间共享数据,Kubernetes 中定义了 Volume 来解决这些问题 ,从本质上讲,Volume 只是一个目录,可能包含一些数据,Pod 中的容器可以访问它。
56 0
kubernetes搭建
当前最后的saas系统
282 0
Kubernetes容器运行时接口-CRI
Kubernetes提供了多种容器开放接口用于对接不同的后端来提供资源,如提供计算资源的容器运行时接口(Container Runtime Interface, CRI),提供网络资源的容器网络接口(Container Network Interface, CNI),提供提供存储资源的容器存储接口(Container Storage Interface, CSI)。这篇作为这系列的开篇,主要介绍了kubelet的CRI接口实现。
614 0
Kubernetes必备知识: 扩展调度器
Kubernetes 自带了一个默认调度器kube-scheduler,其内置了很多节点预选和优选的调度算法,一般调度场景下可以满足要求。但是在一些特殊场景下,默认调度器不能满足我们复杂的调度需求。我们就需要对调度器进行扩展,以达到调度适合业务场景的目的。
707 0
Kubernetes源码编译
目前有2种方法, 一种方法是直接使用golang来编译出二进制包, 另外一种方法是通过容器来编译. 前提当然是本地需要下载k8s源码 Golang编译 这种方法比较简单, 进入源码目录直接执行make命令即可, 不过对应的k8s版本, 对go语言版本有一些要求, 具体可看k8s网站或者直接编译会提示需要哪个版本go语言.
5810 0
Kubernetes是什么?
本文讲的是Kubernetes是什么?【编者的话】你能向你的老板,同事解释清楚Kubernetes到底是个什么东西吗?本文应该能帮助到你。
1856 0
+关注
CTO技术共享
专注大数据、架构框架、集群、中间件、分布式、数据库、监控、开源、基础架构等技术分享,助力数字化转型。
279
文章
47
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载