k8s簡介

?K8s簡介

Kubernetes是Google 2014年創建管理的,是Google 10多年大規模容器管理技術Borg的開源版本。它是容器集群管理系統,是一個開源的平臺,可以實現容器集群的自動化部署、自動擴縮容、維護等功能。

通過Kubernetes你可以:

????????快速部署應用

????????快速擴展應用

????????無縫對接新的應用功能

????????節省資源,優化硬件資源的使用

Kubernetes 特點:

????????可移植: 支持公有云,私有云,混合云,多重云(multi-cloud)

????????可擴展: 模塊化, 插件化, 可掛載, 可組合

????????自動化: 自動部署,自動重啟,自動復制,自動伸縮/擴展

K8s總體架構

1.兩個節點:Master? Node

2.Master四個組件:etcd,api server ,controller manager,scheduler

3.K8s總控中心:三個組件?api server ,controller manager,scheduler

K8s集群由兩節點組成:Master和Node。在Master上運行etcd,Api Server,Controller Manager和Scheduler四個組件。后三個組件構成了K8s的總控中心,負責對集群中所有資源進行管控和調度.在每個node上運行kubectl,proxy和docker daemon三個組件,負責對節點上的Pod的生命周期進行管理,以及實現服務代理的功能。另外所有節點上都可以運行kubectl命令行工具。

API Server作為集群的核心,負責集群各功能模塊之間的通信。集群內的功能模塊通過Api Server將信息存入到etcd,其他模塊通過Api Server讀取這些信息,從而實現模塊之間的信息交互。Node節點上的Kubelet每隔一個時間周期,通過Api Server報告自身狀態,Api Server接收到這些信息后,將節點信息保存到etcd中。Controller Manager中 的node controller通過Api server定期讀取這些節點狀態信息,并做響應處理。Scheduler監聽到某個Pod創建的信息后,檢索所有符合該pod要求的節點列表,并將pod綁定到節點列表中最符合要求的節點上。如果scheduler監聽到某個Pod被刪除,則調用api server刪除該Pod資源對象。kubelet監聽pod信息,如果監聽到pod對象被刪除,則刪除本節點上的相應的pod實例,如果監聽到修改Pod信息,則會相應地修改本節點的Pod實例。

Kubernetes主要由以下幾個核心組件組成:

????????etcd保存了整個集群的狀態;

????????apiserver提供了資源操作的唯一入口,并提供認證、授權、訪問控制、API注冊和發現等機制;

????????controller manager負責維護集群的狀態,比如故障檢測、自動擴展、滾動更新等;

????????scheduler負責資源的調度,按照預定的調度策略將Pod調度到相應的機器上;

????????kubelet負責本Node節點上的Pod的創建、修改、監控、刪除等生命周期管理,同時Kubelet定時“上報”本Node的狀態信息到Api Server里;

????????Container runtime負責鏡像管理以及Pod和容器的真正運行(CRI);

????????kube-proxy負責為Service提供cluster內部的服務發現和負載均衡;


Kubernetes可以做什么?

????????使用Web服務,用戶希望應用程序能夠7*24小時全天運行,開發人員希望每天多次部署新的應用版本。通過應用容器化可以實現這些目標,使應用簡單、快捷的方式更新和發布,也能實現熱更新、遷移等操作。使用Kubernetes能確保程序在任何時間、任何地方運行,還能擴展更多有需求的工具/資源。Kubernetes積累了Google在容器化應用業務方面的經驗,以及社區成員的實踐,是能在生產環境使用的開源平臺。

1. cluster

cluster是 計算、存儲和網絡資源的集合,k8s利用這些資源運行各種基于容器的應用。

2.master

master是cluster的大腦,他的主要職責是調度,即決定將應用放在那里運行。master運行linux操作系統,可以是物理機或者虛擬機。為了實現高可用,可以運行多個master。

3.node

node的職責是運行容器應用。node由master管理,node負責監控并匯報容器的狀態,同時根據master的要求管理容器的生命周期。node運行在linux的操作系統上,可以是物理機或者是虛擬機。

4.pod

pod是k8s的最小工作單元。每個pod包含一個或者多個容器。pod中的容器會作為一個整體被master調度到一個node上運行。

5.controller

k8s通常不會直接創建pod,而是通過controller來管理pod的。controller中定義了pod的部署特性,比如有幾個劇本,在什么樣的node上運行等。為了滿足不同的業務場景,k8s提供了多種controller,包括deployment、replicaset、daemonset、statefulset、job等。

6.deployment

是最常用的controller。deployment可以管理pod的多個副本,并確保pod按照期望的狀態運行。

7.replicaset

實現了pod的多副本管理。使用deployment時會自動創建replicaset,也就是說deployment是通過replicaset來管理pod的多個副本的,我們通常不需要直接使用replicaset。

8.daemonset

用于每個node最多只運行一個pod副本的場景。正如其名稱所示的,daemonset通常用于運行daemon。

9.statefuleset

能夠保證pod的每個副本在整個生命周期中名稱是不變的,而其他controller不提供這個功能。當某個pod發生故障需要刪除并重新啟動時,pod的名稱會發生變化,同時statefulset會保證副本按照固定的順序啟動、更新或者刪除。、

10.job

用于運行結束就刪除的應用,而其他controller中的pod通常是長期持續運行的。

11.service

deployment可以部署多個副本,每個pod 都有自己的IP,外界如何訪問這些副本那?

答案是service

k8s的 service定義了外界訪問一組特定pod的方式。service有自己的IP和端口,service為pod提供了負載均衡。

k8s運行容器pod與訪問容器這兩項任務分別由controller和service執行。

12.namespace

可以將一個物理的cluster邏輯上劃分成多個虛擬cluster,每個cluster就是一個namespace。不同的namespace里的資源是完全隔離的。

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。