輕量虛擬化技術——docker實戰分享
阿新 • • 發佈:2018-12-29
百度BAE,陳軼飛,2013.10.25。
綱要
一、輕量虛擬化技術
• 是什麼?
• 涉及到哪些技術和知識?
• 使用領域
二、BAE與docker
•docker是什麼?
•BAE為什麼選擇docker?
•BAE是如何使用docker的?
三、docker的發展 輕量虛擬化技術是什麼?
• 以Linux程序的視角來看
• 程序執行的時候,周邊的環境和資源有哪些?
• Linux核心
• 檔案系統
• 網路系統
• PID、UID、IPC等資源
• 記憶體、CPU、磁碟等資源
• 其它
• 每個程序的看到的周邊環境都一樣
• 所有程序共享這些資源
• 技術發展過程中,產生了這樣的需求
• 資源隔離:不同程序,希望有自己獨立的周邊環境
• 資源限制:限制某些程序所能使用的資源
• 能進一步對一組程序進行上述隔離和限制
• 需求總結為:
• 為一組程序
• 分配獨立的執行環境
• 檔案系統
• 網路系統
• PID、UID、UTS、mount、IPC空間
• 並能對它們能使用的資源從總體上進行限制
• 記憶體
• CPU
• 網路流量
• 磁碟空間
• 磁碟讀寫頻率
• 最好還能防止程序組之間互相干擾
• 輕量虛擬化,就是用來實現上述需求的技術
• 滿足上述限制條件的程序組,叫做“輕量虛擬 機”,或者 Container
• wikipedia 定義
• http://en.wikipedia.org/wiki/Operating_system- level_virtualizatio
• 感性的認識
輕量虛擬化技術--相關技術和開源專案
• 底層技術:
• namespace/cgroups/iptables/chroot/tc/quota
• veth
• union fs(AUFS)
• container管理
• LXC/libvirt
• 安全相關
• grsec/apparmor/SELinux
• 高階
• docker/warden/Imctfy/openVZ
輕量虛擬化技術--適用領域
• 在一個資源隔離、受限的環境中執行任務
• 將一個執行環境整體遷移、複製
• 執行不安全的程式碼
BAE與docker--docker是什麼?
• 輕量虛擬機器的整體解決方案
• 介面清晰、使用簡單
• 競品對比
• warden
• lmctfy
BAE與docker--BAE是什麼?
• http://developer.baidu.com
• 百度面向開發者的PAAS平臺
• BAE2.0:基於沙盒技術的資源共享型PAAS平臺
• BAE3.0:基於Container技術的資源獨享性PAAS平臺
BAE與docker--BAE為什麼選擇?
• 傳統PAAS平臺的困境
• 通過沙盒技術來實現資源隔離與資源限制
• 平臺的開發和維護成本高
• 諸多限制,學習成本高
• 應用的遷移和開發成本高
•Container的出現帶來了光明
• 幹掉沙盒;通過Container技術在外層進行資 源隔離與限制
• 無任何語言層面的限制,開發者學習成本顯著降低
• 支援新的程式設計語極其簡單,平臺開發和維護成本降低
• 業界趨勢:新興PAAS平臺紛紛選擇Container
• cloudfoudry
• openshift
• heroku
• dotcloud
• appfog
• activestate
• BAE2.0是一種基於沙盒技術的PAAS
• 我們也深受傳統PAAS平臺的困擾
• 注意到Container技術,開始前期的調研和摸索
• 首先和公司內部虛擬化團隊合作摸索了一套方案:
• openstack + libvirt
• 功能上能滿足基本需求
• 問題
• 沒有考慮到最重要的一個需求:
• 需要頻繁的建立和刪除Container
• 要求建立和刪除Container能在幾秒內完成
• 實際建立Container要15秒以上,無法接受
• 對程式碼質量沒有足夠信心
• 缺少後續技術支援
• cloudfoundry的warden
• ruby
• dea與warden耦合太緊
• 社群活躍度不夠
• 一次偶然機會,與docker佈道師 Jorome Petazzoni 的交流
• 對docker的評估
• 功能上滿足主要需求
• 強悍:虛擬機器的快速建立和刪 除能力
• 強悍: 增量式的映象管理能力
• 程式碼簡單易讀,出問題有信心己可以搞定
• 有dotcloud公司支援,社群活躍 度高,看好它的未來
BAE與docker--如何使用?
• 架構上的主要工作:
• 與我們自己的系統的整合
• 功能上的主要工作
• Docker的資源隔離功能基本滿足需求
• 要解決的主要問題
• 更好的資源限制
• 更全面的安全限制
• 技術上的一些判斷和選擇:
• 果斷選擇ubuntu系統
• 實現類似deang的agent模組;
• 合理的抽象,將docker作為“虛擬機器管理”的一種 backend實現;(一旦docker出現不可控的風險,我 還可以切換到其它方案上)
• 解決宿主機對container的控制問題
• 剛開始使用 ssh
• 後改為 wsh
• 功能完善:資源限制
• 記憶體
• CPU
• 磁碟空間
• 磁碟讀寫
• 網路頻寬
•setrlimit
BAE與docker--如何使用docker?
• 功能完善:安全限制
• grsec:封堵核心漏洞
• apparmor:對container內部的能力進行限制
• LXC自身的安全設定
• lxc.drop_capabilities
• lxc.
• 嚴格的iptables規則
• 賬號許可權
• 使用者程式碼僅能使用普通賬號
• root 隨機密碼
• 禁止 root 登入
• 惡意程序掃描
• 網路訪問日誌記錄
• docker私有倉庫,解決映象管理問題
• 遇到的一些問題
• docker server重啟後, container掛掉
• 我們的patch 已merge到主幹
• 壓力情況下的不穩定
• ssh 遠端執行命令不穩定
• 併發情況下iptables 偶爾會失敗
• 刪除container後會留下垃圾
• 垃圾檢測和清除指令碼
• Docker server建立的執行緒過多
docker的發展——活躍的社群
• Github GO語言類活躍度排名第一
docker的發展——逐步繁榮的生態圈
• CoreOS
• Yandex -- Cocaine
• 與redhat的合作
• libvirt
• SELinux
• device-mapped filesystem
• 最新版OpenStack Havana 增加對docker的原生支援
docker的發展——待解決的主要問題
• 安全
• user namespace來解決root許可權問題
• SELinux增強安全性
• 支援更多的Linux發行版,目前僅支援 ubuntu
• 支援更多的架構,目前僅支援x86-64
參考資料
•http://www.infoq.com/articles/docker-containers
•http://en.wikipedia.org/wiki/Operating_system-level_virtualization
•http://en.wikipedia.org/wiki/LXC
•http://en.wikipedia.org/wiki/Cgroups
•http://en.wikipedia.org/wiki/Linux_Containers
•http://libvirt.org/
•http://linuxcontainers.org/
•https://wiki.ubuntu.com/LxcSecurity
•http://lwn.net/Articles/236038/
•http://openvz.org/Main_Page
•http://aufs.sourceforge.net/
•http://blog.docker.io/2013/08/containers-docker-how-secure-are-they/