1. 程式人生 > >張華:OpenStack與Docker整合

張華:OpenStack與Docker整合

OpenStack與Docker整合

張華 zhhuabj, http://blog.csdn.net/quqi99, 2014年12月19日。

Agenda

  • 一些有利於理解的原理
  • 高密度容器下網路設計的主要挑戰
  • Neutron L2pop特性
  • Open questions
網路虛擬化技術演進基本思想
  • 資料包從虛擬機器到物理機的路徑是:虛擬機器程序(使用者空間) -- 虛擬TAP網絡卡(使用者空間)-- Hypervisor層 -- 網橋(核心空間) -- 物理網絡卡
  • 總的原則:減少層數,讓虛擬網絡卡趨近物理網絡卡的效能

virtio,vhost,vhost-user|snabb,openonload

物理網絡卡的發展

  • VMDQ將原來VMM中L2 virtual switch實現的佇列功能通過硬體實現, 軟體交換機無需排序和路由操作
  • SR-IOV更徹底,將二層交換的功能也通過硬體實現,並且建立不同的虛擬功能(VF)的方式,呈現給虛機的就是具有獨立的中斷號的物理網絡卡,因為虛機直接和物理網絡卡通訊,不需要經過軟體交換機, 虛機與VF之間通過DMA傳輸。

核心態協議棧 & 使用者態協議棧

  • 協議棧的主要處理開銷:中斷處理、記憶體拷貝、系統呼叫、協議處理
  • 千兆萬兆網路出現後,更加頻繁的硬體中斷、軟中斷及上下文切換都會佔據大量的CPU週期。
  • 傳統協議棧針對通用性設計,區分核心空間和使用者空間,應用無法直接訪問協議棧的地址空間,因此協議棧的安全性較高。有資料表明,在Linux協議棧中,資料包通過socket從核心緩衝區複製到使用者空間的時間佔到了整個資料包處理時間的57.1%。
  • 系統呼叫是核心態向用戶態提供的一組API集,一般通過軟中斷實現,會產生較大的上下文 開銷。
  • 協議處理,耗時主要包括:校驗和計算,定時器管理,IP分片/重組,可靠傳輸機制,擁塞控制等。

雲作業系統 OSv, CoreOS, Ubuntu Core

  • 單核心減小IPC呼叫,每個CPU核上單執行緒
  • 最小化系統,去掉Shell, 去掉不必要的庫,去掉不必要的開機服務,減小容器共享核心的攻擊面
  • 使用systemd/upstart加速啟動,認為shell拖累啟動
  • 基於容器技術
  • 雲作業系統image檔案小,應用的檔案也小,有的可以delta分發
  • 裝載容器,在應用分發上做文章, Ubuntu Core使用了基於事務的包管理工具snappy, 且使用了微核心由vendor來實現snappy應用
  • 在升級方面,Ubuntu Core基於事務升級,要不升級成功,要不升級不成功但不影響原有系統;CoreOS更絕採用兩個root檔案系統,有一個用於升級
  • 在配置 管理方面,OSv是零配置無狀態;CoreOS使用共享的etcd;Ubuntu Core採用Snappy打包
  • 在安全方面,容器間的共享的核心受到攻擊後對容器威脅很大,Ubuntu Core採用apparmor來對程式進行資源的訪問控制
  • 核心方面,CoreOS與Ubuntu Core基於Linux核心,OSv無使用者空間減少了使用者態核心態切換的開銷
  • CoreOS實現了HA容器,有點兒入侵了Neutron的地盤啊 :)

容器,Linux容器(LXC), Docker

容器的優點:

  • 密度大,啟動快,因為它省去了一個作業系統棧,正是這點,給網路設計帶來了挑戰
  • 容器解偶了應用與作業系統,為應用的分發提供了可能,更適合SaaS。它使用namespace程序資源隔離(IPC,NET,PID,UTS,NS,USER);使用chroot隔離根檔案系統;使用cgroup做資源限制; 
  • 所有容器共享相同的核心,便於維護。但同時也帶來了安全性風險
容器的缺點:
  • 容器共享核心帶來了安全性風險,所以雲OS應該是最小化作業系統,減小攻擊面
  • 隔離性還不如虛機,如netlink暫時不支援namespace所以導致不支援iSCSI儲存
  • 線上遷移,所以LXD要在LXC上再新增這樣更等價虛機的功能
  • 更高密度帶來的網路挑戰
Docker基於LXC基礎上繼續:
  • 封裝了REST API,交叉式Shell, 日誌功能
  • 採用CoW建立根檔案系統,讓映象變得Delta,部署極其快捷
  • 類似於OpenStack的映象及排程管理
  • 應用分發機制

應用分發機制,以 Ubuntu Core為例

高密度容器帶來的網路挑戰

  • 沒有控制平面,高密度直接要求必須禁掉ARP廣播,改由地址學習。neutron的資料庫是一個學習的好地方,neutron l2pop特效能允當控制平面。
  • 高密度要求網路資源必須充足,像limit, namespace, neighbor table size, vlan等,Linux是一個通用的作業系統,不是為雲設計的
  • 容器的快速啟動特性要求dnsmasq支援HUP訊號持HUP訊號
...

快速搭建可執行的環境 - devstack

計算節點 (LXC+ OVS)

網路節點

網路拓撲圖

Neutron L2pop