1. 程式人生 > >微服務下的容器部署和管理平臺Rancher

微服務下的容器部署和管理平臺Rancher

service 正在 cat 節點 不知道 con att nta 不可

Rancher是什麽

Rancher是一個開源的企業級容器管理平臺。通過Rancher,企業再也不必自己使用一系列的開源軟件去從頭搭建容器服務平臺。Rancher提供了在生產環境中使用的管理Docker和Kubernetes的全棧化容器部署與管理平臺。

通俗的將它就是為了更方便的管理docker。

為什麽需要Rancher

在原來, 如果我們需要做一個分布式集群我們需要學習一全套的框架並編碼實現如 服務發現, 負載均衡等邏輯, 給開發者造成很大的負擔, 不過好在現在有Docker以及他周邊的一些技術能在上層解決這些問題, 而應用該怎麽開發就怎麽開發.

當你選擇使用Docker技術棧的時候, 會發現在生產環境中不光光是 docker run

就能解決的. 還需要考慮比如docker之間的組網, 縮擴容等問題, 於是你去學習kubernetes, 發現好像有點復雜啊, 有沒有更傻瓜化一點的? 那就是rancher了.

使用Rancher

rancher-server

rancher-server 主要負責圖形化管理主機容器, 並且儲存用戶的數據(賬號, 主機信息, 應用(task)等).

他是一個管理者, 管理工作機應該啟動什麽容器.

啟動

啟動一個單節點server, 並將數據庫數據掛載到宿主機, 保證容器刪除後數據還在.

sudo docker run -d -v /workspace/rancher/mysql:/var/lib/mysql --restart=unless-stopped -p 8081:8080 rancher/server

稍等片刻就能通過訪問8081端口進入到Rancher UI

因為rancher前端使用ws和後端通訊, 所以如果使用nginx作為代理訪問這個服務器需要這樣設置:

server {
        listen 80;
        server_name rancher.bysir.store;

        location / {
                proxy_set_header Host $http_host;
                proxy_pass http://127.0.0.1:8081;
                proxy_http_version 1.1;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection "upgrade";

        }
}

配置

添加登陸賬號

在"ADMIN->Access Contor"添加一個管理員用於登陸, 我使用的是本地認證方式, 沒遇到什麽問題就不贅述了.

添加新環境

在rancher-server中默認內置了一個Cattle Template的環境, 我也不知道Cattle是個啥, 我們還是用Kubernetes吧, 眼熟.

點擊Add Environment按鈕 技術分享圖片

這段話我們用中文版本來看:

Rancher 支持將資源分組歸屬到多個環境。 每個環境具有自己獨立的基礎架構資源及服務,並由一個或多個用戶、團隊或組織所管理。
例如,您可以創建獨立的“開發”、“測試”及“生產”環境以確保環境之間的安全隔離,將“開發”環境的訪問權限賦予全部人員,但限制“生產”環境的訪問權限給一個小的團隊。

先建一個Test試一試


技術分享圖片

在這個頁面點擊添加一個主機


技術分享圖片

rancher-agent

rancher-agent 也就是主機, 是用來執行具體工作的機器

按照提示來添加主機:


技術分享圖片

在第四步的輸入框中填寫上主機的ip地址, 在這裏我填寫的是10.117.195.190, 這個ip使用來給ipsec組網的, 所以需要暴露UDP的500和4500端口.

rancher在這裏叫你添加的是公網ip, 但在實際生產環境中, 不可能每個主機都有公網ip並且也不應該使用公網建立網絡, 所以我們在這裏填寫內網(私網)ip地址, 只要保證當你添加多個主機的時候他們之間的UDP500和4500能互相訪問.

PS: 可以通過以下代碼測試端口連通性:

$ nc -u -z -v 10.25.170.125 4500
Connection to 10.25.170.125 4500 port [udp/ipsec-nat-t] succeeded!

PPS: 阿裏的只需要主機在同一個安全組就能實現內網所有端口互通

復制第五步的代碼到主機上執行, 執行之後可以通過以下代碼看它的運行情況:

docker logs rancher-agent

稍等片刻你就能在rancher的web頁面"INFRASTRUCTURE->Hosts"下找到你剛剛添加的主機.

這時候能看到這個主機的很多服務(容器)正在啟動, 不出意外的話能看到這個樣子的主機:


技術分享圖片 圖太長了, 沒截完, 反正全綠就可以了

疑難雜癥

如果遇到紅色無法啟動的容器, 首先查看日誌, 找找有用信息, 然後嘗試以下操作:

  • 按照錯誤日誌排錯, 通過: 經驗(玄學), google, issue
  • 手動點擊重啟這個錯誤容器
  • 看一下列出的我遇到的錯誤(特別是 重新部署某個主機)

重新部署某個主機

當我們在測試或者某個主機出現某些難以解決的錯誤的時候, 會經常使用重啟大法, 註意在重新將這個主機加入到rancher集群之前需要清理到原來運行的container以及掛載出來的volume, 否則的話, 當再次啟動rancher/agent之後你會發現很多服務啟動不了, 如etcd, kubernetes; 一般來說, 只需要清理 kubernetes留下來的東西就好了.

一般如下操作

  1. docker volume rm etcd, 如果提示它被某個容器使用了就停止掉這個容器後再操作
  2. rm -rf /var/etcd/backups, 刪除etcd掛載出來的數據

參考這篇官方文章: 清理主機

ipsec unhealthy

ipsec會將所有主機組網, 當其中有某個主機連接不上的時候其他ipsec節點也會unhealthy, 這時候就需要檢查是那個主機的問題, 看其UDP的500和4500端口是否能與其他主機互相訪問.

ipsec 無法啟動

ipsec會向rancher-server機器請求得到其他主機的ip地址以實現組網.

但我通過查看ipsec的錯誤日誌發現這個ipsec容器訪問不到rancher-server機器的外網地址, 登陸容器執行命令發現curl http://www.baidu.com都報錯, 這種情況下... 我選擇重啟docker(沒辦法了啊, 如果讀者有解決方案感謝告訴我哦).

但請謹慎操作呀 service docker restart會重啟所有的容器, 這將導致所有服務不可用.

etcd無法啟動

好像etcd無法啟動和ipsec沒有正常運行有關, 所以先解決ipsec的問題

在上面說了記得刪除volume etcd

更多的可以參考這篇官方文章: 災難恢復

etcd節點無限重啟

如果你在"INFRASTRUCTURE->Containers"中看到紅色的etcd容器並且在不斷重啟, 不要驚訝.



作者:bysir
鏈接:https://www.jianshu.com/p/3a492440c89b
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯系作者獲得授權並註明出處。

微服務下的容器部署和管理平臺Rancher