1、服務(wù)器列表
Confluence5.10.8 wiki遷移到簡書
對于有狀態(tài)的公共集群扎瓶,采用虛擬機(jī)方式部署所踊。(這些服務(wù)也可以容器化部署,但目前技術(shù)儲備不足概荷,一旦出問題排查麻煩)
2秕岛、相關(guān)信息
kubernetes版本:v1.12.2
docker版本:17.03.1-ce
kubernetes-dashboard:https://10.66.221.92:30443/
traefik負(fù)載均衡:http://10.66.221.92:8081/
registry私庫地址:http://10.66.221.138:5500/
鏡像列表:http://10.66.221.138:5500/v2/_catalog
鏡像標(biāo)簽列表:http://10.66.221.138:5500/v2/{鏡像路徑}/tags/list
dashboard-token令牌:
eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJhZG1pbi10b2tlbi1nMjl0NyIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJhZG1pbiIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6IjIwMGQ0OGNjLWZjM2EtMTFlOC1hYjExLTAwNTA1Njg3MDYxMCIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlLXN5c3RlbTphZG1pbiJ9.PMEbhFmJwg9Zj62XzrA1hcqHe2CGpqk9Ne6gX8J6B-iMXbHhHtrMLrxA2o6e68HQ2_DToI-cRsMuSwzb1iugslPmJIvgHgJ0kj3yW-tR6NZ4Azi8ua8LMLVg8a2gUCiumNezlmcp4zqmay1leoxaNvrNeLOqmrBoRNkyvMo_tOLYgK28iJrpPeF1OoiVnJN7fghu895ZqWs_0maAd891HiIjArW1_bt30SVy5tU2I6yiCwqiAztLSrM9Jd24EG8jxfov7gCN5Lsp80E-UtRHADQt8H55r0jAnKxxzdfy2NfeDcUteYXiNQtyIPpqgigC-rJHWPbdZw9SEq4X-dgdUQ
3、技術(shù)選型和驗證
3.1误证、docker容器管理平臺選型
根據(jù)上面2個表格得出:
swarm :上手最簡單瓣蛀,但是目前還不夠完善,社區(qū)也不活躍雷厂, 離生產(chǎn)環(huán)境有一定距離。
mesos: 上手復(fù)雜叠殷,社區(qū)也不活躍改鲫,超大集群可考慮。
kubernetes:上手較為復(fù)雜林束,有各種成熟方案像棘,但是社區(qū)活躍度高, Kubernetes于2017底在容器編排上勝出壶冒,目前大量公司都在使用缕题。
rancher:2.0簡化了kubernetes部署,但是我在實際使用中第一次沒部署成功胖腾,資料很少烟零,社區(qū)活躍度不高瘪松。
綜上對比, 我選擇了kubernetes作為容器編排工具锨阿,并使用官方kubeadm部署方式宵睦。
3.2、業(yè)務(wù)應(yīng)用部署
只需要準(zhǔn)備好k8s deployment等配置文件墅诡,就可通過dashboard管理平臺執(zhí)行完成應(yīng)用部署壳嚎。
3.3、服務(wù)動態(tài)擴(kuò)縮
可直接在dashboard管理平臺操作末早,隨時擴(kuò)容應(yīng)用運行實例個數(shù)烟馅。
3.4、服務(wù)容器鏡像構(gòu)建方案
3.4.1然磷、k8s鏡像私庫方式
選擇docker官方registry鏡像部署郑趁。
docker run -d -p 5000:5000 -v /opt/data/registry:/var/lib/registry registry
k8s集群Node節(jié)點需要加入鏡像白名單:
vim /etc/docker/daemon.json
3.4.2、打包發(fā)布鏡像
選擇靈雀云平臺用于代碼打包和鏡像構(gòu)建
- 保持與公司開發(fā)流程和構(gòu)建鏡像一致样屠。
- 靈雀云也是基于kubenetes二次開發(fā)穿撮,部署方式一致,現(xiàn)有容器化的服務(wù)不需要特別改造痪欲。
- 考慮到本地化環(huán)境網(wǎng)絡(luò)隔離問題悦穿,我們交付給本地化部署的是鏡像文件。
過程步驟:
開發(fā)人員提交代碼-->通過靈雀云平臺構(gòu)建鏡像-->人工導(dǎo)出服務(wù)鏡像文件-->人工將鏡像導(dǎo)入到本地環(huán)境鏡像私庫
3.4.2业踢、k8s部署服務(wù)
一個業(yè)務(wù)服務(wù)部署只需要編寫Deployment栗柒,Service,Ingress 3個yaml配置文件知举, 通過kubernetes-dashboard管理平臺執(zhí)行即可完成部署瞬沦。
|
<pre style="margin: 0px; tab-size: 4; white-space: pre-wrap;">apiVersion: apps/v1beta2
kind: Deployment
metadata:
labels:
app: deployment-default-hello-world
name: deployment-tutum-hello-world
namespace: cloud
spec:
selector:
matchLabels:
app: deployment-default-hello-world
replicas: 1
template:
metadata:
labels:
app: deployment-default-hello-world
spec:
containers:
- image: tutum/hello-world
name: tutum-hello-world
ports:
- containerPort: 80
name: web
apiVersion: v1
kind: Service
metadata:
name: service-tutum-hello-world
labels:
app: deployment-default-hello-world
namespace: cloud
spec:
type: NodePort
ports:
- port: 80
targetPort: 80
nodePort: 31000
selector:
app: deployment-default-hello-world
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: traefik-web-ui
namespace: cloud
spec:
rules:
- host: tutum-hello-world.local
http:
paths:- backend:
serviceName: service-tutum-hello-world
servicePort: 80
- backend:
</pre>
|
3.5、負(fù)載均衡方案
最終選用的是Traefik雇锡。
3.5.1逛钻、traefik 七層網(wǎng)絡(luò)負(fù)載
3.5.1、負(fù)載均衡高可用
可指定多個k8s node節(jié)點作為負(fù)載均衡節(jié)點锰提,以DaemonSet方式部署曙痘。通過keepalived做熱備對外提供VIP。
3.6立肘、容器服務(wù)日志方案
目前靈雀云已做好的基礎(chǔ)鏡像采用的是第一種方式边坤, 所以保持一致。
3.7谅年、容器網(wǎng)絡(luò)互通方案:
當(dāng)前k8s部署采用默認(rèn)的flannel網(wǎng)絡(luò)方案茧痒,解決了跨主機(jī)間容器直接使用自身 IP 進(jìn)行通信的問題,會對node節(jié)點會分配為每一個node節(jié)點分配一個唯一的ip/255.255.0.0 網(wǎng)段融蹂。(ip網(wǎng)段可以指定)
3.7.1旺订、網(wǎng)絡(luò)互通測試
測試結(jié)果
3.7.2弄企、容器網(wǎng)絡(luò)互通方案
上述k8s集群外的節(jié)點無法訪問內(nèi)部容器網(wǎng)絡(luò)。
導(dǎo)致的問題:dobbox提供接口的服務(wù)部署在容器耸峭,dobbox消費接口的服務(wù)部署在k8s集群外則調(diào)用接口失敗桩蓉。
我們使用 Flannel 作為 k8s 網(wǎng)絡(luò)組件,F(xiàn)lannel 的特點是每個宿主機(jī)上的容器網(wǎng)段是固定的劳闹,部署完不會再變院究,那我們只需要在宿主機(jī)的網(wǎng)關(guān)設(shè)備上添加靜態(tài)路由即可。
(由于是同一個網(wǎng)關(guān)本涕,且我沒有網(wǎng)關(guān)權(quán)限业汰,所以測試時我直接在(k8s集群外的服務(wù)器)10.66.221.138上添加路由進(jìn)行測試)。
在10.66.221.138服務(wù)器執(zhí)行以下命令:
ip route add 10.244.1.0/24 via 10.66.221.92
ip route add 10.244.2.0/24 via 10.66.221.93
執(zhí)行route -n查看:
k8s容器我已經(jīng)提前部署了tutum-hello-world.local菩颖,他有3個容器實例样漆。如圖:
執(zhí)行以下命令,成功訪問k8s集群中tutum-hello-world容器提供的80端口服務(wù)晦闰。(Node1的容器放祟,Node2的容器)
curl 10.244.1.93:80
curl 10.244.2.5:80
3.7.1、執(zhí)行互通方案后測試互通性
4呻右、demo示例服務(wù)測試
4.1跪妥、測試方案
開發(fā)2個測試的應(yīng)用, 如下表声滥。(以3.0常用應(yīng)用場景選擇測試功能范圍)
4.2眉撵、demo服務(wù)測試結(jié)果
5、性能測試
容器化技術(shù)會帶來一定網(wǎng)絡(luò)性能損耗落塑,建議由測試以實際本地化服務(wù)器資源進(jìn)行性能測試纽疟。(研發(fā)自測的話推薦Locust測試)
6、監(jiān)控
采用dashboard管理平臺監(jiān)控憾赁,能看到節(jié)點污朽、Pod的監(jiān)控(Pod的CPU、內(nèi)存龙考、網(wǎng)絡(luò)膘壶、磁盤等監(jiān)控)、kubernetes的各個組件狀態(tài)洲愤。
其他開源監(jiān)控(prometheus等)如有需求,可單獨調(diào)研顷锰。
7柬赐、結(jié)論
k8s方式容器化部署測試已通過,能滿足3.0本地化服務(wù)應(yīng)用場景官紫,以及各種自動擴(kuò)容肛宋,資源管理州藕,日志收集,復(fù)雜網(wǎng)絡(luò)互通等多種實際場景酝陈。
對于網(wǎng)絡(luò)網(wǎng)段需要規(guī)劃床玻,避免網(wǎng)段重復(fù)。