FAQ寶典之RancherServer

科技小能手發表於2017-11-12

Rancher FAQ寶典系列來襲,Rancher Server相關的常見問題,本文一網打盡。

1、Docker執行Rancher Server容器應該注意什麼?

需要注意執行rancher server容器時,不要使用host模式。程式中有些地方定義的是localhost或者127.0.0.1,如果容器網路設定為host,將會去訪問宿主機資源,因為宿主機並沒有相應資源,rancher server容器啟動就出錯。

PSdocker命令中,如果使用了 --network host引數,那後面再使用-p 8080:8080 就不會生效。
docker run -d -p 8080:8080 rancher/server:stable

此命令僅適用於單機測試環境,如果要生產使用Rancher server,請使用外接資料庫(mysql)或者通過

-v /xxx/mysql/:/var/lib/mysql -v /xxx/log/:/var/log/mysql -v /xxx/cattle/:/var/lib/cattle

把資料掛載到宿主機上。如果用外接資料庫,需提前對資料庫做效能優化,以保證Rancher執行的最佳效能。

2、如何匯出Rancher Server容器的內部資料庫?

你可以通過簡單的Docker命令從Rancher Server容器匯出資料庫。

docker exec <CONTAINER_ID_OF_SERVER> mysqldump cattle > dump.sql

3、我正在執行的Rancher是什麼版本的?

Rancher的版本位於UI的頁尾的左側。如果你點選版本號,將可以檢視其他元件的詳細版本。

4、如果我沒有在Rancher UI中刪除主機而是直接刪除會發生什麼?

如果你的主機直接被刪除,Rancher Server會一直顯示該主機。主機會處於Reconnecting狀態,然後轉到Disconnected狀態。你也可以通過新增主機再次把此節點新增到RANCHER叢集,如果不在使用此節點,可以在UI中刪除。

如果你有新增了健康檢查功能的服務自動排程到狀態Disconnected主機上,CATTLE會將這些服務重新排程到其他主機上。

PS:如果使用了標籤排程,如果你有多臺主機就有相同的排程標籤,那麼服務會排程到其他具有排程標籤的節點上;如果選擇了指定執行到某臺主機上,那主機刪除後你的應用將無法在其他主機上自動執行。

5、我如何在代理伺服器後配置主機?

要在代理伺服器後配置主機,你需要配置Docker的守護程式。詳細說明參考在代理伺服器後新增自定義主機

6、為什麼同一主機在UI中多次出現?

宿主機上var/lib/rancher/state這個資料夾,這是Rancher用來儲存用於標識主機的必要資訊。

.registration_token中儲存了主機的驗證資訊,如果裡面的資訊發生變化,RANCHER會認為這是一臺新主機, 在你執行新增主機後,UI上將會出現另外一臺相同的主機,第一臺主機接著處於失聯狀態。

7、在哪能找到 Rancher Server 容器的詳細日誌?

執行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,你會發現我們每天都會建立一個新的日誌檔案。

8、將Rancher Server的日誌複製到主機上

以下是將Rancher Server日誌從容器複製到主機的命令。

docker cp <container_id>:/var/lib/cattle/logs /local/path

9、如果Rancher Server的IP改變了會怎麼樣?

如果更改了Rancher Server的IP地址,你需要用新的IP重新註冊主機。

在Rancher中,點選系統管理->系統設定更新 Rancher Server的主機註冊地址。注意必須包括Rancher Server暴露的埠號。預設情況下我們建議按照安裝手冊中使用8080埠。

主機註冊更新後,進入基礎架構->新增主機->自定義。新增主機的docker run命令將會更新。使用更新的命令,在Rancher Server的所有環境中的所有主機上執行該命令。

10、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之後,已經有了更多的記憶體。你現在應該可以看到這個頁面了,並可以開始對執行時間最長的程式進行故障分析。

11、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://&lt;rancher-server-ip&gt;:8080/v1/settings頁面,搜尋要更新的設定,點選links -> self跳轉到你點選的連結去設定,點選側面的“編輯”更改’值’。請記住,值是以秒為單位。

12、為什麼Rancher Server升級失敗導致資料庫被鎖定?

如果你剛開始執行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資料庫。

FAQ寶典之Rancher Server

13、管理員密碼忘記了,我該如何重置管理員密碼?

如果你的身份認證出現問題(例如管理員密碼忘記),則可能無法訪問Rancher。要重新獲得對Rancher的訪問許可權,你需要在資料庫中關閉訪問控制。為此,你需要訪問執行Rancher Server的主機。

ps:假設在重置訪問控制之前有建立過其他使用者,那麼在認證方式沒有變化的情況下,重置訪問控制除了超級管理員(第一個被建立的管理員,ID為1a1),其他使用者賬號資訊不會受影響。

  • 假設資料庫為rancher內建資料庫
docker exec -it <rancher_server_container_ID> mysql

注意: 這個&lt;rancher_server_container_ID&gt;是具有Rancher資料庫的容器。如果你升級並建立了一個Rancher資料容器,則需要使用Rancher資料容器的ID而不是Rancher Server容器,rancher內建資料庫預設密碼為空。

  • 選擇Cattle資料庫。
mysql> use cattle;
  • 檢視setting表。
mysql> select * from setting;
  • 更改api.security.enabled為false,並清除api.auth.provider.configured的值。

FAQ寶典之Rancher Server

  • 確認更改在setting表中是否生效。
mysql> select * from setting;

可能需要約1分鐘才能在使用者介面中關閉身份認證,然後你可以通過重新整理網頁來登陸沒有訪問控制的Rancher Server。

關閉訪問控制後,任何人都可以使用UI/API訪問Rancher Server。

重新整理頁面,在系統管理/訪問控制 重新開啟訪問控制。重新開啟訪問控制填寫的管理員使用者名稱將會替換原有的超級管理員使用者名稱(ID為1a1 )。

14、Rancher Compose Executor和Go-Machine-Service不斷重啟

在高可用叢集中,如果你正在使用代理伺服器後,如果rancher-compose-executor和go-machine-service不斷重啟,請確保你的代理使用正確的協議。

15、為什麼在日誌中看到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連線。

16、Rancher Catalog 多久同步一次

http://X.X.X.X/v1/settings/catalog.refresh.interval.seconds 預設300秒,可以修改,點setting會立即更新。

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


相關文章