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