kubeadm常見報錯和解決方法


     k8s隨着社區不斷壯大國內使用率現在也是比較高的,常用的部署方式主要還是以二進制和kubeadm為主,當然1.13之前大部分人還是以二進制,但是隨着版本更新kubeadm已經逐步適用於生成環境,由於kubeadm的簡便部署相信以后使用率也會增加很多。今天主要是想總結一些常見的報錯和解決方法思路希望能在日后大家使用過程中提供幫助,內容可能不會很完善,講解不當之處望大家提寶貴意見多多指點,這篇文檔主要以自身部署為主也會參考一些官網和其他博客匯總一部分,多說兩句其實部署真心不是很難,主要還是要細心,很多時候碰到的錯誤后面解決時才發現原來是前面一些基礎環境配置沒有配好導致的。

1.問題描述:cordns一直重啟logs報dial tcp 10.96.0.1:443: i/o timeout

     (1)檢查hosts,查看主機名和ip是否對應

     (2)swap分區是否關閉(/etc/fstab注釋swap行)

     (3)檢查防火牆和selinux是否關閉

     (4)創建程序目錄(這個是轉載他人,實際並沒有碰到過,如果碰到類似問題解決不了可以嘗試)

mkdir -p /opt/kubernetes/{bin,cfg,ssl}
echo 'PATH=/opt/kubernetes/bin:$PATH' >>/etc/profile
source /etc/profile

 

2. init初始化不成功

       這里簡單說一下,因為這塊碰到的問題比較雜

       (1) 首先保證能科學**上網,如果無法科學**上網就要用國內的鏡像,這里可以看日志具體情況具體解決,總結一點就是鏡像原因導致的。

       (2) 驅動類型,保證docker驅動與kube驅動一致

       (3) vi /etc/sysctl.d/k8s-sysctl.conf

 net.bridge.bridge-nf-call-iptables=1 net.bridge.bridge-nf-call-ip6tables=1 sysctl -p /etc/sysctl.d/k8s-sysctl.conf

 

3.使用kubeadm init 去初始化master node

注意你可能需要設置http代理,因為kubeadm init需要訪問https://dl.k8s.io去獲取package的信息;你可能還需要設置docker daemon的代理,因為kubeadm init要從http://k8s.gcr.io(這是google cloud的container registry)上pull一些image;你還需要設置no_proxy環境變量為master的IP。否則會報錯:“Unable to update cni config: No networks found in /etc/cni/net.d。注意--pod-network-cidr=172.16.0.0/16這個參數,cidr的選取一定不要和你本地的網絡有沖突。

 

4.kubeadm join一個新的worker node的時候報錯:Unauthorized

這是因為你使用的token已經失效了,默認情況下,kubeadm init產生的token的有效期是24個小時;你肯定是在一天之后才kubeadm join的。你可以使用下面的命令來重新產生token:

kubeadm token create --print-join-command
 
5.0/1 nodes are available: 1 node(s) had taints that the pod didn't tolerate.

解決方法是安裝flannel

有時候一個pod創建之后一直是pending,沒有日志,也沒有pull鏡像,describe的時候發現里面有一句話: 1 node(s) had taints that the pod didn't tolerate.

直譯意思是節點有了污點無法容忍,執行 kubectl get no -o yaml | grep taint -A 5 之后發現該節點是不可調度的。這是因為kubernetes出於安全考慮默認情況下無法在master節點上部署pod,於是用下面方法解決:

kubectl taint nodes --all node-role.kubernetes.io/master-
 
 

6.機器非正常關機,kubernetes無法啟動

clipboard

發現產生的原因可能跟docker啟動不起來有關

clipboard

/var/lib/docker下的應該是container啟動時跟-v參數mount的文件夾相關,也可能跟一個啟動了的container所創建的文件系統有關。但是container被rm后理應被刪除,刪不掉就是出問題了,原因可能是mount的文件被其他container-B或XX-B鏈接或掛載,...-B非正常退出(或某行為)導致docker以為這個文件還被引用着。需要手動解決:stop docker后手動刪除即可,刪除的方法只能是umount再rm

 

7.在增加kubernetes節點時,ERROR CRI]報錯

clipboard

在增加kubernetes節點時,冒出這個錯誤。

configmaps "kubelet-config-1.11" is forbidden: cannot get configmaps in the namespace "kube-system" [ERROR CRI]: unable to check if the container runtime at "/var/run/dockershim.sock" is running: fork/exec /usr/bin/crictl -r /var/run/dockershim.sock info: no such file or directory

解決辦法:

卸載cri-tools yum remove cri-tools

8.Error: Package: kubelet-1.10.0-0.x86_64 

這個是缺少依賴包,報錯部分也有提示Requires: kubernetes-cni = 0.6.0,

yum -y install kubernetes-cni = 0.6.0

大部分常見問題也就這么多,部署主要參考官網基礎環境正常的情況下碰到問題的概率真的很低,還是細心為主了解原理解決問題也會方便很多,后面如果碰到新的問題會慢慢加進來,不足之處望指點


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM