Kubernetes

menu icon

Kubernetes

Kubernetes 是一種開放原始碼容器編排平台,可自動部署、管理和擴充應用程式。 瞭解 Kubernetes 如何實現符合成本效益的雲端原生開發。

何謂 Kubernetes?

Kubernetes(也稱為 " k8s" 或 "kube")是一種容器編排平台,用於排定與自動化執行容器化應用程式的部署、管理及擴充。

Kubernetes 最初由 Google 工程師開發,後來於 2014 年成為開放原始碼。 它是 Borg 的後代,而 Borg 是 Google 內部所使用的容器編排平台。 Kubernetes 的希臘語原意是舵手駕駛員,因此在 Kubernetes 標誌(鏈結位於 IBM 外部)中放上舵輪來表示。

如今,Kubernetes 和更廣泛的容器生態系統逐漸成熟,成為一種通用的運算平台和生態系統,它可以與虛擬機器 (VM) 相媲美(即使未超越虛擬機器),而虛擬機器是現代雲端基礎架構和應用程式的構成要素。 此生態系統可讓組織提供具高度生產力的平台即服務 (PaaS),用以解決與雲端原生開發相關的多種基礎架構相關和營運相關的作業及問題,從而使開發團隊能夠完全專注於程式編碼與創新。     

在以下影片中,Sai Vennam 提供 Kubernetes 基本概念解釋 (10:59):

何謂容器?

讓我們從定義開始: 容器是軟體的可執行單元,其中應用程式碼、程式庫和相依關係透過常見方式包裝在一起,如此即可在桌面、傳統 IT 或雲端上的任何位置執行。

容器利用作業系統 (OS) 虛擬化的形式,讓多個應用程式共用作業系統,方法是隔離程序並控制這些程序可以存取的 CPU、記憶體及磁碟數量。

容器、虛擬機器與傳統基礎架構的比較

將容器視為 IT 基礎架構自動化和抽象化的最新重點,這樣也或更容易理解或更有幫助。

在傳統基礎架構中,應用程式會在實體伺服器上執行,並抓取他們可以取得的所有資源。 這樣一來,您可以選擇在單一伺服器上執行多個應用程式,並且希望該伺服器不會以犧牲其他伺服器為代價來囤積資源,或者每個應用程式各自使用一個伺服器,造成浪費資源且無法調整。

虛擬機器 (VM) 是從實際電腦硬體進行抽象化而得的伺服器,可讓您在一個實體伺服器上執行多個虛擬機器,或跨多個實體伺服器執行單一虛擬機器。 每個虛擬機器都會執行自己的作業系統實例,您可以在自己的虛擬機器中隔離每個應用程式,以減少在相同層級實體硬體上執行應用程式結果相互影響的機會。 虛擬機器可更充分地使用資源,與傳統的基礎架構相比顯得更加便捷且更具成本效益。 而且,它們是可移除的,當您不再需要執行應用程式時,即可關閉虛擬機器。

如需虛擬機器的相關資訊,請參閱虛擬機器: 基本指南

容器將此抽象概念提升到更高層次,具體而言,除了共用基礎虛擬化硬體之外,它們還共用基礎的虛擬化 OS 核心。 容器提供與虛擬機器相同的隔離、可擴充性和可處理性,但它們不會攜帶各自作業系統實例的有效負載,因此比虛擬機器更加輕巧(亦即,佔用的空間更少)。 它們更符合資源效率,可讓在較少的機器(虛擬和實體)與較少的 OS 實例上執行更多的應用程式。 容器可在桌面、資料中心和雲端環境之間更輕鬆地攜帶。 而且它們非常適合敏捷和 DevOps 等開發作法。

容器:基本指南提供容器和容器化的完整說明。另外,部落格文章 "Containers vs. VMs: What's the difference?" 針對兩者的不同之處提供完整詳細報告。

何謂 Docker?

Docker 是用於建立及執行 Linux® 容器的最熱門工具。 儘管數十年前就已經推出了早期形式的容器(使用 FreeBSD Jails 和 AIX Workload Partitions 等技術),然而在 2013 年時,Docker 才透過對開發人員友善和對雲端友善的全新實作將容器推廣給群眾,實現了容器大眾化。

