自尋亮點(diǎn):360、螞蟻金服等公司容器云技術(shù)棧對(duì)比
目前來(lái)看,幾家歷史包袱較重的公司都選擇不讓上層應(yīng)用感知到底層是 VM 還是容器,所以都改了 docker 內(nèi)核,如360、點(diǎn)評(píng)、汽車之家。最后附上我們的容器私有云技術(shù)棧以及系統(tǒng)截圖。
點(diǎn)評(píng)容器技術(shù)棧
2014年啟動(dòng)基于 docker 搭建私有云,之前談不上使用過(guò)私有云
運(yùn)維工具:Puppet
NATS+Nginx+Zookepper:
- 組件之間的交互使用了 NATS,通過(guò)消息的『發(fā)布-訂閱』模型,將各個(gè)組件之間的耦合最小化
- 對(duì)于Web類型的應(yīng)用,通過(guò)和 Nginx 暴露的 Restful 接口交互,完成實(shí)例在集群內(nèi)的注冊(cè)以及注銷。對(duì)于服務(wù)類型的應(yīng)用,通過(guò)在 ZooKeeper 上注冊(cè)和注銷服務(wù)IP和端口,便于服務(wù)客戶端發(fā)現(xiàn)和更新該服務(wù)
技術(shù)改造:
- 由于不愿意讓技術(shù)人員感知到從 KVM 到 Docker 的轉(zhuǎn)換,所以做了不少工作(注:主要還是不愿意影響原有業(yè)務(wù)和發(fā)布流程)
- 更改了 Docker 底層代碼,讓其從推薦的微服務(wù)架構(gòu)演變到目前的『虛擬機(jī)』架構(gòu)。開(kāi)發(fā)和運(yùn)維可以通過(guò) IP 直接訪問(wèn)到 Docker『虛擬機(jī)』,基于IP的應(yīng)用基礎(chǔ)架構(gòu)也不需要開(kāi)發(fā)和運(yùn)維做劇烈的改變
使用情況:
基本上除搜索和數(shù)據(jù)庫(kù)以外,點(diǎn)評(píng)現(xiàn)有的業(yè)務(wù)大多都有跑到容器上的
監(jiān)控改造:
通過(guò)收集 CGroups 和容器實(shí)例的實(shí)時(shí)信息,將內(nèi)存、CPU、網(wǎng)絡(luò)等源源不斷地上報(bào)到 CAT,再由 CAT 提供查詢,檢索和展示。也可以做報(bào)警
組網(wǎng):
Bridge Networking 工作在 level 2 的模式,使公共 IP 得以暴露出來(lái),這部分是做了定制的
360容器技術(shù)棧
運(yùn)維工具:集群變更用 Puppet(master/slave)
持續(xù)集成:jenkins(master/slave)+mesos+marathon+zookeeper
技術(shù)改造:
docker 底層改造
- 能夠設(shè)置 btrfs 磁盤限額,網(wǎng)絡(luò)限速,IO 限制
- 容器獨(dú)立IP
- 容器內(nèi)多進(jìn)程
registry V2
一些優(yōu)化細(xì)節(jié):
利用 Jenkins master-多個(gè)slave 縮短構(gòu)建時(shí)間:
- 分布式提高 build 性能
- slave 記憶利用 cache
利用 btrfs 和 ssd 縮短構(gòu)建時(shí)間:
- devicemapper 換成 btrfs
- sas 硬盤換成 ssd 的
UCloud容器技術(shù)棧
- docker版本:1.1.1,1.8.2
- 發(fā)行版:centos 6.x
- k8s版本:1.0.6
實(shí)踐經(jīng)驗(yàn):
docker日志:日志打印耗費(fèi)性能,最好關(guān)閉 logdriver,將日志打印在后臺(tái)
docker daemon:centos 6.3 service stop 耗時(shí)長(zhǎng),需要5分鐘,是 init-scripts 的 bug
docker網(wǎng)絡(luò):
- NAT模式下會(huì)啟用 nf_conntrack 造成性能下降,可以調(diào)節(jié)內(nèi)核參數(shù)
合理設(shè)置 ulimit
docker鏡像:
- 制作鏡像時(shí),commit 的信息要簡(jiǎn)單明了
- 編寫 dockerfile 規(guī)范,減少鏡像層數(shù),基礎(chǔ)部分放前面
- 分地域部署鏡像 registry
#p#
汽車之家容器技術(shù)棧
- docker版本:1.6.2
- linux發(fā)行版:centos 6.4 kernel 3.10和4.0
- registry V2
構(gòu)建:
- 有單獨(dú)機(jī)器做構(gòu)建
- 基于centos:7+systemd+zabbix
Docker Hub
- Docker Registry 2.0
- Registry 本身不能夠高可用,Nginx 負(fù)載多個(gè) Registry
- 使用網(wǎng)絡(luò)存儲(chǔ)共享鏡像
- 配置 Mirroring,獲取官網(wǎng)鏡像
Docker應(yīng)用-網(wǎng)絡(luò)問(wèn)題
- Docker 目前提供的網(wǎng)絡(luò)模式不適合業(yè)務(wù)環(huán)境
- --iptables =false
- 修改 Docker 內(nèi)核改成靜態(tài) IP 模式
- IP 是通過(guò)容器名字為標(biāo)識(shí)從 IP Pool 獲取
螞蟻金服PAAS docker提到的遷移問(wèn)題
老應(yīng)用遷移的痛
誰(shuí)來(lái)寫Dockerfile并制作應(yīng)用鏡像
- 螞蟻線上已經(jīng)有上千應(yīng)用,幾千開(kāi)發(fā)人員,很難一下推動(dòng)他們都學(xué)習(xí) docker,切換到新的研發(fā)模式下
- 如果需要開(kāi)發(fā)人員寫 dockerfile,會(huì)影響推廣效率
螞蟻原有的運(yùn)維/監(jiān)控/SCM/財(cái)務(wù)等系統(tǒng)都是以 vm 為緯度的
- 基于 docker 的運(yùn)維發(fā)布系統(tǒng)與原有系統(tǒng)對(duì)接比較麻煩
- 以往運(yùn)維都是先申請(qǐng)一批機(jī)器,測(cè)試網(wǎng)絡(luò)正常后備用,上線前再?zèng)Q定跑什么應(yīng)用
- 發(fā)布應(yīng)用不重啟 vm,所以也不希望重啟 container;
怎么盡量保證開(kāi)發(fā)測(cè)試環(huán)境與生產(chǎn)環(huán)境一致
應(yīng)對(duì)策略
開(kāi)發(fā)輔助工具幫助研發(fā)同學(xué)編譯應(yīng)用/自動(dòng)生成 dockerfile/制作鏡像并搭建測(cè)試環(huán)境
- 把 CAAS 當(dāng)作輕量級(jí)的 IAAS,讓運(yùn)維把 container 當(dāng)作輕量級(jí) vm 用,便于和已有系統(tǒng)對(duì)接
- 使用通用的 sofa4/sofa3 container,可以不需要制作應(yīng)用鏡像
在基礎(chǔ)鏡像中集成 sshd,運(yùn)行運(yùn)維 ssh 到 container 中
使用 supervisor 啟動(dòng)應(yīng)用和相關(guān)監(jiān)控/運(yùn)維 agent
提供 webconsole 允許開(kāi)發(fā)人員登錄 container 查看日志/進(jìn)行一定權(quán)限的 操作
使用 data container 避免本地 mount
最后列舉一下窩窩技術(shù)團(tuán)隊(duì)的容器私有云技術(shù)棧
截止到2015年9月,窩窩容器管理集群的技術(shù)棧包括以下內(nèi)容:
- mesos(資源調(diào)度)
- marathon(服務(wù)編排)
- chronos(分布式計(jì)劃任務(wù))
- docker(容器引擎)
- consul+registrator(服務(wù)注冊(cè)和發(fā)現(xiàn))
- haproxy(負(fù)載均衡)
- prometheus(服務(wù)監(jiān)控)(注:同時(shí)數(shù)據(jù)也會(huì)推送到天機(jī)系統(tǒng)的 OpenTSDB 里)
- nagios/zabbix(節(jié)點(diǎn)監(jiān)控)
- salt(節(jié)點(diǎn)配置管理)
- cobbler(節(jié)點(diǎn)自動(dòng)化裝機(jī))
- ELK(日志收集分析)
窩窩持續(xù)集成管理平臺(tái)在這些技術(shù)的基礎(chǔ)上,實(shí)現(xiàn)了我們的集群管理、容器管理、應(yīng)用管理等業(yè)務(wù)流程。
一些系統(tǒng)截圖如下所示:
博文出處:http://www.cnblogs.com/zhengyun_ustc/p/dockerstack.html