Kubernetes -Mesos 0.7.0:Kubernetes向生產環境邁出的一大步

jopen 9年前發布 | 17K 次閱讀 Kubernetes
 

Kubernetes是一套開源容器編排系統,負責管理各類利用Docker容器構建而成且跨越多臺主機的應用程序。盡管最初該項目由谷歌公司 所建立,不過其目前已經轉由云原生計算基金會負責推動。Mesosphere自其誕生以來一直提供面向Mesosphere的支持能力,而我們也一直在致 力于將自己的數據中心操作系統(即Datacenter Operating System,簡稱DCOS)打造成一套能夠對其加以承載的卓越平臺。

盡管我們的Marathon框架已經在為眾多知名企業管理大型生產型容器環境,但我們很清楚仍有不少開發人員希望能夠使用 Kubernetes,我們也希望能夠為他們提供最理想的方式以構建基于微服務架構的應用程序。而Kubernetes-Mesos正是我們基于這一理念 所開發出的技術成果,其能夠將Kubernetes作為原生Mesos框架處理并運行在DCOS之上。Kubernetes-Mesos能夠通過DCOS 命令行軟件包管理器輕松完成安裝,且可以同任意數量的其它Mesos框架——包括Marathon、Spark、Kafka以及Jenkins等等——實 現同地協作,從而共享來自同一套集群中的各類資源。

就在本周,我們高興地宣布Kubernetes-Mesos v0.7.0-v1.1.10-alpha版本的發布,其也成為兩大項目以及我們用戶最重要的發展里程碑。

重要發展里程碑

盡管目前Kubernetes-Mesos仍然處于alpha測試階段,但我們已經在全面投入生產環境以及100%兼容Kubernetes平臺方面實現了顯著進展。這一版本之所以如此特別,是因為我們成功實現了以下兩大目標:

  1. 其基于剛剛于三周前在KubeCon大會上發布的最新且最強大的Kubernetes v1.1。
  2. 其已經在與基于Docker組件的開發/測試集群的配合之下通過了Kubernetes兼容性測試套件的考核。

第一項目標的重要意義在于,這意味著我們能夠在其主要版本推出后的極短時間之內發布新的DCOS Kubernetes軟件包。之所以能夠實現這一點,是因為我們一直在上游GitHub庫當中開發并維護Kubernetes-Mesos,并以透明化方 式將其整合至Kubernetes社區e2e測試基礎設施當中。來自Kubernetes開發者社區的每一項新功能與bug修復成果都會觸發對應條件,并 以實時方式對Mesos的集成效果加以測試。一旦出現編譯錯誤及測試失敗狀況,開發人員會立即得到報告并對問題加以修改,而不至于把對應代碼添加到庫當 中。

盡管Kubernetes用戶無法直觀感受到這些,但這種嚴密的開發集成機制允許我們以既定步調發布高質量的開發成果。

而第二項目標的重要意義在于,我們能夠借此證明在我們基于Docker組件的開發集群的支持下,Kubernetes-Mesos如今已經能夠100%地同開發社區在定義“Kubernetes體驗”時所設計的功能及特性實現兼容性保障。

對于最終用戶而言,這種兼容性非常重要——因為這意味著他們的Kubernetes工作負載或者其它來自第三方的負載(例如Helm以及其它與 Kubernetes緊密相關的方案)將能夠同時順暢運行在內部Mesos集群與谷歌云環境當中。Kubernetes-Mesos是目前第一套擁有兼容 性保障的第三方平臺(或者用Kubernetes的說法,‘云供應方案’)。目前能夠實現這種兼容性表現的其它云供應方案全部由谷歌公司負責提 供:Google Container Engine、Google Compute Engine以及Vagrant開發環境。感興趣的朋友可以點擊此處查看官方提供的Kubernetes解決方案清單。

我們接下來的重要舉措在于讓DCOS Kubernetes軟件包獲得同樣的生產兼容性水平。另外兩項需要解決的難題則是為每套容器提供SSL以及IP支持能力。大家可以點擊此處與此處分別了解項目的當前已知問題以及下一步重要發展規劃。