Docker 最初是一個開放原始碼專案,但現今它也代表 Docker Inc.,即生產 Docker 的公司,Docker 是一個建基於開放原始碼專案的商業容器工具箱(並將一些改良回饋給開放原始碼社群)。

Docker 建基於傳統 Linux 容器 (LXC) 技術,但它可支援更精細的 Linux 核心虛擬化程序,並添加新功能,讓開發人員更容易建置、部署、管理及保護容器。

雖然現在有替代的容器平台(例如 Open Container Initiative (OCI)、CoreOS 和 Canonical (Ubuntu) LXD),但 Docker 受到如此廣泛的青睞,以至於它幾乎就是容器的代名詞,有時還會被誤認為是 Kubernetes 等免費技術的競爭對手(請參閱以下影片「Kubernetes 與 Docker 比較: 這不是一個非此即彼的問題」)。

使用 Kubernetes 進行容器編排

隨著容器的激增(如今,一個組織可能有數百個或數千個容器),作業團隊需要排定及自動化執行容器部署、網路功能、可擴充性和可用性。 容器編排市場應運而生。

雖然其他容器編排選項(最值得注意的是 Docker Swarm 和 Apache Mesos)在早期獲得了一定的吸引力,但 Kubernetes 很快地就成為最廣泛採用的項目(事實上,它一度是開放原始碼軟體歷史上發展最快速的專案)。

開發人員選擇(並繼續選擇)Kubernetes 是因為它的功能廣泛、其龐大且不斷成長的開放原始碼支援工具生態系統,以及它對先進雲端提供者的支援和可攜性(其中部分提供者現在提供完全受管理的 Kubernetes 服務)。

如需容器編排的相關資訊,請觀看以下的「容器編排說明」影片 (08:59):

Kubernetes 有哪些功能?

Kubernetes 排程與自動執行以下及其他容器相關作業:

  • 部署:將指定數目的容器部署至指定的主機,並讓它們以期望的狀態執行。
  • 推出:推出是指對部署進行變更。Kubernetes 可讓您啟動、暫停、恢復或回復推出作業。
  • 服務探索:Kubernetes 可以使用 DNS 名稱或 IP 位址,自動向網際網路或其他容器公開某一個容器。
  • 儲存設備佈建:設置 Kubernetes,根據需要為您的容器裝載持續性的本端或雲端儲存設備。
  • 負載平衡和擴充:當容器流量達到巔峰值時,Kubernetes 可以使用負載平衡和擴充功能,在網路上分散流量以維持穩定性。
  • 透過自我修復實現高可用性:當容器發生故障時,Kubernetes 可以自動重新啟動或自動更換;它還可以關閉不符合您性能檢查需求的容器。

Kubernetes 與 Docker 比較

如果您已經閱讀過這篇文章,就會瞭解雖然 Kubernetes 是 Docker Swarm 的替代方案,但它不是(與持續流行的誤解相反)Docker 本身的替代方案或競爭對手。

事實上,如果您已積極採用 Docker,並正在建立大規模的 Docker 容器部署,Kubernetes 編排就是管理這些工作負載而在邏輯上採取的下個步驟。 若要進一步瞭解,請觀看「Kubernetes 與 Docker 比較: 這不是一個非此即彼的問題」(08:03):

Kubernetes 架構

Kubernetes 架構的主要組成包括以下內容:

叢集和節點(運算)

叢集 是 Kubernetes 架構的建置區塊。叢集是由節點 組成,每個叢集代表單一運算主機(虛擬機器或實體機器)。

每個叢集由多個工作者節點 組成,用於部署、執行及管理容器化應用程式,另外包括一個主要節點 用以控制和監視工作節點。

主要節點會執行排程器服務,根據開發人員設定的部署需求和可用的運算能力,在部署容器時於部屬位置自動執行該項服務。每一個工作者節點都包含用來管理容器的工具(例如 Docker)和稱為 Kubelet 的軟體代理程式,該軟體代理程式用來接收及執行來自主要節點的訂單。

