1. 程式人生 > >Rancher及Docker快速上手指南(二)

Rancher及Docker快速上手指南(二)

......接上一篇文章

四、新增和管理容器

在Rancher通過介面方式新增容器的方式其實有兩種,一種是在上面提到的管理主機,直接新增獨立容器(獨立於Rancher平臺的容器,就算Rancher平臺停了,容器還會在各自主機保留),另一種是下一節會講到的,通過應用新增的方式新增容器(由Rancher平臺管理,只要應用刪除或Rancher沒了,對應的容器也將失效,同樣通過應用建立的容器也需要在應用面板中才能完全刪除)。

點選主機面板下的按鈕,彈出新增容器介面,進行以下配置:

1. 映象名

輸入本主機唯一併能標識的容器名稱,再輸入映象名,預設是ubuntu:14.04.3(即最新版本的基礎映象,就是最最乾淨Linux的包),關於映象,可以通過docker search [映象名] 去搜索:

 也可以進入docer hub頁面上去搜索,一搜就能搜出大量的公共映象,並且能看到各個歷史版本:

通過標示tag我們就能拉取指定版本的映象,如tomcat:8.0-jre8,如果不加tag,就寫tomcat,預設下載的是最新版本的映象,即tomcat:latest

【建立前總是拉取映象】在第一次時需要勾選,如果本地已有映象,就不需要勾選了(避免反覆拉取映象浪費感情)。注意:如果你新建了一個本地映象,想直接生成容器,也不要勾選這一項,否則到映象庫裡是找不到你新建的本地映象,就可能報錯。

2. 埠對映

這一步很重要,因為要對映的埠要事先新增好,事後就無法新增埠了(事後新增新埠需要重建容器,即刪除原有容器),但是公開埠可以事先修改(比如8080埠對映成80埠,以後發現80埠需要被其他應用佔用,那麼就可以將8080埠改成對映為8080埠)。如下所示,ganglia應用需要有大量的監控埠,就全列上:

3. 命令

基本不需要設定該面板,唯一比較常見的是要在容器中新增環境變數,比如開啟SSL訪問的容器應用,就需要新增如下環境變數,docker run命令中包含的變數格式為:

-eREGISTRY_HTTP_TLS_CERTIFICATE=/root/certs/domain.crt -eREGISTRY_HTTP_TLS_KEY=/root/certs/domain.key

那麼對應到設定面板裡就如下(直接複製貼上,變數和值自動填入以下輸入框):

4. 卷

一般也不需要設定該面板,但是卷的作用還是非常大,比如上面提到的安裝Rancher的命令,通過設定卷就能讓容器裡的資料固化到主機上(類似於ln軟連結的原理),避免容器刪除時,一些資料也隨著容器一起消亡,比如mysql資料服務。我們將上面Rancher的安裝命令涉及到卷的部分,放到面板上設定,就如下所示:

格式說明:冒號前面是主機上的目錄,冒號後面是容器裡的目錄。

5. 網路

標準的Docker其實只有四種模式,橋接、容器、主機、無,而且橋接Bridge是預設模式,這裡的橋接和虛擬機器的橋接類似但不是一個概念,虛擬機器的LinuxBridge相當於是一個虛擬交換機,但Docker Bridge要複雜的多,同時具備有 veth pair,有網路名稱空間, 還有 NAT的特性。而Rancher下卻有五種網路模式,多了一個託管模式(Managed),而且還是預設模式,Managed網路是通過IPsec來建立起安全隧道來保障各service之間可達性的。相比於其他一些VPN技術,IPSec最大的優勢在於其安全性;這種安全除了指業務資料加密傳輸外,還包括了一套祕鑰交換的安全機制,這是諸如VXLAN之類的其他L3 VPN技術無法匹敵的。帶來了安全,但卻犧牲了網路效能,Managed網路表現出來的效能損耗較嚴重(當然這也與執行Rancher的主機配置有關),效能關係基本上按以下關係,大家可以權衡一下用不同的網路模式:

Host模式(安全性差) > Bridge模式(安全適中) > Managed模式(安全最高)

介紹一下五種網路模式(橋接、容器、主機、託管(預設模式)、無):

(1)[橋接Bridge]表示容器與主機是橋接關係(docker0網橋相當於是新路由器)

(2)[容器Container]表示與另一個容器共用一個虛擬網路

(3)[主機Host]表示讓容器與主機共用一個網路(在容器裡用ifconfig命令看到的結果與主機上一模一樣,這種方式等於容器的隔離性沒了,相當於成了宿主機上的一個程序服務)

(4)[託管Managed]表示容器與主機按照預設的網橋模式連線(相當於虛擬機器的NAT模式,docker0網橋相當於是路由器)

(5)[無None]表示容器沒有網絡卡裝置,需要通過別的手段配置網絡卡(基本上沒用到)

我們通常就只要用託管(Managed)模式或橋接(Bridge)模式,對於叢集化環境或是對網路效能要求高一點的,建議採用橋接(Bridge)模式。比如想要頻繁操作容器,用了橋接模式,CLI連線或命令列連線相對要穩定。

