互聯網技術發展速度之快是全部從業者甚至非從業者都能感覺到的。尤記得在世紀之交時,那時候互聯網剛剛在中國開始向民用普及,不說支撐大規模的網站訪問量的相關技術,就連 Linux、負載均衡甚至都沒有被廣泛使用。而在二十年以後,雲計算已經大行其道,當今的技術人員已經言必稱虛擬化、容器和 Serverless,就連剛剛準備入行互聯網運維行業的新人們都已經從最初以爲考個 Linux 認證就夠了到開始問詢 Kubernetes 培訓哪家強了。安全
從一屆屆 LC三、DockerCon 到 KubeCon,蓬勃發展的雲計算與容器化彷佛已經稱霸了互聯網領域。此次我帶隊參加了 6 月 24 ~ 26 日的 KubeCon 大會,對此感覺尤其深入。事實上,此次在上海舉辦的 KubeCon 2019 距離上次在同一地點舉辦的同一會議才僅僅過去半年,可是咱們依舊在此次大會上看到了層出不窮的大量新技術、新動態。服務器
雲與容器的結合,引爆了這一切。
做爲容器領域的資深專家,讓咱們來看看王旭是如何看待容器和雲原生領域當前的發展態勢的,以及做爲這個領域的一家初創技術企業的創始人,他是如何投身到這個領域的,開源又在其間起到了什麼做用。架構
創立於 2015 年的 runV 項目已於 2017 年和另一個來自英特爾的 Clear 容器項目合併爲 Kata 容器項目,並由 OpenStack 基金會(OSF)進行管理,它與來自谷歌的 gVisor 項目並稱爲目前兩大安全容器技術。併發
要麼就去增強容器,要不就是引入別的安全技術來讓它像容器同樣。
臨近 2015 年,Docker 逐漸被業界主流所接受,互聯網技術已經有一個比較明顯的發展趨勢:第一是雲,第二是容器。而云加上容器必定會產生隔離性的需求,這應該說是王旭和他的聯合創始人趙鵬作安全容器最先的一個思路:要麼就去增強容器,要不就是引入別的安全技術來讓它像容器同樣。這就是 runV 這個項目想法的起源。負載均衡
runV 發佈的同一個星期,英特爾Clear 容器也發佈了。2016 年 8 月份,在西雅圖的 LinuxCon 上,王旭和 Clear 團隊見面交流,雙方在一些細節上面展開合做。在 2017 年 9 月份一個會議上,英特爾軟件副總裁、開源技術中心總經理 Imad Sousou 提出項目合併,而後放到基金會裏管理。當時你們都以爲這是很好的一個思路。less
對於 runV 和 Clear 來講,避免了重複開發以及花費精力在如何說明二者的不一樣上,同時合併以後能夠共同推進發展一個社區,一塊兒去尋找更多的用戶。同時,二者合併還有更多的意義。運維
Kata 容器最大的意義在於推進了社區的發展。
王旭認爲,Kata 容器最大的意義在於推進了社區的發展。在 2018 年以前剛開始作 Kata 容器的時候,王旭他們須要不少的附加進程來模擬 runC 容器的行爲,由於 runC 是事實標準,你須要兼容它。可是當 Kata 和谷歌的 gVisor 都出來以後,上游社區就注意到這一點,開始重視,因而推出新的接口,能夠語義明確地直接去對話,而不須要再去模擬 runC 的底層行爲,把原來的 2N+2 個輔助進程變成了一個進程。另外,既然有了不一樣的容器運行時,是否是能夠在不一樣的場景下讓它們轉到不一樣容器運行時環境上去?因而就有了「運行時類runtime class」這樣的結構。Kubernetes 社區作了不少這樣改進,它們也在逐步變成事實標準。這樣,一個小項目的引入推進了包括從用戶到上下游的整個社區相關軟件的變更。性能
安全容器也讓更多的業務使用容器變得可能。
同時,安全容器也讓更多的業務使用容器變得可能。王旭在螞蟻金服作面向金融的一些服務往雲原生方向發展,須要很是嚴格的安全標準,這正好和 Kata 這些安全容器項目結合在一塊兒。測試
加強安全性不可避免的會帶來一些會性能或易用性的取捨。王旭他們的作法是,在 Kata 裏面增長了一個隔離層,減小用戶須要考慮的事情。舉個 Docker 的例子,Docker 鏡像的開發者和管理員每每不是同一我的,對於管理員來講給出的權限越少越安全,可是對於開發者來講的話,尤爲開發和調試的過程當中,權限的變少會讓開發和調試變得很是困難。對於開發者來講,不能徹底理解管理員要作的事情,因此你就會見到不少的 Docker 鏡像都是要全部權限的,由於它本身也不知道須要什麼權限;此外還有一些動態的狀況,很難先驗地用程序去徹底判定它須要的權限,開發者並不太不肯定到底使用了哪些能力。在這個狀況下咱們作的事情就是把能力總體限制到沙盒裏面。在沙盒裏面是完整的能力,可是實際上沙盒自己訪問不到外層的系統能力,這樣對應用是無感知的,操做系統就變得更安全了。確實,對於系統來講安全性和便利性是一對矛盾,你很難在同一個層面上把這個問題徹底解決掉。優化
如今有了「運行時類」,能夠指定是否須要使用安全容器。Kubernetes 社區給你們提供 了一個機制,用戶能夠選用或者不用安全容器,它能夠是全局的配置,也能夠是 pod 級別的配置。對安全性不太關鍵的,好比說訪問一些不太敏感信息的,能夠在安全性上折中一點,可讓性能更好一些。
從早期的 Cgroup 開始,到 LXD/LXC 這樣的容器技術的出現,再到 Docker 的的誕生,一會兒點燃了整個容器技術生態,緊接着在容器編排系統出現後,並發展到現今 Kubernetes 成爲了事實標準。容器領域一直在快速發展。王旭的見解又是怎樣的呢?
容器領域正在逐漸往上層發展。
他認爲,容器領域正在逐漸往上層發展。互聯網技術自己一開始是在架構層面、在底層發展,可是從 Docker 開始興起時,給你們的感覺就是減小了對底層環境的考慮,用完整的環境把應用包裝起來變成容器,讓它能夠隨地隨地運行。不須要操心運行在什麼樣的操做系統裏,把操做系統這一層幹掉,或者說把它變成很窄的一層。
以發行版爲例。Linux服務器發行版的核心工做有兩件:一是怎麼把這個系統安裝上;另外一個是怎麼去儘可能平滑管理和升級軟件系統。全部的事情其實都是在圍繞這兩件事情。最初出現了 RPM、APT 這些包管理系統,後來是經過 Chef、Puppet、Ansible 這類配置管理系統自動化的大規模部署,再到如今的 Docker、Kubernetes,一它們都是在作軟件管理的事情。原來是操做系統在作這件事情,如今是 Kubernetes 在充當操做系統的位置;對雲服務來講的話,這就是無服務器模式。2014 年 AWS 在拉斯維加斯的 re:Invent 大會發布 Lambda 的時候,獲得業界很是大的關注。從 Lambda 開始,每一個雲廠商都逐漸有了本身的無服務器服務。因此他以爲將來的發展方向,應該是向這個方向的。
除此以外,像如今中間件、服務網格也都是這樣一個目的,儘可能的把應用要作的事情剝離出來,和應用無關的事情全都抽象出來放到底層。
對應用開發者和使用者來講,能夠不用關心底層是什麼架構、怎麼伸縮的,只須要知道到我須要什麼服務,只要定義應用,定義 Kubernetes 配置,由它統一管理、自動伸縮和調度就好。基礎設施這一層會愈來愈向一些少數的雲廠商集中,而你們更多的精力是幫助開發者作事情,集中精力在那些業務、智能等邏輯部分。
加入螞蟻金服以後,王旭致力於將安全容器技術落地到金融級雲原生的場景下。因爲金融領域的特殊性,雲原生實踐也須要有相應的變化。
要保證安全性,不只僅知足應用的,也要知足監管的端到端的安全性要求。
王旭舉例說,金融行業不只僅自己對安全有要求,監管對安全也有要求。因此必需要保證安全性,不只僅知足應用的,也要知足監管的端到端的安全性要求。另外一方面,他們認爲安全性包括兩方面,一個是應用不能破壞沙盒,泄露到外面,同時應用的底層供應商不是本身時,也能夠安全的使用。這就是一個雙向的安全問題。
通常而言,做爲一個雲服務商,會假設全部的用戶都是壞人,由於全部的用戶均可能去窺探基礎設施,它們均可能攻擊其餘用戶,攻擊宿主機,因此要作隔離。
而金融級的要求是不光是要作這一層的隔離,而是要作更強的隔離。首先是對應用不能盲目信任,即使是內部應用也不能聽任,由於內部的也有可能存在局部的破壞,也有可能會有不安全的代碼或者沒有被徹底驗證的測試代碼,還有可能會有第三方的代碼。反過來,應用既然是金融級的應用,它對環境也有安全要求,因此這是總體的要求。
開源對軟件公司來講,是一件向死而生的事情。
在早期以開源技術爲核心作創業公司時,王旭認爲開源是市場推廣的一個很好途徑。由於軟件是有人買才能賺錢,有人用纔有人買,因此你若是不開源,就要一家一家地找人去試用,可是你開源了以後你們就能夠免費嘗試。不過,開源並非沒有缺點,開源對軟件公司來講,是一件向死而生的事情。你把最核心的技術開源了,賭的是別人跟不上你的發展速度;或者說別人相信你纔有能力把它作到更好,別人纔會用你;或者說你給別人看到的當前版本,讓他相信下一個版本他也作不到你這麼好,因此才願意跟着你來走,以致於當他維護不了的時候纔會願意來給你掏錢。這應該說是一個在市場背景下的選擇。
反過來講,若是說你如今作了一個基礎設施領域的軟件特別好用,可是你不開源,這個時候就必定會有人作一個同樣的開源替代品。那你就看能不能比它作得好,你能不能拿更多的支持、拿到更多資源。這是很困難的。
因此在這個狀況下,你不得不去作這種這種極致的推廣手段,就是這種不買先送的這種開源式的市場推廣手段。目前來看,純軟件實現的、跟硬件不要緊這種項目基本上都是採用了開源或者半開源的方式,就是說至少給你一個開源的演示版或基礎版。這種方式,從商業上說是無可奈何的一種推廣方式。若是你不作,你的用戶們用不到的話,他們會去尋找替代品,也必定會有開源替代品出現。
技術創業還會面臨一個挑戰,就是當你作出來產品之後,很快會有更大的對手入場,對於初創公司來講,面臨的壓力是頗大的。王旭面臨的狀況稍微有些不一樣。
幸運的是,推出和 runV 相似項目的公司是英特爾,在這件事情上並無很強的盈利導向,這也是雙方最終可以合做的前提。王旭認爲儘可能避免無用的競爭,而是一塊兒來教育和開拓市場,是更有建設性的作法。
作初創公司,作有價值的東西是最重要的。
經歷了開源技術爲核心的技術創業以後,王旭對如何作技術創業也有一些本身的見解。他認爲,對於初創公司來講,很大程度上來講都在賭別人沒有作過的事情,由於你重複別人作的事情,還要比別人作的好,是一件很困難的事情。對於項目來講,取決於你想的是什麼東西,你的項目想得越多,想出來和別人有什麼不一樣,別人怎麼須要你的項目,其實它就越有價值。
作初創公司,作有價值的東西是最重要的,而不是說作一個很好看的架構,最重要的仍是要有價值,你們纔會用。此外,還要考慮相關的項目,就是你要和誰一塊兒配合工做,你的用戶羣是誰,你的用戶須要去引用的已有項目是哪些,怎麼和它們共存,由於徹底從零開始造輪子不太可能,你會用到不少已有的成果。
新作一個項目,要考慮不少相關的東西、上下游的東西,各類的兼容性、支持性,要在生態裏面去找到你本身的位置。除此以外,還要明白什麼是項目最重要的指標,好比開始作 runV 的時候,第一個考慮事情就是安全容器的啓動時間,而且不間斷的去關注和優化。
最後,作開源項目也並非說把代碼開源出來就好了,還要注重社區的建設。
做爲一個開源項目來講,它的社區是很是重要的,有社區纔是開源項目。
王旭認爲,做爲一個開源項目來講,它的社區是很是重要的,有社區纔是開源項目,沒有社區的項目只是拿出代碼給你們看看而已,那樣不會有人真的嚴肅的去使用你的代碼。
不管是在 runV 的時期,仍是後面 Kata 容器的時期,社區都是王旭和團隊很是注重的一環,有不少在早期關注和參與的開發者和組織,到如今王旭也和他們保持着很好的關係。
做爲國內少數的基礎設施方面的開源軟件初創項目的領軍人物之一,王旭無疑在這個領域的技術和商業方面擁有獨到的經驗和感悟,這些思考能夠給更多在前沿領域的技術人員和開源初創項目一些啓示。
本文爲雲棲社區原創內容,未經容許不得轉載。