centos7安裝Rancher

一、概述

    Rancher號稱是全棧化容器管理平臺,官網:https://www.cnrancher.com/

    Rancher的用途是什麼?(請允許我複製一下官網的自我介紹,因爲沒什麼比他更瞭解自己了)

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

    Rancher由以下四個部分組成:

    基礎設施編排
    Rancher可以使用任何公有云或者私有云的Linux主機資源。Linux主機可以是虛擬機,也可以是物理機。Rancher僅需要主機有CPU,內存,本地磁盤和網絡資源。從Rancher的角度來說,一臺雲廠商提供的雲主機和一臺自己的物理機是一樣的。

    Rancher爲運行容器化的應用實現了一層靈活的基礎設施服務。Rancher的基礎設施服務包括網絡, 存儲, 負載均衡, DNS和安全模塊。Rancher的基礎設施服務也是通過容器部署的,所以同樣Rancher的基礎設施服務可以運行在任何Linux主機上。

    容器編排與調度
    很多用戶都會選擇使用容器編排調度框架來運行容器化應用。Rancher包含了當前全部主流的編排調度引擎,例如Docker Swarm, Kubernetes, 和Mesos。同一個用戶可以創建Swarm或者Kubernetes集羣。並且可以使用原生的Swarm或者Kubernetes工具管理應用。

    除了Swarm,Kubernetes和Mesos之外,Rancher還支持自己的Cattle容器編排調度引擎。Cattle被廣泛用於編排Rancher自己的基礎設施服務以及用於Swarm集羣,Kubernetes集羣和Mesos集羣的配置,管理與升級。對於同一個服務,Cattle保證不少於N個容器運行(N<=Rancher集羣中Agent個數,因爲每個agent只能運行1個某類服務的容器)。但不保證高負載下自動擴充。如果需要擴充,需要手動擴充。

    應用商店
    Rancher的用戶可以在應用商店裏一鍵部署由多個容器組成的應用。用戶可以管理這個部署的應用,並且可以在這個應用有新的可用版本時進行自動化的升級。Rancher提供了一個由Rancher社區維護的應用商店,其中包括了一系列的流行應用。Rancher的用戶也可以創建自己的私有應用商店。

    企業級權限管理
    Rancher支持靈活的插件式的用戶認證。支持Active Directory,LDAP, Github等 認證方式。 Rancher支持在環境級別的基於角色的訪問控制 (RBAC),可以通過角色來配置某個用戶或者用戶組對開發環境或者生產環境的訪問權限。

    下圖展示了Rancher的主要組件和功能:

Rancher Overview

    更詳細的文檔請移步到http://rancher.com/docs/rancher/v1.6/zh/

    Rancher的github地址是https://github.com/rancher/rancher

二、安裝

    本身docker安裝部署就比較簡單,難度不高於申請一個QQ,而且網上也能百度不少,爲啥還要在這裏再寫一次呢?

    都是因爲坑!首先官方的快速上手指南地址如下:https://www.cnrancher.com/rancherv2-0-quick-start-guide/

    指南里很詳細的介紹了環境的要求,安裝的準備,安裝的步驟,以及使用。看着很詳細,但是按照步驟一步一步走,但最終卻老是跑不起來……

    起初我使用docker18.01.0,卡在Rancher啓動後,訪問8080端口,提示連接拒絕。又重新看了一遍指南,發現開頭提示

    

    恍然大悟的感覺,於是重新安裝了17.03.2版本。一頓折騰,再啓動Rancher,依然提示連接拒絕。無奈之下,登陸官網的論壇,發帖求助。求助帖地址:https://forums.cnrancher.com/q_58.html?notification_id=532&rf=false&item_id=115#!answer_115

    等回帖的過程,無意發現了Rancher的github地址,卻發現github上得get start和官網文檔不一樣,WTF!按照github上得命令啓動,再訪問,成功了。

    後來再看回帖時,非常感謝王偉軍的解答,內容如下:

rancher/server:preview 表示2.0技術預覽版,還在開發中...
rancher/server 什麼也不加,表示rancher/server:latest,最新穩定版,目前是v1.6.14
建議加上固定的版本號,比如:
rancher/server:v1.6.14
 
有關rancher server 各個版本的情況,可以參考下面的鏈接:
https://github.com/rancher/rancher/tags
https://github.com/rancher/rancher/releases/tag/v1.6.14
https://github.com/rancher/rancher/releases/tag/v2.0.0-alpha12  

    有點廢話,但是還是要把正確的啓動命令貼出來一下

