Rancher入门
Rancher是什么
Rancher是一個開源的企業(yè)級容器管理平臺。通過Rancher,企業(yè)再也不必自己使用一系列的開源軟件去從頭搭建容器服務(wù)平臺。Rancher提供了在生產(chǎn)環(huán)境中使用的管理Docker和Kubernetes的全棧化容器部署與管理平臺。
為什么需要Rancher
在原來, 如果我們需要做一個分布式集群我們需要學(xué)習(xí)一全套的框架并編碼實現(xiàn)如 服務(wù)發(fā)現(xiàn), 負(fù)載均衡等邏輯, 給開發(fā)者造成很大的負(fù)擔(dān), 不過好在現(xiàn)在有Docker以及他周邊的一些技術(shù)能在上層解決這些問題, 而應(yīng)用該怎么開發(fā)就怎么開發(fā).
當(dāng)你選擇使用Docker技術(shù)棧的時候, 會發(fā)現(xiàn)在生產(chǎn)環(huán)境中不光光是 docker run就能解決的. 還需要考慮比如docker之間的組網(wǎng), 縮擴容等問題, 于是你去學(xué)習(xí)kubernetes, 發(fā)現(xiàn)好像有點復(fù)雜啊, 有沒有更傻瓜化一點的? 那就是rancher了.
使用Rancher
rancher-server
rancher-server 主要負(fù)責(zé)圖形化管理主機容器, 并且儲存用戶的數(shù)據(jù)(賬號, 主機信息, 應(yīng)用(task)等).
他是一個管理者, 管理工作機應(yīng)該啟動什么容器.
啟動
啟動一個單節(jié)點server, 并將數(shù)據(jù)庫數(shù)據(jù)掛載到宿主機, 保證容器刪除后數(shù)據(jù)還在.
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作為代理訪問這個服務(wù)器需要這樣設(shè)置:
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"添加一個管理員用于登陸, 我使用的是本地認(rèn)證方式, 沒遇到什么問題就不贅述了.
添加新環(huán)境
在rancher-server中默認(rèn)內(nèi)置了一個Cattle Template的環(huán)境, 我也不知道Cattle是個啥, 我們還是用Kubernetes吧, 眼熟.
?
?
點擊Add Environment按鈕
?
這段話我們用中文版本來看:
Rancher 支持將資源分組歸屬到多個環(huán)境。 每個環(huán)境具有自己獨立的基礎(chǔ)架構(gòu)資源及服務(wù),并由一個或多個用戶、團隊或組織所管理。
例如,您可以創(chuàng)建獨立的“開發(fā)”、“測試”及“生產(chǎn)”環(huán)境以確保環(huán)境之間的安全隔離,將“開發(fā)”環(huán)境的訪問權(quán)限賦予全部人員,但限制“生產(chǎn)”環(huán)境的訪問權(quán)限給一個小的團隊。
先建一個Test試一試
?
在這個頁面點擊添加一個主機
?
rancher-agent
rancher-agent 也就是主機, 是用來執(zhí)行具體工作的機器
按照提示來添加主機:
?
在第四步的輸入框中填寫上主機的ip地址, 在這里我填寫的是10.117.195.190, 這個ip使用來給ipsec組網(wǎng)的, 所以需要暴露UDP的500和4500端口.
rancher在這里叫你添加的是公網(wǎng)ip, 但在實際生產(chǎn)環(huán)境中, 不可能每個主機都有公網(wǎng)ip并且也不應(yīng)該使用公網(wǎng)建立網(wǎng)絡(luò), 所以我們在這里填寫內(nèi)網(wǎng)(私網(wǎng))ip地址, 只要保證當(dāng)你添加多個主機的時候他們之間的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: 阿里的只需要主機在同一個安全組就能實現(xiàn)內(nèi)網(wǎng)所有端口互通
復(fù)制第五步的代碼到主機上執(zhí)行, 執(zhí)行之后可以通過以下代碼看它的運行情況:
docker logs rancher-agent稍等片刻你就能在rancher的web頁面"INFRASTRUCTURE->Hosts"下找到你剛剛添加的主機.
這時候能看到這個主機的很多服務(wù)(容器)正在啟動, 不出意外的話能看到這個樣子的主機:
?
圖太長了, 沒截完, 反正全綠就可以了
疑難雜癥
如果遇到紅色無法啟動的容器, 首先查看日志, 找找有用信息, 然后嘗試以下操作:
- 按照錯誤日志排錯, 通過: 經(jīng)驗(玄學(xué)), google, issue
- 手動點擊重啟這個錯誤容器
- 看一下列出的我遇到的錯誤(特別是 重新部署某個主機)
重新部署某個主機
當(dāng)我們在測試或者某個主機出現(xiàn)某些難以解決的錯誤的時候, 會經(jīng)常使用重啟大法, 注意在重新將這個主機加入到rancher集群之前需要清理到原來運行的container以及掛載出來的volume, 否則的話, 當(dāng)再次啟動rancher/agent之后你會發(fā)現(xiàn)很多服務(wù)啟動不了, 如etcd, kubernetes; 一般來說, 只需要清理 kubernetes留下來的東西就好了.
一般如下操作
參考這篇官方文章: 清理主機
ipsec unhealthy
ipsec會將所有主機組網(wǎng), 當(dāng)其中有某個主機連接不上的時候其他ipsec節(jié)點也會unhealthy, 這時候就需要檢查是那個主機的問題, 看其UDP的500和4500端口是否能與其他主機互相訪問.
ipsec 無法啟動
ipsec會向rancher-server機器請求得到其他主機的ip地址以實現(xiàn)組網(wǎng).
但我通過查看ipsec的錯誤日志發(fā)現(xiàn)這個ipsec容器訪問不到rancher-server機器的外網(wǎng)地址, 登陸容器執(zhí)行命令發(fā)現(xiàn)curl http://www.baidu.com都報錯, 這種情況下... 我選擇重啟docker(沒辦法了啊, 如果讀者有解決方案感謝告訴我哦).
但請謹(jǐn)慎操作呀 service docker restart會重啟所有的容器, 這將導(dǎo)致所有服務(wù)不可用.
etcd無法啟動
好像etcd無法啟動和ipsec沒有正常運行有關(guān), 所以先解決ipsec的問題
在上面說了記得刪除volume etcd
更多的可以參考這篇官方文章: 災(zāi)難恢復(fù)
etcd節(jié)點無限重啟
如果你在"INFRASTRUCTURE->Containers"中看到紅色的etcd容器并且在不斷重啟, 不要驚訝.
?
在災(zāi)難恢復(fù)中說到 Rancher在三個不同的主機上運行多達三個 etcd 實例, 猜測Rancher會一直在不同的主機上啟動etcd直到滿足三個節(jié)點, 不過etcd也支持低于三個節(jié)點的, 所以正常使用是沒問題的. 如果實在看不順眼就添加3個或以上的主機.
?
總結(jié)
- 上一篇: github的webhooks无法刷新c
- 下一篇: Hiredis库的简单使用