kubernetes(k8s)

應用部署演進過程

在這裏插入圖片描述
我們從上圖可以看到,應用越來越看重應用本身了,慢慢的不受物理機的差異,不受操作系統的差異,開發者可以花更多精力去到應用本身。

k8s概念

簡單理解,k8s就是傳統的雲平臺上的linux。

kubernetes是一個以Google Borg(google內部容器管理平臺)爲原型,重新設計和實現的容器管理和調度編排工具。
2014年由谷歌開源。
同樣功能的工具還有docker公司的Swarm和apache的Mesos,但目前kubernetes好像笑到了最後。

容器編排管理平臺

k8s可以以容器組pod爲基本編排和調度單位
k8s提供資源分配管理功能
k8s提供健康檢查,伸縮,滾動升級功能
k8s提供聲明式的對象配置模型

微服務架構平臺

k8s提供服務發現與內部路由
k8s提供對服務的快速部署和自動的負載均衡

可移植雲平臺

k8s被各大雲廠商承認並支持,在各個雲平臺之上,又搞了一層通用平臺,即可實現跨雲移植

k8s架構

在這裏插入圖片描述
k8s集羣是由一羣節點(node)組成,這些節點可能部署在物理服務器或雲服務器上。
每個節點都安裝了node組件,node組件是真正運行負載的組件
另外有個特殊節點上安裝了master組件,那這個節點也就是master節點

master組件

集羣的控制中心,每個集羣至少一個master組件,
高可用就多個master節點裝多個master組件

master組件包含:apiserver,etcd數據庫,controller manager,scheduler
apiserver是master組件的核心,提供各種api接口,是整個集羣的唯一入口,其他master組件都通過調用api接口實現各自的功能
scheduler通過apiserver接口監聽新建pod副本信息,通過調度算法爲該pod選擇一個最合適的node節點,調度算法包括先預選出一批預選節點,再優選處一個積分最高的節點,調度算法也可自定義配置
controller manager是集羣內各種controller資源的核心管理者,controller資源有集羣內的node,pod副本,服務端點,命名空間,服務賬號,資源配額等。當某個node宕機時,controller manager就會及時發現並執行修復流程,保證集羣始終可用。
etcd數據庫是一個高效的k-v數據庫,存儲着集羣中所有的對象和狀態。一般和master組件安裝在同一個node上,高可用模式需要部署數據量集羣

node組件

通過code controller可以動態的在集羣中添加或刪除node資源
node組件包含:kubelet,kube-proxy
kubelet組件是node中唯一一個以非容器形式進程組件,節點啓動就被自動拉起,常駐節點中,也稱節點管家,管理節點使用狀況,定期向master彙報,是master node和worker node連接的橋樑。
kube-proxy組件就是個代理,主要是負責將到達的請求負載均衡的轉發到後端的多個pod實例上。
一個node組件管着一批pod在執行任務

pod

pod是集羣的調度基本單元。
是一個有特定關係的容器的集合。
一個pod就代表集羣中的一個進程。
pod一般不由用戶創建,pod的ip也是不穩定的。

kubectl工具

最左邊的kubectl是一個k8s的命令行工具,用戶使用命令行的方式與集羣交互

k8s概念

k8s對象:

一種持久化用於表示集羣狀態的實體,一般使用yaml文件描述對象,對象信息包括有哪些容器在運行,運行在哪個node上,有哪些可用資源,應用的各種策略(重啓策略,容錯策略等)。
所有k8s對象狀態的集合,就是整個k8s集羣的狀態。
通過kubectl工具或者api可以直接管理k8s對象。

可以類比java中的對象的概念,k8s對象,也有屬性,方法,另外還有狀態信息

class k8s{
	// 對象的類型,包括Pod,Service,Deployment等
	Kind kind;
	//對象的元數據,包括name,namespace,labels,annotations
	Metadata metadata;
	//對象的規格信息,比如replicas(表示副本信息),selector(標籤匹配)等
	Spec spec;
	//增刪改查等方法
	public Return method(){
		...
	}
	//對象狀態,保存在etcd數據庫中
	Status status;
}
Name和UID

集羣中的所有k8s對象,都是由name和UID明確標識。
不同類型對象的name可以是一樣的。
UID是每個實例化的對象唯一一個,而且是整個集羣的生命週期內唯一。
可以用api通過對象的name訪問到該對象:
/api/{version}/namespaces/{namespace}/{kind}/name

namespace

namespace不僅僅是個屬性,本身也是一個對象
作用是將物理集羣劃分爲多個虛擬集羣
namespace直接完全隔離,常用作隔離不同的用戶權限
k8s集羣內置3個namespace:default,kube-system,kube-public。

label

label標籤是用於建立集羣對象直接的靈活的,松耦合的多維關聯關係。
本質上就是k-v鍵值對。
一個對象上可以有多個標籤
不同類型的對象,可以通過相同的標籤建立關聯關係
作用:爲了標識對象,選擇出對象

annotations

annotations註解,可以將任意非標識性元數據附加到對象上
annotations本質也是k-v鍵值對
一般存對象的版本信息,時間戳等。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章