日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

k8s集群部分常见问题处理

發布時間:2023/12/4 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 k8s集群部分常见问题处理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

部分常見問題處理

  • Coredns CrashLoopBackOff 導致無法成功添加工作節點的問題

  • 添加工作節點時提示token過期

  • kubectl 執行命令報“The connection to the server localhost:8080 was refused”

  • 網絡組件flannel無法完成初始化

  • 部分節點無法啟動pod

最后

部分常見問題處理

結合我們上篇文章(鏈接:集群故障處理之處理思路以及聽診三板斧(三十四))的處理思路和手段,接下來我們就進行一些實踐講解。

Coredns CrashLoopBackOff 導致無法成功添加工作節點的問題

k8s集群安裝完成之后,當我們添加工作節點時,可能會在長久的等待之中而無任何進展,這時可以使用以下命令來查看k8s各個服務的狀態:

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)規則錯亂或者緩存導致的,可以依次執行以下命令進行解決:

systemctl stop kubelet systemctl stop docker iptables --flush iptables -tnat --flush systemctl start kubelet systemctl start docker

添加工作節點時提示token過期

集群注冊token的有效時間為24小時,如果集群創建完成后沒有及時添加工作節點,那么我們需要重新生成token。相關命令如下所示:

#生成token kubeadm token generate #根據token輸出添加命令 kubeadm token create <token> --print-join-command --ttl=0

然后僅需復制打印出來的命令到工作節點執行即可。

kubectl 執行命令報“The connection to the server localhost:8080 was refused”

作為集群管理的核心,工作節點上的kubectl可能一上來就跪了,如下圖所示:

出現這個問題的原因是kubectl命令需要使用kubernetes-admin的身份來運行,在“kubeadm int”啟動集群的步驟中就生成了“/etc/kubernetes/admin.conf”。

因此,解決方法如下,將主節點中的【/etc/kubernetes/admin.conf】文件拷貝到工作節點相同目錄下:

#復制admin.conf,請在主節點服務器上執行此命令 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

然后分別在工作節點上配置環境變量:

#設置kubeconfig文件 export KUBECONFIG=/etc/kubernetes/admin.conf echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile

接下來,工作節點就正常了,如:

網絡組件flannel無法完成初始化

網絡組件flannel安裝完成后,通過命令查看時一直在初始化狀態,并且通過日志輸出內容如下所示:

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

這時,我們可以登錄節點所在的服務器,使用以下命令來查看目標節點上的kubelet日志:

journalctl -u kubelet -f

注意:journalctl工具可以查看所有日志,包括內核日志和應用日志。

通過日志,我們發現是鏡像拉取的問題。對此,大家可以參考上文中鏡像拉取的方式以及重命名鏡像標簽來解決此問題,當然也可以通過設置代理來解決此問題。

部分節點無法啟動pod

有時候,我們部署了應用之后,發現在部分工作節點上pod無法啟動(一直處于ContainerCreating的狀態):

通過排查日志最終我們得到重要信息如下所示:

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

這是由于當前節點之前被反復注冊,導致flannel網絡出現問題。可以依次執行以下腳本來重置節點并且刪除flannel網絡來解決:

kubeadm reset #重置節點 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

執行完成后,重新生成token并注冊節點即可,具體可以參考上文內容。

最后

在k8s集群的部署過程中或者過后,大家可能會遇到很多問題。這也是本地部署k8s集群遇到的最大的挑戰質疑,因此本篇筆者講述了問題處理思路和常見錯誤,希望能夠給予大家幫助。

如果通過詳細異常和和日志還是無法推斷出具體錯誤,建議大家可以根據具體信息在“https://stackoverflow.com”網站上進行搜索,也可以在相關社交網站(比如github)和群里請教,不過請教前,請給出你的診斷步驟和詳細的錯誤日志。



往期內容


Docker+ Kubernetes已成為云計算的主流(二十六)

容器化之后如何節省云端成本?(二十七)

了解Kubernetes主體架構(二十八)

使用Minikube部署本地Kubernetes集群(二十九)

使用kubectl管理k8s集群(三十)

使用Kubeadm創建k8s集群之部署規劃(三十一)

使用Kubeadm創建k8s集群之節點部署(三十二)

集群故障處理之處理思路以及健康狀態檢查(三十三)

集群故障處理之處理思路以及聽診三板斧(三十四)


總結

以上是生活随笔為你收集整理的k8s集群部分常见问题处理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。