1 K8s基本介紹
- kubernetes,簡稱k8s,是用8代替8個字符"ubernete"而成的縮寫。是一個開源的,用於管理雲平台中多個主機上的容器化的應用,kubernates的目標是讓部署容器化應用變得簡單而且高效 ,kubernates提供了應用部署、規划、更新和維護的機制。
- 傳統的應用部署方式是通過插件或腳本來安裝的。這樣做的缺點是應用的運行、配置、管理和所有的生命周期和當前操作系統綁定在一起,這樣做並不利於應用的升級、更新或回滾等操作,當然也可以通過創建虛擬機的方式來實現某些功能,但是虛擬機非常重,並不利於可移植性。
- 新的方式是通過部署容器方式實現,每個容器之間相互隔離,每個容器有自己的文件系統,容器之間進程不會相互影響,能區分計算資源。相對於虛擬機,容器能快速部署,由於容器和底層設施、機器文件系統解耦,所以它能在不同雲、不同版本操作系統間進行遷移。
- 容器占用資源少、部署塊,每個應用可以被打包成一個容器鏡像,每個應用和容器間形成一對一的關系,也使得容器有更大的優勢,使用容器可以在build或release的階段,為應用創建容器鏡像,因為每個應用不需要和其余的應用堆棧組合,也不依賴於生產環境基礎結構,這使得從研發到測試、生產能提供一致環境。類似的,容器比虛擬機輕量、更“透明”,更便於監控和管理。
- kubernetes是Google開源的一個容器編排引擎,它支持自動化部署、大規模可伸縮、應用容器化管理。在生產環境中部署一個應用程序時,通常要部署該應用的多個實例以便對應用請求進行負載均衡。
- 在kubernetes中,我們可以創建多個容器,每個容器里面運行一個應用實例,然后通過內置的負載均衡策略,實現對這一組應用實例的管理、發現和訪問,而這些細節都不需要運維人員去進行復雜的手動配置和處理。
- 總結:
- k8s是Google開源的容器化集群管理系統。
- 使用k8s進行容器化應用部署。
- 使用k8s有利於應用擴展。
- k8s的目標是讓部署容器化應用更加簡單和高效。
2 K8s的特性
2.1 概述
- kubernetes是一個輕量的和可擴展的開源平台,用於管理容器化應用和服務。通過kubernetes能夠進行應用的自動化部署和擴縮容。在kubernetes中,會將組成應用的容器組合成一個邏輯單元以便管理和發現。
- kubernetes積累了作為Google生產環境運行工作多年的經驗,並吸收了來自於社區的最佳想法和實踐。
2.2 k8的特性
- 1️⃣自動裝箱:基於容器對應運行環境的資源配置要求,自動部署應用容器。
- 2️⃣自我修復和自愈能力:
- 當容器失敗的時候,會對容器進行重啟。
- 當所部署的Node節點有問題時,會對容器進行重新部署和重新調度。
- 當容器沒有通過監控檢查的時候,會關閉此容器直到容器正常運行時,才會對外提供服務。
- 3️⃣水平擴展:通過簡單的命令、用戶UI界面或者基於CPU等資源的使用情況,對應用容器進行規模擴展或規模裁剪。
- 4️⃣服務發現和負載均衡:用戶不需要額外的服務發現機制,就能夠基於k8s自身能力實現服務發現和負載均衡。
- 5️⃣滾動更新:可以根據應用的變化,對應用容器運行的應用,進行一次性或批量式更新。
- 6️⃣版本回退:可以根據應用部署情況,對應用容器運行的應用,進行歷史版本即時回退。
- 7️⃣密鑰和配置管理:在不需要重新構建鏡像的情況下,可以部署、更新密鑰和應用配置,類似熱部署。
- 8️⃣存儲編排:
- 自動實現存儲系統掛載和應用,特別對有狀態的應用實現數據持久化非常重要。
- 存儲系統可以來自本地目錄、網絡存儲(NFS、Gluster、Ceph等)以及公有雲存儲服務。
- 9️⃣批處理:提供一次性任務、定時任務,滿足批量數據處理和分析的場景。
3 k8s的架構組件
- k8s由Master(主控節點)和Node(工作節點)組成。
- K8s的Master由API Server(集群的統一入口,以REST ful方式提供,存儲到etcd中)、Scheduler(做集群節點的調度:調度器根據算法選擇Node節點進行應用部署)、Controller Manager(處理集群中常規的后台任務,一個資源對應一個控制器)和etcd(存儲系統,用來保存集群中相關數據)組成。
- k8s的Node由kubelte(Master派到Node節點的代表,負責維護容器的生命周期,同時也負責Volume(CVI)和網絡(CNI)的管理)、kube-proxy(提供網絡代理,負責為Service提供cluster內部的服務發現和負載均衡)和docker組成。
4 k8s核心概念
4.1 Pod
- Pod是k8s中最小的部署單元。
- Pod是一組容器的集合。
- Pod中的容器是共享網絡的。
- Pod的生命周期是短暫的。
4.2 Controller
- Controller可以確保預期的Pod的副本數量。
- Controller確保所有的Node運行同一個Pod。
- 一次性任務和定時任務。
- 無狀態應用部署。
- 有狀態應用部署。
4.3 Service
- 定義一組Pod的訪問規則。