k8s是Kubernetes的縮寫,Google 於 2014 年開源了 Kubernetes 專案。
一、k8s的歷史演變
k8s的演變過程:首先從傳統的服務-->虛擬機器部署-->容器部署-->k8s。
k8s的由來,歸根結底是容器的由來,搞清楚容器的來歷,k8s是在容器的基礎上,方便容器管理、維護,包括宣告式配置和自動化。
1、 Docker的由來
Docker 是一個開源的應用容器引擎,是一種資源虛擬化技術,讓開發者可以打包他們的應用以及依賴包到一個可移植的容器中,虛擬化技術演歷路徑可分為三個時代:
1)物理機時代
物理機時代,多個應用程式可能跑在一臺物理機器上。
當多個應用程式跑在一臺物理機上的時候,無法為物理機中的應用程式定義資源邊界,這會導致資源分配問題。例如,如果多個應用程式在同一臺物理伺服器上執行,則可能會出現一個應用程式佔用大部分資源,而導致其他應用程式的效能會不佳的情況。一個解決方案是在不同的物理伺服器上執行每個應用程式。但這並沒有擴充套件,因為資源沒有得到充分利用,而且組織維護許多物理伺服器的成本很高。
2)虛擬機器時代
一臺物理機器啟動多個虛擬機器例項,一個虛擬機器跑多個應用程式,每個虛擬機器都是完整的獨立的系統。
為了解決多個應用部署在同一臺物理機資源分配不均的問題,引入了虛擬化。它可以在單個物理伺服器的 CPU 上執行多個虛擬機器 (VM)。應用程式在虛擬機器之間可以實現隔離,並提供一定程度的安全性,一個應用程式的資訊不能被另一個應用程式自由訪問。
虛擬化更好地利用物理伺服器中的資源並有更好的可擴充套件性,可以輕鬆新增或更新應用程式,降低硬體成本等等。
每個 虛擬機器 都是在虛擬化硬體之上執行所有元件的完整機器,包括它自己的作業系統。
虛擬機器的效能損耗是非常大的
3)容器化時代
容器化時代,一臺物理機上啟動多個容器例項,一個容器跑多個應用程式。
容器類似於虛擬機器,但它們具有鬆隔離性,可以在應用程式之間共享作業系統(OS)。因此,容器被認為是輕量級的。
與 VM 類似,容器有自己的檔案系統、CPU 、記憶體、程式等。由於它們與底層基礎架構分離,因此它們可以跨雲和作業系統分佈移植。
容器之所以流行,是因為它們提供了額外的好處,例如:
- 敏捷的應用程式建立和部署:與使用 VM 映像相比,容器映像建立的簡便性和效率更高。
- 持續開發、整合和部署:提供可靠且頻繁的容器映像構建和部署以及快速高效的回滾(由於映像不變性)。
- Dev 和 Ops 的關注點分離:在構建/釋出時而不是部署時建立應用程式容器映像,從而將應用程式與基礎架構解耦。
- 可觀察性:不僅可以顯示作業系統級別的資訊和指標,還可以顯示應用程式執行狀況和其他訊號。
- 開發、測試和生產之間的環境一致性:在膝上型電腦上執行與在雲中執行環境相同。
- 以應用程式為中心的管理:將抽象級別從在虛擬硬體上執行作業系統提高到使用邏輯資源在作業系統上執行應用程式。
- 鬆散耦合、分散式、彈性、自由的微服務:應用程式被分解成更小的、獨立的部分,並且可以動態部署和管理——而不是在一臺大型單一用途機器上執行的單一堆疊。
- 資源隔離:可預測的應用程式效能。
- 資源利用:高效率、高密度。
Docker 由映象、映象倉庫、容器三個部分組成:
映象: 跨平臺、可移植的程式+環境包
映象倉庫: 映象的儲存位置,有云端倉庫和本地倉庫之分,官方映象倉庫地址
容器: 進行了資源隔離的映象執行時環境
2 、從Docker到Kubernetes
隨著容器的火爆,越來越多的業務系統利用容器來搭建部署,像 Docker 之類的容器引擎,部署少量還可以,但隨著業務的增多,服務越來越多,動輒就要使用成百上千的容器,要管理這麼多容器,Docker 們就力不從心了。隨著容器技術越來越多的使用,出現了很多問題
- 百上千的容器管理問題
- 分散式環境下容器如何通訊?
- 如何協調和排程這些容器?
- 如何在升級應用程式時不會中斷服務?
- 如何監視應用程式的執行狀況?
- 如何批量重新啟動容器裡的程式?
有需求就有改變,於是乎,市場上就出現了一批容器編排工具,典型的是 Swarm、Mesos 和 K8S。最後,K8S“擊敗”Swarm 和 Mesos,幾乎成了當前容器編排的事實標準。
Kubernetes(簡稱 K8s,其中8代指中間的8個字元),是一個全新的基於容器技術的分散式架構方案。K8S 最初是由 Google 開發的,後來捐贈給了 CNCF(雲原生計算基金會,隸屬 Linux 基金會)。K8S是 Google 十幾年來大規模應用容器技術的經驗積累和昇華的重要成果,確切的說是 Google 一個久負盛名的內部使用的大規模叢集管理系統——Borg的開源版本,其目的是實現資源管理的自動化以及跨資料中心的資源利用率最大化。
Kubernetes具有完備的叢集管理能力,包括多層次的安全防護和准入機制、多租戶應用支撐能力、透明的服務註冊和服務發現機制、內建的智慧負載均衡器、強大的故障發現和自我修復能力、服務滾動升級和線上擴容能力、可擴充套件的資源自動排程機制,以及多力度的資源配額管理能力。
同時,Kubernetes 提供了完善的管理工具,這些工具涵蓋了包括開發、部署測試、運維監控在內的各個環節,不僅是一個全新的基於容器技術的分散式架構解決方案,還是一個一站式的完備分散式系統開發和支撐平臺。
K8S 是個雜技高手,最擅長的就是“搬箱子”,盤各種容器玩。
K8S 的大致架構,就像上面。Master 節點,用來放“腦子”,“腿腳”搭在工作節點上“搬磚”,工作節點就是實際業務容器的存放地。
單個容器或多個關係密切的容器,被編成一組,稱為 pod。K8S 就是以 pod 為單位進行編排操作。
同時,K8S 還要和其它相關軟體配合,來完成聯網、儲存、安全等功能。
Kubernetes 由 Master 節點、 Node 節點以及外部的 ETCD 叢集組成,叢集的狀態、資源物件、網路等資訊儲存在 ETCD 中,Mater 節點管控整個叢集,包括通訊、排程等,Node 節點為工作真正執行的節點,並向主節點報告。
3、容器和k8s的關係
K8S 和 Docker 們不是替代關係,而是配合關係。K8S 仍然會使用 Docker 之類的容器引擎(Docker、Containerd、RKT、CRI-O 等),來對容器進行生命週期管理。
二、K8S的特性
- 高可用,不當機,自動災難恢復
2.灰度更新,不影響業務正常運轉
3.一鍵回滾到歷史版本
4.方便的伸縮管理(包括應用伸縮,機器增減),提供負載均衡
5.有一個完善的生態體系
三、k8s有哪些功能
-
服務發現和負載平衡
Kubernetes 可以使用 DNS 名稱或使用自己的 IP 地址公開容器。如果容器的流量很高,Kubernetes 能夠負載均衡和分配網路流量,從而使部署穩定。
-
儲存編排
Kubernetes 允許您自動掛載您選擇的儲存系統,例如本地儲存、公共雲提供商等。
-
自動推出和回滾
您可以使用 Kubernetes 描述已部署容器的所需狀態,它可以以受控的速率將實際狀態更改為所需狀態。例如,您可以自動化 使用Kubernetes 建立新容器、刪除現有容器並將其所有資源用於新容器。
-
自動裝箱 你為 Kubernetes 提供了一個節點叢集,它可以用來執行容器化的任務。你告訴 Kubernetes 每個容器需要多少 CPU 和記憶體 (RAM)。Kubernetes 可以將容器安裝到您的節點上,以充分利用您的資源。
-
自我修復 Kubernetes 會重新啟動失敗的容器、替換容器、殺死不響應使用者定義的健康檢查的容器,並且在它們準備好服務之前不會將它們通告給客戶端。
-
祕密和配置管理 Kubernetes 允許您儲存和管理敏感資訊,例如密碼、OAuth 令牌和 SSH 金鑰。您可以部署和更新機密和應用程式配置,而無需重新構建容器映像,也無需在堆疊配置中公開機密。
-
水平擴充套件
-
滾動更新