上篇 docker-compose使用筆記 ,簡單介紹了docker容器編排,演示了集群應用一鍵編排部署的過程,其中重點就是 docker-compose文件的配置,另一個重點當然也就是每個app的dockerfile的定義。
因為容器編排過程必須依賴於每個鏡像中定義好的dockerfile,以完成每個應用的容器創建過程。
本篇將介紹一個便利的可視化容器布署工具: Rancher。首先我們要了解rancher,以及與kubernates的區別,rancher 和 Kubernetes有什么區別?
文中很重要的一句提到 “用戶可以在不熟悉k8s概念的情況下輕松的通過Rancher來部署容器到k8s集群當中”,事實是否如此呢?
關於rancher server 如果自建部署,請看 TeamCity+Rancher+Docker實現.Net Core項目DevOps(目前成本最小的DevOps實踐)
1. 創建集群
無論你是要部署一個單點應用,還是集群應用,在rancher下面你首先都必須先創建一個集群。創建集群,可以是導入的方式,如果要部署多集群應用,這個導入功能就顯得非常便捷。
創建集群的重點是為集群創建主機,這是集群的基礎,按照上幾篇關於consul集群的實踐,這里至少是要有3台主機,反正是要3台的,不作解釋也不再做先搞兩台試試以證明至少必須3台。
通過rancher界面創建主機引導,最終rancher給我們實時生成了創建主機的命令,這句命令是必須復制后去到主機上運行的,告訴主機:你將加入某某集群中(集群URL),你將在這個集群中扮演苦工的角色,例如下面這句命令
sudo docker run -d --privileged --restart=unless-stopped --net=host -v /etc/kubernetes:/etc/kubernetes -v /var/run:/var/run rancher/rancher-agent:v2.3.2
--server https://x.x.x.x:4433
--token xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
--ca-checksum xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --worker、
注意: 角色選擇(每台主機可以運行多個角色。每個集群至少需要一個Etcd角色、一個Control角色、一個Worker角色),這是kubernate的硬性要求,由不得你。
什么是etcd,controller,work,借此補補一下kubernate的基礎知識吧。
特別是etcd,無etcd不集群,用於集群監控,服務發現,大佬(leader)選舉,類似consul。
至於什么是controller,學習webapi的程序員都知道controller,沒錯就是webapi的controller,因為kubernate集群框架是基於api server實現與集群中各成員信息同步的。創建主機時,命令為什么有個token,那就是主機成員與集群中心的api訪問令牌
到這里,為什么創建一個kubernate集群,至少需要一個Etcd角色、一個Control角色、一個Worker角色。
使用rancher是可以不熟悉kubernate,這句話一點BUG都沒有,因為熟悉kubernate的也不需用用rancher。但使用ranchger,是需要了解kubernate的。
2. 部署應用和服務
創建完集群之后,接下來要部署應用
一個集群有多個項目,也即命名空間,一個命名空間有多個工作負載,也即應用或服務,每個工作負載對應一個負載均衡配置
首先創建一個工作負載
最重要的就是選擇docker鏡像,一般我們會將應用的docker鏡像發布雲空間,例如阿里雲的鏡像倉庫中,此處如果輸入一次新的鏡像鏈接后,以后就可以下拉選項中選中
另一個重要的部署是設置工作部署有多少個pod,OK,我們了解一下什么是kubernate的pod, pod是一個抽像概念,最常見的就是單容器pod,如果是單容器的pod,不妨可以理解為一個容器,
也就是這個應用將部署在多少個容器上面。
3. 設置負載均衡量規則
我們創建好一個應用之后,其實還只是一個空架子,現在必須設置這個應用的具體組成,首先配置應用的域名,然后是負載節點,每個負載節點其實就是一個容器,需要在此配置容器端口,這個端口是容器運行時向外暴露的監聽端口。
如果有過nginx應用部署的經歷,就完全不難理解這個負載節點的配置。
設置完負載節點之后,一個應用最其本搭建起來了。以后每次應用有更新,只需要升級即可,以此達到一鍵發布的目標。
3. 關於rancher中yaml文件編輯
反正我試過直接編輯yaml文件是沒用的,可能這機制就是可視化配置生成yaml文件,所以還是乖乖的做可視化配置吧
4. 關於負載升級操作
如果想直接在主機里面,使用 docker -exce 這些命令去直接修改容器里面文件的配置,是沒有用的。因為工作負載升級的過程是,移除pod,然后生成新的pod,也就是說每次升級docker容器都是新的,所以一時的直接修改完全會被recover。
5. 關於安全證書
rancher是可以為應用安裝安全證書的,需要在密文中添加證書,然后在負載均衡規則配置中,為具體某個應用添加安全證書。相比直接在linux上為一個運行在docker上的應用安裝證書,是非常便利的。
6. 關於運行日志
可以點擊查看每個pod的運行日志,這個非常重要,也快捷,工作負載升級如果失敗,都能在日志上看到。
7. 容器啟動命令
容器啟動是除了dockerfile設置之外,我們是可以在工作負載中自定義啟動命令的,便如運行測試環境,npm run test
總結:使用rancher之前,我覺得一些必備的條件如下:對集群部署,容器化部署的基本知識有一定的理解,有過手動通過命令行部署過簡單集群的經歷,對kubernate的基本框架和概念有一定的理解。
理解了這些基礎,再使用這個工具,就舒服了。 讓我們一起 devpos吧!