如果要深入探討 Kubernetes 叢集,請查看此部落格文章:Kubernetes 叢集:受控制的快速雲端應用程式交付架構

Pod 和部署(軟體)

Pod 是共享相同運算資源及相同網路的容器群組。它們也是 Kubernetes 的可擴充性單元: 如果 Pod 中的容器得到的資料流量超出其處理能力,則 Kubernetes 會將 Pod 複製到叢集中的其他節點。 基於這個原因,應該讓 Pod 保持精簡,讓它們只包含必須共享的容器。

部署 可控制容器化應用程式的建立及狀態,並使其保持執行。它會指定在叢集上應執行多少個 Pod 抄本。 如果 Pod 發生故障,部署將會建立新的 Pod。

如需更多 Kubernetes 部署相關資訊,請觀看「Kubernetes 部署: 快速入門」(03:54):

若要更詳細地瞭解 Kubernetes 架構的元素,請嘗試以下自學式線上課程:"Kubernetes 101"。

您還可以閱讀部落格文章 Kubernetes 架構:容器解決方案的四個方法,以進一步深入探討。

Istio 服務網眼

Kubernetes 可以部署和擴充 Pod,但是無法管理或自動執行它們之間的遞送,也不會提供任何工具以監視、保護或調整這些連線。 隨著叢集中容器數目的增加,它們之間可能的連線路徑數目將會呈現指數級增長(例如,兩個容器之間有兩個潛在連線,但 10 個 Pod 則有 90 個連線),這會帶來潛在的配置和管理夢魘。

Istio 是 Kubernetes 叢集的開放原始碼服務網眼 層。在每個 Kubernetes 叢集中,Istio 都會新增一個 Sidecar 容器(基本上程式設計師和管理者看不見),用來配置、監視與管理其他容器之間的互動。

有了 Istio,您可以設定單一原則以配置容器之間的連線,這樣就不必分別配置每個連線。 這使得容器之間的連線更容易調整。

Istio 還提供儀表板,DevOps 團隊和管理者可用來監視等待時間、服務時間錯誤及容器之間的其他特性。 而且,它內建安全性(具體來說即身分管理,防止未獲授權的使用者在容器之間欺騙服務呼叫),以及可供安全專業人員用來監視叢集的鑑別、授權及審核 (AAA) 功能。

請參閱文章什麼是 Istio?以瞭解更多詳細資訊,包括 Istio 使用影片和一些範例。

Knative 與無伺服器運算

Knative(發音為 ‘kay-native’)是一種開放原始碼平台,位於 Kubernetes 之上,可為雲端原生開發提供兩個重要優點:

Knative 為無伺服器運算提供便捷的管道

無伺服器運算是一種相對新型的程式碼部署方式,讓雲端原生應用程式更具效率且更符合成本效益。無伺服器不會部署在等待請求時處於閒置狀態的進行中程式碼實例,而是在有需要時提供程式碼(根據需求波動進行擴充或縮小),然後在不使用時將其刪除。 無伺服器方式可防止浪費運算容量與能力,並且降低成本,因為只有在實際執行時才需要為程式碼執行進行付費。

Knative 可讓開發人員建置容器一次,然後將它當作軟體服務 作為無伺服器功能來執行。它對開發人員來說是完全透明的: Knative 可在背景中處理詳細資料,而開發人員可以專注於程式碼。

Knative 簡化容器開發與編排

對於開發人員而言,容器化程式碼需要大量的重複步驟,而編排容器則需要大量的配置和 Scripting(例如,產生配置檔、安裝相依關係、管理記載和追蹤,以及撰寫連續整合/連續部署 (CI/CD) Script)。

