AWS發布Rust語言編寫的容器Linux發行版Bottlerocket

2020-12-04 蟲蟲搜奇

隨著我們的客戶越來越多地採用容器來運行其工作負載,從頭開始設計以運行容器的Linux發行版成了一種時尚,比如追求小巧Alpine,Redhat的CoreOS等作業系統用來跑容器。

日前著名雲廠商亞馬遜宣布,發布自己的容器Linux發行版Bottlerocket。Bottlerocket立足於安全性,操作和規模管理,使用它能夠自動管理數千個運行容器的主機。

Bottlerocket,本質上是一個新Linux發行版,用來跑容器。他內置了安全性增強功能有助於簡化安全性合規性,並提供事務更新機制使使用容器編排器自動化作業系統更新並降低運營成本。

Bottlerocket目前已在GitHub創建開源組,並全開源。今天我們就一起來了解一下這個系統。

技術架構

Bottlerocket的開發源於,Amazon AWS雲中客戶如何使用Amazon Linux運行容器以及從運行服務(例如AWS Fargate)中學到的知識來設計和構建的。在設計中,充分對Bottlerocket進行了優化,以提高安全性,性能並簡化維護流程。

最少組件、SELinux增強

Bottlerocket中只包含運行容器所需的軟體,以減少安全攻擊面,從而提高了安全性。除了使用標準Linux內核技術在容器化工作負載(例如控制組(cgroup),名稱空間和seccomp)之間實現隔離之外,還以強制模式使用安全性增強的Linux(SELinux)來增強容器與主機作業系統之間的隔離。

Device-mapper和eBPF

Bottlerocket使用Device-mapper的verity目標(dm-verity),這是一種Linux內核功能,可提供完整性檢查,以幫助防止攻擊者在作業系統上持續存在威脅,例如覆蓋核心系統軟體。

Bottlerocket Linux內核中包括了eBPF,這減少了許多低級系統操作對內核模塊的需求。

Rust開發

Bottlerocket的大部分內容都是用Rust編寫的,Rust是一種現代程式語言,可幫助確保線程安全並防止與內存相關的錯誤,例如可能導致安全漏洞的緩衝區溢出。

隔離容器管理

Bottlerocket還通過阻止與生產伺服器的管理連接來實施可進一步提高安全性的操作模型。它適用於限制對單個主機的控制的大型分布式環境。

為了進行調試,可以使用Bottlerocket的API運行"管理容器"(通過用戶數據或AWS Systems Manager調用),然後使用SSH登錄以進行高級調試和故障排除。admin容器是Amazon Linux 2容器映像,包含用於對Bottlerocket進行故障排除和調試的實用程序,並以提升的特權運行。它允許安裝和使用標準調試工具,例如traceroute,strace,tcpdump。登錄到單個Bottlerocket實例的行為旨在作為高級調試和故障排除的操作。

自動更新

Bottlerocket通過使節點的管理和對集群中節點的自動更新更加容易,從而大規模地提高了操作和可管理性。與旨在支持以各種格式打包的應用程式的通用Linux發行版不同,Bottlerocket是專門為運行容器而構建的。對其他通用Linux發行版的更新是在逐個軟體包的基礎上應用的,它們的軟體包之間的複雜依賴關係可能導致錯誤,從而使流程難以實現自動化。

操作靈活

Bottlerocke以原子方式應用和回滾更新,這使得它們易於自動化,從而減少了管理開銷並降低了運營成本。

Bottlerocket與容器編排器集成在一起,可以對主機進行自動修補,以提高運營成本,可管理性和正常運行時間。Bottlerocket支持與任何容器編排器集成,AWS提供的編譯版本可與Amazon EKS(具有一般可用性)和Amazon ECS(具有預覽功能)一起使用。

Bottlerocket入門

Bottlerocke支持不包括編排系統的,作為獨立的OS運行進行開發和測試用例,官方還是建議建議將其與容器編排系統結合使用,以充分利用其所有優點。

最簡單入門方法在AWS雲中,使用AWS提供的Bottlerocket AMI與Amazon EKS或Amazon ECS結合使用。

可以通過使用AWS CLI查詢SSM來找到這些AMI的ID,如下所示。

要查找Bottlerocket aws-k8s-1.17變體的最新AMI ID,請運行:

aws ssm get-parameter --region us-west-2 \

--name "/aws/service/bottlerocket/aws-k8s-1.17/x86_64/latest/image_id" \

--query Parameter.Value --output text

要查找Bottlerocket aws-ecs-1變體的最新AMI ID,運行:

aws ssm get-parameter --region us-west-2 \

--name "/aws/service/bottlerocket/aws-ecs-1/x86_64/latest/image_id" \

--query Parameter.Value --output text

在上述兩個示例的命令,可以指定是否在另一個區域中操作改變區域,或從x86_64的改變架構arm64如果使用Graviton-動力實例。

