k8s的设计架构
Kubernetes主要由以下幾個核心組件組成:
1、etcd是一個分布式鍵值對存儲系統(tǒng),保存集群所有的網(wǎng)絡(luò)配置和對象的狀態(tài)信息,保存了整個集群的狀態(tài);
2、apiserver提供了資源操作的唯一入口,無論是集群內(nèi)部還是外部的組件都必須通過APIServer來訪問數(shù)據(jù),實現(xiàn)解耦合,并提供認證、授權(quán)、訪問控制、API注冊和發(fā)現(xiàn)等機制;
3、controller manager是集群內(nèi)部的管理控制中心,包括集群內(nèi)的Node、Pod副本數(shù)量、服務(wù)端點(Endpoint)、命名空間(NameSpace)、服務(wù)賬號(ServiceAccount)、資源定額(ResourceQuota)等的管理,并當(dāng)node以外宕機時執(zhí)行自動修復(fù)流程,確保集群處于預(yù)期的工作狀態(tài)。
4、scheduler負責(zé)對資源進行調(diào)度,分配某個pod到某個合適的節(jié)點上,并將綁定信息寫入etcd,調(diào)度策略主要分為全局調(diào)度與運行時調(diào)度2種;
5、Container runtime負責(zé)鏡像管理以及Pod和容器的真正運行(CRI);
6、kubelet負責(zé)維護容器的生命周期,同時也負責(zé)Volume(CVI)和網(wǎng)絡(luò)(CNI)的管理,主要完成以下使命:?
監(jiān)視分配給該Node節(jié)點的pods、掛載pod所需要的volumes 、下載pod的secret、通過docker/rkt來運行pod中的容器、周期的執(zhí)行pod中為容器定義的liveness探針、上報pod的狀態(tài)給系統(tǒng)的其他組件、上報Node的狀態(tài)(資源使用情況);
7、kube-proxy負責(zé)為Service提供cluster內(nèi)部的服務(wù)發(fā)現(xiàn)和負載均衡。在k8s中,提供相同服務(wù)的一組pod可以抽象成一個service,由于Pod存在生命周期,有銷毀,有重建,無法提供一個固定的訪問接口(ip)給客戶端,就通過service提供的統(tǒng)一入口對外提供服務(wù),每個service都有一個虛擬IP地址(VIP)和端口號供客戶端訪問。?
kube-proxy存在于各個node節(jié)點上,主要用于Service功能的實現(xiàn),具體來說,將集群外的主機通過NodePort等方式對Service的訪問轉(zhuǎn)發(fā)到后端的多個Pod實例上,為pod上的服務(wù)提供訪問的代理。?(kube-proxy默認使用的是iptables模式,通過node節(jié)點上的iptables映射規(guī)則來實現(xiàn)service的負載均衡,但是隨著service數(shù)量的增大,iptables模式由于線性查找匹配、全量更新等特點,其性能會顯著下降。從k8s的1.8版本開始,kube-proxy引入了IPVS模式,IPVS模式與iptables同樣基于Netfilter,但是采用的hash表,因此當(dāng)service數(shù)量達到一定規(guī)模時,hash查表的速度優(yōu)勢就會顯現(xiàn)出來,從而提高service的服務(wù)性能。);
master包含apiserver、scheduler、controller manager、etcd
node包括kubelet、kube-proxy
總結(jié)
- 上一篇: 律师坚称技术无罪:“钉钉打卡神器”开发者
- 下一篇: 阿里神器Arthas 3.1.2版本发布