天天看點

FAQ寶典之常見問題排查與修複方法

Docker容器在建立之後就不可更改了。唯一可更改的内容是我們要存儲的不屬于Docker容器本身的那一部分資料。無論是停止、啟動或是重新啟動,它始終在使用相同的容器。如需改變任何内容都需要删除或重新建立一個容器。

你可以克隆,即選擇已存在的容器,并基于已有容器的配置提前在添加服務界面中填入所有要設定的内容,如果你忘記填入某項内容,可以通過克隆來改變它之後删除舊的容器。

在Docker中,關聯容器(在docker run中使用--link)的ID和IP位址會出現在容器的/etc/hosts中。在Rancher中,我們不需要更改容器的/etc/hosts檔案,而是通過運作一個内部DNS伺服器來關聯容器,DNS伺服器會傳回給我們正确的IP。

Agent主機有可能會暴露在公網上,Agent上接受到的通路容器指令行或者日志的請求是不可信的。Rancher Server中發出的請求包括一個JWT(JSON Web Token),JWT是由伺服器簽名并且可由Agent校驗的,Agent可以判斷出請求是否

來自伺服器,JWT中包括了有效期限,有效期為5分鐘。這個有效期可以防止它被長時間使用。如果JWT被攔截而且沒有用SSL時,這一點尤為重要。

如果你運作docker logs -f (rancher-agent名稱或ID)。日志會顯示令牌過期的資訊,随後檢查Rancher Server主機和Rancher Agent主機的時鐘是否同步。

在服務的詳細頁中,我們提供了一個服務日志的頁簽日志。在日志頁簽中,列出了和服務相關的所有事件,包括時間戳和事件相關描述,這些日志将會保留24小時。

如果RANCHER SERVER 運作在V1.6.2版本,點選WEB shell出現白屏,這是UI上的一個BUG,請選擇更新server服務。

如果容器運作在不同主機上,不能夠ping通彼此,可能是由一些常見的問題引起的。

在應用->基礎設施中,檢查 healthcheck 應用的狀态。如果是active跨主機通信就是正常的。

手動測試,你可以進入任何一個容器中,去ping另一個容器的内部IP。在主機頁面中可能會隐藏掉基礎設施的容器,如需檢視點選“顯示系統容器”的複選框。

有時,Docker網橋的IP位址會被錯誤的作為了主機IP,而并沒有正确的選擇真實的主機IP。這個錯誤的IP通常是172.17.42.1或以172.17.x.x開頭的IP。如果是這種情況,在使用docker run指令添加主機時,請用真實主機的IP位址來配置CATTLE_AGENT_IP環境變量。

Rancher Overlay網絡預設使用的子網是10.42.0.0/16。如果這個子網已經被使用,你将需要更改Rancher網絡中使用的預設子網。你要確定基礎設施服務裡的Network元件中使用着合适的子網。這個子網定義在該服務的rancher-compose.yml檔案中的default_network裡。

要更改Rancher的IPsec或VXLAN網絡驅動,你将需要在環境模版中修改網絡基礎設施服務的配置。建立新環境模闆或編輯現有環境模闆時,可以通過單擊編輯來配置網絡基礎結構服務的配置。在編輯頁面中,選擇配置選項>子網輸入不同子網,點選配置。在任何新環境中将使用環境模闆更新後的子網,編輯已經有的環境模闆不會更改現在已有環境的子網。

這個執行個體是通過更新網絡驅動的rancher-compose.yml檔案去改變子網為10.32.0.0/16。

注意:随着Rancher通過更新基礎服務來更新子網,以前通過API更新子網的方法将不再适用。

Vxlan 通過4789端口實作通信,檢查防火牆有沒有開放此端口;

執行iptables -t filter -L -n參看IPtable表,檢視chain FORWARD 是不是被丢棄,如果是,執行sudo iptables -P FORWARD ACCEPT

如果你想檢視Rancher DNS配置,點選應用 > 基礎服務。點選network-services應用,選擇metadata,在metadata中,找到名為network-services-metadata-dns-X的容器,通過UI點選執行指令行後,可以進入該容器的指令行,然後執行如下指令。

<code>cat /etc/rancher-dns/answers.json</code>

如果你的系統開啟了UFW,請關閉UFW或更改/etc/default/ufw中的政策為:

<code>DEFAULT_FORWARD_POLICY="ACCEPT"</code>

負載均衡器自動對其啟用健康檢查。如果負載均衡器處于初始化狀态,則很可能主機之間無法進行跨主機通信。

如果要檢視負載均衡器的配置,你需要用進入負載均衡器容器内部查找配置檔案,你可以在頁面選擇負載均衡容器的執行指令行

<code>cat /etc/haproxy/haproxy.cfg</code>

該檔案将提供負載均衡器的所有配置詳細資訊。

HAProxy的日志可以在負載均衡器容器内找到。負載均衡器容器的docker logs隻提供與負載均衡器相關的服務的詳細資訊,但不提供實際的HAProxy日志記錄。

<code>cat /var/log/haproxy</code>

FAQ寶典之常見問題排查與修複方法

如圖,在自定義配置中,按照global、defaults、frontend、backend的格式配置。

healthcheck不僅為其他服務提供健康檢查,對系統元件(比如排程服務)也提供健康檢查服務,healthcheck也對自己進行健康檢查。多個healthcheck元件時,它們會互相交叉檢查,隻有健康檢查通過後,容器狀态才會變成綠色。而healthcheck一直顯示×××初始化狀态,說明一直沒有通過健康檢查。健康檢查都是通過網絡通路的,是以一定是網絡通信異常導緻。

為什麼節點關機後,應用沒有自動排程到其他節點上?Rancher上應用的排程,需要配合健康檢查功能。當健康檢查檢查到應用不健康才會重新排程,如果沒有配置健康檢查,即使關機,cattle也不會對應用做排程處理。

如果你在主機上運作一個容器(如:docker run -it ubuntu)該容器不能與網際網路或其他主機通信,那可能是遇到了網絡問題。Centos預設設定/proc/sys/net/ipv4/ip_forward為0,這從底層阻斷了Docker所有網絡。

解決辦法:

<code>vi /usr/lib/sysctl.d/00-system.conf</code>

添加如下代碼:

重新開機network服務

<code>systemctl restart network</code>

檢視是否修改成功

<code>sysctl net.ipv4.ip_forward</code>

如果傳回為net.ipv4.ip_forward = 1則表示成功了

##八、京東雲

FAQ寶典之常見問題排查與修複方法

解決辦法:sudo sysctl -w net.ipv4.tcp_mtu_probing=1

本文轉自 RancherLabs 51CTO部落格,原文連結:http://blog.51cto.com/12462495/2055816