Oracle發(fā)布開源的容器工具集,包含使用Rust編寫的新容器運(yùn)行時(shí)環(huán)境

責(zé)任編輯:editor004

作者: Daniel Bryant

2017-07-24 11:04:08

摘自:INFOQ

Vish Abrams在Oracle開發(fā)人員博客的一篇文章上寫道,Oracle目前正在使用容器運(yùn)行其云服務(wù)的很多組件。Oracle為了解決在生產(chǎn)環(huán)境下所面臨的問題,定義了名為微容器的概念(Iron io和JBoss業(yè)已使用過這個(gè)術(shù)語,不要與其混淆)。

Oracle發(fā)布了三個(gè)開源的容器工具集,包括Smith,遵循開放容器計(jì)劃(Open Container Initiative,OCI)鏡像規(guī)范的容器構(gòu)造器,它能創(chuàng)建只包含可執(zhí)行內(nèi)容及其依賴的“微容器(microcontainer)”;Crashcart,微容器調(diào)試工具,它允許運(yùn)維人員將Linux二進(jìn)制文件的鏡像旁加載(sideload)到已有的容器中;Railcar,基于Rust的容器運(yùn)行環(huán)境,它實(shí)現(xiàn)了OCI運(yùn)行時(shí)規(guī)范。

Vish Abrams在Oracle開發(fā)人員博客的一篇文章上寫道,Oracle目前正在使用容器運(yùn)行其云服務(wù)的很多組件。在開發(fā)和運(yùn)維生產(chǎn)環(huán)境的這些容器時(shí),他們學(xué)到了很多的經(jīng)驗(yàn),并相應(yīng)地創(chuàng)建了一些工具,現(xiàn)在它們基于Universal Permissive Licence 1.0和Apache License 2.0雙重協(xié)議進(jìn)行了開源,代碼可以從GitHub上得到。

作為發(fā)布這些工具的前奏,Abrams在Oracle開發(fā)人員博客上還寫過一篇額外的文章,名為“ Microcontainer Manifesto以及完成任務(wù)的合適工具”,他認(rèn)為容器的標(biāo)準(zhǔn)構(gòu)建流程“對(duì)于開發(fā)人員非常理想,但是所形成的容器鏡像使運(yùn)維人員的工作非常困難”。當(dāng)Oracle兩年前開始在容器技術(shù)方面進(jìn)行投資時(shí),他們定義了提升運(yùn)行時(shí)容器“穩(wěn)定性和安全性”的核心目標(biāo)。盡管這是Oracle第一次官方宣布其容器技術(shù),但是博客中提到自從這項(xiàng)工作開展以來,他們?nèi)萜鲗?shí)現(xiàn)的穩(wěn)定性和安全性得到了大幅度的提升。

Abrams討論了Docker容器在構(gòu)建時(shí)將整個(gè)Linux操作系統(tǒng)(OS)放到容器鏡像中所帶來的問題。具體來講,這會(huì)導(dǎo)致:較大的鏡像,變成這么龐大的鏡像只是為了引入必要的層,使其變得可管理;權(quán)限封裝——讓應(yīng)用運(yùn)行在整個(gè)Linux用戶空間中,這樣會(huì)帶來潛在攻擊的風(fēng)險(xiǎn);漏洞管理——標(biāo)準(zhǔn)的構(gòu)建流程讓我們很難確定某個(gè)容器是否需要升級(jí),因?yàn)槿萜鲗?shí)際使用的依賴文件難以確定。需要注意的是,這里面所述的很多問題在現(xiàn)有的容器系統(tǒng)中已經(jīng)解決了,比如使用特定OS的容器以及scratch容器;啟用用戶命名空間(User Namespace)以及Linux核心安全模塊,比如AppArmor;對(duì)容器鏡像使用靜態(tài)漏洞掃描器進(jìn)行安全掃描,比如使用CoreOS的Clair。

