官網主頁:?
Kubernetes
什么是k8s
Kubernetes?也稱為 K8s,是用于自動部署、擴縮和管理容器化應用程序的開源系統。
它將組成應用程序的容器組合成邏輯單元,以便于管理和服務發現。Kubernetes 源自Google 15 年生產環境的運維經驗,同時凝聚了社區的最佳創意和實踐。
永不過時
Kubernetes 是開源系統,可以自由地部署在企業內部,私有云、混合云或公有云,讓您輕松地做出合適的選擇。
請訪問下載部分下載 Kubernetes。
kubernetes的特性
自動化上線和回滾
?Kubernetes 會分步驟地將針對應用或其配置的更改上線,同時監視應用程序運行狀況以確保你不會同時終止所有實例。如果出現問題,Kubernetes 會為你回滾所作更改。你應該充分利用不斷成長的部署方案生態系統。
服務發現與負載均衡
?無需修改你的應用程序去使用陌生的服務發現機制。Kubernetes 為容器提供了自己的 IP 地址和一個 DNS 名稱,并且可以在它們之間實現負載均衡。
自我修復
?重新啟動失敗的容器,在節點死亡時替換并重新調度容器, 殺死不響應用戶定義的健康檢查的容器, 并且在它們準備好服務之前不會將它們公布給客戶端。
存儲編排
?自動掛載所選存儲系統,包括本地存儲、公有云提供商所提供的存儲或者諸如 iSCSI 或 NFS 這類網絡存儲系統。
Secret 和配置管理
部署和更新 Secret 和應用程序的配置而不必重新構建容器鏡像, 且不必將軟件堆棧配置中的秘密信息暴露出來。
自動裝箱
根據資源需求和其他限制自動放置容器,同時避免影響可用性。 將關鍵性的和盡力而為性質的工作負載進行混合放置,以提高資源利用率并節省更多資源。?
批量執行
除了服務之外,Kubernetes 還可以管理你的批處理和 CI 工作負載,在期望時替換掉失效的容器。?
IPv4/IPv6 雙協議棧
為 Pod 和 Service 分配 IPv4 和 IPv6 地址
?水平擴縮
?使用一個簡單的命令、一個 UI 或基于 CPU 使用情況自動對應用程序進行擴縮。
為擴展性設計
?無需更改上游源碼即可擴展你的 Kubernetes 集群。
kubernetes的關鍵組件:
Kubernetes節點有運行應用容器必備的服務,而這些都是受Master的控制。每個節點上都要運行Docker。Docker來負責所有具體的映像下載和容器運行。
- Kubernetes主要由以下幾個核心組件組成:
-
etcd:保存了整個集群的狀態;
-
apiserver:提供了資源操作的唯一入口,并提供認證、授權、訪問控制、API注冊和發現等機制;
-
controller manager:負責維護集群的狀態,比如故障檢測、自動擴展、滾動更新等;
-
scheduler:負責資源的調度,按照預定的調度策略將Pod調度到相應的機器上;
-
kubelet:負責維護容器的生命周期,同時也負責Volume(CVI)和網絡(CNI)的管理;
-
Container runtime:負責鏡像管理以及Pod和容器的真正運行(CRI);
-
kube-proxy:負責為Service提供cluster內部的服務發現和負載均衡;
除了核心組件,還有一些推薦的Add-ons: -
kube-dns:負責為整個集群提供DNS服務
-
Ingress Controller:為服務提供外網入口
-
Heapster:提供資源監控
-
Dashboard:提供GUI
-
Federation:提供跨可用區的集群
-
Fluentd-elasticsearch:提供集群日志采集、存儲與查詢
kubernetes的工作原理:
Kubernetes的工作原理包括以下幾個核心組件:
- Master:主組件提供群集的控制平面。主組件對集群做出全局決策(例如,調度),并且它們檢測并響應集群事件(例如,在部署的副本字段不滿足時啟動新的pod)。主組件可以在群集中的任何計算機上運行。但是,為簡單起見,設置腳本通常會在同一臺計算機上啟動所有主組件,并且不在此計算機上運行用戶容器。
- kubectl:這是集群管理命令行工具集,通過客戶端的kubectl命令集操作,API Server響應對應的命令結果,從而達到對kubernetes集群的管理。
- kube-apiserver:這是資源操作入口,提供了資源對象的唯一操作入口,其他所有組件都必須通過它提供的API來操作資源數據,只有API Server與存儲通信,其他模塊通過API Server訪問集群狀態。對相關的資源數據“全量查詢”+“變化監聽”,實時完成相關的業務功能。
此外,Kubernetes還具有以下功能特性:
- 副本與彈性伸縮:容器如果部署無狀態服務,一個好處就是可以多副本,并且可以彈性伸縮。在Kubernetes里面,副本數目是以pod為單位的,由controller進程控制,可以通過創建一個Deployment來控制副本數。Kubernetes也可以實現autoscaling。有一個組件Horizontal Pod Autoscaling,可以通過監控CPU的使用情況動態調整Pod的數量。
- 編排:為了能夠通過編排文件一鍵創建整個應用,需要有編排功能。Kubernetes的編排是基于yml文件。
- 服務發現與DNS:容器平臺的一個重要的功能是服務發現,也即當容器的地址改變的時候,可以自動進行服務之間的關聯。Kubernetes的DNS組件是通過skyDNS實現的,負載均衡是通過將DNS轉化為VIP,有個內置的負載均衡器kube-proxy來完成這件事情。
kubernetes中的重要概念:
Kubernetes API:
????????Kubernetes API是Kubernetes的核心接口,它提供了一組RESTful API,用于與Kubernetes集群進行交互。通過這些API,用戶可以創建、查詢、更新和刪除Kubernetes中的各種資源,如Pod、Service、Deployment等。
Pod:
????????Pod是Kubernetes中的基本運行單元,它包含了運行應用程序的容器和相關的配置信息。一個Pod中可以運行一個或多個容器,這些容器共享相同的網絡命名空間、存儲卷和IPC。
ReplicaSet:
????????ReplicaSet是Kubernetes中的一種控制器,它用于管理Pod的復制和調度。通過創建ReplicaSet,用戶可以指定Pod的復制數量,并確保這些Pod始終在集群中運行。
Horizontal Pod Autoscaler(HPA):
????????HPA是Kubernetes中的一種擴展機制,它可以根據應用程序的資源使用情況自動調整Pod的數量。HPA可以根據CPU或內存的使用率來決定是否需要增加或減少Pod的數量。
Vertical Pod Autoscaler(VPA):
????????VPA是Kubernetes中的另一種擴展機制,它可以根據應用程序的資源使用情況自動調整Pod的資源分配。VPA可以根據CPU或內存的使用率來決定是否需要增加或減少Pod的資源分配。
Volume:
????????Volume是Kubernetes中用于提供容器存儲的抽象概念,它提供了一種將持久化存儲映射到容器的方法。Volume可以用于存儲應用程序的數據、日志和其他持久化數據。
Persistent Volume(PV):
????????PV是Kubernetes中的一種存儲資源,它提供了容器持久化存儲的能力。PV可以被多個Pod共享,并且可以在Pod的生命周期之外保持數據。PV通過聲明Persistent Volume Claim(PVC)來申請和使用。
Kubernetes的主要工作原理包括以下幾個方面:
- 容器編排:Kubernetes可以自動在多個節點上運行容器,提供了應用部署、規劃、更新、維護的一種機制。
- 自我修復:Kubernetes可以通過監控容器的運行狀態,自動重啟失效的容器,或者重新調度容器的運行位置。
- 自動擴展:Kubernetes可以根據應用程序的運行情況,自動擴展或縮減容器的數量,以滿足不斷變化的需求。
- 負載均衡:Kubernetes可以自動分配網絡流量,以確保應用程序能夠均勻地承受負載。
- 存儲管理:Kubernetes可以自動管理存儲卷,為應用程序提供穩定的數據存儲。
- API和服務網格:Kubernetes提供了一組強大的API,可以用來管理和查詢Kubernetes集群,同時也提供了一個服務網格,可以用來監控和調整網絡流量。
容器編排:
Kubernetes的容器編排主要通過以下步驟完成:
- 用戶通過Kubernetes API提交Pod規格,Kubernetes控制器將規格轉換為ReplicaSet對象。
- ReplicaSet會根據需要創建或刪除Pod副本的數量。這主要依賴于對象的規模設置,即期望的Pod數量。
- 在調度器中,Kubernetes會根據可用資源、Pod親和性或反親和性規則、存儲要求等,選擇最適合運行Pod的節點。
- 節點接受Pod并將其啟動在適當的位置上。
- 如果Pod由于某種原因失敗,則Kubernetes會自動重啟它。如果需要增加或減少Pod的數量,Kubernetes會自動擴展或縮減ReplicaSet。
- 在運行過程中,Kubernetes還會根據實時的性能數據,自動調整Pod副本的數量,以滿足實際負載的需求。
通過這些步驟,Kubernetes能夠自動、高效地完成容器編排,為應用程序提供穩定、可靠的運行環境。
自我修復
?Kubernetes的自我修復主要通過以下幾種方式實現:
- 容器失敗自動重啟:當一個容器因故障或其他原因停止運行時,Kubernetes會根據定義好的ReplicaSet或Pod規格,自動重啟該容器。
- 替換失效容器:如果一個容器持續出現故障,Kubernetes可以通過創建新的容器來替換它。這可以通過設置Pod的重啟策略或使用ReplicaSet來實現。
- 重新調度:當一個節點出現故障時,Kubernetes會將該節點上的所有容器重新調度到其他可用的節點上,確保應用程序在節點故障的情況下仍然可以繼續運行。
- 自動擴展或縮減:根據應用程序的運行情況,Kubernetes可以自動擴展或縮減容器的數量,以滿足不斷變化的需求。這可以通過設置Horizontal Pod Autoscaler(HPA)或Vertical Pod Autoscaler(VPA)來實現。
此外,Kubernetes還提供了多種自我修復的機制,如健康檢查、探針等,以確保應用程序在運行過程中始終處于健康狀態。這些機制可以幫助運維人員及時發現和解決問題,從而提高應用程序的穩定性和可靠性。
自動擴展
Kubernetes的自動擴展主要通過Horizontal Pod Autoscaler(HPA)實現。HPA是Kubernetes的一個核心組件,用于根據應用程序的資源使用情況自動調整Pod的數量。
?HPA的工作流程如下:
- HPA定期檢測目標Pod的資源性能指標,通常是CPU使用率。
- 如果檢測到的資源使用率超過設定的擴縮容閾值,HPA會創建一個新的Pod副本。
- 如果檢測到的資源使用率下降到縮容閾值以下,HPA會銷毀一個Pod副本。
在這個過程中,HPA可以基于實時性能數據進行動態調整,以滿足不斷變化的需求。此外,HPA還可以根據不同的策略進行擴展,如基于固定數量的Pod副本進行擴展,或者根據自定義的函數進行擴展。
除了HPA,Kubernetes還提供了垂直自動擴展(VPA)和自定義資源自動擴展(CRA)等擴展機制,以滿足不同場景的需求。這些擴展機制共同構成了Kubernetes強大的自動擴展能力,為應用程序提供了穩定、高效的運行環境。
負載均衡
Kubernetes的負載均衡主要通過以下組件實現:
- Service:Service是Kubernetes的核心組件之一,它定義了一組Pod的訪問方式。Service將來自客戶端的流量路由到后端的Pod副本中。
- 負載均衡器:Kubernetes的負載均衡器將流量均衡地分配到后端的Pod副本中。它可以根據不同的算法和規則進行負載均衡,如基于IP的算法、基于哈希的算法等。
- 健康檢查:Kubernetes可以通過健康檢查機制,確保后端的Pod副本處于健康狀態,并將不健康的Pod排除在負載均衡之外。
Kubernetes的負載均衡可以在不同的層次上實現,如四層負載均衡和七層負載均衡。四層負載均衡基于IP和端口號進行流量轉發,而七層負載均衡基于應用層協議和URL等進行流量轉發。Kubernetes默認采用七層負載均衡,通過Service將流量路由到后端的Pod副本中。
此外,Kubernetes還支持多種負載均衡模式,如單臂模式、NAT模式和直接模式等。這些模式可以根據不同的應用場景和需求進行選擇,以滿足應用程序的負載均衡需求。
總之,Kubernetes通過Service、負載均衡器和健康檢查等組件,實現了對容器的負載均衡,為應用程序提供了穩定、高效的運行環境
存儲管理
Kubernetes的存儲管理主要通過Volume和Persistent Volume(PV)實現。Volume是Kubernetes中用于提供容器存儲的抽象概念,它提供了一種將持久化存儲映射到容器的方法。
Volume有以下幾種常見類型:
- EmptyDir:EmptyDir類型的Volume是一個臨時目錄,它只在Pod運行時存在,當Pod被銷毀時,EmptyDir中的數據會被清除。這種類型的Volume常用于在容器中存儲臨時數據。
- HostPath:HostPath類型的Volume是將宿主機的某個目錄映射到容器中。這種類型的Volume常用于在容器中使用宿主機的文件系統存儲。
- GCEPersistentDisk:GCEPersistentDisk類型的Volume是Google Cloud Engine上的持久化磁盤,它可以將云硬盤映射到容器中。這種類型的Volume常用于在容器中使用云存儲。
- PersistentVolumeClaim(PVC):PVC是一種特殊的Volume,它通過聲明一個Persistent Volume(PV)來申請存儲資源。PVC提供了一種靈活的存儲資源管理方式,可以根據需求動態申請和釋放存儲資源。
除了Volume,Kubernetes還提供了Persistent Volume(PV)和Persistent Volume Claim(PVC)的概念,用于實現更靈活的存儲管理。PV是一個獨立的存儲資源,它可以被多個Pod共享。PVC通過聲明一個PV來申請存儲資源,它可以與Pod一起創建和銷毀,并且可以動態地擴展或縮減存儲資源。
總之,Kubernetes通過Volume、PV和PVC等組件,實現了對容器的存儲管理,為應用程序提供了穩定、高效的存儲資源。
kubernetes與docker的關系:
????????Docker和Kubernetes是兩個不同的概念和技術,但是它們之間有很密切的關系。
????????Docker是一個開源的容器化平臺,它可以將應用程序打包成一個獨立的容器,包含應用程序所需的所有組件和依賴項,從而實現了跨平臺、可移植和快速部署的能力。Docker提供了一個容器化的應用程序開發、部署和運行的環境,可以方便地將應用程序或服務打包、分發和運行。
????????Kubernetes是一個開源的容器編排平臺,旨在簡化應用程序在分布式系統中的部署、擴展和管理。它主要解決了面對包含成千上萬個容器和節點的大規模分布式部署時,如何保證平臺的可伸縮性、靈活性和可靠性的問題。Kubernetes提供了容器編排、容器管理、容器存儲、網絡通信等功能,通過自動化、智能化的方式對容器進行部署、擴容、縮容等操作,提高了應用程序的可用性和穩定性。
????????Docker和Kubernetes之間的關系在于,Docker提供了應用程序容器化的能力,而Kubernetes則負責管理、協調和監控這些容器。Kubernetes通過對容器進行編排和調度,將多個容器組合為一個復雜的微服務應用,并可以動態地進行擴展和縮容。因此,Docker和Kubernetes可以一起使用,共同構建和管理分布式應用程序的整個生命周期,其中Docker主要負責容器化和打包應用程序,Kubernetes則負責自動化地部署、擴展和管理應用程序。
????????總之,Docker和Kubernetes是互補的技術,它們相互協作,共同實現了容器技術的全棧式解決方案。
kubernetes的技術選型原因以及為何選擇kubernetes:
Kubernetes的技術選型原因以及為何選擇Kubernetes,主要有以下幾點:
- 行業趨勢:IT行業正在不斷追求更高的效率和更低的成本,容器化和云原生化的需求正在逐漸增加。Kubernetes作為當前被業界廣泛認可和看好的基于Docker的大規模容器化分布式系統解決方案,得到了以谷歌為首的IT巨頭們的大力宣傳和推進,正在成為云原生應用的首選平臺。
- 跨平臺兼容:Kubernetes可以運行在多種公有云和私有云平臺上,比如Google Cloud、Amazon Web Services、Azure、OpenStack等,這使得它具有很高的靈活性,可以輕松地在不同的環境中進行遷移和擴展。
- 自動化部署:Kubernetes提供了強大的部署、擴展和管理應用程序的能力,可以通過簡單的命令、UI或基于CPU使用情況自動對應用程序進行擴縮,大大減少了人工干預的需求,提高了開發效率。
- 自我修復:Kubernetes具有自我修復的功能,可以自動檢測和修復容器故障,確保應用程序的持續可用性和高可靠性。
- 社區生態:Kubernetes擁有龐大的社區和豐富的生態,有大量的工具和應用支持Kubernetes,使得學習和使用Kubernetes變得更加容易,同時也提供了更多的可能性來擴展和定制Kubernetes的功能。
綜上所述,Kubernetes的技術選型原因主要是其高效、靈活、可擴展和易用性,而選擇Kubernetes作為容器編排平臺,則可以更好地滿足現代應用程序的高效開發和部署需求。
kubernetes與同類型產品對比
Docker Swarm
是Docker公司的原生容器編排工具,可以在多個Docker節點上運行容器,提供容器管理和服務發現等功能。Swarm最大的特點是易于使用,它與Docker本身集成得非常好,且可以無縫地創建和管理容器。
Apache Mesos
是Apache開源項目之一,是一個集群管理器,可以管理和調度分布式應用程序。Mesos可以處理數千個節點和數萬個容器,提供了一個集中的控制點,可以管理和調度所有的資源。
Kubernetes與同類型產品對比,如Docker Swarm和Apache Mesos,主要區別如下:
- 規模:Kubernetes可以支持大規模的容器化應用程序,可以處理數千個容器和數百個節點,而Docker Swarm和Apache Mesos在處理大規模應用程序方面相對較弱。
- 語言中立性:Kubernetes是多語言且語言不敏感的容器管理平臺,可以運行云原生和傳統的容器化應用程序,提供的服務可供各種語言使用。而Docker Swarm主要支持Docker容器,對于非Docker容器支持較弱。
- 跨平臺性:Kubernetes可以運行在多種公有云和私有云平臺上,比如Google Cloud、Amazon Web Services、Azure、OpenStack等,而Docker Swarm和Apache Mesos的跨平臺能力相對較弱。
- 自動化部署和管理:Kubernetes提供了強大的部署、擴展和管理應用程序的能力,可以通過簡單的命令、UI或基于CPU使用情況自動對應用程序進行擴縮,大大減少了人工干預的需求,提高了開發效率。而Docker Swarm和Apache Mesos在自動化部署和管理方面相對較弱。
- 自我修復:Kubernetes具有自我修復的功能,可以自動檢測和修復容器故障,確保應用程序的持續可用性和高可靠性。而Docker Swarm和Apache Mesos的自我修復能力相對較弱。
- 社區和生態:Kubernetes擁有龐大的社區和豐富的生態,有大量的工具和應用支持Kubernetes,使得學習和使用Kubernetes變得更加容易,同時也提供了更多的可能性來擴展和定制Kubernetes的功能。而Docker Swarm和Apache Mesos在社區和生態方面相對較弱。
綜上所述,Kubernetes相對于其他同類型產品具有更大的規模、語言中立性、跨平臺性、自動化部署和管理、自我修復以及社區和生態優勢。
kubernetes版本迭代特性對比
- Kubernetes 1.0 (2015年7月):這是Kubernetes的初始版本,標志著Kubernetes的正式發布。此版本提供了基礎架構即服務(IaaS)的功能,包括容器編排、自動擴展和自我修復等。
- Kubernetes 1.1 (2015年11月):這個版本增加了更多的功能,例如,性能改進、更好的網絡插件以及新的存儲插件。此外,還改進了集群節點的規模和集群的整體性能。
- Kubernetes 1.2 (2016年4月):這個版本引入了重要的新特性,如StatefulSet(用于有狀態應用的部署和擴展)、DaemonSet(用于每個節點都需要運行的應用)以及自適應的副本計數器。
- Kubernetes 1.3 (2016年7月):這個版本更加注重安全性和集群的高可用性,增加了諸如認證、授權、API聚合、服務網格等新特性。
- Kubernetes 1.4 (2016年12月):這個版本增加了更多的安全特性,如強密碼策略、支持靜態和LDAP身份驗證、Webhook身份驗證等。此外,還引入了集群聯邦(federation),使得Kubernetes可以管理跨多個云的集群。
- Kubernetes 1.5 (2017年4月):這個版本主要在穩定性和性能方面進行了改進,包括更好的存儲和網絡插件的穩定性、改進的調度器性能、以及對IPv6的支持等。
- Kubernetes 1.6 (2017年7月):這個版本增加了更多的安全特性,如更強的角色和角色綁定限制、自動雙向TLS、自我修復等。此外,還引入了對多租戶模式的支持。
- Kubernetes 1.7 (2017年12月):這個版本引入了新的API聚合層、改進的StatefulSet和更好的GPU支持等。
以上就是Kubernetes主要版本的迭代歷程和特性對比。隨著版本的更新,Kubernetes的功能不斷完善和增強,逐漸發展成為容器編排領域的領先者