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 密鑰。您可以部署和更新機密和應用程序配置,而無需重新構建容器映像,也無需在堆棧配置中公開機密。
-
水平擴展
-
滾動更新