開啟部署新時代之Kubernetes
前言
之前指北君給大家介紹過 Docker的教程,接下來我們撬開 Kubernetes 的大門。
1.官網鎮樓
https://kubernetes.io/
2.什么是 Kubernetes?
官方介紹:
Kubernetes 是一個可移植的、可擴展的開源平臺, Google 在 2014 年將其開源,它用于管理容器化的工作負載和服務,可促進聲明式配置和自動化。
Kubernetes 擁有一個龐大且快速增長的生態系統。Kubernetes 的服務、支持和工具廣泛可用。
通俗來說,Kubernetes 是一個容器編排工具。
當業務規模足夠大時,我們會有很多容器來跑各種服務,這么多服務如何批量管理?
之前學 Docker 時我們介紹過Docker的官方工具 Docker-compose ,但是這是一種單機容器管理工具,并不支持集群,雖然官方出了另一種集群管理工具 Docker Swarm,但是當你用上 Kubernetes 之后,你會覺得他們都是弟弟。
2.1彩蛋
Kubernetes 這個名字源于希臘語,意為“舵手”或“飛行員”。k8s 這個縮寫是因為 k 和 s 之間有八個字符的關系。
3.部署時代演進
3.1 傳統部署時代
部署一個服務,會粗略估計服務所需要的機器性能,然后去采購對應的真實物理機器,然后在該機器上安裝服務需要的一些軟件,比如服務器Tomcat,數據庫MySQL等等。
(1)部署非常慢:采購機器,安裝系統,安裝軟件等等;
(2)成本高以及資源浪費:通常為了以防服務性能不夠,我們都會盡量采購比預期資源高一點的機器,不僅會增加成本,還會造成機器資源浪費;
(3)難于擴展與遷移:由于是真實的物理機,擴展或者遷移會比較麻煩;
3.2 虛擬機部署時代
VMware 相信大家都玩過,通過VMware 我們能在自己電腦上創建很多虛擬機器,而物理機時代就是在一臺真實物理機上,虛擬出多臺機器,而且每臺機器都可以看做是一臺獨立的電腦。
相對于物理機時代,虛擬機能夠在一臺機器上創建多臺機器,能夠充分利用資源,并且也做到了機器之間的隔離,機器性能不夠用了,也可以通過 Hypervisor 隨時進行擴展。
虛擬化技術相對于傳統部署時代能夠更好地利用物理服務器上的資源,并且因為可輕松地添加或更新應用程序 而可以實現更好的可伸縮性,降低硬件成本等等。
但是每個虛擬機都需要安裝一些多余的東西,比如操作系統,這算是額外的開銷。
3.3 容器部署時代
容器類似于 VM,但是它們具有被放寬的隔離屬性,可以在應用程序之間共享操作系統(OS)。因此,容器被認為是輕量級的。容器與 VM 類似,具有自己的文件系統、CPU、內存、進程空間等??梢园讶萜骺醋鍪遣挥冒惭b操作系統的虛擬機,容器化技術比虛擬機更加靈活,更加小巧,更加極致的利用物理機資源。
容器部署有如下優點:
- 敏捷應用程序的創建和部署:與使用 VM 鏡像相比,提高了容器鏡像創建的簡便性和效率。
- 持續開發、集成和部署:通過快速簡單的回滾(由于鏡像不可變性),支持可靠且頻繁的 容器鏡像構建和部署。
- 關注開發與運維的分離:在構建/發布時而不是在部署時創建應用程序容器鏡像, 從而將應用程序與基礎架構分離。
- 可觀察性:不僅可以顯示操作系統級別的信息和指標,還可以顯示應用程序的運行狀況和其他指標信號。
- 跨開發、測試和生產的環境一致性:在便攜式計算機上與在云中相同地運行。
- 跨云和操作系統發行版本的可移植性:可在 Ubuntu、RHEL、CoreOS、本地、 Google Kubernetes Engine 和其他任何地方運行。
- 以應用程序為中心的管理:提高抽象級別,從在虛擬硬件上運行 OS 到使用邏輯資源在 OS 上運行應用程序。
- 松散耦合、分布式、彈性、解放的微服務:應用程序被分解成較小的獨立部分, 并且可以動態部署和管理 - 而不是在一臺大型單機上整體運行。
- 資源隔離:可預測的應用程序性能。
- 資源利用:高效率和高密度。
4.為什么需要 Kubernetes?
進入容器化部署時代了,我們會有很多容器需要管理,在生產環境中,我們需要保證容器不會停機,或者容器停機了能夠馬上自啟,能夠監控容器運行狀態,甚至容器的負載均衡等等,這些 Kubernetes 都可以幫我們做到。
- 服務發現和負載均衡
Kubernetes 可以使用 DNS 名稱或自己的 IP 地址公開容器,如果進入容器的流量很大, Kubernetes 可以負載均衡并分配網絡流量,從而使部署穩定。
- 存儲編排
Kubernetes 允許你自動掛載你選擇的存儲系統,例如本地存儲、公共云提供商等。
- 自動部署和回滾。
- 你可以使用 Kubernetes 描述已部署容器的所需狀態,它可以以受控的速率將實際狀態 更改為期望狀態。例如,你可以自動化 Kubernetes 。 來為你的部署創建新容器, 刪除現有容器并將它們的所有資源用于新容器。
- 自動完成裝箱計算。
Kubernetes 允許你指定每個容器所需 CPU 和內存(RAM)。當容器指定了資源請求時,Kubernetes 可以做出更好的決策來管理容器的資源。
- 自我修復
Kubernetes 重新啟動失敗的容器、替換容器、殺死不響應用戶定義的 運行狀況檢查的容器,并且在準備好服務之前不將其通告給客戶端。
- 密鑰與配置管理
Kubernetes 允許你存儲和管理敏感信息,例如密碼、OAuth 令牌和 ssh 密鑰。你可以在不重建容器鏡像的情況下部署和更新密鑰和應用程序配置,類似熱部署,也無需在堆棧配置中暴露密鑰。
5.Kubernetes 學習網站
(1)官網:https://kubernetes.io/
(2)中文社區:https://www.kubernetes.org.cn