docker run -d --restart=unless-stopped -p 8080:8080 rancher/server

    另外,生產環境下建議部署集羣模式的Rancher,集羣相比於但容器只是在啓動命令上多加幾個參數,如

# 機器172.16.42.163
docker run -d --restart=unless-stopped -p 8080:8080 -p 9345:9345 rancher/server   --db-host 172.16.40.5 --db-port 3306 --db-user cattle --db-pass cattle --db-name cattle  --advertise-address 172.16.42.163
# 機器172.16.110.2
docker run -d --restart=unless-stopped -p 8080:8080 -p 9345:9345 rancher/server   --db-host 172.16.40.5 --db-port 3306 --db-user cattle --db-pass cattle --db-name cattle  --advertise-address 172.16.110.2

    但是,執行前需要初始化數據庫,初始化命令如下:

> CREATE DATABASE IF NOT EXISTS cattle COLLATE = 'utf8_general_ci' CHARACTER SET = 'utf8';
> GRANT ALL ON cattle.* TO 'cattle'@'%' IDENTIFIED BY 'cattle';
> GRANT ALL ON cattle.* TO 'cattle'@'localhost' IDENTIFIED BY 'cattle';

三、使用

    本文的重點不是介紹Rancher多麼厲害,也不是重點說如何按照,而是如何使用他的UI,如何通過UI完成我們想要做的事情。

    打開瀏覽器,訪問http://host:8080,進入主頁面

    關於語言。可能剛進去的時候,默認語言是英文。如果想要使用中文,將頁面拖到最底,在最右側,點擊語言下拉框,選擇中文即可。

    關於功能。在最上面,依次可以看到Default、應用、應用商店、基礎架構、系統管理、API。

    Default,這個主功能對應的是環境,不同環境下,應用相互隔離。比如可以設置開發環境、測試環境、線上環境等。不同的環境還可以指定不同的編排引擎,默認是Cattle,可以切換成Kubernetes、Mesos、Swarm,值得一提的是,切換環境所需的軟件Rancher會自動安裝部署,無需額外操作。不過對Kubernetes的兼容還需要看具體的docker版本,詳細請見如下鏈接http://rancher.com/docs/rancher/v1.6/en/hosts/#supported-docker-versions,因爲默認的Cattle已經能滿足我得需求,故此沒有考慮Kubernetes,所以直接使用了docker18.01.0,若想使用Kubernetes請使用docker17.03.x-ce(ee)版本

    應用,應用可以理解爲是不同的服務,比如用戶系統和訂單系統,這是兩個服務,每個服務下可以又細分爲數據庫、中間件、程序、管理後臺等。同理,不同的應用下可以有很多子系統。在這裏菜單下,主要分爲用戶和基礎設施,所有人爲創建的應用都歸屬到用戶下,其他歸屬到基礎設施下,比如健康檢查、網絡中心等。

    應用商店,理解了應用就好理解應用商店了,這裏你不用自己手動去創建你所需要的服務,你只需要鼠標點點就能構建出一整套的系統出來,比如一個BBS論壇,如果自己建,你可能需要數據庫、後臺、門戶等,但是在應用商店裏,可能別人已經創建好了,你只需要點一下,一個BBS論壇就能正常服務了。

    基礎架構,在應用裏創建的容器,主機信息、存儲以及可能會用到的密文、證書還有鏡像庫,全部都在這裏細化管理。

    系統管理,在這裏可以進行審計日誌、賬號設置、系統進程、高可用、訪問控制、主機驅動、系統設置功能,對系統進行詳細的設置。

3.1、主機

    主機是最基礎也是最核心的功能。進入基礎架構->主機頁面,點擊添加主機按鈕。

    可選主機有自定義、EC2、Azure等,這裏我們選擇自定義,然後按照頁面提示確認所添加機器是否滿足要求,原則上要求所有主機使用同一版本的docker。然後在第五步,複製腳本,到被添加的機器上執行,待執行完後,點擊關閉,即可看到新加的機器。

3.2、環境

    環境之間相互隔離,保證服務的穩定性,點擊Default->環境管理,可以增加新的環境。如果默認的環境模板不能滿足需求,可以點擊添加環境模板按鈕。然後再點擊添加環境按鈕,選擇新建的模板(大部分情況下,默認的模板已經夠用)。

    添加環境非常簡單,只要輸入名稱、描述,選擇模板即可。注意名稱不能是中文,如果輸入了中文,點擊創建後,會提示錯誤,再之後輸入英文同樣提示錯誤,不要緊張,不是你填錯了,這是Rancher的一個無關痛癢的bug,回退一下,再點一次添加環境,重新輸入就好了。

    細心的會發現這裏有個訪問控制,什麼意思呢,就是不同的用戶可以歸屬不同的環境,比如測試人員歸屬測試環境,不歸屬線上環境,訪問控制的意思就是不是這個環境的成員,就看不到這個環境或無法操作這個環境。

