kubernetes是google 2023年建立管理的,是google 10多年大規模容器管理技術borg的開源版本。它是容器集群管理系統,是乙個開源的平台,可以實現容器集群的自動化部署、自動擴縮容、維護等功能。
通過kubernetes你可以:
快速部署應用
快速擴充套件應用
無縫對接新的應用功能
節省資源,優化硬體資源的使用
kubernetes 特點:
可移植: 支援公有雲,私有雲,混合雲,多重雲(multi-cloud)
可擴充套件: 模組化, 外掛程式化, 可掛載, 可組合
自動化: 自動部署,自動重啟,自動複製,自動伸縮/擴充套件
核心元件:apiserver:所有服務訪問統一入口
crontrollermanager:維持副本期望數目
scheduler:負責介紹任務,選擇合適的節點進行分配任務
etcd::鍵值對資料庫 儲存k8s集群所有重要資訊(持久化)
kubelet: 直接跟容器引擎互動實現容器的生命週期管理
kube-proxy:負責寫入規則至iptables、 ipvs實現服務對映訪問的
一些其他外掛程式:
coredns:可以為集群中的svc建立一-個網域名稱ip的對應關係解析
dashboard:給k8s集群提供乙個b/s 結構訪問體系
ingress controller:官方只能實現四層**,ingress 可以實現七層**
federation:提供–個可以跨集群中心多k8s統-管理功能
prometheus:提供k8s集群的監控能力
elk:提供kbs集群日誌統一分析介入平台
如圖所示,是k8s的所有元件,上半部分是屬於master, 主要做整個集群的任務調配,pod的管理和維護,將不同人物排程到不同node上執行,而下面的是node部分,主要執行不同的任務,位置pod的什麼週期,和容器引擎完成互動。
每個節點都執行如下kubernetes關鍵元件。
kubelet
cri,container,running 和 interfere,直接喝容器引擎互動時間容器的生命週期的管理。與master節點協作,是主節點的**,負責pod對應容器的建立,啟動,停止等任務。kubelet定期向主機點匯報加入集群的node的各類資訊,
kube-proxy
kubernetes service使用其將鏈結路由到pod,作為外部負載均衡器使用,在一定數量的pod之間均衡流量。比如,對於負載均衡web流量很有用。
docker
kubernetes使用的容器技術來建立容器。
pod是k8s中能被執行的最小邏輯單元,乙個pod裡可以執行多個容器,這些容器共享儲存、網路和命名空間,以及如何執行的規範。在pod中,所有容器都被同一安排和排程,並執行在共享的上下文中。對於具體應用而言,pod是它們的邏輯主機,pod包含業務相關的多個應用容器。
kubernetes不只是支援docker容器,它也支援其他容器。
pod 的上下文可以理解成多個linux命名空間的聯合:
pid 命名空間(同乙個pod中應用可以看到其它程序)
網路 命名空間(同乙個pod的中的應用對相同的ip位址和埠有許可權)
ipc 命名空間(同乙個pod中的應用可以通過vpc或者posix進行通訊)
uts 命名空間(同乙個pod中的應用共享乙個主機名)
pod 是有生命週期的,他們可以被創造,並且銷毀以後不會在啟動。例如 deployment 控制pod的數量,還可以支援滾動更新,先更新乙個新的副本,然後將舊的副本刪除掉,以此達到更新換代的目的。
而service定義了一組pods的邏輯集合和用於訪問他們的策略。在k8s中,應用服務被法寶封裝放入容器中在pod中執行。每個pod分配乙個ip位址,然而,乙個應用可以會被部署到多個pod中,pod也可能不斷的被創造和銷毀,k8s利用service這一抽象層,來講同一應用下的pod打包,通過service進行統一訪問(可能通過label實現,label是一種k8s的管理方式,用於分類管理資源物件,標籤和資源屬於多對多的對應關係),service將使用者的請求**到pod對應的埠上,建立了pod埠和使用者訪問埠的一種對映關係。
etcd的官方將它定位成乙個可信賴的分布式鍵值儲存服務,它能夠為整個分布式集群儲存
一些關鍵資料,協助分布式集群的正常運轉
etcd是乙個高可用的鍵值儲存系統,主要用於共享配置和服務發現,它通過raft一致性演算法處理日誌複製以保證強一致性,我們可以理解它為乙個高可用強一致性的服務發現儲存倉庫。
在kubernetes集群中,etcd主要用於配置共享和服務發現
etcd主要解決的是分布式系統中資料一致性的問題,而分布式系統中的資料分為控制資料和應用資料,etcd處理的資料型別為控制資料,對於很少量的應用資料也可以進行處理。
kubernetes的網路模型假定了所有pod都在-乙個可以直接連通的扁平的網路空間中,這在
gce (google compute engine)裡面是現成的網路模型,kubernetes 假定這個網路已經存在。
而在私有雲裡搭建kubernetes 集群,就不能假定這個網路已經存在了。我們需要自己實現這
個網路假設,將不同節點上的docker容器之間的互相訪問先打通,然後執行kubernetes
flannel是core0s團隊針對kubernetes 設計的乙個網路規劃服務,簡單來說,它的功能是
讓集群中的不同節點主機建立的docker 容器都具有全集群唯一的虛擬ip位址。 而且它還能在
這些ip位址之間建立乙個覆蓋網路(overlay network),通過這個覆蓋網路,將資料報原封
不動地傳遞到目標容器內
etcd之flannel 提供說明:
〉儲存管理flannel 可分配的ip位址段資源
〉監控etcd中每個pod的實際位址,並在記憶體中建立維護pod節點路由表
同乙個pod內部通訊:同乙個pod 其享同-乙個網路命名空間,其享同-個linux協議棧
podl至pod2
〉pod1 與pod2 不在同一 臺主機。pod的位址是與docker0在同- -個網段的。但docker0網段與宿主機網絡卡是兩個完全不同的ip網段,並且不同可node之間的通訊只能通過宿主機的物理網絡卡進行。將pod的ip和所在enode的p關聯起來,通過這個關聯pod可以互相訪問
〉podl 與pod2 在同- 一台機器。由docker0 網橋直接**請求至pod2. 不需要經過flannel
pod至service的網路。
日前基於效能考慮,全部為lvs維護和**
pod到外網:pod 向外網傳送請求,查詢路由表,**資料報到宿主機的網絡卡,宿主網絡卡完成路由選擇後,iptables執行masquerade.把源ip更改為宿主網絡卡的ip.然後向外網伺服器傳送請求
外網訪問pod: service
K8S各個元件介紹
k8s集群架構 乙個k8s集群是由兩大部分組成 master節點和node節點 一.master節點主要包括api server scheduler controller manager etcd幾大元件 1.api server 提供其他模組之間的資料互動和通訊的樞紐 其他模組通過api serv...
什麼是k8s,了解k8s各個元件的功能
什麼是kubernetes?kubernetes k8s 是自動化容器操作的開源平台,這些操作包括部署,排程和節點集群間擴充套件。如果你曾經用過docker容器技術部署容器,那麼可以將docker看成kubernetes內部使用的低級別元件。kubernetes不僅僅支援docker,還支援rock...
k8s元件介紹
master 管理節點 api server 供kubernetes api介面,主要處理 rest操作以及更新etcd中的物件。所有資源增刪改查的唯一入口。scheduler 繫結pod到node上,資源排程。controller manager 所有其他群集級別的功能,目前由控制器manager...