前瞻方向

隨著一步步推進Kubernetes-Mesos的發展,我們最終將實現以下幾項目標:

  • 利用Mesosphere的DCOS將Kubernetes部署流程難度控制在最低水平。
  • 與部署在谷歌基礎設施或者其它平臺上的Kubernetes實現全面兼容。
  • 利用動態分區以共享同一套底層服務器,從而提升集群資源利用率并同其它DCOS服務實現同地協作。

以下命令解釋了在DCOS集群之上運行Kubernetes在易用性方面的突出優勢:

$ dcos package install kubernetes

一旦Kubernetes-Mesos框架啟動完成并開始運行,用戶就能夠通過下列命令部署工作負載(例如Nginx Web服務器):

$ dcos kubectl create -f nginx-pod.yml

pods/nginx

$ dcos kubectl get pods

NAME       READY       STATUS       RESTARTS       AGE

nginx 1/1 Running  1m 

就是這么簡單!每個pod、復制控制器乃至服務都能夠立即對當前可用資源加以利用,并以無縫化方式同Marathon任務、Spark任務、Cassandra數據庫或者其它任何DCOS服務進行資源共享。

需要注意的是,由于目前Kubernetes-Mesos在Multiverse庫當中仍然處于alpha測試階段,因此大家必須要在安裝之前將repo以打包源文件的形式通過DCOS命令行進行添加:

$ dcos config prepend package.sources \

https://github.com/mesosphere/multiverse/archive/version-1.x.zip $ dcos package update

0.7.0版本中的新鮮內容

下面再來看最新發布版本中的具體細節。與上一次發布的v1.0.6-v0.6.7版本相比,此次新版本在代碼庫方面做出了大量變更。單看 Kubernetes當中的Mesos組件(這里暫不考慮從v1.0到v1.1的上游變化),面向Kubernetes庫的Mesos相關提交條目就超過 50項。

簡而言之,Kubernetes-Mesos已經獲得了顯著進展——而我們對此深感自豪!

面向DCOS的KUBECTL子命令

在早期版本當中,Kubernetes-Mesos要求用戶以手動方式從GitHub的發布頁面下載并安裝kubectl二進制文件。除此之外,~/.kube/config文件還必須以手動方式創建并指向對應的DCOS集群。

而自從v0.6.7以來,我們就對此做出了改進,這一成效自然也在v0.7.0-v1.1.1-alpha中得到了繼承:

$ dcos kubectl get pods

以上代碼所示為DCOS命令行中的kubectl子命令。在首次運行這一命令時,其會自動從已經安裝的Kubernetes中下載合適的kubectl二進制文件并在用戶的操作系統上進行安裝。在此之后,其會立即執行指定的命令。

就是這么簡單!

ETCD-MESOS

今年十月,我們曾經公布過etcd-mesos的首個版本。易于安裝的特性外加可用性出色的正確源使得Kubernetes在DCOS或者 Mesos成為了一款引人注目的明星產品。而目前它已經能夠在不造成任何信息丟失的前提下實現核心組件重啟(無論是有意為之還是意外造成)。這一特性再加 上Marathon對于Kubernetes核心組件生命周期的管理能力,意味著Kubernetes在DCOS之上已經具備極為突出的可用性水平(能夠 在預期或者意外的服務停機情況下繼續運作)。

如果運行有Kubernetes核心組件的節點發生故障,Marathon會注意到這一狀況并在其它位置對其進行重啟。與此同時,如果核心組件 報告任何非正常或者無法實現等反饋,Marathon也會在新容器內對其進行重啟。由于etcd集群擁有如此出色的可用性,重啟之后的 Kubernetes組件將能夠輕松對自身數據加以恢復,也就是在幾秒鐘之內完成下線到重新上線這一過程。

因此,為了實現持久性與可用性,我們強烈建議大家安裝etcd-mesos并將Kubernetes DCOS服務與etcd-mesos集群相對接:

$ dcos install etcd

這時,etcd-mesos集群可能會需要一小段時間進行部署。一旦開始運行,etcd的運行狀態即可通過檢查<hostname>/service/etcd端點或者DCOS Marathon界面的方式為大家所掌握。