Knative 透過以下三個元件自動完成這些作業:

  • 建置:Knative 的建置元件會自動將原始碼轉換成雲端原生容器或功能。 具體來說,它會從儲存庫取出程式碼,安裝必要的相依關係,建置容器映像檔,並將它放在容器登錄中,以供其他開發人員使用。 開發人員需要指定這些元件的位置,以便 Knative 可以找到它們,然而一旦完成,Knative 會自動執行建置。
  • 服務:服務元件會將容器當作可擴充式服務執行;它可以擴充至數千個 容器實例,也可以縮減至無(稱為調整為零)。此外,服務元件還具備兩個非常有用的功能:
    • 配置 :每當您將容器推送至正式作業,都會儲存該容器的版本(稱為 Snapshot),並讓您同時執行這些版本。
    • 服務遞送 :可讓您將不同數量的資料流量導向這些版本。您可以一起使用這些特性,分階段逐步推出容器或暫置容器化應用程式的 Canary 測試,然後再將其放入全球正式作業中。
  • 事件 :事件元件會啟用指定的事件,以觸發容器型服務或功能。這對於 Knative 的無伺服器功能尤其重要;應在有需要時告知系統啟動某項功能。 事件容許團隊表達對事件類型的興趣,然後自動連接至事件生產者,並將事件遞送至容器,完全無需對這些連線進行程式設計。

您可以閱讀 Knative:基本指南,以進一步瞭解 Knative。

Kubernetes GitHub 承諾與更多人氣飆升的證明

Kubernetes 是歷史上發展最快的開放原始碼專案之一,而且發展速度還在不斷加快。 在開發人員及採用它的公司之間,採用數量持續飆漲。 有一些資料點值得注意:

  • 在撰寫本文時,已向 GitHub 上的 Kubernetes 儲存庫(鏈結位於 IBM 外部)提交超過 86,200 次(其中包括過去四個月的近 6,000 次提交),而且該專案有超過 2,300 名 作用中參與者。 根據雲端原生運算基金會(鏈結位於 IBM 外部)指出,在所有與 Kubernetes 相關的儲存庫(包括 Kubernetes 儀表板和  Kubernetes MiniKube)中,已有超過 148,000 次提交。
  • 超過 1,500 家公司在其正式作業軟體堆疊中使用 Kubernetes。 其中包括許多全球知名企業,如 AirBnB、Bose、CapitalOne、Intuit、Nordstrom、Philips、Reddit、Slack、Spotify、Tinder,當然還包括 IBM。 閱讀這些及其他採用個案研討(鏈結位於 IBM 外部)
  • Container Journal(鏈結位於 IBM 外部)引用2019 年 7 月 的一項調查,發現在過去六個月中 Kubernetes 的採用率增加了 51% 。
  • 超過 12,000 人參加 KubeCon + CloudNative Con North America 2019(鏈結位於 IBM 外部)會議,比去年創紀錄的出席人數增加了 3,000  多人。
  • 根據 ZipRecruiter(鏈結位於 IBM 外部)指出,與 Kubernetes 相關的工作其平均年薪(北美洲)為 144,628 美元。在撰寫本文時,LinkedIn(鏈結位於 IBM 外部)上目前列出超過 21,000  個與 Kubernetes 相關的職位。

Kubernetes 指導教學

如果您已準備好開始使用 Kubernetes 或使用 Kubernetes 和 Kubernetes 生態系統工具來培養您的技能,可嘗試下列其中一個指導教學:

Kubernetes 與 IBM Cloud

IBM Cloud® Kubernetes Service 是一種受管理容器編排解決方案,可在運算主機叢集中自動執行容器化應用程式的部署、操作、擴充和監視,同時增加為 IBM 特定功能。 它可以快速交付應用程式,並可連結至進階服務,例如區塊鏈IBM Watson®

有關受管理 Kubernetes 服務如何協助您進行雲端旅程的概觀,請觀看我們的「受管理 Kubernetes 的優點」影片 (03:14):

Red Hat® OpenShift® on IBM Cloud 是一項綜合性服務,可在 IBM Cloud 平台上提供完全受管理的 OpenShift 叢集。(OpenShift 是在 Red Hat Enterprise Linux 上執行的企業 Kubernetes 平台。)

透過新的 Forrester Wave: Multicloud Container Development Platforms 報告 (PDF, 415 KB),閱讀有關 OpenShift 的更多資訊。

若要開始使用,請註冊 IBMid 並建立您的 IBM Cloud 帳號