本文是Rancher 2.0部署與使用過程當中常見的問題及其解決方法,多數問題整理收集自Rancher官方技術交流羣內用戶的提問與反饋。歡迎掃描文末二維碼,添加Rancher小助手爲好友,加羣得到更多技術支持。node
本文主要內容爲:linux
一、部署Rancher 2.0的環境需求
推薦使用的操做系統
推薦的硬件配置
支持的docker版本
防火牆須要容許經過的端口git
二、部署過程當中的常見問題及排查思路
環境信息殘留
openssh版本太低問題
nodeport端口只有一臺機器能訪問
部署使用calico網絡部署環境失敗問題
部署時主機not found問題
web頁面kubectl閃退問題
非worker節點仍然被調度pod問題
it is a not share mount 問題
networkredy=false 問題
集羣 unavailablegithub
推薦使用的操做系統web
Ubuntu 16.04 (64-bit)
Red Hat Enterprise Linux 7.5 (64-bit)
RancherOS 1.3.0 (64-bit)docker
推薦的硬件配置centos
支持的docker版本api
1.12.6
1.13.1
17.03.02瀏覽器
防火牆請容許經過已下端口網絡
環境信息殘留
目前部署中,大部分問題都是由於因爲部署環境的操做系統,或屢次部署,升級後殘留的的信息形成的。
部署前或部署時,請使用如下命令將環境的各種信息清理乾淨:
df -h|grep kubelet |awk -F % '{print $2}'|xargs umount rm /var/lib/kubelet/* -rf rm /etc/kubernetes/* -rf rm /var/lib/rancher/* -rf rm /var/lib/etcd/* -rf rm /var/lib/cni/* -rf iptables -F && iptables -t nat –F ip link del flannel.1 docker ps -a|awk '{print $1}'|xargs docker rm -f docker volume ls|awk '{print $2}'|xargs docker volume rm
openssh版本太低問題
centos或rhel系統而且版本低於7.4的,由於默認的openssh和openssl和紅帽系ssh默認將AllowTcpForwarding 關閉了,rke部署時會出現以下問題:
參考issue:
https://github.com/rancher/rk...
須要您進行如下操做:
nodeport端口只有一臺機器能訪問
只能訪問一臺宿主機的nodeport,而且仍是pod所在那臺機器,出現這種問題很大緣由是由於跨集羣網絡有問題,或本地防火牆問題。排查思路以下:
一、在宿主機本機telnet localhost:nodeort看看是否能通,本機能通,在集羣內互相telnet測試,若是不能通根部署環境網絡有很大關係,建議聯繫網絡管理員進行排查。
若是本機telnet也不能通,進行以下測試。
二、首先咱們須要或取對應的pod 信息
好比我這個test-6b4cdf4ccb-7pzt6在rancher-kf-worker01節點上,它的ip爲10.42.3.23
三、先在pod所在的宿主機上而後在另外幾個節點去ping這個ip,看看可否ping通,在canal網絡模式下,請檢查防火牆端口8472/UDP是否開放。查看天天機器上是否有嘗試使用每臺機器的flannel.1網卡,用的話,用flannel.1上的ip互相ping,看看是否能通,由於flannel網絡和canal網絡是經過flannel.1網卡互相創建vxlan遂道的。建議操做在關閉防火牆的狀況下測試。
部署使用calico網絡部署環境失敗問題
部署rancher2.0時網絡類型爲calico時,若是cloud provider默認不填會選用公有云的,致使部署失敗,因此這裏咱們須要手動填寫爲none。(後期會優化此項)
][6]
部署時主機not found問題
出現這個問題是由於宿主機的主機名不符合kubernetes的標準主機名要求也不符合標準的linux主機名,主機名內不能有下劃線。
獲取組件健康狀態forbidden問題
大部分緣由是由於部署屢次,證書殘留的致使的,解決辦法,按照環境信息殘留裏面的方法把環境清空下,在從新添加。
web頁面kubectl閃退問題
這個主要根操做系統版本和瀏覽器的版本有關係,請使用上推薦使用操做系統中的操做系統,瀏覽器使用Chrome
非worker節點仍然被調度pod問題
目前rancher2.0非worker節點,仍然會被調度pod過去,您能夠選擇手動將它們從kube-scheduler踢除,命令以下:
在獲取節點在kubernetes集羣的名字
打開web頁面kubectl
而後執行
kubectl taint node rancher-kf-control01 node-role.kubernetes.io/rancher-kf-control01="":NoSchedule kubectl taint node rancher-kf-control02 node-role.kubernetes.io/rancher-kf-control02="":NoSchedule kubectl taint node rancher-kf-control03 node-role.kubernetes.io/rancher-kf-control03="":NoSchedule
it is a not share mount問題
部署時遇到share mount問題時,報錯提示以下:
FATA[0180] [workerPlane] Failed to bring up Worker Plane: Failed to start [kubelet] container on host [192.168.10.51]: Error response from daemon: linux mounts: Path /var/lib/kubelet is mounted on / but it is not a shared mount.
這個問題緣由主要是kubelet容器化部署,須要手動設置docker的MuntFLAGS爲空
https://github.com/kubernetes...
解決方法:
執行
mount --make-shared /
或配置docker.server
MountFlags=shared
重啓docker.service
NetworkRedy=false問題
這個問題一般是,在部署時網絡組件在初始化,在配置,等待段時間就行了。或在對應節點查看kubelet日誌的docker logs kubelet。
集羣unavailable
一般此問題,是由於rancher-server根kubernetes中的kube-apiserver 6443端口鏈接有問題,建議檢查防火牆和查看kube-api-server的日誌。
總結
一、部署時能嚴格按照官方給出的操做系統版本和docker版本部署,能夠避免掉不少問題。
二、屢次部署,升級,環境必定要按照環境信息殘留章節的命令,將環境清理乾淨。
三、若是遇到問題,建議docker logs 查看rancher-agent,rancher-server的日誌。