kubernetes 概述

2023-10-22 06:00:15

雲原生的發展

雲原生是一條最佳路徑或者最佳實踐。更詳細的說,雲原生為使用者指定了一條低心智負擔的、敏捷的、能夠以可延伸、可複製的方式最大化地利用雲的能力、發揮雲的價值的最佳路徑。因此,雲原生其實是一套指導進行軟體架構設計的思想。

2004 年— 2007 年,Google 已在內部大規模地使用像 Cgroups 這樣的容器技術;
2008 年,Google 將 Cgroups 合併進入了 Linux 核心主幹;
2013 年,Docker 專案正式釋出。
2014 年,Kubernetes 專案也正式釋出。這樣的原因也非常容易理解,因為有了容器和 Docker 之後,就需要有一種方式去幫助大家方便、快速、優雅地管理這些容器,這就是 Kubernetes 專案的初衷。在 Google 和 Redhat 釋出了 Kubernetes 之後,這個專案的發展速度非常之快。
2015 年,由Google、Redhat 以及微軟等大型雲端計算廠商以及一些開源公司共同牽頭成立了 CNCF 雲原生基金會。CNCF 成立之初,就有 22 個創始會員,而且 Kubernetes 也成為了 CNCF 託管的第一個開源專案。在這之後,CNCF 的發展速度非常迅猛;
2017 年,CNCF 達到 170 個成員和 14 個基金專案;
2018 年,CNCF 成立三週年有了 195 個成員,19 個基金會專案和 11 個孵化專案,如此之快的發展速度在整個雲端計算領域都是非常罕見的。

什麼是 Kubernetes?

Kubernetes,從官方網站上可以看到,它是一個工業級的容器編排平臺。Kubernetes 這個單詞是希臘語,它的中文翻譯是「舵手」或者「飛行員」。在一些常見的資料中也會看到「ks」這個詞,也就是「k8s」,它是通過將8個字母「ubernete 」替換為「8」而導致的一個縮寫。

如今,Kubernetes 和更廣泛的容器生態系統日益成熟,成為通用的計算平臺和生態系統,可與作為現代雲基礎架構和應用基本構建塊的虛擬機器器 (VM) 一爭高下,甚至大有後來居上之勢。這個生態系統使組織能夠交付高效的平臺即服務 (PaaS),用於應對與基礎架構和運營相關的多個雲原生開發任務和問題,從而使開發團隊能夠專心致志地從事編碼和創新工作。

為什麼需要 Kubernetes,它能做什麼?

  • 部署

    將指定數量的容器部署到指定的主機,並確保它們以期望的狀態持續執行。

  • 服務發現和負載均衡

    Kubernetes 可以使用 DNS 名稱或自己的 IP 地址來暴露容器。 如果進入容器的流量很大, Kubernetes 可以負載均衡並分配網路流量,從而使部署穩定。

  • 儲存編排

Kubernetes 允許你自動掛載你選擇的儲存系統,例如本地儲存、公共雲提供商等。

  • 自動部署和回滾

    你可以使用 Kubernetes 描述已部署容器的所需狀態, 它可以以受控的速率將實際狀態更改為期望狀態。 例如,你可以自動化 Kubernetes 來為你的部署建立新容器, 刪除現有容器並將它們的所有資源用於新容器。

  • 自動完成裝箱計算

    你為 Kubernetes 提供許多節點組成的叢集,在這個叢集上執行容器化的任務。 你告訴 Kubernetes 每個容器需要多少 CPU 和記憶體 (RAM)。 Kubernetes 可以將這些容器按實際情況排程到你的節點上,以最佳方式利用你的資源。

  • 自我治癒以實現高可用性

    當某個容器出現故障時,Kubernetes 可自動重新啟動或替換它,以防止發生宕機情況。 它還可以關閉不滿足執行狀況檢查要求的容器。

  • 金鑰與設定管理

    Kubernetes 允許你儲存和管理敏感資訊,例如密碼、OAuth 令牌和 SSH 金鑰。 你可以在不重建容器映象的情況下部署和更新金鑰和應用程式設定,也無需在堆疊設定中暴露金鑰。

k8s的演變

物件導向

k8s將一切資源抽象成物件,核心物件包括

  • node:計算節點抽象,用來描述計算節點的資源抽象、健康狀態等,可以是虛擬機器器或者是物理機(叢集管理)
  • namespace:資源隔離的基本單位,是一個邏輯概念, 可以簡單理解為檔案系統中的目錄結構
  • pod:用來描述應用範例的基本單位,排程的基本單元。包括映象地址、資源需求等,k8s中最核心的物件,也是打通應用和基礎架構的核心
  • service:將一組應用範例(pod)看做一個整體對外發布為服務,本質上是負載均衡和域名服務的宣告(服務發現)

宣告式系統

命令式:我要你做什麼,怎麼做,嚴格按照我說的做
宣告式:我需要什麼,而不是告訴你應該怎樣做

宣告式操作在分散式系統中的好處主要包括穩定性以及可預測性。在分散式系統中,如果一個操作是宣告式的,例如設定副本數為3,無論執行多少次這個操作,結果都是一樣的。相對而言,如果是一個命令式的操作,例如給副本數加1,那麼執行多次就會得到不同的結果,這就可能導致系統的穩定性受到影響。

參考