Kubernetes 是什麼?

Kubernetes,簡稱 k8s(k,8 個字元,s——明白了?)或者 「kube」,是一個開源的 Linux 容器自動化運維平台,它消除了容器化應用程序在部署、伸縮時涉及到的許多手動操作。換句話說,你可以將多台主機組合成集群來運行 Linux 容器,而 Kubernetes 可以幫助你簡單高效地管理那些集群。構成這些集群的主機還可以跨越公有雲、私有雲以及混合雲。

Kubernetes 最開始是由 Google 的工程師設計開發的。Google 作為 Linux 容器技術的早期貢獻者之一,曾公開演講介紹 Google 如何將一切都運行於容器之中(這是 Google 的雲服務背後的技術)。Google 一周內的容器部署超過 20 億次,全部的工作都由內部平台 Borg 支撐。Borg 是 Kubernetes 的前身,幾年來開發 Borg 的經驗教訓也成了影響 Kubernetes 中許多技術的主要因素。

趣聞: Kubernetes logo 中的七個輻條來源於項目原先的名稱, 「Seven of Nine 項目」(LCTT 譯註:Borg 是「星際迷航」中的一個宇宙種族,Seven of Nine 是該種族的一名女性角色)。

紅帽作為最早與 Google 合作開發 Kubernetes 的公司之一(甚至早於 Kubernetes 的發行),已經是 Kubernetes 上游項目的第二大貢獻者。Google 在 2015 年把 Kubernetes 項目捐獻給了新成立的 雲計算基金會 - Cloud Native Computing Foundation(CNCF)。

為什麼你需要 Kubernetes ?

真實的生產環境應用會包含多個容器,而這些容器還很可能會跨越多個伺服器主機部署。Kubernetes 提供了為那些工作負載大規模部署容器的編排與管理能力。Kubernetes 編排讓你能夠構建多容器的應用服務,在集群上調度或伸縮這些容器,以及管理它們隨時間變化的健康狀態。

Kubernetes 也需要與網路、存儲、安全、監控等其它服務集成才能提供綜合性的容器基礎設施。

Kubernetes 解釋-圖表

當然,這取決於你如何在你的環境中使用容器。一個初步的 Linux 容器應用程序把容器視作高效、快速的虛擬機。一旦把它部署到生產環境或者擴展為多個應用,很顯然你需要許多組託管在相同位置的容器合作提供某個單一的服務。隨著這些容器的累積,你的運行環境中容器的數量會急劇增加,複雜度也隨之增長。

Kubernetes 通過將容器分類組成 「pod」 來解決了容器增殖帶來的許多常見問題。pod 為容器分組提供了一層抽象,以此協助你調度工作負載以及為這些容器提供類似網路與存儲這類必要的服務。Kubernetes 的其它組件幫助你對 pod 進行負載均衡,以保證有合適數量的容器支撐你的工作負載。

正確實施的 Kubernetes,結合類似 Atomic Registry、Open vSwitch、heapster、OAuth 和 SELinux的開源項目,讓你可以管理你自己的整個容器基礎設施。

Kubernetes 能做些什麼?

在生產環境中使用 Kubernetes 的主要優勢在於它提供了在物理機或虛擬機集群上調度和運行容器的平台。更寬泛地說,它能幫你在生產環境中實現可以依賴的基於容器的基礎設施。而且,由於 Kubernetes 本質上就是運維任務的自動化平台,你可以執行一些其它應用程序平台或管理系統支持的操作,只不過操作對象變成了容器。

有了 Kubernetes,你可以:

  • 跨主機編排容器。
  • 更充分地利用硬體資源來最大化地滿足企業應用的需求。
  • 控制與自動化應用的部署與升級。
  • 為有狀態的應用程序掛載和添加存儲器。
  • 線上擴展或裁剪容器化應用程序與它們的資源。
  • 聲明式的容器管理,保證所部署的應用按照我們部署的方式運作。
  • 通過自動布局、自動重啟、自動複製、自動伸縮實現應用的狀態檢查與自我修復。

