Rancher FAQ寶典系列來襲,Rancher Server相關的常見問題,本文一網打盡。mysql
須要注意運行rancher server容器時,不要使用host模式。程序中有些地方定義的是localhost或者127.0.0.1,若是容器網絡設置爲host,將會去訪問宿主機資源,由於宿主機並無相應資源,rancher server容器啓動就出錯。web
PS:docker命令中,若是使用了 --network host參數,那後面再使用-p 8080:8080 就不會生效。 docker run -d -p 8080:8080 rancher/server:stable
此命令僅適用於單機測試環境,若是要生產使用Rancher server,請使用外置數據庫(mysql)或者經過sql
-v /xxx/mysql/:/var/lib/mysql -v /xxx/log/:/var/log/mysql -v /xxx/cattle/:/var/lib/cattle
把數據掛載到宿主機上。若是用外置數據庫,需提早對數據庫作性能優化,以保證Rancher運行的最佳性能。docker
你能夠經過簡單的Docker命令從Rancher Server容器導出數據庫。數據庫
docker exec <CONTAINER_ID_OF_SERVER> mysqldump cattle > dump.sql
Rancher的版本位於UI的頁腳的左側。若是你點擊版本號,將能夠查看其餘組件的詳細版本。json
若是你的主機直接被刪除,Rancher Server會一直顯示該主機。主機會處於Reconnecting狀態,而後轉到Disconnected狀態。你也能夠經過添加主機再次把此節點添加到RANCHER集羣,若是不在使用此節點,能夠在UI中刪除。api
若是你有添加了健康檢查功能的服務自動調度到狀態Disconnected主機上,CATTLE會將這些服務從新調度到其餘主機上。性能優化
PS:若是使用了標籤調度,若是你有多臺主機就有相同的調度標籤,那麼服務會調度到其餘具備調度標籤的節點上;若是選擇了指定運行到某臺主機上,那主機刪除後你的應用將沒法在其餘主機上自動運行。bash
要在代理服務器後配置主機,你須要配置Docker的守護進程。詳細說明參考在代理服務器後添加自定義主機。服務器
宿主機上var/lib/rancher/state這個文件夾,這是Rancher用來存儲用於標識主機的必要信息。
.registration_token中保存了主機的驗證信息,若是裏面的信息發生變化,RANCHER會認爲這是一臺新主機, 在你執行添加主機後,UI上將會出現另一臺相同的主機,第一臺主機接着處於失聯狀態。
運行docker logs能夠查看在Rancher Server容器的基本日誌。要獲取更詳細的日誌,你能夠進入到Rancher Server容器內部並查看日誌文件。
進入 Rancher Server 容器內部 docker exec -it <container_id> bash 跳轉到 Cattle 日誌所在的目錄下 cd /var/lib/cattle/logs/ cat cattle-debug.log
在這個目錄裏面會出現cattle-debug.log和cattle-error.log。若是你長時間使用此Rancher Server,你會發現咱們天天都會建立一個新的日誌文件。
如下是將Rancher Server日誌從容器複製到主機的命令。
docker cp <container_id>:/var/lib/cattle/logs /local/path
若是更改了Rancher Server的IP地址,你須要用新的IP從新註冊主機。
在Rancher中,點擊系統管理->系統設置更新 Rancher Server的主機註冊地址。注意必須包括Rancher Server暴露的端口號。默認狀況下咱們建議按照安裝手冊中使用8080端口。
主機註冊更新後,進入基礎架構->添加主機->自定義。添加主機的docker run命令將會更新。使用更新的命令,在Rancher Server的全部環境中的全部主機上運行該命令。
極可能有一些任務因爲某些緣由而處於僵死狀態,若是你可以用界面查看系統管理 -> 系統進程,你將能夠看到Running中的內容,若是這些任務長時間運行(而且失敗),則Rancher會最終使用太多的內存來跟蹤任務。這使得Rancher Server處於了內存不足的狀態。
爲了使服務變爲可響應狀態,你須要添加更多內存。一般4GB的內存就夠了。
你須要再次運行Rancher Server命令而且添加一個額外的選項-e JAVA_OPTS="-Xmx4096m"
docker run -d -p 8080:8080 --restart=unless-stopped -e JAVA_OPTS="-Xmx4096m" rancher/server
根據MySQL數據庫的設置方式的不一樣,你可能須要進行升級才能添加該選項。
若是是因爲缺乏內存而沒法看到系統管理 -> 系統進程的話,那麼在重啓Rancher Server以後,已經有了更多的內存。你如今應該能夠看到這個頁面了,並能夠開始對運行時間最長的進程進行故障分析。
Rancher Server會自動清理幾個數據庫表,以防止數據庫增加太快。若是對你來講這些表沒有被及時清理,請使用API來更新清理數據的時間間隔。
在默認狀況下,產生在2周之前的container_event和service_event表中的數據則數據會被刪除。在API中的設置是以秒爲單位的(1209600)。API中的設置爲events.purge.after.seconds。
默認狀況下,process_instance表在1天前產生的數據將會被刪除,在API中的設置是以秒爲單位的(86400)。API中的設置爲process_instance.purge.after.seconds。
爲了更新API中的設置,你能夠跳轉到http://<rancher-server-ip>:8080/v1/settings頁面,搜索要更新的設置,點擊links -> self跳轉到你點擊的連接去設置,點擊側面的「編輯」更改’值’。請記住,值是以秒爲單位。
若是你剛開始運行Rancher並發現它被永久凍結,多是liquibase數據庫上鎖了。在啓動時,liquibase執行模式遷移。它的競爭條件可能會留下一個鎖定條目,這將阻止後續的流程。
若是你剛剛升級,在Rancher Server日誌中,MySQL數據庫可能存在還沒有釋放的日誌鎖定。
....liquibase.exception.LockException: Could not acquire change log lock. Currently locked by <container_ID>
釋放數據庫鎖
注意:請不要釋放數據庫鎖,除非有相關日誌鎖的異常。若是是因爲數據遷移致使升級時間過長,在這種狀況下釋放數據庫鎖,可能會使你遇到其餘遷移問題。
若是你已根據升級文檔建立了Rancher Server的數據容器,你須要exec到rancher-data容器中升級DATABASECHANGELOGLOCK表並移除鎖,若是你沒有建立數據容器,你用exec到包含有你數據庫的容器中。
sudo docker exec -it <container_id> mysql
一旦進入到 Mysql 數據庫,你就要訪問cattle數據庫。
若是你的身份認證出現問題(例如管理員密碼忘記),則可能沒法訪問Rancher。要從新得到對Rancher的訪問權限,你須要在數據庫中關閉訪問控制。爲此,你須要訪問運行Rancher Server的主機。
ps:假設在重置訪問控制以前有建立過其餘用戶,那麼在認證方式沒有變化的狀況下,重置訪問控制除了超級管理員(第一個被建立的管理員,ID爲1a1),其餘用戶帳號信息不會受影響。
假設數據庫爲rancher內置數據庫
docker exec -it <rancher_server_container_ID> mysql
注意: 這個<rancher_server_container_ID>是具備Rancher數據庫的容器。若是你升級並建立了一個Rancher數據容器,則須要使用Rancher數據容器的ID而不是Rancher Server容器,rancher內置數據庫默認密碼爲空。
mysql> use cattle;
mysql> select * from setting;
mysql> select * from setting;
關閉訪問控制後,任何人均可以使用UI/API訪問Rancher Server。
刷新頁面,在系統管理/訪問控制 從新開啓訪問控制。從新開啓訪問控制填寫的管理員用戶名將會替換原有的超級管理員用戶名(ID爲1a1 )。
在高可用集羣中,若是你正在使用代理服務器後,若是rancher-compose-executor和go-machine-service不斷重啓,請確保你的代理使用正確的協議。
Go-machine-service是一種經過websocket鏈接到Rancher API服務器的微服務。若是沒法鏈接,則會從新啓動並再次嘗試。若是你運行的是單節點的Rancher Server,它將使用你爲主機註冊地址來鏈接到Rancher API服務。檢查從Rancher Sever容器內部是否能夠訪問主機註冊地址。
docker exec -it <rancher-server_container_id> bash 在 Rancher-Server 容器內 curl -i <Host Registration URL you set in UI>/v1
你應該獲得一個json響應。若是認證開啓,響應代碼應爲401。若是認證未打開,則響應代碼應爲200。 驗證Rancher API Server 可以使用這些變量,經過登陸go-machine-service容器並使用你提供給容器的參數進行curl命令來驗證鏈接:
docker exec -it <go-machine-service_container_id> bash 在go-machine-service 容器內 curl -i -u '<value of CATTLE_ACCESS_KEY>:<value of CATTLE_SECRET_KEY>' <value of CATTLE_URL>
你應該獲得一個json響應和200個響應代碼。若是curl命令失敗,那麼在go-machine-service和Rancher API server之間存在鏈接問題。若是curl命令沒有失敗,則問題多是由於go-machine-service嘗試創建websocket鏈接而不是普通的http鏈接。若是在go-machine-service和Rancher API服務器之間有代理或負載平衡,請驗證代理是否支持websocket鏈接。
http://X.X.X.X/v1/settings/ca... 默認300秒,能夠修改,點setting會當即更新。