通過新增容器面板配置網路模式的選項如下所示:

另外我們通過ifconfig可以看出託管(Managed)模式下,容器的IP隨機完全沒有規律:

而橋接(Bridge)模式下,容器的IP網址生成比較有規律性(基本是0.2、0.3遞增)

6. 安全/主機

這一項基本上不用配置,除非你想對容器限制記憶體或CPU(預設不限制,就是完全共享主機的系統資源)、或者需要掛接外部裝置,另外就是日誌驅動的配置:

我們在使用Docker處理日誌的時候多數是採用Dockerlogs <container>命令,因為docker預設採用的log-driver是json-file,所以Docker會捕捉每一個容器程序STDOUTS和STDERR,儲存在磁碟檔案.json.log中供Dockerlogs命令查詢。日常除錯按預設基本上夠用,但是如果是要大規模叢集化部署,還是需要有專業的日誌系統,比如syslog + rsyslog + ELK(ElasticSearch、Logstash、Kibana)方案,可以通過Rancher的應用商店去部署日誌整合系統,具體可以去網上找相關解決方案。

對於安全這塊,有時候需要配置[主機完全訪問許可權],對應的docker run容器指令為--privileged=true,相當於是給容器擴權,配置項如下:

7. 密文、健康檢查、標籤

具體作用不明,密文將以指定的檔名對映到容器內的/run/secrets/的目錄下。而且密文需要事先定義好才能在該配置模板選擇設定。具體在【基礎架構à密文à新增密文】。

對於健康檢查,一般不用配置,由Rancher平臺負責健康檢查,如果需要對外提供容器健康檢查的介面,就需要配置,包括TCP介面和HTTP介面兩種方式,在下一節的新增和管理應用中,也可以通過新增外部服務來進行調取。

標籤面板中,能新增容器的標籤,通過新增標籤(支援多個)來方便識別容器,基本上可以不用,但是如果是要構建負載均衡服務(在應用管理介面中新增),可以通過新增選擇器規則,然後容器標籤就能作為規則條件來識別具體要負責均衡的目標容器。

8. 排程

Rancher比較智慧的一點,就是主機的智慧排程,比如你要新增一個容器,Rancher會根據各個主機的空閒程度,自動分配一臺機器來部署新的容器。

如果是在指定主機下,點選新增容器,那麼預設排程的是本機。如果是要更改,可以通過選擇在指定主機上執行,來設定不同的主機安裝容器。

還有個功能是新增排程規則,這個在叢集化部署中比較有用,就是在自動選擇符合排程規則的主機時,我們可設定個規則,讓它必須按我們的規則選擇主機。比如按標籤規則:

從這裡也看出新增主機時,配置標籤(Label)是多麼重要,我們很多時候可能真需要通過標籤來識別不同的主機,特別是在批量新增容器或應用時。

配置上以上這些配置項後,就可以點選【建立】來完成容器的建立了。

9. 容器監控

通過容器詳細介面,可以看到容器的實時CPU、記憶體、網路、儲存IO指標,可以看到容器的所屬主機、容器IP、Docker ID、映象、對映的埠、卷資訊、網路模式、排程資訊等等。

10. 容器管理

容器的管理的其實只有重啟、停止、刪除、編輯外部對映埠這幾項有用,其他都沒什麼用,因為容器一旦建立,其生命週期就延續到消化刪除,很少在使用過程中還需要做調整和更改的(注意:主機面板上的停止、刪除容器操作其本上是針對獨立容器,應用容器建議在應用面板上管理操作)。另一個最大的作業是執行命令列:

執行命令列,相當於是以介面的形式登入到容器內部環境,這個比較好用,相當於可以連線到容器內部,執行一些 Linux命令,進行一些常規操作,比如容器應用的修改配置檔案。修改完還是需要重啟容器才能生效(這一點比直接通過命令的方式操作要方便),但是涉及到容器與宿主機之間的檔案對拷,還是需要通過Linux命令來完成,因為在容器中沒有安裝SSH並開放22埠的情況下,是無法直接連線容器上傳檔案的,常用互動命令:

# 往容器中拷貝檔案:

docker cp /home/testfile 容器ID:/home/

# 將容器中檔案拷出:

docker cp 容器ID:/home/testfile /home/

# 在容器中安裝新的程式

docker run image_name apt-get install -y app_name

以[執行命令列]的方式進入容器的效果圖如下:

對於網橋(Bridge)模式建立的容器,可以很方便的通過[執行命令列]進行入,而對於以託管(Managed)模式建立的容器,進入該視窗會不太穩定,會受Rancher自身網路的影響。

五、新增和管理應用

通過應用的方式部署和管理容器,是一種正確的思維,對於容器化來說,我們必須把應用程式進行拆解,降低維護管理的耦合性,而容器正是適應這種管理的最佳思維方式。就拿Rancher管理平臺來說,就是一個完整的應用,包括Rancher-Server、Rancher-Agent、healthcheck、ipsec等服務,而每個服務對應的是一個容器或多個容器(比如一個mysql服務是一個容器,新增成4個容器,就變成了一個包含4個節點的mysql服務),那麼這些容器服務組合在一起才能提供完整的應用服務。所以服務是我們對外提供訪問的視窗,而應用是對外提供完整服務的集合,容器只是滿足耦合性和輕量化部署管理的最小單元。