接下來,Kubernetes必須通過配置以使用該etcd-mesos集群:

$ cat >/tmp/options.json <<EOF

{

"kubernetes": {

    "etcd-mesos-framework-name": "etcd"

}

} EOF $ dcos package install --options=/tmp/options.json kubernetes 

為了真正實現高可用性保障,etcd-mesos還包含有自動處理更多極端狀況的能力,例如通過當etcd節點大規模丟失時通過重播方式進行自我修復。

V0.7.0-V1.1.1-ALPHA版本發布重點說明

  • 說明文檔
    • 增加了DCOS上手指南( 17198
    • 增加了調度標簽說明文檔 ( 17368
  • 執行器/kubelet
    • 增加了--mesos-launch-grace-period參數以保證長期運行中的docker pull不致出錯( 14432
    • 進行大規模重構以降低未來的維護難度( 1441513036
    • 通過--mesos-sandbox-overlay=...支持沙箱覆蓋tar.gz,同時向從節點分發socat與nsenter以實現kubectl端口指向( 16111
  • 調度程序
    • 添加基于標簽的調度機制( 13857
    • 利用k8s.mesosphere.com/label-<attribute>標簽定義從節點屬性 ( 13857
    • 修復了一項終止bug( 15518
    • 修復了擁有多個通配符端口的pod中的bug( 16992
    • 大規模重構以降低未來維護難度( 16316
    • 支持pod.spec.resources.requests ( 17054
    • 修復了靜態pos重復調度的bug ( 13943
    • 添加--proxy-mode以設定kube-proxy模式(‘用戶模式’與‘iptables’) ( 17455
    • 修復了當非兼容結果并行輸入時,此類結果不予處理且被泄漏的問題( 17654
  • 控制器-管理器
    • 為未運行kubelet的節點更新節點狀態( 16034

在Kubernetes-Mesos GitHub庫當中查看完整的版本說明內容。

下一步升級目標

雖然v0.7.0-v1.1.1-alpha已經成為重要的里程碑,但我們仍然在醞釀著數個同樣令人興奮的后續版本。我們之所以將當前版本的質量定義為 alpha水平,是因為在真正推薦大家在Kubernetes DCOS服務之上運行生產性工作負載之前,我們仍然還有其它一些開放性挑戰需要解決(詳見 Kubernetes-Mesos issues.md )。因此,我們的工作還沒有徹底完成。

接下來是v1.0的發展路線圖概述:

  • v0.7.0-v1.1.1-alpha
    • 基于Kubernetes 1.1的首個版本。
    • 與基于Docker組件的Mesos集群實現100%兼容。
    • 在調度程序當中添加對節點標簽及Mesos agent屬性的支持能力。
    • 添加kubectl DCOS子命令。
  • v0.7.1-v1.1.x-alpha
    • 添加對Mesos資源角色的支持能力,這一點對于公有及私有資源隔離非常重要。
  • v0.8.0-v1.x.y-beta—MVP版本:
    • 在kubectl與apiserver之間添加TLS支持能力。這將使得以下目前尚不受支持的kubectl命令得以起效:exec、logs、port-forward、proxy。
    • 添加服務賬戶支持機制。
    • 初步實現對DCOS軟件包的兼容能力。
    • 添加真正的Kubernetes滾動升級支持能力,而無需立即對全部pod或者服務進行關閉。
  • v1.0.0-v1.x.y:
    • 做好面向生產環境的準備。
    • 改進可擴展能力局限。

正如大家所見,我們正在努力讓Kubernetes-Mesos成為一套能夠用于實際生產的框架,同時盡可能簡化Kubernetes在 DCOS上的使用體驗并提升其實際能力。希望大家在有機會的情況下進行嘗試并提供反饋意見,我們將匯總各類信息以確保自己的方案能夠與既定目標及用戶的實 際要求保持一致!

原文鏈接: KUBERNETES-MESOS 0.7.0: A BIG STEP TOWARD PRODUCTION-READY KUBERNETES

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!