3.3、應用

    按照經驗來說,環境一旦創建好了,以後所有操作都應從環境這裏開始。

    點擊Default->Default,進入Default環境主頁面。每個環境可以創建很多個應用,我們首先創建一個應用,比如叫first

    只需要輸入名稱和描述即可,其他默認,然後點擊創建。點擊之後會進入到應用的首頁,

3.4、容器

    如何創建容器?千萬不要去基礎架構->容器裏創建,雖然在那創建沒問題,但是在那裏創建的容器,在應用裏是無法引用的。正確的做法,是在應用首頁,點擊添加服務按鈕。這裏有個容器混淆的地方,添加服務按鈕的最右面有個下三角,點擊之後會出現添加負載均衡、添加外部服務、添加服務別名,這時千萬不要以爲就這三個功能,還有一個最重要的添加服務本身這個按鈕!下面介紹一下這四個功能:

    添加負載均衡。底層應該是用的HA,可以自動發現服務,即服務伸縮後,依然能夠正確鏈接到服務。這個是必有的服務。

    添加外部服務。如果在過渡期,有些服務沒有遷移到Rancher上怎麼辦?這時可以添加外部服務,流量經負載均衡分發到外部服務時,外部服務會再次轉發流量到真實服務上。

    添加服務別名。這個沒發現具體是幹嘛,主要是給一個服務再起一個名字,當引用這個服務時,其實最終用的還是最開始的那個服務,比如服務A,我起個別名服務B,那服務C在引用服務B時,其實引用的時服務A。

    添加服務。這個是最主要的功能,通過這個功能,可以創建基於任何鏡像的容器服務。

    下面我們來創建一個類似下圖的應用,這是一個模擬網站的應用,有兩個nginx,上面有個負載均衡(HA)負責分發流量到nginx,然後nginx在分發到具體的業務(這一步略過,後續會有專門的博文介紹)。

    首先點擊添加服務按鈕(不是下拉框)。表單分三塊:

    第一塊是指定數量。也就是這個服務在運行時最小容器數量,也可以指定在Rancher管理的主機範圍內每臺主機都運行這個容器。需要注意的是同一臺主機同一個服務最多啓動1個容器,也就是說,設置的數量必須小於等於Rancher管理的主機數量。

    

    第二塊是設置名稱和鏡像,首先設置名稱(只能英文),然後設置描述(可不填),然後設置鏡像名稱,最後設置nginx端口,這裏可以綁定宿主機的端口,但除非測試,不要綁定到主機端口,容器應該處在相對封閉的內網,不應該暴露出去。協議選擇TCP。另外除了創建新鏡像,還可以選擇已創建的服務。

    第三塊是詳細配置,比如命令、卷、網絡、安全/主機、密文、健康檢查、標籤、調度。由於是中文系統,大多見文知意。這裏簡單描述下各自功能:

    命令:在這裏可以設置命令、入口、工作目錄、用戶、控制檯、環境變量等,有點類似Dockerfile。

    卷:容器掛載宿主機卷,比如某個目錄,需要所有容器使用,就可以設置卷

    網絡:有三種模式,託管(默認)、橋接、主機、無,一般託管即可,還可以設置dns等。

    安全/主機:在這裏可以詳細控制這個容器的權限,比如限制內存、限制交換區、限制CPU等。

    密文:這個很少有機會用到

    健康檢查:這個是伸縮的依據,一定要配置!默認無,如果是無,即使容器掛了,也不會伸縮的。然後是TCP連接和http響應,一般TCP,選擇TCP後,還需要配置一下端口,這個端口是容器私有端口,也就是第二塊配置的端口。然後其他值自行選擇配置。

    標籤:可以對容器打標籤,方便檢索等使用。

    調度:調度+健康檢查共同組成了自動伸縮功能。默認爲每一個容器自動選擇符合調度規則的主機,也可以自定義調度規則。

    最後點擊創建,即可創建出一個容器。創建完成後,容器開始下載(第一次),然後初始化、最後運行。頁面純異步,不用刷新,即可看到最新狀態。

    按同樣的步驟創建出nginx-02。最終在應用首頁展示如下:

    最後我們來創建一個負載均衡,同樣分三塊,第一塊和第三塊略過,主要描述第二塊。

    名稱和描述是慣例。下面端口規則有兩類服務規則和選擇器規則:

    容器規則。是負載到哪個容器上,比如剛纔創建的nginx-01和nginx-02,表單裏,從左往右分三段,第一段是配置協議,第二段是配置負載均衡,注意這裏的端口是宿主機端口,第三段選擇服務nginx-01,端口是私有端口,然後再點擊添加服務規則,將nginx-02配置上,如下:

    選擇器規則。根據url路徑匹配到哪個服務。

    最後點擊創建,最終應用首頁如下:

    

    可以訪問一下看看效果:

    在應用首頁可以進行全部的操作,比如啓停、刪除、升級、編輯等一系列操作。