同樣一個叢集也可以包括多個應用,一個應用包含多個服務或容器,比如Jmeter工具構建的一個叢集,包括Jmeter-Master、Jmeter-Slaves、grafana監控三大應用,而其中Jmeter-Slaves應用包含10個節點(即10個容器)、grafana監控包含grafana和influxdb容器,而一個叢集也可以作為一個完整的應用對外服務。

所以我們提倡通過應用的方式來組織管理容器化叢集,避免單個容器的管理過於零散和不可控(應用管理下的容器就算在主機中被停也會再次下發重建命令,所以我們要權衡好,畢竟獨立容器不受制管理平臺的啟停,雖然弱管理但靈活性也更強)

1. 新增應用

Rancher的應用包含兩類,使用者應用和基礎應用,其中基礎應用屬於Rancher平臺自帶的我們不可動,使用者應用才是我們要維護和管理的。

對於應用的管理介面,可以看到有新增應用(自定義應用)和從應用商店新增兩個按鈕,我們一般只用新增自定義應用,而應用商店裡的應用類似於手機上的APP商店,都是一些成熟的應用,比如Hadoop+Yarn,一鍵安裝部署你想要的叢集環境。

在這裡只介紹新增自定義應用:應用à使用者à新增應用,包括手動新增服務和compose配置新增兩種方式。

(1)手動新增服務

採用手動新增服務,只需要輸入應用名,直接建立,然後在應用上點選【新增服務】按鈕,預設新增的是普通服務(即容器)、另外還能選擇新增負載均衡、服務別名、外部服務。

新增負載均衡:這個比較有用,通過配置一個對外的HTTP(支援多種協議)及埠,並選擇一個服務(容器),或者通過選擇器規則找到具體的服務(容器);具體的負載均衡配置可以參照:

https://blog.csdn.net/csdn_duomaomao/article/details/76216046

新增服務別名:這個不知道具體的用處,其實就相當於是添加了單個或多個服務的連結。

新增外部服務:就是將外部或第三方服務的介面封裝成一個服務,如第四節第7小節提到的健康檢查服務。

普通服務:普通服務就是跟上一節新增容器一樣的,在這裡就不細說了,但是這裡可以實現新增一個容器和批量新增容器的功能(相當於拷貝複製同樣的容器到不同的主機上,但這些容器都屬於同一個服務下),另外還可以通過新增從容器的方式,來實現自己需要的容器拷貝複製方式(這裡的主從容器也是在一個服務下的)。

在應用管理介面,手動點選一個服務,可以開啟服務詳情介面,這個介面可以看到該服務下所關聯的容器,可以快捷管理和操作容器,另外還能快捷的新增容器:

說明:以上在一個服務下新增多個容器的方法,需要注意的是如果建立的規則是在同一個主機上新增容器,容易出現埠衝突及其他衝突性問題。

(2)Compose方式新增服務

這是我們比較提倡的一種新增服務(容器)的方式,我們可以選擇手動編輯Compose檔案,匯入後就能自動建立一個應用或叢集,也可以將當前的應用匯出配置:

這個匯出的配置是個compose.zip包,就相當是個備份,裡面包含docker-compose.yml檔案和rancher-compose.yml檔案,下次重建應用的時候直接匯入就行。

關於docker-compose如何配置是個技術活,格式有一點錯誤建立應用時就會報錯,具體可以上網找相關教程。

也只有通過compose檔案部署應用和服務,我們才可以真正實現叢集的一鍵安裝部署,雖然部署容器只有幾秒種的事情,但如果是部署幾十上百節點的應用叢集(雲計數環境下這都不算什麼),一個個拉取映象和建立容器也會讓人崩潰的。

關於Docker的Compose認識及使用,參照網上文章:

https://www.cnblogs.com/52fhy/p/5991344.html

2. 管理應用

在應用介面我們可以看已新增的應用,可以在此基礎上,繼續新增應用下的服務,也可以進行應用的增刪改閱操作。

(1)新增服務

我們可以在現有應用的基礎上繼續新增服務,操作見上面的手動新增服務。

(2)停止服務

這裡的停止服務,可以停掉應用下的所有服務和容器,相當於批量停止容器,這就體現出管理工具的優勢了,重啟時也是一鍵重啟。

(3)檢視圖形

這個功能在負載均衡下挺有用,一眼就能看出叢集的拓撲圖。

(4)檢視配置

就是檢視該應用的Compose配置,其實看多了各個應用的Compose配置,慢慢我們也會掌握編輯屬於自己的Compose檔案。

(5)匯出配置

上面也提到了,可以將當前應用的Compose配置匯出,作為備份,下回重建應用時,直接匯入就能一鍵建立應用叢集服務。

(6)刪除

刪除應用就能批量刪除應用下的服務和容器。這也是最方便的地位。

(7)API檢視和編輯:這兩功能沒什麼用,基本是擺設。

未完待續......