Kubernetes簡述
簡介:
- 一套容器集群管理系統(tǒng)
- 一個開源平臺
- 實現(xiàn)容器集群的自動化部署、自動擴縮容、維護等功能
兩個核心角色:
- Master:Master管理Node
- Node:Node管理容器
Master
主要負責(zé)整個集群的管理控制。
通常Master會占用一臺獨立的服務(wù)器,基于高可用原因,也有可能是多臺。
組成:
- kube-apiserver
- etcd
- kube-scheduler
- kube-controller-manager
kube-apiserver
為Kubernetes中各類資源對象提供了增刪改查等HTTP REST接口。
于資源的任何操作,都需要經(jīng)過API Server進程來處理。
訪問API Server進程的3種方式:
- REST Request的方式
- 官方提供的客戶端
- 命令行工具kubectl
etcd
Kubernetes的“數(shù)據(jù)庫”。
一種輕量級的分布式鍵值存儲。
可以在單臺Master服務(wù)器上配置,也可以配置到多臺服務(wù)器。
保存集群中所有的配置和各個對象的狀態(tài)信息
只有API Server進程才能直接訪問和操作etcd。
kube-scheduler
kube-scheduler是Pod資源的調(diào)度器。
監(jiān)聽最近創(chuàng)建但還未分配Node的Pod資源,會為Pod自動分配相應(yīng)的Node。
一個實例的運作原理:
- 通過API Server進程的Watch接口監(jiān)聽新建的Pod。
- 搜索所有滿足Pod需求的Node列表。
- 執(zhí)行Pod調(diào)度邏輯。
- 會將Pod綁定到目標Node上。
Pod:Kubernetes的最小可操作單元,一個Pod包含一個或多個容器。
kube-controller-manager
大部分功能是由控制器執(zhí)行的。
為了方便使用和學(xué)習(xí),控制器由多個功能模塊組合到一起,合成一個進程。
這些功能模塊原本應(yīng)該是各個獨立的進程。
功能模塊:
- Node控制器:Node出現(xiàn)故障時做出響應(yīng)
- Replication控制器:對系統(tǒng)中的每個ReplicationController對象維護正確數(shù)量的Pod
- Endpoint控制器:生成和維護所有Endpoint對象的控制器
- ServiceAccount及Token控制器:為新的命名空間創(chuàng)建默認賬戶和API訪問令牌
Endpoint:用于監(jiān)聽Service和對應(yīng)的Pod副本的變化。
kube-controller-manager所執(zhí)行的各項操作也是基于API Server進程。
Node
Kubernetes集群中的各個工作節(jié)點。
Node由Master管理,提供運行容器所需的各種環(huán)境,對容器進行實際的控制,而這些容器會提供實際的應(yīng)用服務(wù)。
組成:
- kubelet
- kube-proxy
- 容器運行時
kubelet
每個Node上都運行的主要代理進程。
kubelet負責(zé)維護容器的生命周期。
也負責(zé)存儲卷(volume)等資源的管理。
以PodSpec為單位來運行任務(wù)。
kubelet會定期向API Server進程報告自身狀態(tài),API Server進程將狀態(tài)更新到etcd中。
PodSpec是一種描述Pod的YAML或JSON對象。
不是Kubernetes創(chuàng)建的容器將不屬于kubelet的管理范圍。
kube-proxy
主要用于管理Service的訪問入口。
- 集群內(nèi)的其他Pod到Service的訪問。
- 從集群外訪問Service。
容器運行時
負責(zé)運行容器的軟件。
Kubernetes支持多種運行時,例如:
- Docker
- containerd
- cri-o(Podman 原來是 CRI-O 項目的一部分)
- rktlet
任何基于Kubernetes CRI(容器運行時接口)的實現(xiàn)都支持
Pod創(chuàng)建時各組件協(xié)作流程
- 使用kubectl創(chuàng)建Pod。
- kubectl命令將轉(zhuǎn)換為對API Server的調(diào)用。
- API Server驗證請求并將其保存到etcd中。
- etcd通知API Server新Pod產(chǎn)生。
- API Server調(diào)用調(diào)度器。
- 調(diào)度器決定在哪個節(jié)點運行Pod,并將其返回給API Server。
- API Server將對應(yīng)節(jié)點保存到etcd中。
- etcd通知API Server。
- API Server在相應(yīng)的節(jié)點中調(diào)用kubelet。
- kubelet與容器運行時API發(fā)生交互,與容器守護進程通信以創(chuàng)建容器。
- kubelet將Pod狀態(tài)更新到API Server中。
- API Server把最新的狀態(tài)保存到etcd中。
Kubernetes的核心對象
雖然底層為容器。
為了屏蔽底層的技術(shù)細節(jié),
Kubernetes抽象出各種對象實例(概念),
用戶操作對象實例,便可以操控容器。
Pod
Kubernetes處理的最基本單元。
容器本身并不會直接分配到主機上,而是會封裝到名為Pod的對象中。
特性:
- 一個Pod代表單個應(yīng)用程序。
- 一個Pod由一個或多個關(guān)系緊密的容器構(gòu)成。
- 一個Pod中的容器擁有同樣的生命周期。
- 一個Pod中的容器作為一個整體一起編排到Node上。
- 一個Pod中的容器共享環(huán)境、存儲卷和IP空間。
注意:用戶不應(yīng)自行管理Pod,因為Pod并沒有提供應(yīng)用程序通常會用到的一些特性,如復(fù)雜的生命周期管理及動態(tài)伸縮。
控制器
Pod由控制器來管理。
在控制器中定義Pod的部署方式(如有多少個副本、需要在哪種Node上運行等)。
根據(jù)不同的業(yè)務(wù)場景,Kubernetes提供了多種控制器:
- ReplicationController和ReplicaSet控制器
- Deployment控制器
- StatefulSet控制器
- DaemonSet控制器
- Job控制器和CronJob控制器
ReplicationController和ReplicaSet控制器
ReplicationController和ReplicaSet控制器功能類似。
相同功能:
- 定義Pod模板
- 保證在集群中部署的Pod數(shù)量與配置中的Pod數(shù)量一致。
ReplicationController更多的功能:
- 執(zhí)行滾動更新,將一組Pod逐個切換到最新版本。
ReplicaSet更多的功能:
- Pod識別功能。
- 副本篩選功能。
都沒有的功能:
- 更細粒度的生命周期管理功能。
Deployment控制器
基于ReplicaSet控制器。
有部分功能和ReplicationController相似。
最常用的工作負載對象之一。
優(yōu)勢:
- 增加了更靈活的生命周期管理功能。
- 管理應(yīng)用程序不同版本之間的切換。
- 自動維護事件歷史記錄及自動撤銷功能。
Deployment控制器可能是使用頻率最高的對象。
StatefulSet控制器
提供了排序和唯一性保證的特殊Pod控制器。
部署順序、持久數(shù)據(jù)或固定網(wǎng)絡(luò)等相關(guān)的特殊需求時使用。
可以通過Pod轉(zhuǎn)移持久性數(shù)據(jù)卷。即使刪除了Pod,這些卷也依然存在,以防止數(shù)據(jù)意外丟失。
雖然各個Pod的定義是一樣的,但是因為其數(shù)據(jù)的不同,所以提供的服務(wù)是有差異的。
- 分布式存儲系統(tǒng)。
- 服務(wù)端會話,不同會話的Pod提供的服務(wù)也不盡相同。
主要用于有狀態(tài)的應(yīng)用(例如,數(shù)據(jù)庫)。
DaemonSet控制器
在集群的各個節(jié)點上運行單一的Pod副本。
非常適合部署那些為節(jié)點本身提供服務(wù)或執(zhí)行維護的Pod。
- 日志收集和轉(zhuǎn)發(fā)、監(jiān)控
- 運行以增加節(jié)點本身功能為目的的服務(wù)
用于提供基本服務(wù)的,并且每個節(jié)點都需要。
可以繞過某些用于阻止控制器將Pod分配給某些主機的調(diào)度限制。
例如:原本Master服務(wù)器不可用于常規(guī)的Pod調(diào)度,但DaemonSet控制器可以越過基于Pod的限制,確?;A(chǔ)服務(wù)的運行。
Job控制器和CronJob控制器
Job控制器:
- 基于特定任務(wù)而運行。
- 運行任務(wù)的容器完成工作后,Job就會成功退出。
- 適合執(zhí)行一次性的任務(wù)。
CronJob控制器:
- 在Job控制器的基礎(chǔ)上增加了時間調(diào)度。
- 在給定的時間點運行一個任務(wù)。
- 也可以周期性地在給定時間點運行一個任務(wù)。
服務(wù)與存儲
Service組件和Ingress
Service組件:
- 內(nèi)部負載均衡器中的一種組件。
- 將相同功能的Pod在邏輯上組合到一起,讓它們表現(xiàn)得如同一個單一的實體。
- 通過Service組件可以發(fā)布服務(wù)。
- 跟蹤并路由到所有指定類型的后端容器。
當(dāng)需要給另一個應(yīng)用程序或外部用戶提供某些Pod的訪問權(quán)限時,就可以配置一個Service組件。
Ingress:
- 通過Ingress來整合Service組件。
- 充當(dāng)多個Service組件的統(tǒng)一入口。
- 支持將路由規(guī)則合并到單個資源中。
通過同一域名或IP地址下不同的路徑來訪問不同的Service組件。
存儲卷和持久存儲卷
存儲卷(volume):
- 允許Pod中的所有容器共享數(shù)據(jù)。
- 在Pod終止之前一直保持可用。
- Pod中的容器故障不會影響對共享文件的訪問。
- Pod終止后,共享的存儲卷會被銷毀。
持久存儲卷(persistent volume):
- 允許管理員為集群配置存儲資源。
- 用戶可以為正在運行的Pod請求和聲明存儲資源。
- 可預(yù)防節(jié)點級的故障。
- 分配比本地更多的可用存儲空間。
持久存儲卷的Pod一旦使用完畢,存儲卷的回收策略將決定是保留存儲卷(直到手動刪除),還是立即刪除數(shù)據(jù)。
資源劃分
命名空間
對Kubernetes集群資源進行劃分。
實現(xiàn)多租戶的資源隔離。
邏輯劃分
標簽和注解
標簽(label):一種語義化標記。
附加到Kubernetes對象上,對它們進行標記或劃分。
針對不同的實例進行管理或路由,可以用標簽來進行選擇。
每種基于控制器的對象都可以使用標簽來識別需要操作的Pod。
Service組件也可以使用標簽來確定應(yīng)該將請求路由到哪些后端Pod。
每個單元可以擁有多個標簽。
每個單元對于每個鍵只能擁有一個值。
鍵值對形式。標簽的使用更像是對資源進行劃分細類。
注解(annotation)也是一種類似的機制。
將任意鍵值信息附加到某一對象中。
可以包含少量結(jié)構(gòu)化數(shù)據(jù)。文章來源:http://www.zghlxwxcb.cn/news/detail-480562.html
向?qū)ο筇砑痈嘣獢?shù)據(jù)的一種方式,但并不用于篩選。文章來源地址http://www.zghlxwxcb.cn/news/detail-480562.html
到了這里,關(guān)于Kubernetes架構(gòu)設(shè)計與組件的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!