Oracle為了解決在生產(chǎn)環(huán)境下所面臨的問題,定義了名為微容器的概念(Iron.io和JBoss業(yè)已使用過這個(gè)術(shù)語,不要與其混淆)。具體來講,微容器:

只包含一個(gè)可執(zhí)行文件及其依賴,沒有shell和init進(jìn)程使用只讀的root文件系統(tǒng)運(yùn)行,沒有分層和Overlayfs(寫入是隔離的,通過卷mount來進(jìn)行處理) 所有的臨時(shí)文件放在/run中,所有的持久化寫入(日志文件和數(shù)據(jù)文件)放到/write中需要針對(duì)每個(gè)容器修改的配置文件放到/read中,它可以通過卷mount或Kubernetes configmap來修改沒有用戶和組文件系統(tǒng)所有權(quán)的功能——所有的內(nèi)容都?xì)w一個(gè)用戶擁有和讀取沒有文件系統(tǒng)時(shí)間戳(timestamp)和功能(capabilities)可以重復(fù)生成,每次都會(huì)生成相同的鏡像能夠部署到不同的節(jié)點(diǎn)上,沒有特定的鏡像倉庫的概念。

為了簡化微容器的構(gòu)建,Oracle發(fā)布了Smith,這是一個(gè)使用Golang編寫的容器構(gòu)建工具。這個(gè)工具可以通過yum倉庫和(可選)RPM文件來構(gòu)建微容器。另外,它還可以“微化(micro-ize)”已有的Docker容器,在開發(fā)階段,開發(fā)人員能夠使用非常友好的Docker工具來構(gòu)建容器,而在生產(chǎn)部署的時(shí)候,Smith能夠?qū)⑦@個(gè)容器轉(zhuǎn)換為微容器。Smith按照標(biāo)準(zhǔn)OCI格式來構(gòu)建鏡像,但是它也可以通過Docker倉庫上傳和下載鏡像。

微容器在針對(duì)生產(chǎn)環(huán)境的使用執(zhí)行完微小化操作之后,對(duì)運(yùn)維人員來說診斷和修復(fù)問題會(huì)變得很有挑戰(zhàn)性,這主要是因?yàn)槿鄙貽S工具。大多數(shù)的調(diào)試可以通過宿主機(jī)器完成,但有時(shí)需要以容器的視角來查看文件系統(tǒng)。針對(duì)這種使用場景,Oracle創(chuàng)建了Crashcart。Crashcart允許旁加載(side-loading)一組Linux二進(jìn)制文件到正在運(yùn)行的容器中,這樣做的目的主要是探查和調(diào)試。關(guān)于旁加載二進(jìn)制文件為何如此困難,以及Crashcart如何克服這些困難的,可以參考"Hardcore Container Debugging"這篇博客文章。

Oracle發(fā)布的第三個(gè)工具是Railcar,基于Rust的OCI運(yùn)行時(shí)規(guī)范實(shí)現(xiàn)。它非常類似于參考實(shí)現(xiàn)runc,但是它完全是使用Rust實(shí)現(xiàn)的,為了“內(nèi)存安全,避免垃圾收集或多線程帶來的損耗”。Abrams指出盡管Go在構(gòu)建系統(tǒng)工具和CLI方面很有用,但是“Go對(duì)于容器運(yùn)行時(shí)來說卻并不是好的可選語言”,其中的問題包括與命名空間的交互(在最近的Weaveworks博客文章上有所提及)。關(guān)于Railcar開發(fā)的更多信息可以參見Oracle開發(fā)人員博客"使用Rust構(gòu)建容器運(yùn)行時(shí)環(huán)境"。

這些工具發(fā)布的更多信息可以參考Oracle開發(fā)人員博客和 Oracle的GitHub賬號(hào)。

查看英文原文:Oracle Releases Open Source Container Utilities, Including A New Container Runtime Written in Rust

鏈接已復(fù)制,快去分享吧

企業(yè)網(wǎng)版權(quán)所有?2010-2024 京ICP備09108050號(hào)-6京公網(wǎng)安備 11010502049343號(hào)