得到AMI ID後,可以啟動EC2實例並將其連接到現有的EKS或ECS群集。要使用Bottlerocket的Kubernetes變體連接到EKS集群,在啟動EC2實例時,需要提供如下用戶數據:

[settings.kubernetes]

api-server = "Your EKS API server endpoint here"

cluster-certificate = "Your base64-encoded cluster certificate here"

cluster-name = "Your cluster name here"

要使用Bottlerocket的ECS變體連接到ECS群集,可以提供以下用戶數據:

[settings.ecs]

cluster = "Your cluster name here"

自定義編譯Bottlerocket

除了使用AWS提供的Bottlerocket AMI外,還可以使用自己的更改生成定製的Bottlerocket構建。

作為前提步驟,首先創建一個Rust開發環境。建議使用安裝最新的穩定Rust版本。要組織構建任務,要使用cargo-make和cargo-deny:

cargo install cargo-make

cargo install cargo-deny --version 0.6.2

Bottlerocket使用Docker來協調打包和映像構建。建議使用Docker 19.03或更高版本。需要安裝Docker並以您的用戶帳戶運行,以便能夠訪問Docker API。通常可以通過將用戶帳戶添加到docker組來啟用此功能。

要生成映像,請在更改原始碼後運行:

cargo make

所有軟體包將依次構建,然後編譯目錄中的img文件build。

接下來,要註冊在Amazon EC2上使用的Bottlerocket AMI,需要設置aws-cli並運行:

cargo make ami

開源社區

Bottlerocket已經完全開源,以使用戶能夠對用於運行其基礎架構的作業系統進行自定義(例如,與自定義協調器/內核/容器運行時集成),將其提交上遊並生成自定義版本。所有設計文檔,代碼,構建工具,測試和文檔都將託管在GitHub上。使用GitHub的錯誤和功能跟蹤系統進行項目管理。支持可以使用標準GitHub工作流程查看並為Bottlerocket原始碼做貢獻。構建,發行和測試基礎結構的可用性使生成包含其更改的自定義構建變得容易。ISV合作夥伴可以在客戶更新到最新版本的Bottlerocket之前快速驗證其軟體。

Bottlerocket包括標準的開放原始碼組件,例如Linux內核,容器化容器運行時等。特定於Bottlerocket的附加項著重於可靠的更新以及基於API的機制來進行配置更改和觸發更新/回滾。可以選擇根據Apache 2.0許可證或MIT許可證來許可Bottlerocket代碼。諸如Linux內核之類的底層第三方代碼仍受其原始許可證的約束。如果修改Bottlerocket,則可以根據策略準則使用"Bottlerocket Remix"來引用構建。

更多信息請參考Bottlerocket Github官方倉庫。

