k8s集群部分常见问题处理
目錄
部分常見問題處理
Coredns CrashLoopBackOff 導(dǎo)致無法成功添加工作節(jié)點的問題
添加工作節(jié)點時提示token過期
kubectl 執(zhí)行命令報“The connection to the server localhost:8080 was refused”
網(wǎng)絡(luò)組件flannel無法完成初始化
部分節(jié)點無法啟動pod
最后
部分常見問題處理
結(jié)合我們上篇文章(鏈接:集群故障處理之處理思路以及聽診三板斧(三十四))的處理思路和手段,接下來我們就進行一些實踐講解。
Coredns CrashLoopBackOff 導(dǎo)致無法成功添加工作節(jié)點的問題
k8s集群安裝完成之后,當我們添加工作節(jié)點時,可能會在長久的等待之中而無任何進展,這時可以使用以下命令來查看k8s各個服務(wù)的狀態(tài):
kubectl get pods -n kube-system -o wide初步診斷容器崩潰,我們需要進一步查看日志,使用“kubectl logs”:
kubectl log -f coredns-5c98db65d4-8wt9z -n kube-system這次我們獲得了以下具體錯誤:
github.com/coredns/coredns/plugin/kubernetes/controller.go:322: Failed to list *v1.Namespace: Get https://10.96.0.1:443/api/v1/namespaces?limit=500&resourceVersion=0: dial tcp 10.96.0.1:443: connect: no route to host解決方案:
這問題很有可能是防火墻(iptables)規(guī)則錯亂或者緩存導(dǎo)致的,可以依次執(zhí)行以下命令進行解決:
systemctl stop kubelet systemctl stop docker iptables --flush iptables -tnat --flush systemctl start kubelet systemctl start docker添加工作節(jié)點時提示token過期
集群注冊token的有效時間為24小時,如果集群創(chuàng)建完成后沒有及時添加工作節(jié)點,那么我們需要重新生成token。相關(guān)命令如下所示:
#生成token kubeadm token generate #根據(jù)token輸出添加命令 kubeadm token create <token> --print-join-command --ttl=0然后僅需復(fù)制打印出來的命令到工作節(jié)點執(zhí)行即可。
kubectl 執(zhí)行命令報“The connection to the server localhost:8080 was refused”
作為集群管理的核心,工作節(jié)點上的kubectl可能一上來就跪了,如下圖所示:
出現(xiàn)這個問題的原因是kubectl命令需要使用kubernetes-admin的身份來運行,在“kubeadm int”啟動集群的步驟中就生成了“/etc/kubernetes/admin.conf”。
因此,解決方法如下,將主節(jié)點中的【/etc/kubernetes/admin.conf】文件拷貝到工作節(jié)點相同目錄下:
#復(fù)制admin.conf,請在主節(jié)點服務(wù)器上執(zhí)行此命令 scp /etc/kubernetes/admin.conf 172.16.2.202:/etc/kubernetes/admin.conf scp /etc/kubernetes/admin.conf 172.16.2.203:/etc/kubernetes/admin.conf然后分別在工作節(jié)點上配置環(huán)境變量:
#設(shè)置kubeconfig文件 export KUBECONFIG=/etc/kubernetes/admin.conf echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile接下來,工作節(jié)點就正常了,如:
網(wǎng)絡(luò)組件flannel無法完成初始化
網(wǎng)絡(luò)組件flannel安裝完成后,通過命令查看時一直在初始化狀態(tài),并且通過日志輸出內(nèi)容如下所示:
kubectl get pods -n kube-system -o wide kubectl logs -f kube-flannel-ds-amd64-hl89n -n kube-system具體錯誤日志為:
Error from server: Get https://172.16.2.203:10250/containerLogs/kube-system/kube-flannel-ds-amd64-hl89n/kube-flannel?follow=true: dial tcp 172.16.2.203:10250: connect: no route to host這時,我們可以登錄節(jié)點所在的服務(wù)器,使用以下命令來查看目標節(jié)點上的kubelet日志:
journalctl -u kubelet -f注意:journalctl工具可以查看所有日志,包括內(nèi)核日志和應(yīng)用日志。
通過日志,我們發(fā)現(xiàn)是鏡像拉取的問題。對此,大家可以參考上文中鏡像拉取的方式以及重命名鏡像標簽來解決此問題,當然也可以通過設(shè)置代理來解決此問題。
部分節(jié)點無法啟動pod
有時候,我們部署了應(yīng)用之后,發(fā)現(xiàn)在部分工作節(jié)點上pod無法啟動(一直處于ContainerCreating的狀態(tài)):
通過排查日志最終我們得到重要信息如下所示:
NetworkPlugin cni failed to set up pod "demo-deployment-675b5f9477-hdcwg_default" network: failed to set bridge addr: "cni0" already has an IP address different from 10.0.2.1/24這是由于當前節(jié)點之前被反復(fù)注冊,導(dǎo)致flannel網(wǎng)絡(luò)出現(xiàn)問題。可以依次執(zhí)行以下腳本來重置節(jié)點并且刪除flannel網(wǎng)絡(luò)來解決:
kubeadm reset #重置節(jié)點 systemctl stop kubelet && systemctl stop docker && rm -rf /var/lib/cni/ && rm -rf /var/lib/kubelet/* && rm -rf /var/lib/etcd && rm -rf /etc/cni/ && ifconfig cni0 down && ifconfig flannel.1 down && ifconfig docker0 down && ip link delete cni0 && ip link delete flannel.1 systemctl start docker執(zhí)行完成后,重新生成token并注冊節(jié)點即可,具體可以參考上文內(nèi)容。
最后
在k8s集群的部署過程中或者過后,大家可能會遇到很多問題。這也是本地部署k8s集群遇到的最大的挑戰(zhàn)質(zhì)疑,因此本篇筆者講述了問題處理思路和常見錯誤,希望能夠給予大家?guī)椭?/span>
如果通過詳細異常和和日志還是無法推斷出具體錯誤,建議大家可以根據(jù)具體信息在“https://stackoverflow.com”網(wǎng)站上進行搜索,也可以在相關(guān)社交網(wǎng)站(比如github)和群里請教,不過請教前,請給出你的診斷步驟和詳細的錯誤日志。
往期內(nèi)容
Docker+ Kubernetes已成為云計算的主流(二十六)
容器化之后如何節(jié)省云端成本?(二十七)
了解Kubernetes主體架構(gòu)(二十八)
使用Minikube部署本地Kubernetes集群(二十九)
使用kubectl管理k8s集群(三十)
使用Kubeadm創(chuàng)建k8s集群之部署規(guī)劃(三十一)
使用Kubeadm創(chuàng)建k8s集群之節(jié)點部署(三十二)
集群故障處理之處理思路以及健康狀態(tài)檢查(三十三)
集群故障處理之處理思路以及聽診三板斧(三十四)
總結(jié)
以上是生活随笔為你收集整理的k8s集群部分常见问题处理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用Asp.net Core3Blazo
- 下一篇: Hyper-V + CentOS7 网络