Rancher FAQ寶典系列第二彈,Rancher Agent、Kubernetes、Docker相關的常見問題,本文一網打盡。
1.1、添加 --NAME RANCHER-AGENT(老版本)
如果你從UI中編輯docker run .... rancher/agent...指令并添加--name rancher-agent選項,那麼Rancher Agent将啟動失敗。Rancher Agent在初始運作時會啟動3個不同容器,一個是運作狀态的,另外兩個是停止狀态的。Rancher Agent要成功連接配接到Rancher Server必須要有兩個名字分别為rancher-agent和rancher-agent-state的容器,第三個容器是docker自動配置設定的名稱,這個容器會被移除。
1.2、使用一個克隆的虛拟機
如果你使用了克隆其他Agent主機的虛拟機并嘗試注冊它,它将不能工作。在rancher-agent容器的日志中會産生ERROR: Please re-register this agent.字樣的日志。Rancher主機的唯一ID儲存在/var/lib/rancher/state,因為新添加和虛拟機和被克隆的主機有相同的唯一ID,是以導緻無法注冊成功。
解決方法是在克隆的VM上運作以下指令:
<code>rm -rf /var/lib/rancher/state; docker rm -fv rancher-agent; docker rm -fv rancher-agent-state</code>
完成後可重新注冊。
從v1.6.0起,在rancher-agent容器上運作docker logs将提供agent相關的所有日志。
當Agent連接配接Rancher Server時,它會自動檢測Agent的IP。有時,自動探測的IP不是你想要使用的IP,或者選擇了docker網橋的IP,如. 172.17.x.x。或者,你有一個已經注冊的主機,當主機重新開機後獲得了一個新的IP, 這個IP将會和Rancher UI中的主機IP不比對。你可以重新配置“CATTLE_AGENT_IP”設定,并将主機IP設定為你想要的。當主機IP位址不正确時,容器将無法通路管理網絡。要使主機和所有容器進入管理網絡,隻需編輯添加自定義主機的指令行,将新的IP指定為環境變量“CATTLE_AGENT_IP”。在主機上運作編輯後的指令。不要停止或删除主機上的現有的Rancher Agent容器!
這個問題主要有以下幾種情況:
RANCHER SERVER伺服器防火牆沒有開通8080端口;
雲平台安全組沒有放行8080端口;
Agent 伺服器沒有開啟IP轉發規則 [為什麼我的容器無法連接配接到網絡?]:{site.baseurl}}/rancher/faqs/ troubleshooting/1為什麼我的容器無法連接配接到網絡;
=1為開啟,=0為關閉
主機hosts(/etc/hosts)檔案沒有配置;
./r 是基于weave wait編譯出來的。CNI網絡下會添加/.r/r 這個參數,目的是:當容器啟動時,其實網絡裝置還沒設定好,這時候需要container 等待,不能啟動真實業務,否則會失敗。
檢查主機名和hosts配置, hosts中需要配置:
127.0.0.1 localhost
hostip hostname
以上問題為Kubernetes版本與docker版本不相容導緻cgroup功能失效
Rancher-Kubernetes中,節點之間通信需要通過hostname,如果沒有内部DNS伺服器,那麼需要為每台節點配置hosts檔案。
配置示例:假如某個節點主機名為node1,ip 位址為192.168.1.100
如果你正面臨Rancher Agent和Rancher Server的連接配接問題,請檢查主機設定。當你第一次嘗試在UI中添加主機時,你需要設定主機注冊的URL,該URL用于建立從主機到Rancher Server的連接配接。這個URL必須可以從你的主機通路到。為了驗證它,你需要登入到主機并執行curl指令:
curl -i <Host Registration URL you set in UI>/v1
你應該得到一個json響應。如果開啟了認證,響應代碼應為401。如果認證未打開,則響應代碼應為200。
注意:普通的HTTP請求和websocket連接配接(ws://)都将被使用。如果此URL指向代理或負載平衡器,請確定它們可以支援Websocket連接配接。
很多同學正常部署Kuberbetes環境後無法進入Dashboard,基礎設施應用棧均無報錯。但通過檢視 基礎架構|容器 發現并沒有Dashboard相關的容器.因為Kuberbetes在拉起相關服務(如Dashboard、内置DNS等服務)是通過應用商店裡面的YML檔案來定義的,YML檔案中定義了相關的鏡像名和版本。
而Rancher部署的Kuberbetes應用棧屬于Kuberbetes的基礎架構,相關的鏡像通過dockerhub/rancher 倉庫拉取。預設Rancher-catalog Kuberbetes YML中服務鏡像都是從谷歌倉庫拉取,在沒有科學上網的情況下,國内環境幾乎無法成功拉取鏡像。
為了解決這一問題,優化中國區使用者的使用體驗,在RANCHER v1.6.11之前的版本,我們修改了http://git.oschina.net/rancher/rancher-catalog 倉庫中的YML檔案,将相關的鏡像也同步到國内倉庫,通過替換預設商店位址來實作加速部署;在RANCHER v1.6.11及之後的版本,不用替換商店catalog位址,直接通過在模闆中定義倉庫位址和命名空間就行實作加速;在後期的版本種,Kuberbetes需要的鏡像都會同步到docker hub中。
<code>PS:0.0.0.0/0 表示信任所有非https位址的鏡像倉庫,對于内網測試,這樣配置很友善。對于線上生産環境,為了安全請不要這樣配置</code>
以overlay為例
3、docker info 出現 WARNING
編輯/etc/default/grub檔案,并設定:GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"
接着
SUSE
<code>grub2-mkconfig -o /boot/grub2/grub.cfg</code>
Cetos
<code>Update grub</code>
Ubuntu
<code>update-grub</code>
啟動容器的時候,加一下
<code>-e http_proxy= -e https_proxy=</code>

一些基于容器的實用程式(例如Google cAdvisor)會将Docker系統目錄(如/ var / lib / docker /)挂載到容器中。例如,cadvisor的文檔訓示您運作cadvisor容器,如下所示:
當挂載/var/lib/docker/時,這會有效地将所有其他正在運作的容器的所有資源作為檔案系統安裝在挂載/var/lib/docker/的容器中。當您嘗試删除這些容器中的任何一個時,删除嘗試可能會失敗,出現如下所示的錯誤:
如果将/var/lib/docker/在/var/lib/docker/中的檔案系統句柄上使用statfsor或fstatfs并且不關閉它們的容器,就會發生此問題。
通常,我們會以這種方式建議禁止挂載/var/lib/docker。然而,cAdvisor的核心功能需要這個綁定挂載。
如果您不确定是哪個程序導緻錯誤中提到的路徑繁忙并阻止它被删除,則可以使用lsof指令查找其程序。例如,對于上面的錯誤:
<code>sudo lsof /var/lib/docker/containers/74bef250361c7817bee19349c93139621b272bc8f65 本文轉自 RancherLabs 51CTO部落格,原文連結:http://blog.51cto.com/12462495/2050097</code>