相關焦點

  • 亞馬遜正式發布Bottlerocket容器Linux發行版
    隨著我們的客戶越來越多地採用容器來運行其工作負載,從頭開始設計以運行容器的Linux發行版成了一種時尚,比如追求小巧Alpine,Redhat的CoreOS等作業系統用來跑容器。日前著名雲廠商亞馬遜宣布,發布自己的容器Linux發行版Bottlerocket。Bottlerocket立足於安全性,操作和規模管理,使用它能夠自動管理數千個運行容器的主機。
  • AWS全面上市開源Linux發行版,專為容器作業系統設計
    AWS宣布其容器作業系統Bottlerocket全面上市,Bottlerocket是它專為運行軟體容器而開發的開源Linux發行版。該Linux發行版不僅設計為運行容器,使應用可以在多個計算環境中運行,而且還可以運行一系列其他工作負載,以支持大量用例所面臨的組件難於管理的挑戰。
  • AWS 聘用 Rust 編譯器聯合創始人,大企為何都愛 Rust?
    最近,AWS推出了Bottlerocket,這是一套使用Rust編寫而成的基於Linux的容器作業系統。Amazon EC2團隊選擇把Rust作為全新AWS Nitro System組件,包括Nitro Enclaves等敏感應用程式的語言。為什麼選擇Rust?AWS也在博客中明確指出,是因為Rust的基本特性:性能和可靠性。
  • AWS偏愛Rust,已將Rust編譯器團隊負責人收入囊中
    該消息出自 AWS 開源團隊於上周二發布的一篇文章《Why AWS loves Rust, and how we』d like to help》。在這篇文章中,AWS 表達出了對 Rust 語言的熱情,並列舉了自身利用 Rust 語言的數種方式。
  • 如何識別戴口罩的人臉;AWS 推出基於 Linux 的開源作業系統;
    (給技術最前線加星標,每天看技術熱點)綜合整理:技術最前線(ID:TopITNews)參考:程式設計師的那些事、開源中國、solidot、cnBeta、騰訊科技等0、AWS 推出基於 Linux 的開源作業系統,用於容器託管AWS 在其博客中介紹了該團隊最新的開源項目 Bottlerocket
  • AWS全面上市開源Linux發行版
    來源:快資訊整理:丸子審核:月餅 AWS 曾在去年宣布為 Elasticsearch 推出開源發行版 Open Distro for Elasticsearch。如今,AWS宣布其容器作業系統Bottlerocket全面上市,Bottlerocket是它專為運行軟體容器而開發的開源Linux發行版。 該Linux發行版不僅設計為運行容器,使應用可以在多個計算環境中運行,而且還可以運行一系列其他工作負載,以支持大量用例所面臨的組件難於管理的挑戰。
  • 針對容器優化的作業系統:AWS vs 谷歌
    從本質上講,Bottlerocket是Linux 5.4內核,從用戶界面實用程序中添加的內容足以運行容器化。Bottlerocket主要由Rust編寫,針對運行Docker和Open Container Initiative(OCI)鏡像進行了優化。
  • Rust可太香了!AWS為此拿下其編譯器團隊負責人
    巨頭對 Rust 興趣濃厚 Rust 是一種較為年輕的程式語言,直到 2015 年才發布 1.0 版本,但其人氣絲毫未受影響。根據來自 65000 多名開發人員的調查反饋,Rust 連續五年位居 Stack Overflow「最受歡迎」程式語言榜首。
  • 亞馬遜雲服務推出基於Linux的Bottlerocket容器託管方案
    亞馬遜雲服務(AWS)新推出了基於 Linux 構建的 Bottlerocket 容器託管工具,旨在幫助客戶更輕鬆地在虛擬機或裸機上集成部署
  • 基於Rust編寫的微內核作業系統Redox OS發布0.6版本
    Redox OS 是一個幾乎完全以 Rust 語言編寫的通用作業系統及周圍生態(例如文件系統、顯示伺服器及 Rust 版本的 libc)。其遵循微內核架構,在一定程度上兼容於 POSIX。自Redox 0.5發布以來,這已經是兩年中的最好的部分了,但是開發者希望他們能夠開始更頻繁地發布新的更新,雖然並非總是如此。在此發行周期中引入了許多新項目,並且取得了許多改進,並已消除了很多錯誤。
  • 基於Rust編寫的微內核作業系統RedoxOS發布0.6版本
    22:56 來源: 每日豆瓣一下 舉報   Redox OS 是一個幾乎完全以 Rust 語言編寫的通用作業系統及周圍生態
  • Rocket 0.5.3 發布,CoreOS 的容器引擎
    Rocket 0.5.3 發布,此版本主要更新信息如下:{Container,container} changed globally to {Pod,pod}{Rocket
  • 何時使用 Rust 和何時使用 Golang?
    例如,您在編寫代碼時必須非常了解內存分配原則。始終保持您的內存安全防護並不容易。在以下情況下選擇 Golang:您關心簡單性和可讀性您需要一種簡單的語法來快速編寫代碼您想使用支持 Web 開發的更靈活的語言
  • Parrot 4.8發布,基於 Debian 的 Linux 發行版
    Parrot 4.8 版本現已發布。
  • AWS Ubuntu 18.04 鏡像採用滾動內核模型
    Canonical 表示:「 Ubuntu 滾動內核模型在任務調度,I/O 調度,網絡,虛擬機管理程序來賓和容器方面為用戶提供了最新的上遊錯誤修復和性能改進,」。「 Canonical 已經在其他雲環境中採用這種模型已有一段時間了,發現它是在繼續提供 LTS 級別穩定性的同時提供這些好處的絕佳方法。」
  • 通過編寫一個簡單的遊戲來學習 Rust | Linux 中國
    本文字數:4068,閱讀時長大約: 5分鐘  https://linux.cn/article-12979-1.html作者:Moshe Zadka譯者:Xingyu.Wang  當你想學習一門新的程式語言時,不妨關注一下程式語言的共同點。  ? 變量  ? 表達式  ?
  • 2020 Rust Web框架大比拼
    Rust是目前最優雅而且熱門的程式語言之一,性能上可以比肩C、編譯時安全、沒有GC的累贅、異步和範型支持,註定這是將來流行的語言。一般認為Rust是一個很好的系統語言,但實際上Rust在各個領域都做的不錯,今天我們就來說說Rust的Web框架。
  • 從零開始編譯自己的Linux發行版 LFS 8.0正式發布
    感謝Linux Story的投遞LFS 的全稱是 Linux From Scratch,就像它的名字一樣,這個發行版是一個教我們如何從零開始打造自己的
  • Docker專用基礎Linux發行版選擇
    隨著容器雲和Docker技術的發展,容器基礎鏡像OS和運行容器的宿主機OS的選擇都成了一個問題。有很多Linux發行商和雲運營商也發布了專門的容器發行版,與傳統發行版作業系統相比,這些Linux可能更安全,更簡練,發行版有一我們列出業界流行的幾種發行版,希望能幫助大家甄選最適合自己的發行版。
  • lazygit 是一個用於 Git 命令行的簡單終端 UI,使用 Go 語言編寫...
    Rust 1.48.0 版本現已發布,此版本最大的變化是對文檔系統的改進。