3.5、運維

    所有在環境下創建的任何信息,都可以在基礎架構下分類查看。建議在環境下得應用裏修改服務,從而修改容器,不建議直接在基礎架構下修改對應信息。

3.5.1、監控

    在應用首頁,點擊服務名稱,可以進入到服務監控頁面,如下:

    在右側列表裏再點擊名稱,注意這個名稱是Rancher針對nginx-01做的伸縮節點,名稱規範是應用名-服務名-節點數,節點數從1開始。如果嫌麻煩,還可以直接點擊基礎架構->容器,找到伸縮節點,點擊名稱進入。

3.5.2、日誌

    在服務監控頁面的右側,找到日誌標籤,點擊他,可以看到容器的運行日誌。

    注意這個日誌不是nginx的日誌。一個雲架構下應該有自己的日誌採集系統,不可取的是ELK。應該類似EKFK,即elasticsearch+kibana+flume+kafka,通過使用log4j的kafka插件,將日誌直接上送到kafka,然後flume從kafka取出丟到es,受限於公司專利,不能貼出更詳細的設計,不過EKFK涉及的自定義插件,歸個人所有,詳見我得主頁,作品欄。

3.5.3、認證 

    如此重要的系統,必須要加認證,以防止惡意破壞。

    Rancher支持多種方式認證,常見的如github、ldap、本地等。

    以本地爲例,在系統設置->訪問控制頁面,選擇LOCAL,出現

    按要求填入用戶名密碼,比如root/1234,然後點擊啓用訪問控制。即成功開啓認證。不同的是如果需要添加賬號,不是繼續訪問訪問控制,而是訪問系統管理下得賬號管理。

    我們來添加一個賬戶,如下:

    那麼如何來控制用戶的環境歸屬呢,回到環境配置裏,點擊Default->環境配置,在Default數據行的最後面,點擊編輯按鈕,進入編輯頁面。當前只有root歸屬到Default,下面我們把剛建的test加入進來,在文本框輸入test,然後點擊後面+號,即可添加用戶到環境裏。詳見http://rancher.com/docs/rancher/v1.6/zh/environments/#%E6%88%90%E5%91%98%E8%A7%92%E8%89%B2,這裏存在第二個bug,如果新建的用戶,歸屬於用戶角色,則無法登陸和被添加到環境裏,並且修改爲管理員後也不可以正常使用,只能先刪除用戶,然後在創建時就指定爲管理員。一個折中的辦法就是先創建管理員賬戶,然後加入到環境,再返回修改用戶爲用戶角色即可。

3.5.4、私服

    對於大多數公司來說,把項目打包到共有倉庫是不可行的,所以大多選擇搭建私有倉庫,來存儲鏡像。Rancher支持dockerhub、quay兩種共有庫,以及自定義私有庫,點擊基礎架構->鏡像庫,然後點擊添加鏡像庫。

    輸入域名或ip,用戶名密碼即可,不過需要注意的是Rancher只支持HTTPS方式的私服,詳見官方文檔http://rancher.com/docs/rancher/v1.6/zh/environments/registries/#%E6%9B%B4%E6%94%B9%E9%BB%98%E8%AE%A4%E7%9A%84%E9%95%9C%E5%83%8F%E5%BA%93,推薦使用Harbor搭建私服(搭建參考https://my.oschina.net/shyloveliyi/blog/1617206)。

    創建完私服後,在環境裏新增服務可以選擇使用私服的鏡像,只要在鏡像那一欄指定私服地址即可,比如創建一個nginx鏡像的容器,如果是使用dockerhub時輸入nginx,但使用私服時需要輸入完整的名稱reg.yourdomain.com/library/nginx:0.1

3.5.5、命令行

    在服務監控頁面進入容器首頁,在右上角點擊出現的下拉菜單中找到執行命令行,可以進入容器命令行頁面,如下

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章