然而 Kubernetes 依賴其它項目來提供完整的編排服務。結合其它開源項目作為其組件,你才能充分感受到 Kubernetes 的能力。這些必要組件包括:

  • 倉庫:Atomic Registry、Docker Registry 等。
  • 網路:OpenvSwitch 和智能邊緣路由等。
  • 監控:heapster、kibana、hawkular 和 elastic。
  • 安全:LDAP、SELinux、 RBAC 與 支持多租戶的 OAUTH。
  • 自動化:通過 Ansible 的 playbook 進行集群的安裝和生命周期管理。
  • 服務:大量事先創建好的常用應用模板。

紅帽 OpenShift 為容器部署預先集成了上面這些組件。

Kubernetes 入門

和其它技術一樣,大量的專有名詞有可能成為入門的障礙。下面解釋一些通用的術語,希望幫助你理解 Kubernetes。

  • Master(主節點): 控制 Kubernetes 節點的機器,也是創建作業任務的地方。
  • Node(節點): 這些機器在 Kubernetes 主節點的控制下執行被分配的任務。
  • Pod: 由一個或多個容器構成的集合,作為一個整體被部署到一個單一節點。同一個 pod 中的容器共享 IP 地址、進程間通訊(IPC)、主機名以及其它資源。Pod 將底層容器的網路和存儲抽象出來,使得集群內的容器遷移更為便捷。
  • Replication controller(複製控制器): 控制一個 pod 在集群上運行的實例數量。
  • Service(服務): 將服務內容與具體的 pod 分離。Kubernetes 服務代理負責自動將服務請求分發到正確的 pod 處,不管 pod 移動到集群中的什麼位置,甚至可以被替換掉。
  • Kubelet: 這個守護進程運行在各個工作節點上,負責獲取容器列表,保證被聲明的容器已經啟動並且正常運行。
  • kubectl: 這是 Kubernetes 的命令行配置工具。

上面這些知識就足夠了嗎?不,這僅僅是一小部分,更多內容請查看 Kubernetes 術語表。

生產環境中使用 Kubernetes

Kubernetes 是開源的,所以沒有正式的技術支持機構為你的商業業務提供支持。如果在生產環境使用 Kubernetes 時遇到問題,你恐怕不會太愉快,當然你的客戶也不會太高興。

這就是紅帽 OpenShift 要解決的問題。OpenShift 是為企業提供的 Kubernetes ——並且集成了更多的組件。OpenShift 包含了強化 Kubernetes 功能、使其更適用於企業場景的額外部件,包括倉庫、網路、監控、安全、自動化和服務在內。OpenShift 使得開發者能夠在具有伸縮性、控制和編排能力的雲端開發、託管和部署容器化的應用,快速便捷地把想法轉變為業務。

而且,OpenShift 還是由頭號開源領導公司紅帽支持和開發的。

Kubernetes 如何適用於你的基礎設施

Kubernetes 圖表

Kubernetes 運行在操作系統(例如 Red Hat Enterprise Linux Atomic Host)之上,操作著該節點上運行的容器。Kubernetes 主節點(master)從管理員(或者 DevOps 團隊)處接受命令,再把指令轉交給附屬的節點。這種帶有大量服務的切換工作自動決定最適合該任務的節點,然後在該節點上分配資源並指派 pod 來完成任務請求。

所以從基礎設施的角度,管理容器的方式發生了一點小小的變化。對容器的控制在更高的層次進行,提供了更佳的控制方式,而無需用戶微觀管理每個單獨的容器或者節點。必要的工作則主要集中在如何指派 Kubernetes 主節點、定義節點和 pod 等問題上。

docker 在 Kubernetes 中的角色

Docker 技術依然執行它原本的任務。當 kubernetes 把 pod 調度到節點上,節點上的 kubelet 會指示 docker 啟動特定的容器。接著,kubelet 會通過 docker 持續地收集容器的信息,然後提交到主節點上。Docker 如往常一樣拉取容器鏡像、啟動或停止容器。不同點僅僅在於這是由自動化系統控制而非管理員在每個節點上手動操作的。


via: redhat.com/en/container

作者:www.redhat.com 譯者:haoqixu 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出


推薦閱讀:

Docker 鏡像優化與最佳實踐
[原] 數據科學的容器革命

TAG:Kubernetes | 容器 | OpenShift |